diff options
| author | hathach <[email protected]> | 2025-07-02 18:18:52 +0700 |
|---|---|---|
| committer | hathach <[email protected]> | 2025-07-02 18:18:52 +0700 |
| commit | cf3966efd9fc552d641ea1e76e5aaad3ace3afd2 (patch) | |
| tree | d59add439dcbfcd6e2cd9fec9aaecc413e5b5509 /examples/device/hid_composite/src/main.c | |
| parent | f10467e711017fb05a6e0ee496e451e2e8834549 (diff) | |
| parent | 963971c6aa14411f0cc6f0c4f727d199c738e2a5 (diff) | |
Merge branch 'master' into fork/HiFiPhile/dcd_notif
Diffstat (limited to 'examples/device/hid_composite/src/main.c')
| -rw-r--r-- | examples/device/hid_composite/src/main.c | 42 |
1 files changed, 41 insertions, 1 deletions
diff --git a/examples/device/hid_composite/src/main.c b/examples/device/hid_composite/src/main.c index 5302af3b8..a58107b6f 100644 --- a/examples/device/hid_composite/src/main.c +++ b/examples/device/hid_composite/src/main.c @@ -197,11 +197,43 @@ static void send_hid_report(uint8_t report_id, uint32_t btn) } } break; - default: break; } } +/* use this to send stylus touch signal through USB. */ +static void send_stylus_touch(uint16_t x, uint16_t y, bool state) +{ + // skip if hid is not ready yet + if ( !tud_hid_ready() ) return; + + static bool has_stylus_pen = false; + + hid_stylus_report_t report = + { + .attr = 0, + .x = 0, + .y = 0 + }; + + report.x = x; + report.y = y; + + if (state) + { + report.attr = STYLUS_ATTR_TIP_SWITCH | STYLUS_ATTR_IN_RANGE; + tud_hid_report(REPORT_ID_STYLUS_PEN, &report, sizeof(report)); + + has_stylus_pen = true; + }else + { + report.attr = 0; + if (has_stylus_pen) tud_hid_report(REPORT_ID_STYLUS_PEN, &report, sizeof(report)); + has_stylus_pen = false; + } + +} + // Every 10ms, we will sent 1 report for each HID profile (keyboard, mouse etc ..) // tud_hid_report_complete_cb() is used to send the next report after previous one is complete void hid_task(void) @@ -209,6 +241,14 @@ void hid_task(void) // Poll every 10ms const uint32_t interval_ms = 10; static uint32_t start_ms = 0; + static uint32_t touch_ms = 0; + static bool touch_state = false; + + if (board_millis() - touch_ms < 100) { + touch_ms = board_millis(); + send_stylus_touch(0, 0, touch_state = !touch_state); + return; + } if ( board_millis() - start_ms < interval_ms) return; // not enough time start_ms += interval_ms; |
