Skip to content

Commit

Permalink
USB Host support stub. Doesn't work.
Browse files Browse the repository at this point in the history
  • Loading branch information
caveman99 committed Dec 11, 2023
1 parent 3593839 commit 2f0f5fe
Show file tree
Hide file tree
Showing 13 changed files with 151 additions and 11 deletions.
3 changes: 3 additions & 0 deletions arch/esp32/esp32c3.ini
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,6 @@ extends = esp32_base

monitor_speed = 115200
monitor_filters = esp32_c3_exception_decoder

lib_deps = ${esp32_base.lib_deps}
tanakamasayuki/EspUsbHost@^1.0.2
2 changes: 2 additions & 0 deletions arch/esp32/esp32s2.ini
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,5 @@ lib_ignore =
${esp32_base.lib_ignore}
NimBLE-Arduino

lib_deps = ${esp32_base.lib_deps}
tanakamasayuki/EspUsbHost@^1.0.2
3 changes: 3 additions & 0 deletions arch/esp32/esp32s3.ini
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,6 @@ extends = esp32_base

monitor_speed = 115200

lib_deps = ${esp32_base.lib_deps}
tanakamasayuki/EspUsbHost@^1.0.2

72 changes: 72 additions & 0 deletions src/input/kbUsbBase.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
#include "kbUsbBase.h"
#include "configuration.h"

#if CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32C3

KbUsbBase::KbUsbBase(const char *name) : concurrency::OSThread(name)
{
this->_originName = name;
}

int32_t KbUsbBase::runOnce()
{
if (firstTime) {
// This is the first time the OSThread library has called this function, so init the USB HID routines
begin();
firstTime = 0;
} else {

task();
}
return 100;
}

void KbUsbBase::onKeyboardKey(uint8_t ascii, uint8_t keycode, uint8_t modifier)
{

if (ascii != 0) {
LOG_DEBUG("Key 0x%x Code 0x%x Mod 0x%x pressed\n", ascii, keycode, modifier);
// reset shift now that we have a keypress
InputEvent e;
e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_NONE;
e.source = this->_originName;
switch (ascii) {
case 0x1b: // ESC
e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_CANCEL;
break;
case 0x08: // Back
e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_BACK;
e.kbchar = ascii;
break;
case 0xb5: // Up
e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_UP;
break;
case 0xb6: // Down
e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_DOWN;
break;
case 0xb4: // Left
e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_LEFT;
e.kbchar = ascii;
break;
case 0xb7: // Right
e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_RIGHT;
e.kbchar = ascii;
break;
case 0x0d: // Enter
e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_SELECT;
break;
case 0x00: // nopress
e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_NONE;
break;
default: // all other keys
e.inputEvent = ANYKEY;
e.kbchar = ascii;
break;
}
if (e.inputEvent != meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_NONE) {
this->notifyObservers(&e);
}
}
}

#endif
21 changes: 21 additions & 0 deletions src/input/kbUsbBase.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#pragma once

#include "InputBroker.h"
#include "concurrency/OSThread.h"
#if CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32C3
#include "EspUsbHost.h"

class KbUsbBase : public Observable<const InputEvent *>, public concurrency::OSThread, public EspUsbHost
{
public:
explicit KbUsbBase(const char *name);

protected:
virtual int32_t runOnce() override;

private:
void onKeyboardKey(uint8_t ascii, uint8_t keycode, uint8_t modifier);
const char *_originName;
bool firstTime = 1;
};
#endif
15 changes: 15 additions & 0 deletions src/input/kbUsbImpl.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#include "KbUsbImpl.h"
#include "InputBroker.h"

#if CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32C3

KbUsbImpl *kbUsbImpl;

KbUsbImpl::KbUsbImpl() : KbUsbBase("usbKB") {}

void KbUsbImpl::init()
{
inputBroker->registerSource(this);
}

#endif // INPUTBROKER_MATRIX_TYPE
19 changes: 19 additions & 0 deletions src/input/kbUsbImpl.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#pragma once
#include "kbUsbBase.h"
#include "main.h"

/**
* @brief The idea behind this class to have static methods for the event handlers.
* Check attachInterrupt() at RotaryEncoderInteruptBase.cpp
* Technically you can have as many rotary encoders hardver attached
* to your device as you wish, but you always need to have separate event
* handlers, thus you need to have a RotaryEncoderInterrupt implementation.
*/
class KbUsbImpl : public KbUsbBase
{
public:
KbUsbImpl();
void init();
};

