Create ESP-McFaddin-Code
Used on the ESP to program Samsung DMB's
- Board: ESP32S3 Dev Module
- USB Mode: USB-OTG (TinyUSB)
- USB CDC On Boot: Disabled
- Upload Mode: UART0 / Hardware CDC
- Flash Size: 16MB (128Mb)
- PSRAM: OPI PSRAM
- Partition Scheme: 16M Flash (3MB APP/9.9MB FATFS)
- Port: /dev/ttyACM0
This commit is contained in:
@@ -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
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user