1st release version. Set TYBLE16 as Central mode

Dependencies:   mbed

Fork of TYBLE16_BME280_data_sender by Kenji Arai

Please refer following page.
/users/kenjiArai/notebook/tyble16-module--uart-communication-between-central/#

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?

UserRevisionLine numberNew 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 }