diff --git a/ESP-McFaddin-Code b/ESP-McFaddin-Code new file mode 100644 index 0000000..e91f3db --- /dev/null +++ b/ESP-McFaddin-Code @@ -0,0 +1,177 @@ +// ============================================= +// Samsung QB Series - Wisar Digital Setup +// ESP32-S3 DevKit N16R8 - USB HID Keyboard +// ============================================= +// Navigates OSD menus to configure URL Launcher +// pointing to Wisar Digital signage platform. +// Plug ESP32 USB-C (OTG) port into QB display USB port. +// Display should be powered on at home/menu screen. +// ============================================= +// +// ============================================= +// AVAILABLE HID KEYS REFERENCE +// ============================================= +// +// --- Modifier Keys --- +// KEY_LEFT_CTRL KEY_RIGHT_CTRL +// KEY_LEFT_SHIFT KEY_RIGHT_SHIFT +// KEY_LEFT_ALT KEY_RIGHT_ALT +// KEY_LEFT_GUI KEY_RIGHT_GUI (Windows/Super/Cmd) +// +// --- Navigation Keys --- +// KEY_UP_ARROW KEY_DOWN_ARROW +// KEY_LEFT_ARROW KEY_RIGHT_ARROW +// KEY_HOME KEY_END +// KEY_PAGE_UP KEY_PAGE_DOWN +// +// --- Editing Keys --- +// KEY_BACKSPACE KEY_TAB +// KEY_RETURN (Enter) +// KEY_ESC +// KEY_INSERT KEY_DELETE +// KEY_CAPS_LOCK KEY_NUM_LOCK +// KEY_SCROLL_LOCK KEY_PRINT_SCREEN +// KEY_PAUSE +// +// --- Function Keys --- +// KEY_F1 KEY_F2 KEY_F3 KEY_F4 +// KEY_F5 KEY_F6 KEY_F7 KEY_F8 +// KEY_F9 KEY_F10 KEY_F11 KEY_F12 +// KEY_F13 KEY_F14 KEY_F15 KEY_F16 +// KEY_F17 KEY_F18 KEY_F19 KEY_F20 +// KEY_F21 KEY_F22 KEY_F23 KEY_F24 +// +// --- Printable Characters --- +// Pass directly to write() or print(): +// Letters: 'a'-'z', 'A'-'Z' +// Numbers: '0'-'9' +// Symbols: '!','@','#','$','%','^','&','*','(',')' +// '-','=','[',']','\\',';','\'',',','.','/','`' +// '_','+','{','}','|',':','"','<','>','?','~' +// ' ' (space) +// +// --- Modifier Combos --- +// Use press() for combos, e.g.: +// Keyboard.press(KEY_LEFT_CTRL); +// Keyboard.press('c'); // Ctrl+C +// Keyboard.releaseAll(); +// +// --- Menu / Media Keys (USBHIDConsumerControl) --- +// Requires #include "USBHIDConsumerControl.h" +// Not used in this sketch but available: +// CONSUMER_CONTROL_VOLUME_INCREMENT +// CONSUMER_CONTROL_VOLUME_DECREMENT +// CONSUMER_CONTROL_MUTE +// CONSUMER_CONTROL_PLAY_PAUSE +// CONSUMER_CONTROL_STOP +// CONSUMER_CONTROL_SCAN_NEXT +// CONSUMER_CONTROL_SCAN_PREVIOUS +// CONSUMER_CONTROL_BRIGHTNESS_INCREMENT +// CONSUMER_CONTROL_BRIGHTNESS_DECREMENT +// CONSUMER_CONTROL_POWER +// CONSUMER_CONTROL_HOME +// CONSUMER_CONTROL_BACK +// CONSUMER_CONTROL_FORWARD +// CONSUMER_CONTROL_REFRESH +// +// ============================================= + +#ifndef ARDUINO_USB_MODE +#error This ESP32 SoC has no Native USB interface +#elif ARDUINO_USB_MODE == 1 +#error USB Mode must be set to "USB-OTG (TinyUSB)" in Tools menu +#endif + +#include "USB.h" +#include "USBHIDKeyboard.h" + + +USBHIDKeyboard Keyboard; + +// Delay between each character when typing strings (ms) +// Samsung TV is slow — 150ms per char prevents garbled input +const int CHAR_DELAY = 250; + +// Delay between menu navigation steps (ms) +const int NAV_DELAY = 2000; + +void slowType(const char* text) { + while (*text) { + Keyboard.write(*text); + delay(CHAR_DELAY); + text++; + } +} + +void pressKey(uint8_t key) { + Keyboard.press(key); + delay(50); + Keyboard.releaseAll(); +} + +void setup() { + Keyboard.begin(); + USB.begin(); + + // Wait for USB HID enumeration + delay(3000); + + // Navigate past initial screens + pressKey(KEY_RETURN); + delay(NAV_DELAY); + pressKey(KEY_RETURN); + delay(NAV_DELAY); + pressKey(KEY_RETURN); + delay(NAV_DELAY); + + // Menu navigation - select URL Launcher + pressKey(KEY_DOWN_ARROW); + delay(NAV_DELAY); + pressKey(KEY_DOWN_ARROW); + delay(NAV_DELAY); + pressKey(KEY_RETURN); + delay(3000); + + // Type Wisar Digital URL (slow, one char at a time) + slowType("http://app.wisardigital.com/app"); + delay(NAV_DELAY); + pressKey(KEY_RETURN); + delay(NAV_DELAY); + + // Continue navigation + pressKey(KEY_RIGHT_ARROW); + delay(NAV_DELAY); + + // Navigate sub-menu + pressKey(KEY_DOWN_ARROW); + delay(NAV_DELAY); + pressKey(KEY_DOWN_ARROW); + delay(NAV_DELAY); + pressKey(KEY_DOWN_ARROW); + delay(NAV_DELAY); + pressKey(KEY_RIGHT_ARROW); + delay(NAV_DELAY); + pressKey(KEY_RETURN); + delay(NAV_DELAY); + + // Navigate to PIN entry + pressKey(KEY_DOWN_ARROW); + delay(NAV_DELAY); + pressKey(KEY_DOWN_ARROW); + delay(NAV_DELAY); + pressKey(KEY_RETURN); + delay(NAV_DELAY); + + // Enter PIN (000000000000) + slowType("000000000000"); + delay(NAV_DELAY); + pressKey(KEY_RETURN); + delay(NAV_DELAY); + + // Done + Keyboard.end(); +} + +void loop() { + // One-shot payload — nothing to do +}