static uint8_t keyboard_leds(void) { return leds; } | static uint8_t keyboard_leds(void) { return leds; } | ||||
void rn42_set_leds(uint8_t l) { leds = l; } | void rn42_set_leds(uint8_t l) { leds = l; } | ||||
void rn42_send_str(const char *str) | |||||
{ | |||||
uint8_t c; | |||||
while ((c = pgm_read_byte(str++))) | |||||
rn42_putc(c); | |||||
} | |||||
const char *rn42_send_command(const char *cmd) | |||||
{ | |||||
static const char *s; | |||||
rn42_send_str(cmd); | |||||
wait_ms(500); | |||||
s = rn42_gets(100); | |||||
xprintf("%s\r\n", s); | |||||
rn42_print_response(); | |||||
return s; | |||||
} | |||||
void rn42_print_response(void) | |||||
{ | |||||
int16_t c; | |||||
while ((c = rn42_getc()) != -1) { | |||||
xprintf("%c", c); | |||||
} | |||||
} | |||||
static void send_keyboard(report_keyboard_t *report) | static void send_keyboard(report_keyboard_t *report) | ||||
{ | { | ||||
// wake from deep sleep | // wake from deep sleep |
#define RN42_H | #define RN42_H | ||||
#include <stdbool.h> | #include <stdbool.h> | ||||
#include "host_driver.h" | |||||
host_driver_t rn42_driver; | host_driver_t rn42_driver; | ||||
host_driver_t rn42_config_driver; | host_driver_t rn42_config_driver; | ||||
bool rn42_linked(void); | bool rn42_linked(void); | ||||
void rn42_set_leds(uint8_t l); | void rn42_set_leds(uint8_t l); | ||||
const char *rn42_send_command(const char *cmd); | |||||
void rn42_send_str(const char *str); | |||||
void rn42_print_response(void); | |||||
#define SEND_STR(str) rn42_send_str(PSTR(str)) | |||||
#define SEND_COMMAND(cmd) rn42_send_command(PSTR(cmd)) | |||||
#endif | #endif |
******************************************************************************/ | ******************************************************************************/ | ||||
static host_driver_t *prev_driver = &rn42_driver; | static host_driver_t *prev_driver = &rn42_driver; | ||||
static void print_rn42(void) | |||||
{ | |||||
int16_t c; | |||||
while ((c = rn42_getc()) != -1) { | |||||
xprintf("%c", c); | |||||
} | |||||
} | |||||
static void clear_rn42(void) | |||||
{ | |||||
while (rn42_getc() != -1) ; | |||||
} | |||||
#define SEND_STR(str) send_str(PSTR(str)) | |||||
#define SEND_COMMAND(cmd) send_command(PSTR(cmd)) | |||||
static void send_str(const char *str) | |||||
{ | |||||
uint8_t c; | |||||
while ((c = pgm_read_byte(str++))) | |||||
rn42_putc(c); | |||||
} | |||||
static const char *send_command(const char *cmd) | |||||
{ | |||||
static const char *s; | |||||
send_str(cmd); | |||||
wait_ms(500); | |||||
s = rn42_gets(100); | |||||
xprintf("%s\r\n", s); | |||||
print_rn42(); | |||||
return s; | |||||
} | |||||
static void enter_command_mode(void) | static void enter_command_mode(void) | ||||
{ | { | ||||
prev_driver = host_get_driver(); | prev_driver = host_get_driver(); | ||||
wait_ms(1100); // need 1 sec | wait_ms(1100); // need 1 sec | ||||
SEND_COMMAND("$$$"); | SEND_COMMAND("$$$"); | ||||
wait_ms(600); // need 1 sec | wait_ms(600); // need 1 sec | ||||
print_rn42(); | |||||
rn42_print_response(); | |||||
const char *s = SEND_COMMAND("v\r\n"); | const char *s = SEND_COMMAND("v\r\n"); | ||||
if (strncmp("v", s, 1) != 0) SEND_COMMAND("+\r\n"); // local echo on | if (strncmp("v", s, 1) != 0) SEND_COMMAND("+\r\n"); // local echo on | ||||
} | } |