mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-03-24 04:43:36 +00:00
hid_device: send demo text if no stdin available
This commit is contained in:
parent
ca44a803f1
commit
6518788a7f
@ -41,8 +41,8 @@
|
||||
/* EXAMPLE_START(hid_device_demo): HID Device (Server) Demo
|
||||
*
|
||||
* @text This HID Device example demonstrates how to implement
|
||||
* an HID keyboard. Without a HAVE_POSIX_STDIN, a fixed message is sent
|
||||
* If HAVE_POSIX_STDIN is defined, you can control and type from the terminal
|
||||
* an HID keyboard. Without a HAVE_POSIX_STDIN, a fixed demo text is sent
|
||||
* If HAVE_POSIX_STDIN is defined, you can type from the terminal
|
||||
*/
|
||||
// *****************************************************************************
|
||||
|
||||
@ -55,6 +55,9 @@
|
||||
#include <inttypes.h>
|
||||
|
||||
#include "btstack.h"
|
||||
|
||||
#undef HAVE_POSIX_STDIN
|
||||
|
||||
#ifdef HAVE_POSIX_STDIN
|
||||
#include "stdin_support.h"
|
||||
#endif
|
||||
@ -347,7 +350,9 @@ static void send_report(int modifier, int keycode){
|
||||
l2cap_send(hid_interrupt_cid, &report[0], sizeof(report));
|
||||
}
|
||||
|
||||
|
||||
static int hid_connected(void){
|
||||
return hid_control_cid && hid_interrupt_cid;
|
||||
}
|
||||
|
||||
#ifdef HAVE_POSIX_STDIN
|
||||
|
||||
@ -381,12 +386,50 @@ static void stdin_process(btstack_data_source_t *ds, btstack_data_source_callbac
|
||||
}
|
||||
show_usage();
|
||||
}
|
||||
#endif
|
||||
#else
|
||||
|
||||
static int hid_connected(void){
|
||||
return hid_control_cid && hid_interrupt_cid;
|
||||
// On embedded systems, send constant demo text with fixed period
|
||||
|
||||
#define TYPING_PERIOD_MS 100
|
||||
static const char * demo_text = "\n\nHello World!\n\nThis is the BTstack HID Keyboard Demo running on an Embedded Device.\n\n";
|
||||
|
||||
static int demo_pos;
|
||||
static btstack_timer_source_t typing_timer;
|
||||
|
||||
static void typing_timer_handler(btstack_timer_source_t * ts){
|
||||
|
||||
// abort if not connected
|
||||
if (!hid_connected()) return;
|
||||
|
||||
// get next character
|
||||
uint8_t character = demo_text[demo_pos++];
|
||||
if (demo_text[demo_pos] == 0){
|
||||
demo_pos = 0;
|
||||
}
|
||||
|
||||
// get keycodeand send
|
||||
uint8_t modifier;
|
||||
uint8_t keycode;
|
||||
int found = keycode_and_modifer_us_for_character(character, &keycode, &modifier);
|
||||
if (found){
|
||||
send_key(modifier, keycode);
|
||||
}
|
||||
|
||||
// set next timer
|
||||
btstack_run_loop_set_timer(ts, TYPING_PERIOD_MS);
|
||||
btstack_run_loop_add_timer(ts);
|
||||
}
|
||||
|
||||
static void hid_start_typing(void){
|
||||
demo_pos = 0;
|
||||
// set one-shot timer
|
||||
typing_timer.process = &typing_timer_handler;
|
||||
btstack_run_loop_set_timer(&typing_timer, TYPING_PERIOD_MS);
|
||||
btstack_run_loop_add_timer(&typing_timer);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
static void packet_handler(uint8_t packet_type, uint16_t channel, uint8_t * packet, uint16_t packet_size){
|
||||
UNUSED(channel);
|
||||
UNUSED(packet_size);
|
||||
@ -429,6 +472,9 @@ static void packet_handler(uint8_t packet_type, uint16_t channel, uint8_t * pack
|
||||
}
|
||||
if (!connected_before && hid_connected()){
|
||||
printf("HID Connected\n");
|
||||
#ifndef HAVE_POSIX_STDIN
|
||||
hid_start_typing();
|
||||
#endif
|
||||
}
|
||||
break;
|
||||
case L2CAP_EVENT_CHANNEL_CLOSED:
|
||||
|
Loading…
x
Reference in New Issue
Block a user