extern KbUsbImpl *kbUsbImpl;
5 changes: 5 additions & 0 deletions src/modules/Modules.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
#include "input/UpDownInterruptImpl1.h"
#include "input/cardKbI2cImpl.h"
#include "input/kbMatrixImpl.h"
#include "input/kbUsbImpl.h"
#include "modules/AdminModule.h"
#include "modules/CannedMessageModule.h"
#include "modules/DetectionSensorModule.h"
Expand Down Expand Up @@ -78,6 +79,10 @@ void setupModules()
kbMatrixImpl = new KbMatrixImpl();
kbMatrixImpl->init();
#endif // INPUTBROKER_MATRIX_TYPE
#if CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32C3
kbUsbImpl = new KbUsbImpl();
kbUsbImpl->init();
#endif // INPUTBROKER_MATRIX_TYPE
#endif // HAS_BUTTON
#if HAS_TRACKBALL
trackballInterruptImpl1 = new TrackballInterruptImpl1();
Expand Down
4 changes: 2 additions & 2 deletions variants/bpi_picow_esp32_s3/platformio.ini
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ board_level = extra
upload_protocol = esptool
;upload_port = /dev/ttyACM2
lib_deps =
${esp32_base.lib_deps}
${esp32s3_base.lib_deps}
caveman99/ESP32 Codec2@^1.0.1
build_flags =
${esp32_base.build_flags} -D PRIVATE_HW -I variants/bpi_picow_esp32_s3
${esp32s3_base.build_flags} -D PRIVATE_HW -I variants/bpi_picow_esp32_s3
2 changes: 1 addition & 1 deletion variants/m5stack-stamp-c3/platformio.ini
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ extends = esp32c3_base
board = esp32-c3-devkitm-1
board_level = extra
build_flags =
${esp32_base.build_flags}
${esp32c3_base.build_flags}
-D PRIVATE_HW
-I variants/m5stack-stamp-c3
monitor_speed = 115200
Expand Down
6 changes: 3 additions & 3 deletions variants/my_esp32s3_diy_eink/platformio.ini
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,13 @@ upload_speed = 921600
platform_packages =
tool-esptoolpy@^1.40500.0
lib_deps =
${esp32_base.lib_deps}
${esp32s3_base.lib_deps}
zinggjm/GxEPD2@^1.5.1
adafruit/Adafruit NeoPixel@^1.10.7
build_unflags = -DARDUINO_USB_MODE=1
build_flags =
;${esp32_base.build_flags} -D MY_ESP32S3_DIY -I variants/my_esp32s3_diy_eink
${esp32_base.build_flags} -D PRIVATE_HW -I variants/my_esp32s3_diy_eink
;${esp32s3_base.build_flags} -D MY_ESP32S3_DIY -I variants/my_esp32s3_diy_eink
${esp32s3_base.build_flags} -D PRIVATE_HW -I variants/my_esp32s3_diy_eink
-Dmy
-DTECHO_DISPLAY_MODEL=GxEPD2_290_T5D
-DEPD_HEIGHT=128
Expand Down
6 changes: 3 additions & 3 deletions variants/my_esp32s3_diy_oled/platformio.ini
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,12 @@ upload_speed = 921600
platform_packages =
tool-esptoolpy@^1.40500.0
lib_deps =
${esp32_base.lib_deps}
${esp32s3_base.lib_deps}
adafruit/Adafruit NeoPixel@^1.10.7
build_unflags = -DARDUINO_USB_MODE=1
build_flags =
;${esp32_base.build_flags} -D MY_ESP32S3_DIY -I variants/my_esp32s3_diy_oled
${esp32_base.build_flags} -D PRIVATE_HW -I variants/my_esp32s3_diy_oled
;${esp32s3_base.build_flags} -D MY_ESP32S3_DIY -I variants/my_esp32s3_diy_oled
${esp32s3_base.build_flags} -D PRIVATE_HW -I variants/my_esp32s3_diy_oled
-DBOARD_HAS_PSRAM
-mfix-esp32-psram-cache-issue
-DARDUINO_USB_MODE=0
4 changes: 2 additions & 2 deletions variants/tlora_t3s3_v1/platformio.ini
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,5 @@ board = tlora-t3s3-v1
upload_protocol = esp-builtin

build_flags =
${esp32_base.build_flags} -D TLORA_T3S3_V1 -I variants/tlora_t3s3_v1
-DGPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely.
${esp32s3_base.build_flags} -D TLORA_T3S3_V1 -I variants/tlora_t3s3_v1
-DGPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely.

0 comments on commit 2f0f5fe

Please sign in to comment.