1st release version. Set TYBLE16 as Central mode
Fork of TYBLE16_BME280_data_sender by
Please refer following page.
/users/kenjiArai/notebook/tyble16-module--uart-communication-between-central/#
main.cpp@2:17fdd6d3877f, 2017-11-19 (annotated)
- Committer:
- kenjiArai
- Date:
- Sun Nov 19 09:43:39 2017 +0000
- Revision:
- 2:17fdd6d3877f
- Parent:
- 1:f2982d4f4037
1st release version. Set TYBLE16 as Central mode
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kenjiArai | 0:c3a498a8091c | 1 | /* |
kenjiArai | 0:c3a498a8091c | 2 | * Mbed Application program / Using Akizuki BLE Module AE-TYBLE16 |
kenjiArai | 0:c3a498a8091c | 3 | * on-board module : TAIYO YUDEN BLE 4.2 TYSA-B (EYSGJNAWY-WX) |
kenjiArai | 0:c3a498a8091c | 4 | * |
kenjiArai | 0:c3a498a8091c | 5 | * http://akizukidenshi.com/catalog/g/gK-12339/ |
kenjiArai | 0:c3a498a8091c | 6 | * |
kenjiArai | 0:c3a498a8091c | 7 | * Refernce document |
kenjiArai | 0:c3a498a8091c | 8 | * https://www.yuden.co.jp/wireless_module/document/datareport2/jp/ |
kenjiArai | 0:c3a498a8091c | 9 | * TY_BLE_EYSGJNAWY_WX_BriefDataReport_V1_3_20170925J.pdf |
kenjiArai | 0:c3a498a8091c | 10 | * |
kenjiArai | 0:c3a498a8091c | 11 | * Copyright (c) 2017 Kenji Arai / JH1PJL |
kenjiArai | 0:c3a498a8091c | 12 | * http://www.page.sannet.ne.jp/kenjia/index.html |
kenjiArai | 0:c3a498a8091c | 13 | * http://mbed.org/users/kenjiArai/ |
kenjiArai | 0:c3a498a8091c | 14 | * Created: October 27th, 2017 |
kenjiArai | 2:17fdd6d3877f | 15 | * Revised: November 19th, 2017 |
kenjiArai | 0:c3a498a8091c | 16 | */ |
kenjiArai | 0:c3a498a8091c | 17 | |
kenjiArai | 0:c3a498a8091c | 18 | /* |
kenjiArai | 0:c3a498a8091c | 19 | Tested condition |
kenjiArai | 2:17fdd6d3877f | 20 | mbed-os-5.6.4 & mbed Rev.157(release 155) |
kenjiArai | 2:17fdd6d3877f | 21 | Nucleo-F446RE TYBLE16 /also F411RE |
kenjiArai | 2:17fdd6d3877f | 22 | PA_9 (D8) pin5 / P0.03(UART_RX) |
kenjiArai | 2:17fdd6d3877f | 23 | PA_10(D2) pin6 / P0.01(UART_TX) |
kenjiArai | 2:17fdd6d3877f | 24 | pin7 / P0.02(UART_CTS) connected to pin8 / P0.00(UART_RTS) |
kenjiArai | 0:c3a498a8091c | 25 | +3.3v pin14 / +V |
kenjiArai | 0:c3a498a8091c | 26 | GND pin13 / GND |
kenjiArai | 2:17fdd6d3877f | 27 | */ |
kenjiArai | 2:17fdd6d3877f | 28 | |
kenjiArai | 2:17fdd6d3877f | 29 | /* |
kenjiArai | 2:17fdd6d3877f | 30 | --- HOW TO SET "CENTRAL(CLIENT) MODE" --- |
kenjiArai | 2:17fdd6d3877f | 31 | TYBLE16 default setting is "Peripheral(Server) Mode" |
kenjiArai | 2:17fdd6d3877f | 32 | If you want to use it as "Central mode", you need to proceed follows |
kenjiArai | 2:17fdd6d3877f | 33 | 1) You run this program on a Mbed board connected with TYBLE16 module |
kenjiArai | 2:17fdd6d3877f | 34 | 2) Just after running the program, you can identify the mode "Central" or |
kenjiArai | 2:17fdd6d3877f | 35 | "Peripheral" in your terminal screen |
kenjiArai | 2:17fdd6d3877f | 36 | 3) If your module is "Peripheral", please enter 'c' for switching the mode |
kenjiArai | 2:17fdd6d3877f | 37 | 4) Power off the module then restart again and check the mode |
kenjiArai | 2:17fdd6d3877f | 38 | 5) Please use |
kenjiArai | 2:17fdd6d3877f | 39 | "TYBLE16_UART_Central_and_Peripheral" program as sample application |
kenjiArai | 0:c3a498a8091c | 40 | */ |
kenjiArai | 0:c3a498a8091c | 41 | |
kenjiArai | 0:c3a498a8091c | 42 | // Include -------------------------------------------------------------------- |
kenjiArai | 0:c3a498a8091c | 43 | #include "mbed.h" |
kenjiArai | 0:c3a498a8091c | 44 | |
kenjiArai | 0:c3a498a8091c | 45 | // Definition ----------------------------------------------------------------- |
kenjiArai | 2:17fdd6d3877f | 46 | enum operating_mode_t { |
kenjiArai | 2:17fdd6d3877f | 47 | MODE_UNKNOWN = -1, // Unknown Error |
kenjiArai | 2:17fdd6d3877f | 48 | MODE_CENTRAL = 0, // Central |
kenjiArai | 2:17fdd6d3877f | 49 | MODE_PERIPHERAL = 1, // Peripheral |
kenjiArai | 2:17fdd6d3877f | 50 | }; |
kenjiArai | 0:c3a498a8091c | 51 | |
kenjiArai | 0:c3a498a8091c | 52 | // Object/ Constructor -------------------------------------------------------- |
kenjiArai | 0:c3a498a8091c | 53 | Serial pc(USBTX,USBRX); |
kenjiArai | 2:17fdd6d3877f | 54 | Serial tyble16(D8, D2); // Choose proper pin assignment in your Mbed |
kenjiArai | 2:17fdd6d3877f | 55 | Ticker t; |
kenjiArai | 0:c3a498a8091c | 56 | |
kenjiArai | 0:c3a498a8091c | 57 | // RAM ------------------------------------------------------------------------ |
kenjiArai | 2:17fdd6d3877f | 58 | uint8_t timeout_readable; |
kenjiArai | 2:17fdd6d3877f | 59 | operating_mode_t my_role; |
kenjiArai | 2:17fdd6d3877f | 60 | uint8_t cmd[8]; |
kenjiArai | 0:c3a498a8091c | 61 | |
kenjiArai | 0:c3a498a8091c | 62 | // ROM / Constant data -------------------------------------------------------- |
kenjiArai | 2:17fdd6d3877f | 63 | char *const msg = |
kenjiArai | 2:17fdd6d3877f | 64 | "Set TYBLE16 Central or Peripheral, created on UTC: "__TIME__","__DATE__""; |
kenjiArai | 2:17fdd6d3877f | 65 | char *const err_msg = |
kenjiArai | 2:17fdd6d3877f | 66 | "Cannot detect BLE! Please check the hardware!\r\n"; |
kenjiArai | 2:17fdd6d3877f | 67 | char *const ble_msg = "-- From BLE(followed line) --"; |
kenjiArai | 2:17fdd6d3877f | 68 | char *const cmd_force_reset = "BRS\r\n"; |
kenjiArai | 2:17fdd6d3877f | 69 | char *const cmd_advert_stop = "BCD0\r\n"; |
kenjiArai | 2:17fdd6d3877f | 70 | char *const cmd_change_to_c = "BRL1\r\n"; |
kenjiArai | 2:17fdd6d3877f | 71 | char *const cmd_change_to_p = "BRL0\r\n"; |
kenjiArai | 0:c3a498a8091c | 72 | |
kenjiArai | 0:c3a498a8091c | 73 | // Function prototypes -------------------------------------------------------- |
kenjiArai | 2:17fdd6d3877f | 74 | void set_central_mode(void); |
kenjiArai | 2:17fdd6d3877f | 75 | void one_sec(void); |
kenjiArai | 2:17fdd6d3877f | 76 | void get_line (char *, int); |
kenjiArai | 2:17fdd6d3877f | 77 | void stop_broadcasting(char *); |
kenjiArai | 2:17fdd6d3877f | 78 | char *get_ble_message(char *); |
kenjiArai | 2:17fdd6d3877f | 79 | void command_preparation(void); |
kenjiArai | 0:c3a498a8091c | 80 | |
kenjiArai | 0:c3a498a8091c | 81 | //------------------------------------------------------------------------------ |
kenjiArai | 0:c3a498a8091c | 82 | // Control Program |
kenjiArai | 0:c3a498a8091c | 83 | //------------------------------------------------------------------------------ |
kenjiArai | 0:c3a498a8091c | 84 | int main() |
kenjiArai | 0:c3a498a8091c | 85 | { |
kenjiArai | 2:17fdd6d3877f | 86 | command_preparation(); |
kenjiArai | 2:17fdd6d3877f | 87 | pc.printf("\r\n\r\n%s\r\n", msg); |
kenjiArai | 2:17fdd6d3877f | 88 | t.attach(&one_sec, 1.0f); |
kenjiArai | 0:c3a498a8091c | 89 | while(true){ |
kenjiArai | 2:17fdd6d3877f | 90 | set_central_mode(); |
kenjiArai | 2:17fdd6d3877f | 91 | } |
kenjiArai | 2:17fdd6d3877f | 92 | } |
kenjiArai | 2:17fdd6d3877f | 93 | |
kenjiArai | 2:17fdd6d3877f | 94 | // Every 1 second |
kenjiArai | 2:17fdd6d3877f | 95 | void one_sec(void){ // execute every 1second |
kenjiArai | 2:17fdd6d3877f | 96 | if( timeout_readable){ --timeout_readable; } |
kenjiArai | 2:17fdd6d3877f | 97 | } |
kenjiArai | 2:17fdd6d3877f | 98 | |
kenjiArai | 2:17fdd6d3877f | 99 | // Peripheral mode (Default setting) change to Central mode |
kenjiArai | 2:17fdd6d3877f | 100 | void set_central_mode(void) |
kenjiArai | 2:17fdd6d3877f | 101 | { |
kenjiArai | 2:17fdd6d3877f | 102 | static char linebuf[64]; |
kenjiArai | 2:17fdd6d3877f | 103 | static char blebuf[64]; |
kenjiArai | 2:17fdd6d3877f | 104 | char *ptr; |
kenjiArai | 2:17fdd6d3877f | 105 | char c; |
kenjiArai | 2:17fdd6d3877f | 106 | |
kenjiArai | 2:17fdd6d3877f | 107 | // Reset BLE |
kenjiArai | 2:17fdd6d3877f | 108 | pc.printf("Start from BLE reset\r\n"); |
kenjiArai | 2:17fdd6d3877f | 109 | { // need to keep this order (does not divide each other) |
kenjiArai | 2:17fdd6d3877f | 110 | tyble16.puts(cmd_force_reset); |
kenjiArai | 2:17fdd6d3877f | 111 | pc.printf("force to reset\r\n%s%s\r\n", |
kenjiArai | 2:17fdd6d3877f | 112 | ble_msg, get_ble_message(blebuf)); |
kenjiArai | 2:17fdd6d3877f | 113 | } |
kenjiArai | 2:17fdd6d3877f | 114 | if (strstr(blebuf , "Ver.") != NULL){ |
kenjiArai | 2:17fdd6d3877f | 115 | ; |
kenjiArai | 2:17fdd6d3877f | 116 | } else { |
kenjiArai | 2:17fdd6d3877f | 117 | pc.printf(err_msg); |
kenjiArai | 2:17fdd6d3877f | 118 | while(true){;} |
kenjiArai | 2:17fdd6d3877f | 119 | } |
kenjiArai | 2:17fdd6d3877f | 120 | wait_ms(10); |
kenjiArai | 2:17fdd6d3877f | 121 | // Stop current action |
kenjiArai | 2:17fdd6d3877f | 122 | { // need to keep this order (does not divide each other) |
kenjiArai | 2:17fdd6d3877f | 123 | tyble16.puts(cmd_advert_stop); |
kenjiArai | 2:17fdd6d3877f | 124 | get_ble_message(blebuf); |
kenjiArai | 2:17fdd6d3877f | 125 | } |
kenjiArai | 2:17fdd6d3877f | 126 | if (strstr(blebuf , "ACK") != NULL){ |
kenjiArai | 2:17fdd6d3877f | 127 | my_role = MODE_PERIPHERAL; |
kenjiArai | 2:17fdd6d3877f | 128 | } else if (strstr(blebuf , "NAK") != NULL){ |
kenjiArai | 2:17fdd6d3877f | 129 | { // need to keep this order (does not divide each other) |
kenjiArai | 2:17fdd6d3877f | 130 | tyble16.printf("%s", cmd); |
kenjiArai | 2:17fdd6d3877f | 131 | get_ble_message(blebuf); |
kenjiArai | 2:17fdd6d3877f | 132 | } |
kenjiArai | 2:17fdd6d3877f | 133 | if (strstr(blebuf , "ACK") != NULL){ |
kenjiArai | 2:17fdd6d3877f | 134 | my_role = MODE_CENTRAL; |
kenjiArai | 2:17fdd6d3877f | 135 | } else { |
kenjiArai | 2:17fdd6d3877f | 136 | pc.printf(err_msg); |
kenjiArai | 2:17fdd6d3877f | 137 | while(true){;} |
kenjiArai | 2:17fdd6d3877f | 138 | } |
kenjiArai | 2:17fdd6d3877f | 139 | } else { |
kenjiArai | 2:17fdd6d3877f | 140 | pc.printf(err_msg); |
kenjiArai | 2:17fdd6d3877f | 141 | while(true){;} |
kenjiArai | 2:17fdd6d3877f | 142 | } |
kenjiArai | 2:17fdd6d3877f | 143 | pc.printf("Current mode: "); |
kenjiArai | 2:17fdd6d3877f | 144 | if (my_role == MODE_CENTRAL){ |
kenjiArai | 2:17fdd6d3877f | 145 | pc.printf("Central\r\n"); |
kenjiArai | 2:17fdd6d3877f | 146 | } else if (my_role == MODE_PERIPHERAL){ |
kenjiArai | 2:17fdd6d3877f | 147 | pc.printf("Peripheral\r\n"); |
kenjiArai | 2:17fdd6d3877f | 148 | } else { |
kenjiArai | 2:17fdd6d3877f | 149 | pc.printf("unknown\r\n"); |
kenjiArai | 2:17fdd6d3877f | 150 | } |
kenjiArai | 2:17fdd6d3877f | 151 | c = linebuf[0]; |
kenjiArai | 2:17fdd6d3877f | 152 | stop_broadcasting(blebuf); |
kenjiArai | 2:17fdd6d3877f | 153 | pc.printf("Define Central or Peripheral\r\n"); |
kenjiArai | 2:17fdd6d3877f | 154 | pc.printf("Central -> c, Peripheral -> p, "); |
kenjiArai | 2:17fdd6d3877f | 155 | pc.printf("Keep current setting -> any key\r\n"); |
kenjiArai | 2:17fdd6d3877f | 156 | pc.printf("Please enter c or p\r\n="); |
kenjiArai | 2:17fdd6d3877f | 157 | ptr = linebuf; |
kenjiArai | 2:17fdd6d3877f | 158 | get_line(ptr, sizeof(linebuf)); |
kenjiArai | 2:17fdd6d3877f | 159 | pc.putc('\r'); |
kenjiArai | 2:17fdd6d3877f | 160 | c = linebuf[0]; |
kenjiArai | 2:17fdd6d3877f | 161 | if ((c == 'c') || (c == 'C')){ |
kenjiArai | 2:17fdd6d3877f | 162 | pc.printf(cmd_change_to_c); |
kenjiArai | 2:17fdd6d3877f | 163 | { // need to keep this order (does not divide each other) |
kenjiArai | 2:17fdd6d3877f | 164 | tyble16.printf(cmd_change_to_c); |
kenjiArai | 2:17fdd6d3877f | 165 | pc.printf("Switch to Central\r\n%s%s\r\n", |
kenjiArai | 2:17fdd6d3877f | 166 | ble_msg, get_ble_message(blebuf)); |
kenjiArai | 2:17fdd6d3877f | 167 | } |
kenjiArai | 2:17fdd6d3877f | 168 | if (strstr(blebuf , "ACK") != NULL){ // check ACK words |
kenjiArai | 2:17fdd6d3877f | 169 | my_role = MODE_CENTRAL; |
kenjiArai | 2:17fdd6d3877f | 170 | pc.printf("BST5010000\r\n"); |
kenjiArai | 2:17fdd6d3877f | 171 | {// need to keep this order (does not divide each other) |
kenjiArai | 2:17fdd6d3877f | 172 | tyble16.printf("BST5010000\r\n"); |
kenjiArai | 2:17fdd6d3877f | 173 | pc.printf("Set PSKEY value\r\n"); |
kenjiArai | 2:17fdd6d3877f | 174 | pc.printf("Checking paired signal forever\r\n"); |
kenjiArai | 2:17fdd6d3877f | 175 | } |
kenjiArai | 2:17fdd6d3877f | 176 | pc.printf("Changed to Central mode\r\nPlease power-off"); |
kenjiArai | 2:17fdd6d3877f | 177 | pc.printf(" then Peripheral will active!\r\n"); |
kenjiArai | 2:17fdd6d3877f | 178 | } else if (strstr(blebuf , "NAK") != NULL){ |
kenjiArai | 2:17fdd6d3877f | 179 | if (my_role == MODE_PERIPHERAL){ |
kenjiArai | 2:17fdd6d3877f | 180 | pc.printf("Stay in Periphral mode\r\n"); |
kenjiArai | 2:17fdd6d3877f | 181 | } else { |
kenjiArai | 2:17fdd6d3877f | 182 | pc.printf("Stay in Central mode\r\n"); |
kenjiArai | 2:17fdd6d3877f | 183 | } |
kenjiArai | 2:17fdd6d3877f | 184 | } else { |
kenjiArai | 2:17fdd6d3877f | 185 | pc.printf("??\r\n"); |
kenjiArai | 2:17fdd6d3877f | 186 | } |
kenjiArai | 2:17fdd6d3877f | 187 | } else if ((c == 'p') || (c == 'P')){ |
kenjiArai | 2:17fdd6d3877f | 188 | pc.printf(cmd_change_to_p); |
kenjiArai | 2:17fdd6d3877f | 189 | { // need to keep this order (does not divide each other) |
kenjiArai | 2:17fdd6d3877f | 190 | tyble16.printf(cmd_change_to_p); |
kenjiArai | 2:17fdd6d3877f | 191 | pc.printf("Switch to Peripheral\r\n%s%s\r\n", |
kenjiArai | 2:17fdd6d3877f | 192 | ble_msg, get_ble_message(blebuf)); |
kenjiArai | 2:17fdd6d3877f | 193 | } |
kenjiArai | 2:17fdd6d3877f | 194 | if (strstr(blebuf , "ACK") != NULL){ // check ACK words |
kenjiArai | 2:17fdd6d3877f | 195 | my_role = MODE_PERIPHERAL; |
kenjiArai | 2:17fdd6d3877f | 196 | pc.printf("BST501003C\r\n"); |
kenjiArai | 2:17fdd6d3877f | 197 | {// need to keep this order (does not divide each other) |
kenjiArai | 2:17fdd6d3877f | 198 | tyble16.printf("BST501003C\r\n"); // default data 60 sec |
kenjiArai | 2:17fdd6d3877f | 199 | pc.printf("Set PSKEY value\r\n"); |
kenjiArai | 2:17fdd6d3877f | 200 | pc.printf("Advertising 60sec timeout\r\n"); |
kenjiArai | 2:17fdd6d3877f | 201 | } |
kenjiArai | 2:17fdd6d3877f | 202 | pc.printf("Changed to Periphral mode\r\nPlease power-off"); |
kenjiArai | 2:17fdd6d3877f | 203 | pc.printf(" then Peripheral will active!\r\n"); |
kenjiArai | 2:17fdd6d3877f | 204 | } else if (strstr(blebuf , "NAK") != NULL){ |
kenjiArai | 2:17fdd6d3877f | 205 | if (my_role == MODE_PERIPHERAL){ |
kenjiArai | 2:17fdd6d3877f | 206 | pc.printf("Stay in Periphral mode\r\n"); |
kenjiArai | 2:17fdd6d3877f | 207 | } else { |
kenjiArai | 2:17fdd6d3877f | 208 | pc.printf("Stay in Central mode\r\n"); |
kenjiArai | 2:17fdd6d3877f | 209 | } |
kenjiArai | 2:17fdd6d3877f | 210 | } else { |
kenjiArai | 2:17fdd6d3877f | 211 | pc.printf("??\r\n"); |
kenjiArai | 2:17fdd6d3877f | 212 | } |
kenjiArai | 2:17fdd6d3877f | 213 | } else { |
kenjiArai | 2:17fdd6d3877f | 214 | pc.printf("Keep current setting\r\n"); |
kenjiArai | 2:17fdd6d3877f | 215 | } |
kenjiArai | 2:17fdd6d3877f | 216 | pc.printf("Hit any key to go again!\r\n"); |
kenjiArai | 2:17fdd6d3877f | 217 | while(pc.getc() == 0){;} |
kenjiArai | 2:17fdd6d3877f | 218 | } |
kenjiArai | 2:17fdd6d3877f | 219 | |
kenjiArai | 2:17fdd6d3877f | 220 | void stop_broadcasting(char *buf) |
kenjiArai | 2:17fdd6d3877f | 221 | { |
kenjiArai | 2:17fdd6d3877f | 222 | // Stop Advertising or Scanning (just in case) |
kenjiArai | 2:17fdd6d3877f | 223 | if (my_role == MODE_PERIPHERAL){ |
kenjiArai | 2:17fdd6d3877f | 224 | pc.printf("Stop Advertising\r\n"); |
kenjiArai | 2:17fdd6d3877f | 225 | tyble16.puts(cmd_advert_stop); |
kenjiArai | 2:17fdd6d3877f | 226 | } else { |
kenjiArai | 2:17fdd6d3877f | 227 | pc.printf("Stop Central action\r\n"); |
kenjiArai | 2:17fdd6d3877f | 228 | tyble16.printf("%s", cmd); |
kenjiArai | 2:17fdd6d3877f | 229 | } |
kenjiArai | 2:17fdd6d3877f | 230 | // need to keep this order (does not divide puts & get_ble_message) |
kenjiArai | 2:17fdd6d3877f | 231 | pc.printf("%s%s\r\n", ble_msg, get_ble_message(buf)); |
kenjiArai | 2:17fdd6d3877f | 232 | if (buf[2] == 'A'){ |
kenjiArai | 2:17fdd6d3877f | 233 | if (buf[3] == 'C'){ |
kenjiArai | 2:17fdd6d3877f | 234 | if (buf[4] == 'K'){ |
kenjiArai | 2:17fdd6d3877f | 235 | return; |
kenjiArai | 0:c3a498a8091c | 236 | } |
kenjiArai | 0:c3a498a8091c | 237 | } |
kenjiArai | 2:17fdd6d3877f | 238 | } |
kenjiArai | 2:17fdd6d3877f | 239 | if (my_role == MODE_PERIPHERAL){ |
kenjiArai | 2:17fdd6d3877f | 240 | pc.printf("Try again,Stop Central action\r\n"); |
kenjiArai | 2:17fdd6d3877f | 241 | tyble16.printf("%s", cmd); |
kenjiArai | 2:17fdd6d3877f | 242 | } else { |
kenjiArai | 2:17fdd6d3877f | 243 | pc.printf("Try again,Stop Advertising\r\n"); |
kenjiArai | 2:17fdd6d3877f | 244 | tyble16.puts(cmd_advert_stop); // try Peripheral |
kenjiArai | 2:17fdd6d3877f | 245 | } |
kenjiArai | 2:17fdd6d3877f | 246 | // need to keep this order (does not divide puts & get_ble_message) |
kenjiArai | 2:17fdd6d3877f | 247 | pc.printf("n%s%s\r\n", ble_msg, get_ble_message(buf)); |
kenjiArai | 2:17fdd6d3877f | 248 | if (buf[2] == 'A'){ |
kenjiArai | 2:17fdd6d3877f | 249 | if (buf[3] == 'C'){ |
kenjiArai | 2:17fdd6d3877f | 250 | if (buf[4] == 'K'){ |
kenjiArai | 2:17fdd6d3877f | 251 | // change role C to P or P to C |
kenjiArai | 2:17fdd6d3877f | 252 | if (my_role == MODE_PERIPHERAL){ |
kenjiArai | 2:17fdd6d3877f | 253 | my_role = MODE_CENTRAL; |
kenjiArai | 2:17fdd6d3877f | 254 | pc.printf("Mode changes to Central\r\n"); |
kenjiArai | 2:17fdd6d3877f | 255 | } else { |
kenjiArai | 2:17fdd6d3877f | 256 | my_role = MODE_PERIPHERAL; |
kenjiArai | 2:17fdd6d3877f | 257 | pc.printf("Mode changes to Peripheral\r\n"); |
kenjiArai | 2:17fdd6d3877f | 258 | } |
kenjiArai | 2:17fdd6d3877f | 259 | return; |
kenjiArai | 0:c3a498a8091c | 260 | } |
kenjiArai | 0:c3a498a8091c | 261 | } |
kenjiArai | 0:c3a498a8091c | 262 | } |
kenjiArai | 0:c3a498a8091c | 263 | } |
kenjiArai | 0:c3a498a8091c | 264 | |
kenjiArai | 2:17fdd6d3877f | 265 | char *get_ble_message(char *buf) |
kenjiArai | 2:17fdd6d3877f | 266 | { |
kenjiArai | 2:17fdd6d3877f | 267 | char c; |
kenjiArai | 2:17fdd6d3877f | 268 | |
kenjiArai | 2:17fdd6d3877f | 269 | uint8_t cr_cnt = 0; |
kenjiArai | 2:17fdd6d3877f | 270 | uint16_t i = 0; |
kenjiArai | 2:17fdd6d3877f | 271 | timeout_readable = 5u; // 5sec |
kenjiArai | 2:17fdd6d3877f | 272 | while (true){ |
kenjiArai | 2:17fdd6d3877f | 273 | c = tyble16.getc(); |
kenjiArai | 2:17fdd6d3877f | 274 | buf[i++] = c; |
kenjiArai | 2:17fdd6d3877f | 275 | if (c == '\n'){ |
kenjiArai | 2:17fdd6d3877f | 276 | ++cr_cnt; |
kenjiArai | 2:17fdd6d3877f | 277 | } |
kenjiArai | 2:17fdd6d3877f | 278 | if ((cr_cnt == 2u) || (timeout_readable == 0)){ |
kenjiArai | 2:17fdd6d3877f | 279 | buf[i] = 0; |
kenjiArai | 2:17fdd6d3877f | 280 | break; |
kenjiArai | 2:17fdd6d3877f | 281 | } |
kenjiArai | 2:17fdd6d3877f | 282 | } |
kenjiArai | 2:17fdd6d3877f | 283 | return buf; |
kenjiArai | 2:17fdd6d3877f | 284 | } |
kenjiArai | 2:17fdd6d3877f | 285 | |
kenjiArai | 2:17fdd6d3877f | 286 | // Get key input data |
kenjiArai | 2:17fdd6d3877f | 287 | void get_line (char *buff, int len) |
kenjiArai | 0:c3a498a8091c | 288 | { |
kenjiArai | 2:17fdd6d3877f | 289 | char c; |
kenjiArai | 2:17fdd6d3877f | 290 | int idx = 0; |
kenjiArai | 2:17fdd6d3877f | 291 | |
kenjiArai | 2:17fdd6d3877f | 292 | for (;;) { |
kenjiArai | 2:17fdd6d3877f | 293 | c = pc.getc(); |
kenjiArai | 2:17fdd6d3877f | 294 | if (c == '\r') { |
kenjiArai | 2:17fdd6d3877f | 295 | buff[idx++] = c; |
kenjiArai | 2:17fdd6d3877f | 296 | break; |
kenjiArai | 2:17fdd6d3877f | 297 | } |
kenjiArai | 2:17fdd6d3877f | 298 | if ((c == '\b') && idx) { |
kenjiArai | 2:17fdd6d3877f | 299 | idx--; |
kenjiArai | 2:17fdd6d3877f | 300 | pc.putc(c); |
kenjiArai | 2:17fdd6d3877f | 301 | pc.putc(' '); |
kenjiArai | 2:17fdd6d3877f | 302 | pc.putc(c); |
kenjiArai | 2:17fdd6d3877f | 303 | } |
kenjiArai | 2:17fdd6d3877f | 304 | if (((uint8_t)c >= ' ') && (idx < len - 1)) { |
kenjiArai | 2:17fdd6d3877f | 305 | buff[idx++] = c; |
kenjiArai | 2:17fdd6d3877f | 306 | pc.putc(c); |
kenjiArai | 0:c3a498a8091c | 307 | } |
kenjiArai | 0:c3a498a8091c | 308 | } |
kenjiArai | 2:17fdd6d3877f | 309 | buff[idx++] = '\r'; // <CR> |
kenjiArai | 2:17fdd6d3877f | 310 | buff[idx++] = '\n'; // <LF> |
kenjiArai | 2:17fdd6d3877f | 311 | buff[idx] = 0; |
kenjiArai | 2:17fdd6d3877f | 312 | pc.putc('\n'); |
kenjiArai | 2:17fdd6d3877f | 313 | } |
kenjiArai | 2:17fdd6d3877f | 314 | |
kenjiArai | 2:17fdd6d3877f | 315 | // You do not need to understand & just execute |
kenjiArai | 2:17fdd6d3877f | 316 | void command_preparation(void) |
kenjiArai | 2:17fdd6d3877f | 317 | { |
kenjiArai | 2:17fdd6d3877f | 318 | char *const cmd_abc = "ABCDEFGHIJKLMNOPQRSTUVWXYZ\r\n"; |
kenjiArai | 2:17fdd6d3877f | 319 | char cmd_abc_order[10] = {1,18,2,0x80,26,27,0xff,0xff,0xff,0xff}; |
kenjiArai | 2:17fdd6d3877f | 320 | |
kenjiArai | 2:17fdd6d3877f | 321 | char *p = cmd_abc; |
kenjiArai | 2:17fdd6d3877f | 322 | for(uint32_t i = 0; i < 8;i++){ |
kenjiArai | 2:17fdd6d3877f | 323 | char c = cmd_abc_order[i]; |
kenjiArai | 2:17fdd6d3877f | 324 | if(c == 0x80){cmd[i] = '0';} else |
kenjiArai | 2:17fdd6d3877f | 325 | if(c == 0xff){cmd[i] = 0;} else |
kenjiArai | 2:17fdd6d3877f | 326 | {cmd[i] = *(p + c);} |
kenjiArai | 2:17fdd6d3877f | 327 | } |
kenjiArai | 0:c3a498a8091c | 328 | } |