Files
firmware/src/input/cardKbI2cImpl.cpp

71 lines
2.5 KiB
C++
Raw Normal View History

#include "cardKbI2cImpl.h"
#include "InputBroker.h"
2024-06-17 15:09:38 +02:00
#include "detect/ScanI2CTwoWire.h"
2024-06-17 23:24:27 +02:00
#include "main.h"
CardKbI2cImpl *cardKbI2cImpl;
2023-01-21 14:34:29 +01:00
CardKbI2cImpl::CardKbI2cImpl() : KbI2cBase("cardKB") {}
void CardKbI2cImpl::init()
{
#if !MESHTASTIC_EXCLUDE_I2C && !defined(ARCH_PORTDUINO) && !defined(I2C_NO_RESCAN)
if (cardkb_found.address == 0x00) {
LOG_DEBUG("Rescan for I2C keyboard");
TCA8418 initial config + basic 3x4 keypad config (#6320) * add TCA8418 to configuration.h added the TCA8418 * add TCA8418 to ScanI2C.cpp add TCA8418 * add TCA8418KB to ScanI2C.h add TCA8418KB * add TCA8418KB ScanI2CTwoWire.cpp add TCA8418KB * Create TCA8418Keyboard.cpp Create TCA8418Keyboard.cpp * Create TCA8418Keyboard.h Create TCA8418Keyboard.h * add TCA8418 to kbI2cBase.cpp add TCA8418 * add TCA8418 to kbI2cBase.h add TCA8418 * add TCA8418KB to main.cpp add TCA8418KB * add TCA8418KB to cardKbI2cImpl.cpp add TCA8418KB * Update TCA8418 kbI2cBase.cpp * enable debug TCA8418 * Nokia 5130 config * Update TCA8418Keyboard.h old version in initial commit * Update ScanI2CTwoWire.cpp * add tap_interval and backlight_on to constructor * Create TCA8418-layouts.cpp TCA8418-layout 3x4 should work Nokia 5130 needs editing. * put layouts in different file + adjusted code for variable matrix sizes * rename TCA8418-layouts.cpp to TCA8418Layouts.cpp + add endif * Update TCA8418Keyboard.cpp name change layouts * forgot a \ * Create TCA8418Layouts.h * Update TCA8418Keyboard.cpp * add include forgot include * Update TCA8418Keyboard.cpp * Update TCA8418Keyboard.h * Update TCA8418Layouts.h * revert to keyboard layout in main TCA8418Keyboard.cpp * fixed the address * changed ordering of constructor * reflect changes #6371 * edit config.h * bug fix fast pressing multiple buttons + clean up scanI2CTwoWire.cpp * trunked --------- Co-authored-by: Ben Meadors <benmmeadors@gmail.com> Co-authored-by: Tom Fifield <tom@tomfifield.net>
2025-03-26 02:29:18 +00:00
uint8_t i2caddr_scan[] = {CARDKB_ADDR, TDECK_KB_ADDR, BBQ10_KB_ADDR, MPR121_KB_ADDR, XPOWERS_AXP192_AXP2101_ADDRESS};
uint8_t i2caddr_asize = 5;
2024-06-17 15:09:38 +02:00
auto i2cScanner = std::unique_ptr<ScanI2CTwoWire>(new ScanI2CTwoWire());
2024-09-18 03:28:23 +12:00
#if WIRE_INTERFACES_COUNT == 2
2024-06-17 15:09:38 +02:00
i2cScanner->scanPort(ScanI2C::I2CPort::WIRE1, i2caddr_scan, i2caddr_asize);
#endif
i2cScanner->scanPort(ScanI2C::I2CPort::WIRE, i2caddr_scan, i2caddr_asize);
auto kb_info = i2cScanner->firstKeyboard();
if (kb_info.type != ScanI2C::DeviceType::NONE) {
cardkb_found = kb_info.address;
switch (kb_info.type) {
case ScanI2C::DeviceType::RAK14004:
kb_model = 0x02;
break;
case ScanI2C::DeviceType::CARDKB:
kb_model = 0x00;
break;
case ScanI2C::DeviceType::TDECKKB:
// assign an arbitrary value to distinguish from other models
kb_model = 0x10;
break;
case ScanI2C::DeviceType::BBQ10KB:
// assign an arbitrary value to distinguish from other models
kb_model = 0x11;
break;
case ScanI2C::DeviceType::MPR121KB:
// assign an arbitrary value to distinguish from other models
kb_model = 0x37;
break;
TCA8418 initial config + basic 3x4 keypad config (#6320) * add TCA8418 to configuration.h added the TCA8418 * add TCA8418 to ScanI2C.cpp add TCA8418 * add TCA8418KB to ScanI2C.h add TCA8418KB * add TCA8418KB ScanI2CTwoWire.cpp add TCA8418KB * Create TCA8418Keyboard.cpp Create TCA8418Keyboard.cpp * Create TCA8418Keyboard.h Create TCA8418Keyboard.h * add TCA8418 to kbI2cBase.cpp add TCA8418 * add TCA8418 to kbI2cBase.h add TCA8418 * add TCA8418KB to main.cpp add TCA8418KB * add TCA8418KB to cardKbI2cImpl.cpp add TCA8418KB * Update TCA8418 kbI2cBase.cpp * enable debug TCA8418 * Nokia 5130 config * Update TCA8418Keyboard.h old version in initial commit * Update ScanI2CTwoWire.cpp * add tap_interval and backlight_on to constructor * Create TCA8418-layouts.cpp TCA8418-layout 3x4 should work Nokia 5130 needs editing. * put layouts in different file + adjusted code for variable matrix sizes * rename TCA8418-layouts.cpp to TCA8418Layouts.cpp + add endif * Update TCA8418Keyboard.cpp name change layouts * forgot a \ * Create TCA8418Layouts.h * Update TCA8418Keyboard.cpp * add include forgot include * Update TCA8418Keyboard.cpp * Update TCA8418Keyboard.h * Update TCA8418Layouts.h * revert to keyboard layout in main TCA8418Keyboard.cpp * fixed the address * changed ordering of constructor * reflect changes #6371 * edit config.h * bug fix fast pressing multiple buttons + clean up scanI2CTwoWire.cpp * trunked --------- Co-authored-by: Ben Meadors <benmmeadors@gmail.com> Co-authored-by: Tom Fifield <tom@tomfifield.net>
2025-03-26 02:29:18 +00:00
case ScanI2C::DeviceType::TCA8418KB:
// assign an arbitrary value to distinguish from other models
kb_model = 0x84;
break;
2024-06-17 15:09:38 +02:00
default:
// use this as default since it's also just zero
LOG_WARN("kb_info.type is unknown(0x%02x), setting kb_model=0x00", kb_info.type);
2024-06-17 15:09:38 +02:00
kb_model = 0x00;
}
}
if (cardkb_found.address == 0x00) {
disable();
return;
} else {
LOG_DEBUG("Keyboard Type: 0x%02x Model: 0x%02x Address: 0x%02x", kb_info.type, kb_model, cardkb_found.address);
2024-06-17 15:09:38 +02:00
}
}
2024-06-19 21:46:29 +02:00
#else
if (cardkb_found.address == 0x00) {
disable();
return;
}
#endif
inputBroker->registerSource(this);
TCA8418 initial config + basic 3x4 keypad config (#6320) * add TCA8418 to configuration.h added the TCA8418 * add TCA8418 to ScanI2C.cpp add TCA8418 * add TCA8418KB to ScanI2C.h add TCA8418KB * add TCA8418KB ScanI2CTwoWire.cpp add TCA8418KB * Create TCA8418Keyboard.cpp Create TCA8418Keyboard.cpp * Create TCA8418Keyboard.h Create TCA8418Keyboard.h * add TCA8418 to kbI2cBase.cpp add TCA8418 * add TCA8418 to kbI2cBase.h add TCA8418 * add TCA8418KB to main.cpp add TCA8418KB * add TCA8418KB to cardKbI2cImpl.cpp add TCA8418KB * Update TCA8418 kbI2cBase.cpp * enable debug TCA8418 * Nokia 5130 config * Update TCA8418Keyboard.h old version in initial commit * Update ScanI2CTwoWire.cpp * add tap_interval and backlight_on to constructor * Create TCA8418-layouts.cpp TCA8418-layout 3x4 should work Nokia 5130 needs editing. * put layouts in different file + adjusted code for variable matrix sizes * rename TCA8418-layouts.cpp to TCA8418Layouts.cpp + add endif * Update TCA8418Keyboard.cpp name change layouts * forgot a \ * Create TCA8418Layouts.h * Update TCA8418Keyboard.cpp * add include forgot include * Update TCA8418Keyboard.cpp * Update TCA8418Keyboard.h * Update TCA8418Layouts.h * revert to keyboard layout in main TCA8418Keyboard.cpp * fixed the address * changed ordering of constructor * reflect changes #6371 * edit config.h * bug fix fast pressing multiple buttons + clean up scanI2CTwoWire.cpp * trunked --------- Co-authored-by: Ben Meadors <benmmeadors@gmail.com> Co-authored-by: Tom Fifield <tom@tomfifield.net>
2025-03-26 02:29:18 +00:00
}