TYBLE16(BLE UART) module on Mbed sytem. Communicate with iPhone.

Please refer following page.
/users/kenjiArai/notebook/tyble16-module--akizuki/

Committer:
kenjiArai
Date:
Sat Oct 28 10:32:36 2017 +0000
Revision:
0:d547d6d80f2b
1st rev.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 0:d547d6d80f2b 1 /*
kenjiArai 0:d547d6d80f2b 2 * Mbed Application program / Using Akizuki BLE Module AE-TYBLE16
kenjiArai 0:d547d6d80f2b 3 * on-board module : TAIYO YUDEN BLE 4.2 TYSA-B (EYSGJNAWY-WX)
kenjiArai 0:d547d6d80f2b 4 *
kenjiArai 0:d547d6d80f2b 5 * http://akizukidenshi.com/catalog/g/gK-12339/
kenjiArai 0:d547d6d80f2b 6 *
kenjiArai 0:d547d6d80f2b 7 * Refernce document
kenjiArai 0:d547d6d80f2b 8 * https://www.yuden.co.jp/wireless_module/document/datareport2/jp/
kenjiArai 0:d547d6d80f2b 9 * TY_BLE_EYSGJNAWY_WX_BriefDataReport_V1_3_20170925J.pdf
kenjiArai 0:d547d6d80f2b 10 *
kenjiArai 0:d547d6d80f2b 11 * Copyright (c) 2017 Kenji Arai / JH1PJL
kenjiArai 0:d547d6d80f2b 12 * http://www.page.sannet.ne.jp/kenjia/index.html
kenjiArai 0:d547d6d80f2b 13 * http://mbed.org/users/kenjiArai/
kenjiArai 0:d547d6d80f2b 14 * Created: October 27th, 2017
kenjiArai 0:d547d6d80f2b 15 * Revised: October 28th, 2017
kenjiArai 0:d547d6d80f2b 16 */
kenjiArai 0:d547d6d80f2b 17
kenjiArai 0:d547d6d80f2b 18 /*
kenjiArai 0:d547d6d80f2b 19 Tested condition
kenjiArai 0:d547d6d80f2b 20 mbed-os-5.6.3 & mbed Rev.154
kenjiArai 0:d547d6d80f2b 21 Nucleo-F446RE TYBLE16 (also F411 & F042K6(only mbed))
kenjiArai 0:d547d6d80f2b 22 PA_9 pin5 / P0.03(UART_RX)
kenjiArai 0:d547d6d80f2b 23 PA_10 pin6 / P0.01(UART_TX)
kenjiArai 0:d547d6d80f2b 24 pin7 / P0.02(UART_CTS) connected to pin8 / P0.00(UART_RTS)
kenjiArai 0:d547d6d80f2b 25 +3.3v pin14 / +V
kenjiArai 0:d547d6d80f2b 26 GND pin13 / GND
kenjiArai 0:d547d6d80f2b 27 Communcation with iPhone 7 iOS 11.0.3
kenjiArai 0:d547d6d80f2b 28 TYs Terminal App
kenjiArai 0:d547d6d80f2b 29 https://itunes.apple.com/jp/app/tys-terminal-app/id1184640145?mt=8
kenjiArai 0:d547d6d80f2b 30 */
kenjiArai 0:d547d6d80f2b 31
kenjiArai 0:d547d6d80f2b 32 // Include --------------------------------------------------------------------
kenjiArai 0:d547d6d80f2b 33 #include "mbed.h"
kenjiArai 0:d547d6d80f2b 34
kenjiArai 0:d547d6d80f2b 35 // Definition -----------------------------------------------------------------
kenjiArai 0:d547d6d80f2b 36 // No input/output action then send '\n' after X sec
kenjiArai 0:d547d6d80f2b 37 #define TIME_OUT 5 // 5 sec
kenjiArai 0:d547d6d80f2b 38 // after terminate Advertising then restart X sec
kenjiArai 0:d547d6d80f2b 39 #define ADT_TIME 15 // 15 sec
kenjiArai 0:d547d6d80f2b 40
kenjiArai 0:d547d6d80f2b 41 // Object/ Constructor --------------------------------------------------------
kenjiArai 0:d547d6d80f2b 42 Serial pc(USBTX,USBRX);
kenjiArai 0:d547d6d80f2b 43 Serial tyble16(PA_9, PA_10);
kenjiArai 0:d547d6d80f2b 44 Ticker t;
kenjiArai 0:d547d6d80f2b 45
kenjiArai 0:d547d6d80f2b 46 // RAM ------------------------------------------------------------------------
kenjiArai 0:d547d6d80f2b 47 bool state_connection = false; // Connect Client or not
kenjiArai 0:d547d6d80f2b 48 bool received_data = false; // data received
kenjiArai 0:d547d6d80f2b 49 uint32_t cmd_timeout_cntr = ADT_TIME;
kenjiArai 0:d547d6d80f2b 50
kenjiArai 0:d547d6d80f2b 51 // ROM / Constant data --------------------------------------------------------
kenjiArai 0:d547d6d80f2b 52
kenjiArai 0:d547d6d80f2b 53 // Function prototypes --------------------------------------------------------
kenjiArai 0:d547d6d80f2b 54 void check_connection(void);
kenjiArai 0:d547d6d80f2b 55 void parse_input(char *buf);
kenjiArai 0:d547d6d80f2b 56
kenjiArai 0:d547d6d80f2b 57 //------------------------------------------------------------------------------
kenjiArai 0:d547d6d80f2b 58 // Control Program
kenjiArai 0:d547d6d80f2b 59 //------------------------------------------------------------------------------
kenjiArai 0:d547d6d80f2b 60 int main()
kenjiArai 0:d547d6d80f2b 61 {
kenjiArai 0:d547d6d80f2b 62 pc.printf("\r\n\r\nApplication for AE-TYBLE16 Module\r\n");
kenjiArai 0:d547d6d80f2b 63 pc.printf(" created on %s %s\r\n", __DATE__, __TIME__);
kenjiArai 0:d547d6d80f2b 64 t.attach(check_connection, 1);
kenjiArai 0:d547d6d80f2b 65 while (true){
kenjiArai 0:d547d6d80f2b 66 static char rcv_bf[128];
kenjiArai 0:d547d6d80f2b 67 static uint8_t n = 0;
kenjiArai 0:d547d6d80f2b 68 char c = 0;
kenjiArai 0:d547d6d80f2b 69 while (tyble16.readable()){
kenjiArai 0:d547d6d80f2b 70 //----- data receive from Client -----------------------------------
kenjiArai 0:d547d6d80f2b 71 received_data = true;
kenjiArai 0:d547d6d80f2b 72 c = tyble16.getc(); // received data from client
kenjiArai 0:d547d6d80f2b 73 pc.putc(c); // show to console
kenjiArai 0:d547d6d80f2b 74 rcv_bf[n++] = c; // save int buf
kenjiArai 0:d547d6d80f2b 75 if (c == '\n'){ // end one line
kenjiArai 0:d547d6d80f2b 76 pc.putc('\r');
kenjiArai 0:d547d6d80f2b 77 rcv_bf[n] = 0;
kenjiArai 0:d547d6d80f2b 78 if (n > 4){
kenjiArai 0:d547d6d80f2b 79 parse_input(rcv_bf); // ckeck command or not
kenjiArai 0:d547d6d80f2b 80 }
kenjiArai 0:d547d6d80f2b 81 n = 0;
kenjiArai 0:d547d6d80f2b 82 }
kenjiArai 0:d547d6d80f2b 83 }
kenjiArai 0:d547d6d80f2b 84 while (pc.readable()){
kenjiArai 0:d547d6d80f2b 85 //----- data send to Client ----------------------------------------
kenjiArai 0:d547d6d80f2b 86 c = pc.getc();
kenjiArai 0:d547d6d80f2b 87 tyble16.putc(c);
kenjiArai 0:d547d6d80f2b 88 pc.putc(c); // echo back
kenjiArai 0:d547d6d80f2b 89 if(c == '\r'){ // if CR then put LF
kenjiArai 0:d547d6d80f2b 90 tyble16.putc('\n');
kenjiArai 0:d547d6d80f2b 91 pc.putc('\n');
kenjiArai 0:d547d6d80f2b 92 }
kenjiArai 0:d547d6d80f2b 93 }
kenjiArai 0:d547d6d80f2b 94 }
kenjiArai 0:d547d6d80f2b 95 }
kenjiArai 0:d547d6d80f2b 96
kenjiArai 0:d547d6d80f2b 97 // Check Response Events
kenjiArai 0:d547d6d80f2b 98 void parse_input(char *buf)
kenjiArai 0:d547d6d80f2b 99 {
kenjiArai 0:d547d6d80f2b 100 if (strstr(buf, "CON")){ // Connection successful
kenjiArai 0:d547d6d80f2b 101 state_connection = true;
kenjiArai 0:d547d6d80f2b 102 } else if (strstr(buf, "DCO")){ // Disconnect
kenjiArai 0:d547d6d80f2b 103 state_connection = false;
kenjiArai 0:d547d6d80f2b 104 } else if (strstr(buf, "ADT")){ // Advertising Timeout
kenjiArai 0:d547d6d80f2b 105 state_connection = false;
kenjiArai 0:d547d6d80f2b 106 cmd_timeout_cntr = 0;
kenjiArai 0:d547d6d80f2b 107 } else if (strstr(buf, "NAK")){ // Failed
kenjiArai 0:d547d6d80f2b 108 state_connection = false;
kenjiArai 0:d547d6d80f2b 109 if (cmd_timeout_cntr == 0){
kenjiArai 0:d547d6d80f2b 110 // Both Advertising Start. Connectable and Discoverable.
kenjiArai 0:d547d6d80f2b 111 tyble16.printf("BCD3\r\n"); // send above command
kenjiArai 0:d547d6d80f2b 112 cmd_timeout_cntr = ADT_TIME;
kenjiArai 0:d547d6d80f2b 113 }
kenjiArai 0:d547d6d80f2b 114 }
kenjiArai 0:d547d6d80f2b 115 }
kenjiArai 0:d547d6d80f2b 116
kenjiArai 0:d547d6d80f2b 117 // Every one second, check communication status
kenjiArai 0:d547d6d80f2b 118 void check_connection(void)
kenjiArai 0:d547d6d80f2b 119 {
kenjiArai 0:d547d6d80f2b 120 static int8_t counter = 0;
kenjiArai 0:d547d6d80f2b 121
kenjiArai 0:d547d6d80f2b 122 if ((received_data == false) && (state_connection == false)){
kenjiArai 0:d547d6d80f2b 123 if (++counter >= TIME_OUT){
kenjiArai 0:d547d6d80f2b 124 tyble16.putc('\n');
kenjiArai 0:d547d6d80f2b 125 counter = 0;
kenjiArai 0:d547d6d80f2b 126 }
kenjiArai 0:d547d6d80f2b 127 } else {
kenjiArai 0:d547d6d80f2b 128 counter = 0;
kenjiArai 0:d547d6d80f2b 129 }
kenjiArai 0:d547d6d80f2b 130 if (cmd_timeout_cntr != 0){
kenjiArai 0:d547d6d80f2b 131 --cmd_timeout_cntr;
kenjiArai 0:d547d6d80f2b 132 }
kenjiArai 0:d547d6d80f2b 133 received_data = false;
kenjiArai 0:d547d6d80f2b 134 }