test

Dependencies:   BufferedSerial WatchdogTimer

Committer:
harada_jpms
Date:
Tue Sep 29 23:59:14 2020 +0000
Revision:
6:e6f87dde20e5
Parent:
5:3ba4c087853b
test

Who changed what in which revision?

UserRevisionLine numberNew contents of line
harada_jpms 0:ad0d1afb4462 1 // Include --------------------------------------------------------------------
harada_jpms 0:ad0d1afb4462 2 #include "mbed.h"
harada_jpms 0:ad0d1afb4462 3 #include "BLE.h"
harada_jpms 5:3ba4c087853b 4 #include "nrf_ble_gap.h"
harada_jpms 0:ad0d1afb4462 5 #include "DiscoveredCharacteristic.h"
harada_jpms 0:ad0d1afb4462 6 #include "DiscoveredService.h"
harada_jpms 0:ad0d1afb4462 7 #include "UARTService.h"
harada_jpms 5:3ba4c087853b 8 #include "WatchdogTimer.h"
harada_jpms 5:3ba4c087853b 9 #include "BufferedSerial.h"
harada_jpms 0:ad0d1afb4462 10
harada_jpms 0:ad0d1afb4462 11 // Definition -----------------------------------------------------------------
harada_jpms 0:ad0d1afb4462 12 #define NUM_ONCE 20
harada_jpms 0:ad0d1afb4462 13 #define BFSIZE (NUM_ONCE+4)
harada_jpms 0:ad0d1afb4462 14
harada_jpms 0:ad0d1afb4462 15 #define SOFT_DEVICE_FATHER_HANDLE 3
harada_jpms 0:ad0d1afb4462 16
harada_jpms 5:3ba4c087853b 17 #define VER 12 // ソフトバージョン(3桁 1.00 -> 100) // Ver12 20190314
harada_jpms 5:3ba4c087853b 18
harada_jpms 0:ad0d1afb4462 19 // Object ---------------------------------------------------------------------
harada_jpms 0:ad0d1afb4462 20 BLE& ble_uart = BLE::Instance();
harada_jpms 4:1920e4a63bde 21 //Serial pc(P0_1, P0_3, 115200); // DEBUG BOARD
harada_jpms 5:3ba4c087853b 22 //Serial pc(P0_9, P0_11, 9600); // NEW BOARD
harada_jpms 5:3ba4c087853b 23 BufferedSerial pc(P0_9, P0_11, 256); // NEW BOARD
harada_jpms 3:455575531b33 24 Ticker main_timer; // メインタイ216
harada_jpms 3:455575531b33 25
harada_jpms 3:455575531b33 26 DigitalOut led(P0_6);
harada_jpms 3:455575531b33 27
harada_jpms 4:1920e4a63bde 28 //DigitalOut state(P0_24); // DEBUG BOARD
harada_jpms 4:1920e4a63bde 29 DigitalOut state(P0_3); // NEW BOARD
harada_jpms 3:455575531b33 30
harada_jpms 0:ad0d1afb4462 31 // ROM / Constant data --------------------------------------------------------
harada_jpms 5:3ba4c087853b 32 Gap::Address_t mac_board_0 = {0x72, 0x00, 0xD4, 0x34, 0x0B, 0xF7};
harada_jpms 0:ad0d1afb4462 33
harada_jpms 0:ad0d1afb4462 34 // RAM ------------------------------------------------------------------------
harada_jpms 0:ad0d1afb4462 35 Gap::Handle_t connectionHandle = 0xFFFF;
harada_jpms 0:ad0d1afb4462 36 DiscoveredCharacteristic uartTXCharacteristic;
harada_jpms 0:ad0d1afb4462 37 DiscoveredCharacteristic uartRXCharacteristic;
harada_jpms 0:ad0d1afb4462 38 bool foundUartRXCharacteristic = false;
harada_jpms 0:ad0d1afb4462 39 bool connected2server = false;
harada_jpms 5:3ba4c087853b 40 bool connected2server_d = false;
harada_jpms 0:ad0d1afb4462 41 bool connection_tx = false;
harada_jpms 0:ad0d1afb4462 42 bool connection_rx = false;
harada_jpms 0:ad0d1afb4462 43 UARTService * uartServicePtr = NULL;
harada_jpms 0:ad0d1afb4462 44 Gap::Address_t my_mac;
harada_jpms 0:ad0d1afb4462 45 int my_board_index = -1;
harada_jpms 0:ad0d1afb4462 46 bool received_uart_dat = false;
harada_jpms 0:ad0d1afb4462 47 int8_t uart_buffer[BFSIZE];
harada_jpms 0:ad0d1afb4462 48 uint8_t uart_bf_len;
harada_jpms 0:ad0d1afb4462 49 volatile bool rx_isr_busy = false;
harada_jpms 0:ad0d1afb4462 50
harada_jpms 1:d2ebf1c3ae5a 51 unsigned long mac_1;
harada_jpms 1:d2ebf1c3ae5a 52 unsigned long mac_2;
harada_jpms 1:d2ebf1c3ae5a 53 unsigned long mac_3;
harada_jpms 1:d2ebf1c3ae5a 54
harada_jpms 5:3ba4c087853b 55 Mutex bletx_mutex;
harada_jpms 5:3ba4c087853b 56
harada_jpms 5:3ba4c087853b 57 int connect_check = 0;
harada_jpms 3:455575531b33 58
harada_jpms 1:d2ebf1c3ae5a 59 #define SIO_BUF_SIZE 256 /* SIO リングバッファーサイズ (1K byte) */
harada_jpms 1:d2ebf1c3ae5a 60
harada_jpms 1:d2ebf1c3ae5a 61 typedef struct {
harada_jpms 1:d2ebf1c3ae5a 62 unsigned short data_cnt; /* リング・バッファ データカウント */
harada_jpms 1:d2ebf1c3ae5a 63 unsigned short rp; /* リング・バッファ Read ポインタ */
harada_jpms 1:d2ebf1c3ae5a 64 unsigned short wp; /* リング・バッファ Write ポインタ */
harada_jpms 1:d2ebf1c3ae5a 65 unsigned char buf[SIO_BUF_SIZE]; /* リング・バッファ */
harada_jpms 1:d2ebf1c3ae5a 66 } ring_cnt_t; /* リング・バッファ 制御用構造体 */
harada_jpms 1:d2ebf1c3ae5a 67
harada_jpms 1:d2ebf1c3ae5a 68 ring_cnt_t pc_uart_buf; // 通信用リングバッファ
harada_jpms 1:d2ebf1c3ae5a 69 ring_cnt_t pc_cmd_buf; // 通信用コマンドバッファ
harada_jpms 1:d2ebf1c3ae5a 70
harada_jpms 1:d2ebf1c3ae5a 71 ring_cnt_t ble_uart_buf; // 通信用リングバッファ
harada_jpms 1:d2ebf1c3ae5a 72 ring_cnt_t ble_cmd_buf; // 通信用コマンドバッファ
harada_jpms 1:d2ebf1c3ae5a 73
harada_jpms 1:d2ebf1c3ae5a 74 int timer_cnt;
harada_jpms 1:d2ebf1c3ae5a 75 int timer_cnt_d;
harada_jpms 5:3ba4c087853b 76 int read_cnt = 0;
harada_jpms 5:3ba4c087853b 77
harada_jpms 5:3ba4c087853b 78 bool start_flag = false;
harada_jpms 1:d2ebf1c3ae5a 79
harada_jpms 0:ad0d1afb4462 80 // Function prototypes --------------------------------------------------------
harada_jpms 0:ad0d1afb4462 81 // BLE
harada_jpms 0:ad0d1afb4462 82 void advertisementCallback(const Gap::AdvertisementCallbackParams_t *);
harada_jpms 0:ad0d1afb4462 83 void serviceDiscoveryCallback(const DiscoveredService *);
harada_jpms 0:ad0d1afb4462 84 void characteristicDiscoveryCallback(const DiscoveredCharacteristic *);
harada_jpms 0:ad0d1afb4462 85 void discoveryTerminationCallback(Gap::Handle_t );
harada_jpms 0:ad0d1afb4462 86 void onReceivedDataFromDeviceCallback(const GattHVXCallbackParams *);
harada_jpms 0:ad0d1afb4462 87 void connectionCallback(const Gap::ConnectionCallbackParams_t *);
harada_jpms 0:ad0d1afb4462 88 void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *);
harada_jpms 0:ad0d1afb4462 89 // Pre-check
harada_jpms 0:ad0d1afb4462 90 bool mac_equals(const Gap::Address_t, const Gap::Address_t);
harada_jpms 0:ad0d1afb4462 91 int get_board_index(const Gap::Address_t);
harada_jpms 0:ad0d1afb4462 92
harada_jpms 1:d2ebf1c3ae5a 93 void uart_init();
harada_jpms 1:d2ebf1c3ae5a 94 void main_timer_proc();
harada_jpms 1:d2ebf1c3ae5a 95 unsigned int atow(char *str,unsigned short leng);
harada_jpms 1:d2ebf1c3ae5a 96 unsigned long atoh(char *str,unsigned short leng);
harada_jpms 1:d2ebf1c3ae5a 97 void ble_rs232c_cmd();
harada_jpms 4:1920e4a63bde 98 void pc_rx();
harada_jpms 1:d2ebf1c3ae5a 99 void pc_rs232c_cmd();
harada_jpms 1:d2ebf1c3ae5a 100 void ble_write(char* dat);
harada_jpms 1:d2ebf1c3ae5a 101
harada_jpms 5:3ba4c087853b 102 void led_p( int n )
harada_jpms 5:3ba4c087853b 103 {
harada_jpms 5:3ba4c087853b 104 for( int i=0; i<n; i++ )
harada_jpms 5:3ba4c087853b 105 {
harada_jpms 5:3ba4c087853b 106 led = 1;
harada_jpms 5:3ba4c087853b 107 led = 0;
harada_jpms 5:3ba4c087853b 108 }
harada_jpms 5:3ba4c087853b 109
harada_jpms 5:3ba4c087853b 110 led = 0;
harada_jpms 5:3ba4c087853b 111 led = 0;
harada_jpms 5:3ba4c087853b 112 }
harada_jpms 5:3ba4c087853b 113
harada_jpms 0:ad0d1afb4462 114 //------------------------------------------------------------------------------
harada_jpms 0:ad0d1afb4462 115 // Control Program
harada_jpms 0:ad0d1afb4462 116 //------------------------------------------------------------------------------
harada_jpms 0:ad0d1afb4462 117 int main(void)
harada_jpms 0:ad0d1afb4462 118 {
harada_jpms 1:d2ebf1c3ae5a 119 uart_init();
harada_jpms 4:1920e4a63bde 120
harada_jpms 5:3ba4c087853b 121 //NVIC_SetPriority(UART0_IRQn,1);
harada_jpms 5:3ba4c087853b 122 //NVIC_SetPriority(RADIO_IRQn,1);
harada_jpms 5:3ba4c087853b 123 //NVIC_SetPriority(TIMER0_IRQn,1);
harada_jpms 5:3ba4c087853b 124 //NVIC_SetPriority(TIMER1_IRQn,1);
harada_jpms 5:3ba4c087853b 125 //NVIC_SetPriority(TIMER2_IRQn,1);
harada_jpms 5:3ba4c087853b 126
harada_jpms 5:3ba4c087853b 127 //pc.attach( pc_rx, Serial::RxIrq );
harada_jpms 1:d2ebf1c3ae5a 128
harada_jpms 1:d2ebf1c3ae5a 129 // メインタイマー設定(1ms)
harada_jpms 5:3ba4c087853b 130 //main_timer.attach(&main_timer_proc, 0.001);
harada_jpms 5:3ba4c087853b 131
harada_jpms 0:ad0d1afb4462 132 // opening message
harada_jpms 5:3ba4c087853b 133 //pc.printf("UART Communication / Client(Central) side\r\n");
harada_jpms 5:3ba4c087853b 134 //pc.printf(" need Server module (run BLE_Uart_Server program)\r\n");
harada_jpms 0:ad0d1afb4462 135 // Mixed role **************************************************************
harada_jpms 0:ad0d1afb4462 136 ble_uart.init();
harada_jpms 0:ad0d1afb4462 137 ble_uart.gap().onConnection(connectionCallback);
harada_jpms 0:ad0d1afb4462 138 ble_uart.gap().onDisconnection(disconnectionCallback);
harada_jpms 0:ad0d1afb4462 139 // Client(Central) role ****************************************************
harada_jpms 0:ad0d1afb4462 140 ble_uart.gattClient().onHVX(onReceivedDataFromDeviceCallback);
harada_jpms 0:ad0d1afb4462 141 ble_uart.gap().setScanParams(500, 450);
harada_jpms 3:455575531b33 142 //ble_uart.gap().startScan(advertisementCallback);
harada_jpms 4:1920e4a63bde 143
harada_jpms 5:3ba4c087853b 144 // WatchdogTimer wdt( 3 );
harada_jpms 5:3ba4c087853b 145
harada_jpms 5:3ba4c087853b 146 uint32_t res = sd_ble_gap_tx_power_set( 4 );
harada_jpms 5:3ba4c087853b 147
harada_jpms 5:3ba4c087853b 148 //pc.printf( "tx_power_set_res = %d\r", res );
harada_jpms 5:3ba4c087853b 149
harada_jpms 5:3ba4c087853b 150 int cnt = 0;
harada_jpms 5:3ba4c087853b 151
harada_jpms 5:3ba4c087853b 152 Timer tt;
harada_jpms 5:3ba4c087853b 153 int msec;
harada_jpms 4:1920e4a63bde 154
harada_jpms 5:3ba4c087853b 155 connect_check = 0;
harada_jpms 5:3ba4c087853b 156 start_flag = false;
harada_jpms 5:3ba4c087853b 157
harada_jpms 5:3ba4c087853b 158 int wait_cnt = 0;
harada_jpms 5:3ba4c087853b 159
harada_jpms 3:455575531b33 160 while(true)
harada_jpms 5:3ba4c087853b 161 {
harada_jpms 5:3ba4c087853b 162 // wdt.kick();
harada_jpms 5:3ba4c087853b 163
harada_jpms 5:3ba4c087853b 164 //led = !led;
harada_jpms 5:3ba4c087853b 165
harada_jpms 0:ad0d1afb4462 166 // allow notifications from Server(Peripheral)
harada_jpms 0:ad0d1afb4462 167 if (foundUartRXCharacteristic &&
harada_jpms 0:ad0d1afb4462 168 !ble_uart.gattClient().isServiceDiscoveryActive()) {
harada_jpms 5:3ba4c087853b 169
harada_jpms 5:3ba4c087853b 170 //pc.printf("--allow notifications-S\r");
harada_jpms 0:ad0d1afb4462 171 // need to do the following only once
harada_jpms 0:ad0d1afb4462 172 foundUartRXCharacteristic = false;
harada_jpms 0:ad0d1afb4462 173 uint16_t value = BLE_HVX_NOTIFICATION;
harada_jpms 0:ad0d1afb4462 174 ble_uart.gattClient().write(
harada_jpms 0:ad0d1afb4462 175 GattClient::GATT_OP_WRITE_REQ,
harada_jpms 0:ad0d1afb4462 176 connectionHandle,
harada_jpms 0:ad0d1afb4462 177 uartRXCharacteristic.getValueHandle() + 1,
harada_jpms 0:ad0d1afb4462 178 sizeof(uint16_t),
harada_jpms 0:ad0d1afb4462 179 reinterpret_cast<const uint8_t *>(&value)
harada_jpms 0:ad0d1afb4462 180 );
harada_jpms 5:3ba4c087853b 181 //led_p(6);
harada_jpms 5:3ba4c087853b 182 //pc.printf( "notifications\r" );
harada_jpms 5:3ba4c087853b 183 //pc.printf("--allow notifications-E\r");
harada_jpms 5:3ba4c087853b 184
harada_jpms 5:3ba4c087853b 185 connected2server = true;
harada_jpms 0:ad0d1afb4462 186 }
harada_jpms 1:d2ebf1c3ae5a 187
harada_jpms 5:3ba4c087853b 188 // タイマーカウント更新時(10ms以上経過している)
harada_jpms 5:3ba4c087853b 189 //if( timer_cnt != timer_cnt_d )
harada_jpms 5:3ba4c087853b 190 //{
harada_jpms 5:3ba4c087853b 191 //timer_cnt_d = timer_cnt;
harada_jpms 5:3ba4c087853b 192 //pc.printf("%d\r", cnt);
harada_jpms 5:3ba4c087853b 193 #if 0
harada_jpms 5:3ba4c087853b 194 //if( connected2server == true )
harada_jpms 5:3ba4c087853b 195 //{
harada_jpms 5:3ba4c087853b 196 if( ( cnt % 2000 ) == 0 )
harada_jpms 5:3ba4c087853b 197 {
harada_jpms 5:3ba4c087853b 198 int8_t rssi;
harada_jpms 5:3ba4c087853b 199 sd_ble_gap_rssi_get( connectionHandle, &rssi );
harada_jpms 5:3ba4c087853b 200
harada_jpms 5:3ba4c087853b 201 pc.printf( "rssi = %d\r", rssi );
harada_jpms 5:3ba4c087853b 202 }
harada_jpms 5:3ba4c087853b 203 //}
harada_jpms 5:3ba4c087853b 204 #endif
harada_jpms 5:3ba4c087853b 205 if( ( connected2server_d == false ) && ( connected2server == true ) )
harada_jpms 5:3ba4c087853b 206 {
harada_jpms 5:3ba4c087853b 207 connect_check = 1;
harada_jpms 5:3ba4c087853b 208 }
harada_jpms 5:3ba4c087853b 209 else if( ( connected2server_d == true ) && ( connected2server == false ) )
harada_jpms 5:3ba4c087853b 210 {
harada_jpms 5:3ba4c087853b 211 state = connected2server;
harada_jpms 5:3ba4c087853b 212 connect_check = 0;
harada_jpms 5:3ba4c087853b 213 }
harada_jpms 5:3ba4c087853b 214
harada_jpms 5:3ba4c087853b 215 connected2server_d = connected2server;
harada_jpms 3:455575531b33 216
harada_jpms 5:3ba4c087853b 217 if( connect_check == 1 )
harada_jpms 5:3ba4c087853b 218 {
harada_jpms 5:3ba4c087853b 219 tt.stop();
harada_jpms 5:3ba4c087853b 220 tt.reset();
harada_jpms 5:3ba4c087853b 221 tt.start();
harada_jpms 5:3ba4c087853b 222
harada_jpms 5:3ba4c087853b 223 ble_write( "STOP\r" );
harada_jpms 5:3ba4c087853b 224 connect_check = 2;
harada_jpms 5:3ba4c087853b 225 }
harada_jpms 5:3ba4c087853b 226 else if( connect_check == 2 )
harada_jpms 5:3ba4c087853b 227 {
harada_jpms 5:3ba4c087853b 228 msec = tt.read_ms();
harada_jpms 4:1920e4a63bde 229
harada_jpms 5:3ba4c087853b 230 if( msec >= 500 )
harada_jpms 5:3ba4c087853b 231 {
harada_jpms 5:3ba4c087853b 232 connect_check = 1;
harada_jpms 5:3ba4c087853b 233 }
harada_jpms 5:3ba4c087853b 234 }
harada_jpms 5:3ba4c087853b 235 else if( connect_check == 3 )
harada_jpms 5:3ba4c087853b 236 {
harada_jpms 5:3ba4c087853b 237 msec = tt.read_ms();
harada_jpms 5:3ba4c087853b 238
harada_jpms 5:3ba4c087853b 239 if( msec >= 500 )
harada_jpms 5:3ba4c087853b 240 {
harada_jpms 5:3ba4c087853b 241 connect_check = 0;
harada_jpms 5:3ba4c087853b 242
harada_jpms 5:3ba4c087853b 243 state = connected2server;
harada_jpms 5:3ba4c087853b 244 }
harada_jpms 5:3ba4c087853b 245 }
harada_jpms 5:3ba4c087853b 246
harada_jpms 5:3ba4c087853b 247 ble_rs232c_cmd();
harada_jpms 5:3ba4c087853b 248
harada_jpms 5:3ba4c087853b 249 pc_rs232c_cmd();
harada_jpms 5:3ba4c087853b 250
harada_jpms 4:1920e4a63bde 251 cnt++;
harada_jpms 4:1920e4a63bde 252
harada_jpms 5:3ba4c087853b 253 //led = ( cnt >> 8 ) & 0x0001;
harada_jpms 5:3ba4c087853b 254
harada_jpms 5:3ba4c087853b 255 //led = !led;
harada_jpms 5:3ba4c087853b 256
harada_jpms 5:3ba4c087853b 257 //wait(0.002);
harada_jpms 5:3ba4c087853b 258 //}
harada_jpms 0:ad0d1afb4462 259
harada_jpms 0:ad0d1afb4462 260 ble_uart.waitForEvent();
harada_jpms 5:3ba4c087853b 261
harada_jpms 0:ad0d1afb4462 262 }
harada_jpms 0:ad0d1afb4462 263 }
harada_jpms 0:ad0d1afb4462 264
harada_jpms 0:ad0d1afb4462 265 void onReceivedDataFromDeviceCallback(const GattHVXCallbackParams *params)
harada_jpms 0:ad0d1afb4462 266 {
harada_jpms 5:3ba4c087853b 267 //pc.printf("onReceivedDataFromDeviceCallback\r");
harada_jpms 5:3ba4c087853b 268
harada_jpms 0:ad0d1afb4462 269 if (params->type == BLE_HVX_NOTIFICATION) {
harada_jpms 0:ad0d1afb4462 270 if ((params->handle
harada_jpms 0:ad0d1afb4462 271 == uartRXCharacteristic.getValueHandle()) && (params->len > 0)) {
harada_jpms 5:3ba4c087853b 272
harada_jpms 5:3ba4c087853b 273 if( params->len <= BFSIZE )
harada_jpms 5:3ba4c087853b 274 {
harada_jpms 5:3ba4c087853b 275 uart_bf_len = params->len;
harada_jpms 5:3ba4c087853b 276
harada_jpms 5:3ba4c087853b 277 //strcpy((char *)uart_buffer, (char *)params->data);
harada_jpms 5:3ba4c087853b 278 memcpy((char *)uart_buffer, (char *)params->data, uart_bf_len );
harada_jpms 5:3ba4c087853b 279 received_uart_dat = true;
harada_jpms 2:a88b0b4c4f37 280
harada_jpms 5:3ba4c087853b 281 //ble_rs232c_cmd();
harada_jpms 5:3ba4c087853b 282
harada_jpms 5:3ba4c087853b 283 for( int i=0; i<uart_bf_len; i++ )
harada_jpms 5:3ba4c087853b 284 {
harada_jpms 5:3ba4c087853b 285 //pc.putc(uart_buffer[i]);
harada_jpms 5:3ba4c087853b 286 ble_uart_buf.buf[ ble_uart_buf.wp ] = uart_buffer[i];
harada_jpms 5:3ba4c087853b 287 ble_uart_buf.data_cnt++;
harada_jpms 5:3ba4c087853b 288
harada_jpms 5:3ba4c087853b 289 if( ble_uart_buf.wp == SIO_BUF_SIZE-1 )
harada_jpms 5:3ba4c087853b 290 {
harada_jpms 5:3ba4c087853b 291 ble_uart_buf.wp = 0;
harada_jpms 5:3ba4c087853b 292 }
harada_jpms 5:3ba4c087853b 293 else
harada_jpms 5:3ba4c087853b 294 {
harada_jpms 5:3ba4c087853b 295 ble_uart_buf.wp++;
harada_jpms 5:3ba4c087853b 296 }
harada_jpms 5:3ba4c087853b 297 }
harada_jpms 5:3ba4c087853b 298 uart_bf_len = 0;
harada_jpms 5:3ba4c087853b 299 }
harada_jpms 5:3ba4c087853b 300 else
harada_jpms 5:3ba4c087853b 301 {
harada_jpms 5:3ba4c087853b 302
harada_jpms 5:3ba4c087853b 303 }
harada_jpms 0:ad0d1afb4462 304 }
harada_jpms 0:ad0d1afb4462 305 }
harada_jpms 0:ad0d1afb4462 306 }
harada_jpms 0:ad0d1afb4462 307
harada_jpms 0:ad0d1afb4462 308 bool mac_equals(const Gap::Address_t mac_1, const Gap::Address_t mac_2)
harada_jpms 0:ad0d1afb4462 309 {
harada_jpms 0:ad0d1afb4462 310 for (int i = 0; i < 6; i++) {
harada_jpms 0:ad0d1afb4462 311
harada_jpms 0:ad0d1afb4462 312 }
harada_jpms 0:ad0d1afb4462 313
harada_jpms 0:ad0d1afb4462 314 for (int i = 0; i < 6; i++) {
harada_jpms 0:ad0d1afb4462 315 if (mac_1[i] != mac_2[i]) {
harada_jpms 0:ad0d1afb4462 316 return false;
harada_jpms 0:ad0d1afb4462 317 } else {
harada_jpms 0:ad0d1afb4462 318 }
harada_jpms 0:ad0d1afb4462 319 }
harada_jpms 0:ad0d1afb4462 320 return true;
harada_jpms 0:ad0d1afb4462 321 }
harada_jpms 0:ad0d1afb4462 322
harada_jpms 0:ad0d1afb4462 323 int get_board_index(const Gap::Address_t mac)
harada_jpms 0:ad0d1afb4462 324 {
harada_jpms 0:ad0d1afb4462 325 if (mac_equals(mac, mac_board_0)) {
harada_jpms 0:ad0d1afb4462 326 return 0;
harada_jpms 0:ad0d1afb4462 327 }
harada_jpms 0:ad0d1afb4462 328 #if 0
harada_jpms 0:ad0d1afb4462 329 if (mac_equals(mac, mac_board_1)) {
harada_jpms 0:ad0d1afb4462 330 return 1;
harada_jpms 0:ad0d1afb4462 331 }
harada_jpms 0:ad0d1afb4462 332 if (mac_equals(mac, mac_board_2)) {
harada_jpms 0:ad0d1afb4462 333 return 2;
harada_jpms 0:ad0d1afb4462 334 }
harada_jpms 0:ad0d1afb4462 335 if (mac_equals(mac, mac_board_3)) {
harada_jpms 0:ad0d1afb4462 336 return 3;
harada_jpms 0:ad0d1afb4462 337 }
harada_jpms 0:ad0d1afb4462 338 if (mac_equals(mac, mac_board_4)) {
harada_jpms 0:ad0d1afb4462 339 return 4;
harada_jpms 0:ad0d1afb4462 340 }
harada_jpms 0:ad0d1afb4462 341 #endif
harada_jpms 0:ad0d1afb4462 342 return -1;
harada_jpms 0:ad0d1afb4462 343 }
harada_jpms 0:ad0d1afb4462 344
harada_jpms 0:ad0d1afb4462 345 // Client(Central) role ********************************************************
harada_jpms 0:ad0d1afb4462 346 void advertisementCallback(const Gap::AdvertisementCallbackParams_t *params)
harada_jpms 0:ad0d1afb4462 347 {
harada_jpms 0:ad0d1afb4462 348 // connections
harada_jpms 0:ad0d1afb4462 349 int peer_board_index = get_board_index(params->peerAddr);
harada_jpms 0:ad0d1afb4462 350 if (peer_board_index != -1) {
harada_jpms 5:3ba4c087853b 351 //pc.printf("");
harada_jpms 5:3ba4c087853b 352 //pc.printf(
harada_jpms 5:3ba4c087853b 353 // "adv peerAddr [%02x %02x %02x %02x %02x %02x]\r\n",
harada_jpms 5:3ba4c087853b 354 // params->peerAddr[5], params->peerAddr[4], params->peerAddr[3],
harada_jpms 5:3ba4c087853b 355 // params->peerAddr[2], params->peerAddr[1], params->peerAddr[0]
harada_jpms 5:3ba4c087853b 356 //);
harada_jpms 5:3ba4c087853b 357 //pc.printf(
harada_jpms 5:3ba4c087853b 358 // "rssi=%+4d, isScanResponse %u, AdvertisementType %u\r\n",
harada_jpms 5:3ba4c087853b 359 // params->rssi, params->isScanResponse, params->type
harada_jpms 5:3ba4c087853b 360 //);
harada_jpms 0:ad0d1afb4462 361 ble_uart.gap().connect(
harada_jpms 0:ad0d1afb4462 362 params->peerAddr, Gap::ADDR_TYPE_RANDOM_STATIC, NULL, NULL);
harada_jpms 0:ad0d1afb4462 363 }
harada_jpms 0:ad0d1afb4462 364 }
harada_jpms 0:ad0d1afb4462 365
harada_jpms 0:ad0d1afb4462 366 void serviceDiscoveryCallback(const DiscoveredService *service)
harada_jpms 0:ad0d1afb4462 367 {
harada_jpms 5:3ba4c087853b 368 //pc.printf("serviceDiscoveryCallback\r");
harada_jpms 5:3ba4c087853b 369
harada_jpms 0:ad0d1afb4462 370 if (service->getUUID().shortOrLong() == UUID::UUID_TYPE_SHORT) {
harada_jpms 0:ad0d1afb4462 371
harada_jpms 0:ad0d1afb4462 372 } else {
harada_jpms 0:ad0d1afb4462 373 const uint8_t *longUUIDBytes = service->getUUID().getBaseUUID();
harada_jpms 0:ad0d1afb4462 374 for (unsigned i = 0; i < UUID::LENGTH_OF_LONG_UUID; i++) {
harada_jpms 0:ad0d1afb4462 375
harada_jpms 0:ad0d1afb4462 376 }
harada_jpms 0:ad0d1afb4462 377 }
harada_jpms 5:3ba4c087853b 378
harada_jpms 5:3ba4c087853b 379 //pc.printf("--serviceDiscoveryCallback\r");
harada_jpms 0:ad0d1afb4462 380 }
harada_jpms 0:ad0d1afb4462 381
harada_jpms 0:ad0d1afb4462 382 void characteristicDiscoveryCallback(
harada_jpms 0:ad0d1afb4462 383 const DiscoveredCharacteristic *characteristicP)
harada_jpms 5:3ba4c087853b 384 {
harada_jpms 0:ad0d1afb4462 385 if (characteristicP->getUUID().getShortUUID()
harada_jpms 0:ad0d1afb4462 386 == UARTServiceTXCharacteristicShortUUID) {
harada_jpms 0:ad0d1afb4462 387 uartTXCharacteristic = *characteristicP;
harada_jpms 0:ad0d1afb4462 388 connection_tx = true;
harada_jpms 5:3ba4c087853b 389 //led_p(4);
harada_jpms 5:3ba4c087853b 390 //pc.printf( "connection_tx\r" );
harada_jpms 5:3ba4c087853b 391 //pc.printf("--connection_tx = true\r");
harada_jpms 0:ad0d1afb4462 392 } else if (characteristicP->getUUID().getShortUUID()
harada_jpms 0:ad0d1afb4462 393 == UARTServiceRXCharacteristicShortUUID) {
harada_jpms 0:ad0d1afb4462 394 uartRXCharacteristic = *characteristicP;
harada_jpms 0:ad0d1afb4462 395 foundUartRXCharacteristic = true;
harada_jpms 0:ad0d1afb4462 396 connection_rx = true;
harada_jpms 5:3ba4c087853b 397 //led_p(5);
harada_jpms 5:3ba4c087853b 398 //pc.printf( "connection_rx\r" );
harada_jpms 5:3ba4c087853b 399 //pc.printf("--connection_rx = true\r");
harada_jpms 0:ad0d1afb4462 400 }
harada_jpms 0:ad0d1afb4462 401 }
harada_jpms 0:ad0d1afb4462 402
harada_jpms 0:ad0d1afb4462 403 void discoveryTerminationCallback(Gap::Handle_t connectionHandle)
harada_jpms 0:ad0d1afb4462 404 {
harada_jpms 5:3ba4c087853b 405 //pc.printf("discoveryTerminationCallback\r");
harada_jpms 0:ad0d1afb4462 406 }
harada_jpms 0:ad0d1afb4462 407
harada_jpms 0:ad0d1afb4462 408 // Mixed role ******************************************************************
harada_jpms 0:ad0d1afb4462 409 void connectionCallback(const Gap::ConnectionCallbackParams_t *params)
harada_jpms 0:ad0d1afb4462 410 {
harada_jpms 0:ad0d1afb4462 411 if (params->role == Gap::CENTRAL) {
harada_jpms 5:3ba4c087853b 412
harada_jpms 5:3ba4c087853b 413 //pc.printf( "connected\r" );
harada_jpms 5:3ba4c087853b 414 //pc.printf("connected as Client(Central) (handle = %d)\r\n\r",
harada_jpms 5:3ba4c087853b 415 // params->handle);
harada_jpms 5:3ba4c087853b 416 //connected2server = true;
harada_jpms 0:ad0d1afb4462 417 connectionHandle = params->handle;
harada_jpms 0:ad0d1afb4462 418 ble_uart.gattClient().onServiceDiscoveryTermination(
harada_jpms 0:ad0d1afb4462 419 discoveryTerminationCallback);
harada_jpms 0:ad0d1afb4462 420 ble_uart.gattClient().launchServiceDiscovery(
harada_jpms 0:ad0d1afb4462 421 params->handle,
harada_jpms 0:ad0d1afb4462 422 serviceDiscoveryCallback,
harada_jpms 0:ad0d1afb4462 423 characteristicDiscoveryCallback
harada_jpms 0:ad0d1afb4462 424 );
harada_jpms 0:ad0d1afb4462 425 }
harada_jpms 5:3ba4c087853b 426 //pc.printf(
harada_jpms 5:3ba4c087853b 427 // "Client(Central/Myself) %02x:%02x:%02x:%02x:%02x:%02x\r\n",
harada_jpms 5:3ba4c087853b 428 // params->ownAddr[5], params->ownAddr[4], params->ownAddr[3],
harada_jpms 5:3ba4c087853b 429 // params->ownAddr[2], params->ownAddr[1], params->ownAddr[0]
harada_jpms 5:3ba4c087853b 430 //);
harada_jpms 5:3ba4c087853b 431 //pc.printf(
harada_jpms 5:3ba4c087853b 432 // "Connected Server(Peripheral) %02x:%02x:%02x:%02x:%02x:%02x\r\n",
harada_jpms 5:3ba4c087853b 433 // params->peerAddr[5], params->peerAddr[4], params->peerAddr[3],
harada_jpms 5:3ba4c087853b 434 // params->peerAddr[2], params->peerAddr[1], params->peerAddr[0]
harada_jpms 5:3ba4c087853b 435 //);
harada_jpms 5:3ba4c087853b 436
harada_jpms 5:3ba4c087853b 437 //led_p(3);
harada_jpms 5:3ba4c087853b 438
harada_jpms 5:3ba4c087853b 439 uint32_t res = sd_ble_gap_rssi_start( connectionHandle, 0, 0 );
harada_jpms 5:3ba4c087853b 440
harada_jpms 5:3ba4c087853b 441 //pc.printf( "rssi_start_res = %d\r", res );
harada_jpms 0:ad0d1afb4462 442 }
harada_jpms 0:ad0d1afb4462 443
harada_jpms 5:3ba4c087853b 444
harada_jpms 0:ad0d1afb4462 445 void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params)
harada_jpms 0:ad0d1afb4462 446 {
harada_jpms 5:3ba4c087853b 447 //pc.printf( "disconnected\r" );
harada_jpms 5:3ba4c087853b 448 //pc.printf(" -> disconnected\r\n", params->handle);
harada_jpms 0:ad0d1afb4462 449 connected2server = false;
harada_jpms 0:ad0d1afb4462 450 // connection_1st = false;
harada_jpms 0:ad0d1afb4462 451 connection_tx = false;
harada_jpms 0:ad0d1afb4462 452 connection_rx = false;
harada_jpms 3:455575531b33 453
harada_jpms 3:455575531b33 454 #if 0
harada_jpms 0:ad0d1afb4462 455 if (params->handle == SOFT_DEVICE_FATHER_HANDLE) {
harada_jpms 0:ad0d1afb4462 456 ble_uart.startAdvertising(); // restart advertising
harada_jpms 0:ad0d1afb4462 457 } else {
harada_jpms 0:ad0d1afb4462 458 ble_uart.gap().startScan(advertisementCallback);// restart scan
harada_jpms 0:ad0d1afb4462 459 }
harada_jpms 3:455575531b33 460 #endif
harada_jpms 0:ad0d1afb4462 461 }
harada_jpms 1:d2ebf1c3ae5a 462
harada_jpms 1:d2ebf1c3ae5a 463 /****************************************************************************/
harada_jpms 1:d2ebf1c3ae5a 464 /* 関数名 : uart_init */
harada_jpms 1:d2ebf1c3ae5a 465 /* 概要 : 通信初期化 */
harada_jpms 1:d2ebf1c3ae5a 466 /* 作成者 : JPMS H.Harada */
harada_jpms 1:d2ebf1c3ae5a 467 /* 作成日 : 2017.08.30 */
harada_jpms 1:d2ebf1c3ae5a 468 /****************************************************************************/
harada_jpms 1:d2ebf1c3ae5a 469 void uart_init()
harada_jpms 1:d2ebf1c3ae5a 470 {
harada_jpms 1:d2ebf1c3ae5a 471 int k;
harada_jpms 1:d2ebf1c3ae5a 472
harada_jpms 1:d2ebf1c3ae5a 473 // 初期化時のごみを出力
harada_jpms 4:1920e4a63bde 474 // while( pc.readable() )
harada_jpms 4:1920e4a63bde 475 // {
harada_jpms 4:1920e4a63bde 476 // pc.getc();
harada_jpms 4:1920e4a63bde 477 // }
harada_jpms 1:d2ebf1c3ae5a 478
harada_jpms 1:d2ebf1c3ae5a 479 // UART バッファ初期化 ///////////////////////////////////////////////
harada_jpms 1:d2ebf1c3ae5a 480 pc_uart_buf.data_cnt = 0;
harada_jpms 1:d2ebf1c3ae5a 481 pc_uart_buf.rp = 0;
harada_jpms 1:d2ebf1c3ae5a 482 pc_uart_buf.wp = 0;
harada_jpms 1:d2ebf1c3ae5a 483
harada_jpms 1:d2ebf1c3ae5a 484 ble_uart_buf.data_cnt = 0;
harada_jpms 1:d2ebf1c3ae5a 485 ble_uart_buf.rp = 0;
harada_jpms 1:d2ebf1c3ae5a 486 ble_uart_buf.wp = 0;
harada_jpms 1:d2ebf1c3ae5a 487
harada_jpms 1:d2ebf1c3ae5a 488 for(k=0;k<SIO_BUF_SIZE;k++) {
harada_jpms 1:d2ebf1c3ae5a 489 pc_uart_buf.buf[k] = 0;
harada_jpms 1:d2ebf1c3ae5a 490 ble_uart_buf.buf[k] = 0;
harada_jpms 1:d2ebf1c3ae5a 491 }
harada_jpms 1:d2ebf1c3ae5a 492
harada_jpms 1:d2ebf1c3ae5a 493 // コマンド バッファ初期化 ///////////////////////////////////////////////
harada_jpms 1:d2ebf1c3ae5a 494 pc_cmd_buf.data_cnt = 0;
harada_jpms 1:d2ebf1c3ae5a 495 pc_cmd_buf.rp = 0;
harada_jpms 1:d2ebf1c3ae5a 496 pc_cmd_buf.wp = 0;
harada_jpms 1:d2ebf1c3ae5a 497
harada_jpms 1:d2ebf1c3ae5a 498 ble_cmd_buf.data_cnt = 0;
harada_jpms 1:d2ebf1c3ae5a 499 ble_cmd_buf.rp = 0;
harada_jpms 1:d2ebf1c3ae5a 500 ble_cmd_buf.wp = 0;
harada_jpms 1:d2ebf1c3ae5a 501
harada_jpms 1:d2ebf1c3ae5a 502 for(k=0;k<SIO_BUF_SIZE;k++) {
harada_jpms 1:d2ebf1c3ae5a 503 pc_cmd_buf.buf[k] = 0;
harada_jpms 1:d2ebf1c3ae5a 504 ble_cmd_buf.buf[k] = 0;
harada_jpms 1:d2ebf1c3ae5a 505 }
harada_jpms 1:d2ebf1c3ae5a 506
harada_jpms 1:d2ebf1c3ae5a 507 /////////////////////////////////////////////////////////////////
harada_jpms 1:d2ebf1c3ae5a 508 }
harada_jpms 1:d2ebf1c3ae5a 509
harada_jpms 1:d2ebf1c3ae5a 510 /****************************************************************************/
harada_jpms 1:d2ebf1c3ae5a 511 /* 関数名 : main_timer_proc */
harada_jpms 2:a88b0b4c4f37 512 /* 概要 : メインタイマ処理 */
harada_jpms 1:d2ebf1c3ae5a 513 /* 作成者 : JPMS H.Harada */
harada_jpms 1:d2ebf1c3ae5a 514 /* 作成日 : 2018.02.22 */
harada_jpms 1:d2ebf1c3ae5a 515 /****************************************************************************/
harada_jpms 1:d2ebf1c3ae5a 516 void main_timer_proc()
harada_jpms 1:d2ebf1c3ae5a 517 {
harada_jpms 5:3ba4c087853b 518
harada_jpms 1:d2ebf1c3ae5a 519 timer_cnt++; // タイマカウントを加算
harada_jpms 5:3ba4c087853b 520
harada_jpms 1:d2ebf1c3ae5a 521 }
harada_jpms 1:d2ebf1c3ae5a 522
harada_jpms 1:d2ebf1c3ae5a 523 /****************************************************************************/
harada_jpms 2:a88b0b4c4f37 524 /* 関数名 : atow */
harada_jpms 2:a88b0b4c4f37 525 /* 概要 : アスキー変換処理 */
harada_jpms 2:a88b0b4c4f37 526 /* 作成者 : JPMS H.Harada */
harada_jpms 2:a88b0b4c4f37 527 /* 作成日 : 2017.08.30 */
harada_jpms 1:d2ebf1c3ae5a 528 /****************************************************************************/
harada_jpms 1:d2ebf1c3ae5a 529 unsigned int atow(char *str,unsigned short leng)
harada_jpms 1:d2ebf1c3ae5a 530 {
harada_jpms 1:d2ebf1c3ae5a 531 register unsigned short i;
harada_jpms 1:d2ebf1c3ae5a 532 unsigned int ret_data = 0;
harada_jpms 1:d2ebf1c3ae5a 533
harada_jpms 1:d2ebf1c3ae5a 534 /*---------------- データー長エラー -----------------*/
harada_jpms 1:d2ebf1c3ae5a 535 // if(leng >= 11)
harada_jpms 1:d2ebf1c3ae5a 536 // {
harada_jpms 1:d2ebf1c3ae5a 537 // ret_data = ATOW_ERROR; /* データエラー */
harada_jpms 1:d2ebf1c3ae5a 538 // }
harada_jpms 1:d2ebf1c3ae5a 539 /*---------------- データー長 OK ------------------*/
harada_jpms 1:d2ebf1c3ae5a 540 // else
harada_jpms 1:d2ebf1c3ae5a 541 // {
harada_jpms 1:d2ebf1c3ae5a 542 i = leng;
harada_jpms 1:d2ebf1c3ae5a 543
harada_jpms 1:d2ebf1c3ae5a 544 while(i)
harada_jpms 1:d2ebf1c3ae5a 545 {
harada_jpms 1:d2ebf1c3ae5a 546 ret_data *= 10; /* 10倍 */
harada_jpms 1:d2ebf1c3ae5a 547
harada_jpms 1:d2ebf1c3ae5a 548 /*------ データ '0' ~ '9' 範囲内 -----*/
harada_jpms 1:d2ebf1c3ae5a 549 if( (*str >= '0') && (*str <= '9') )
harada_jpms 1:d2ebf1c3ae5a 550 {
harada_jpms 1:d2ebf1c3ae5a 551 ret_data += (*str) - '0';
harada_jpms 1:d2ebf1c3ae5a 552 str++;
harada_jpms 1:d2ebf1c3ae5a 553 }
harada_jpms 1:d2ebf1c3ae5a 554 /*------ データ '0' ~ '9' 範囲外 -----*/
harada_jpms 1:d2ebf1c3ae5a 555 else
harada_jpms 1:d2ebf1c3ae5a 556 {
harada_jpms 1:d2ebf1c3ae5a 557 // ret_data = ATOW_ERROR; /* データエラー */
harada_jpms 1:d2ebf1c3ae5a 558 break;
harada_jpms 1:d2ebf1c3ae5a 559 }
harada_jpms 1:d2ebf1c3ae5a 560 i--;
harada_jpms 1:d2ebf1c3ae5a 561 }
harada_jpms 1:d2ebf1c3ae5a 562 /*-------------- データオバーフロー ----------*/
harada_jpms 1:d2ebf1c3ae5a 563 // if(ret_data & 0x8000)
harada_jpms 1:d2ebf1c3ae5a 564 // {
harada_jpms 1:d2ebf1c3ae5a 565 // ret_data = ATOW_ERROR; /* データエラー */
harada_jpms 1:d2ebf1c3ae5a 566 // }
harada_jpms 1:d2ebf1c3ae5a 567 // }
harada_jpms 1:d2ebf1c3ae5a 568 return(ret_data);
harada_jpms 1:d2ebf1c3ae5a 569 }
harada_jpms 1:d2ebf1c3ae5a 570
harada_jpms 1:d2ebf1c3ae5a 571 /****************************************************************************/
harada_jpms 2:a88b0b4c4f37 572 /* 関数名 : atoh */
harada_jpms 2:a88b0b4c4f37 573 /* 概要 : アスキー変換処理 */
harada_jpms 2:a88b0b4c4f37 574 /* 作成者 : JPMS H.Harada */
harada_jpms 2:a88b0b4c4f37 575 /* 作成日 : 2017.08.30 */
harada_jpms 1:d2ebf1c3ae5a 576 /****************************************************************************/
harada_jpms 1:d2ebf1c3ae5a 577 unsigned long atoh(char *str,unsigned short leng)
harada_jpms 1:d2ebf1c3ae5a 578 {
harada_jpms 1:d2ebf1c3ae5a 579 register unsigned short i;
harada_jpms 1:d2ebf1c3ae5a 580 unsigned long ret_data = 0;
harada_jpms 1:d2ebf1c3ae5a 581
harada_jpms 1:d2ebf1c3ae5a 582 /*---------------- データー長エラー -----------------*/
harada_jpms 1:d2ebf1c3ae5a 583 // if(leng >= 11)
harada_jpms 1:d2ebf1c3ae5a 584 // {
harada_jpms 1:d2ebf1c3ae5a 585 // ret_data = ATOW_ERROR; /* データエラー */
harada_jpms 1:d2ebf1c3ae5a 586 // }
harada_jpms 1:d2ebf1c3ae5a 587 /*---------------- データー長 OK ------------------*/
harada_jpms 1:d2ebf1c3ae5a 588 // else
harada_jpms 1:d2ebf1c3ae5a 589 // {
harada_jpms 1:d2ebf1c3ae5a 590 i = leng;
harada_jpms 1:d2ebf1c3ae5a 591
harada_jpms 1:d2ebf1c3ae5a 592 while(i)
harada_jpms 1:d2ebf1c3ae5a 593 {
harada_jpms 1:d2ebf1c3ae5a 594 ret_data *= 16; /* 16倍 */
harada_jpms 1:d2ebf1c3ae5a 595
harada_jpms 1:d2ebf1c3ae5a 596 /*------ データ '0' ~ '9' 範囲内 -----*/
harada_jpms 1:d2ebf1c3ae5a 597 if( (*str >= '0') && (*str <= '9') )
harada_jpms 1:d2ebf1c3ae5a 598 {
harada_jpms 1:d2ebf1c3ae5a 599 ret_data += (*str) - '0';
harada_jpms 1:d2ebf1c3ae5a 600 str++;
harada_jpms 1:d2ebf1c3ae5a 601 }
harada_jpms 1:d2ebf1c3ae5a 602 /*------ データ 'A' ~ 'F' 範囲内 -----*/
harada_jpms 1:d2ebf1c3ae5a 603 else if( (*str >= 'A') && (*str <= 'F') )
harada_jpms 1:d2ebf1c3ae5a 604 {
harada_jpms 1:d2ebf1c3ae5a 605 ret_data += (*str) - 'A' + 10;
harada_jpms 1:d2ebf1c3ae5a 606 str++;
harada_jpms 1:d2ebf1c3ae5a 607 }
harada_jpms 1:d2ebf1c3ae5a 608 /*------ データ '0' ~ '9' 範囲外 -----*/
harada_jpms 1:d2ebf1c3ae5a 609 else
harada_jpms 1:d2ebf1c3ae5a 610 {
harada_jpms 1:d2ebf1c3ae5a 611 // ret_data = ATOW_ERROR; /* データエラー */
harada_jpms 1:d2ebf1c3ae5a 612 break;
harada_jpms 1:d2ebf1c3ae5a 613 }
harada_jpms 1:d2ebf1c3ae5a 614 i--;
harada_jpms 1:d2ebf1c3ae5a 615 }
harada_jpms 1:d2ebf1c3ae5a 616 /*-------------- データオバーフロー ----------*/
harada_jpms 1:d2ebf1c3ae5a 617 // if(ret_data & 0x8000)
harada_jpms 1:d2ebf1c3ae5a 618 // {
harada_jpms 1:d2ebf1c3ae5a 619 // ret_data = ATOW_ERROR; /* データエラー */
harada_jpms 1:d2ebf1c3ae5a 620 // }
harada_jpms 1:d2ebf1c3ae5a 621 // }
harada_jpms 1:d2ebf1c3ae5a 622 return(ret_data);
harada_jpms 1:d2ebf1c3ae5a 623 }
harada_jpms 1:d2ebf1c3ae5a 624
harada_jpms 5:3ba4c087853b 625 #define CMD_NUM_BLE 19
harada_jpms 5:3ba4c087853b 626
harada_jpms 1:d2ebf1c3ae5a 627 char ble_str[32][10];
harada_jpms 5:3ba4c087853b 628 char ble_str2[CMD_NUM_BLE][8] = { "START ", // 0
harada_jpms 5:3ba4c087853b 629 "STOP ", // 1
harada_jpms 5:3ba4c087853b 630 " ", // 2
harada_jpms 5:3ba4c087853b 631 "ISETL ", // 3
harada_jpms 5:3ba4c087853b 632 "ISETR ", // 4
harada_jpms 5:3ba4c087853b 633 " ", // 5
harada_jpms 5:3ba4c087853b 634 "TC ", // 6
harada_jpms 5:3ba4c087853b 635 "TS ", // 7
harada_jpms 5:3ba4c087853b 636 "IDGET ", // 8
harada_jpms 5:3ba4c087853b 637 "P ", // 9
harada_jpms 5:3ba4c087853b 638 "U ", // 10
harada_jpms 5:3ba4c087853b 639 "RSSI ", // 11
harada_jpms 5:3ba4c087853b 640 "M ", // 12
harada_jpms 5:3ba4c087853b 641 "X ", // 13
harada_jpms 5:3ba4c087853b 642 "PAUSE ", // 14
harada_jpms 5:3ba4c087853b 643 "REG09 ", // 15 Ver12
harada_jpms 5:3ba4c087853b 644 "REG0A ", // 16 Ver12
harada_jpms 5:3ba4c087853b 645 "REG0B ", // 17 Ver12
harada_jpms 5:3ba4c087853b 646 "ICMR "}; // 18 Ver12
harada_jpms 1:d2ebf1c3ae5a 647
harada_jpms 1:d2ebf1c3ae5a 648 /****************************************************************************/
harada_jpms 2:a88b0b4c4f37 649 /* 関数名 : rs232c_cmd */
harada_jpms 3:455575531b33 650 /* 概要 : 通信コマンド処理 */
harada_jpms 2:a88b0b4c4f37 651 /* 作成者 : JPMS H.Harada */
harada_jpms 2:a88b0b4c4f37 652 /* 作成日 : 2017.08.30 */
harada_jpms 1:d2ebf1c3ae5a 653 /****************************************************************************/
harada_jpms 1:d2ebf1c3ae5a 654 void ble_rs232c_cmd()
harada_jpms 1:d2ebf1c3ae5a 655 {
harada_jpms 1:d2ebf1c3ae5a 656 unsigned int c, i, j;
harada_jpms 1:d2ebf1c3ae5a 657 int rdat;
harada_jpms 3:455575531b33 658
harada_jpms 5:3ba4c087853b 659 #if 0
harada_jpms 5:3ba4c087853b 660
harada_jpms 3:455575531b33 661 for( int i=0; i<uart_bf_len; i++ )
harada_jpms 3:455575531b33 662 {
harada_jpms 3:455575531b33 663 //pc.putc(uart_buffer[i]);
harada_jpms 3:455575531b33 664 ble_uart_buf.buf[ ble_uart_buf.wp ] = uart_buffer[i];
harada_jpms 3:455575531b33 665 ble_uart_buf.data_cnt++;
harada_jpms 3:455575531b33 666
harada_jpms 3:455575531b33 667 if( ble_uart_buf.wp == SIO_BUF_SIZE-1 )
harada_jpms 3:455575531b33 668 {
harada_jpms 3:455575531b33 669 ble_uart_buf.wp = 0;
harada_jpms 3:455575531b33 670 }
harada_jpms 3:455575531b33 671 else
harada_jpms 3:455575531b33 672 {
harada_jpms 3:455575531b33 673 ble_uart_buf.wp++;
harada_jpms 3:455575531b33 674 }
harada_jpms 3:455575531b33 675 }
harada_jpms 3:455575531b33 676
harada_jpms 3:455575531b33 677 uart_bf_len = 0;
harada_jpms 5:3ba4c087853b 678
harada_jpms 5:3ba4c087853b 679 #endif
harada_jpms 3:455575531b33 680
harada_jpms 1:d2ebf1c3ae5a 681 if( ble_uart_buf.data_cnt > 0 )
harada_jpms 5:3ba4c087853b 682 {
harada_jpms 1:d2ebf1c3ae5a 683 unsigned int len = ble_uart_buf.data_cnt;
harada_jpms 3:455575531b33 684
harada_jpms 1:d2ebf1c3ae5a 685 for( c=0; c<len; c++ )
harada_jpms 1:d2ebf1c3ae5a 686 {
harada_jpms 5:3ba4c087853b 687 //NVIC_DisableIRQ(RADIO_IRQn); // 割り込み禁止
harada_jpms 5:3ba4c087853b 688
harada_jpms 1:d2ebf1c3ae5a 689 rdat = ble_uart_buf.buf[ble_uart_buf.rp];
harada_jpms 1:d2ebf1c3ae5a 690 ble_uart_buf.data_cnt--;
harada_jpms 1:d2ebf1c3ae5a 691
harada_jpms 1:d2ebf1c3ae5a 692 if( ble_uart_buf.rp == SIO_BUF_SIZE-1 )
harada_jpms 1:d2ebf1c3ae5a 693 {
harada_jpms 1:d2ebf1c3ae5a 694 ble_uart_buf.rp = 0;
harada_jpms 1:d2ebf1c3ae5a 695 }
harada_jpms 1:d2ebf1c3ae5a 696 else
harada_jpms 1:d2ebf1c3ae5a 697 {
harada_jpms 1:d2ebf1c3ae5a 698 ble_uart_buf.rp++;
harada_jpms 1:d2ebf1c3ae5a 699 }
harada_jpms 1:d2ebf1c3ae5a 700
harada_jpms 5:3ba4c087853b 701 //NVIC_EnableIRQ(RADIO_IRQn); // 割り込み許可
harada_jpms 5:3ba4c087853b 702
harada_jpms 1:d2ebf1c3ae5a 703 if( rdat != '\n' )
harada_jpms 1:d2ebf1c3ae5a 704 {
harada_jpms 1:d2ebf1c3ae5a 705 ble_cmd_buf.buf[ble_cmd_buf.data_cnt++] = rdat;
harada_jpms 1:d2ebf1c3ae5a 706 }
harada_jpms 1:d2ebf1c3ae5a 707
harada_jpms 1:d2ebf1c3ae5a 708 if (rdat == '\r')
harada_jpms 1:d2ebf1c3ae5a 709 {
harada_jpms 1:d2ebf1c3ae5a 710 int k = 0;
harada_jpms 1:d2ebf1c3ae5a 711 int l = 0;
harada_jpms 3:455575531b33 712 int p = 0;
harada_jpms 3:455575531b33 713
harada_jpms 1:d2ebf1c3ae5a 714 for (i=0;i<ble_cmd_buf.data_cnt;i++)
harada_jpms 1:d2ebf1c3ae5a 715 {
harada_jpms 3:455575531b33 716 if( ( ( ble_cmd_buf.buf[i] == ' ' ) && ( p > 0 ) ) ||
harada_jpms 3:455575531b33 717 ( ble_cmd_buf.buf[i] == '\r') )
harada_jpms 1:d2ebf1c3ae5a 718 {
harada_jpms 1:d2ebf1c3ae5a 719 ble_str[k++][l] = '\0';
harada_jpms 1:d2ebf1c3ae5a 720 l = 0;
harada_jpms 3:455575531b33 721 p = 0;
harada_jpms 1:d2ebf1c3ae5a 722 }
harada_jpms 1:d2ebf1c3ae5a 723 else
harada_jpms 1:d2ebf1c3ae5a 724 {
harada_jpms 3:455575531b33 725 p++;
harada_jpms 1:d2ebf1c3ae5a 726 ble_str[k][l++] = ble_cmd_buf.buf[i];
harada_jpms 1:d2ebf1c3ae5a 727 }
harada_jpms 1:d2ebf1c3ae5a 728 }
harada_jpms 1:d2ebf1c3ae5a 729
harada_jpms 1:d2ebf1c3ae5a 730 if( ble_cmd_buf.data_cnt == 1 )
harada_jpms 1:d2ebf1c3ae5a 731 {
harada_jpms 1:d2ebf1c3ae5a 732 k = 0;
harada_jpms 1:d2ebf1c3ae5a 733 }
harada_jpms 1:d2ebf1c3ae5a 734
harada_jpms 1:d2ebf1c3ae5a 735 ble_cmd_buf.data_cnt = 0;
harada_jpms 1:d2ebf1c3ae5a 736 ble_cmd_buf.buf[0] = '\0';
harada_jpms 1:d2ebf1c3ae5a 737
harada_jpms 1:d2ebf1c3ae5a 738 if (k > 0)
harada_jpms 1:d2ebf1c3ae5a 739 {
harada_jpms 1:d2ebf1c3ae5a 740 int ret;
harada_jpms 1:d2ebf1c3ae5a 741 int cmd_no = 0xFF;
harada_jpms 1:d2ebf1c3ae5a 742
harada_jpms 5:3ba4c087853b 743 for( j=0; j<CMD_NUM_BLE; j++ )
harada_jpms 1:d2ebf1c3ae5a 744 {
harada_jpms 1:d2ebf1c3ae5a 745 ret = 1;
harada_jpms 1:d2ebf1c3ae5a 746
harada_jpms 1:d2ebf1c3ae5a 747 if( strlen(ble_str[0]) > 0 )
harada_jpms 1:d2ebf1c3ae5a 748 {
harada_jpms 1:d2ebf1c3ae5a 749 for( i=0; i<strlen(ble_str[0]); i++ )
harada_jpms 1:d2ebf1c3ae5a 750 {
harada_jpms 1:d2ebf1c3ae5a 751 if( ble_str[0][i] != ble_str2[j][i] )
harada_jpms 1:d2ebf1c3ae5a 752 {
harada_jpms 1:d2ebf1c3ae5a 753 ret = 0;
harada_jpms 1:d2ebf1c3ae5a 754 }
harada_jpms 1:d2ebf1c3ae5a 755 }
harada_jpms 1:d2ebf1c3ae5a 756
harada_jpms 1:d2ebf1c3ae5a 757 if( ret )
harada_jpms 1:d2ebf1c3ae5a 758 {
harada_jpms 1:d2ebf1c3ae5a 759 cmd_no = j;
harada_jpms 1:d2ebf1c3ae5a 760 break;
harada_jpms 1:d2ebf1c3ae5a 761 }
harada_jpms 1:d2ebf1c3ae5a 762 }
harada_jpms 1:d2ebf1c3ae5a 763 }
harada_jpms 1:d2ebf1c3ae5a 764
harada_jpms 5:3ba4c087853b 765 // コマンド START
harada_jpms 1:d2ebf1c3ae5a 766 if( cmd_no == 0 )
harada_jpms 1:d2ebf1c3ae5a 767 {
harada_jpms 5:3ba4c087853b 768 start_flag = true;
harada_jpms 5:3ba4c087853b 769 pc.printf( "START\r" );
harada_jpms 1:d2ebf1c3ae5a 770 }
harada_jpms 5:3ba4c087853b 771 // コマンド STOP
harada_jpms 1:d2ebf1c3ae5a 772 else if( cmd_no == 1 )
harada_jpms 1:d2ebf1c3ae5a 773 {
harada_jpms 5:3ba4c087853b 774 if( connect_check == 0 )
harada_jpms 5:3ba4c087853b 775 {
harada_jpms 5:3ba4c087853b 776 pc.printf( "STOP\r" );
harada_jpms 5:3ba4c087853b 777 }
harada_jpms 5:3ba4c087853b 778 else
harada_jpms 5:3ba4c087853b 779 {
harada_jpms 5:3ba4c087853b 780 connect_check = 3;
harada_jpms 5:3ba4c087853b 781 }
harada_jpms 1:d2ebf1c3ae5a 782 }
harada_jpms 1:d2ebf1c3ae5a 783 // コマンド
harada_jpms 1:d2ebf1c3ae5a 784 else if( cmd_no == 2 )
harada_jpms 1:d2ebf1c3ae5a 785 {
harada_jpms 1:d2ebf1c3ae5a 786
harada_jpms 1:d2ebf1c3ae5a 787 }
harada_jpms 5:3ba4c087853b 788 // コマンド ISETL
harada_jpms 1:d2ebf1c3ae5a 789 else if( cmd_no == 3 )
harada_jpms 1:d2ebf1c3ae5a 790 {
harada_jpms 5:3ba4c087853b 791 pc.printf( "ISETL\r" );
harada_jpms 1:d2ebf1c3ae5a 792 }
harada_jpms 5:3ba4c087853b 793 // コマンド ISETR
harada_jpms 1:d2ebf1c3ae5a 794 else if( cmd_no == 4 )
harada_jpms 1:d2ebf1c3ae5a 795 {
harada_jpms 5:3ba4c087853b 796 pc.printf( "ISETR\r" );
harada_jpms 1:d2ebf1c3ae5a 797 }
harada_jpms 1:d2ebf1c3ae5a 798 // コマンド
harada_jpms 1:d2ebf1c3ae5a 799 else if( cmd_no == 5 )
harada_jpms 1:d2ebf1c3ae5a 800 {
harada_jpms 1:d2ebf1c3ae5a 801
harada_jpms 1:d2ebf1c3ae5a 802 }
harada_jpms 5:3ba4c087853b 803 // コマンド TC
harada_jpms 1:d2ebf1c3ae5a 804 else if( cmd_no == 6 )
harada_jpms 1:d2ebf1c3ae5a 805 {
harada_jpms 5:3ba4c087853b 806 pc.printf( "TC\r" );
harada_jpms 1:d2ebf1c3ae5a 807 }
harada_jpms 5:3ba4c087853b 808 // コマンド TS
harada_jpms 1:d2ebf1c3ae5a 809 else if( cmd_no == 7 )
harada_jpms 1:d2ebf1c3ae5a 810 {
harada_jpms 5:3ba4c087853b 811 pc.printf( "TS\r" );
harada_jpms 1:d2ebf1c3ae5a 812 }
harada_jpms 5:3ba4c087853b 813 // コマンド IDGET
harada_jpms 1:d2ebf1c3ae5a 814 else if( cmd_no == 8 )
harada_jpms 1:d2ebf1c3ae5a 815 {
harada_jpms 5:3ba4c087853b 816 pc.printf( "IDGET\r" );
harada_jpms 5:3ba4c087853b 817 }
harada_jpms 5:3ba4c087853b 818 // コマンド P
harada_jpms 5:3ba4c087853b 819 else if( cmd_no == 9 )
harada_jpms 5:3ba4c087853b 820 {
harada_jpms 5:3ba4c087853b 821 int data_cnt = atow(ble_str[1], strlen(ble_str[1]));
harada_jpms 5:3ba4c087853b 822 int left = atow(ble_str[2], strlen(ble_str[2]));
harada_jpms 5:3ba4c087853b 823 int right = atow(ble_str[3], strlen(ble_str[3]));
harada_jpms 5:3ba4c087853b 824
harada_jpms 5:3ba4c087853b 825 led = 1;
harada_jpms 5:3ba4c087853b 826
harada_jpms 5:3ba4c087853b 827 int8_t rssi;
harada_jpms 5:3ba4c087853b 828 sd_ble_gap_rssi_get( connectionHandle, &rssi );
harada_jpms 5:3ba4c087853b 829
harada_jpms 5:3ba4c087853b 830 if( rssi < 0 )
harada_jpms 5:3ba4c087853b 831 {
harada_jpms 5:3ba4c087853b 832 if( rssi < -99 )
harada_jpms 5:3ba4c087853b 833 {
harada_jpms 5:3ba4c087853b 834 rssi = -99;
harada_jpms 5:3ba4c087853b 835 }
harada_jpms 5:3ba4c087853b 836
harada_jpms 5:3ba4c087853b 837 rssi += 100;
harada_jpms 5:3ba4c087853b 838 }
harada_jpms 5:3ba4c087853b 839 else
harada_jpms 5:3ba4c087853b 840 {
harada_jpms 5:3ba4c087853b 841 rssi = 0;
harada_jpms 5:3ba4c087853b 842 }
harada_jpms 5:3ba4c087853b 843
harada_jpms 5:3ba4c087853b 844 pc.printf( "POINT %d %d %d %d\r", data_cnt, left, right, rssi );
harada_jpms 5:3ba4c087853b 845
harada_jpms 5:3ba4c087853b 846 led = 0;
harada_jpms 5:3ba4c087853b 847
harada_jpms 5:3ba4c087853b 848 //wait(0.001);
harada_jpms 5:3ba4c087853b 849 }
harada_jpms 5:3ba4c087853b 850 // コマンド U
harada_jpms 5:3ba4c087853b 851 else if( cmd_no == 10 )
harada_jpms 5:3ba4c087853b 852 {
harada_jpms 5:3ba4c087853b 853 unsigned int high = atoh(ble_str[1], strlen(ble_str[1]));
harada_jpms 5:3ba4c087853b 854 unsigned int low = atoh(ble_str[2], strlen(ble_str[2]));
harada_jpms 1:d2ebf1c3ae5a 855
harada_jpms 5:3ba4c087853b 856 pc.printf( "UID %08X %08X\r\n", high, low );
harada_jpms 5:3ba4c087853b 857 }
harada_jpms 5:3ba4c087853b 858 // コマンド RSSI
harada_jpms 5:3ba4c087853b 859 else if( cmd_no == 11 )
harada_jpms 5:3ba4c087853b 860 {
harada_jpms 5:3ba4c087853b 861 int8_t rssi;
harada_jpms 5:3ba4c087853b 862 sd_ble_gap_rssi_get( connectionHandle, &rssi );
harada_jpms 5:3ba4c087853b 863
harada_jpms 5:3ba4c087853b 864 if( rssi < 0 )
harada_jpms 5:3ba4c087853b 865 {
harada_jpms 5:3ba4c087853b 866 if( rssi < -99 )
harada_jpms 5:3ba4c087853b 867 {
harada_jpms 5:3ba4c087853b 868 rssi = -99;
harada_jpms 5:3ba4c087853b 869 }
harada_jpms 5:3ba4c087853b 870
harada_jpms 5:3ba4c087853b 871 rssi += 100;
harada_jpms 5:3ba4c087853b 872 }
harada_jpms 5:3ba4c087853b 873 else
harada_jpms 5:3ba4c087853b 874 {
harada_jpms 5:3ba4c087853b 875 rssi = 0;
harada_jpms 5:3ba4c087853b 876 }
harada_jpms 5:3ba4c087853b 877
harada_jpms 5:3ba4c087853b 878 pc.printf( "RSSI %d\r\n", rssi );
harada_jpms 5:3ba4c087853b 879 }
harada_jpms 5:3ba4c087853b 880 // コマンド MES
harada_jpms 5:3ba4c087853b 881 else if( cmd_no == 12 )
harada_jpms 5:3ba4c087853b 882 {
harada_jpms 5:3ba4c087853b 883 unsigned int level = atow(ble_str[1], strlen(ble_str[1]));
harada_jpms 5:3ba4c087853b 884 unsigned long uid_L = atoh(ble_str[2], strlen(ble_str[2]));
harada_jpms 5:3ba4c087853b 885
harada_jpms 5:3ba4c087853b 886 pc.printf( "MES %d %08X\r\n", level, uid_L );
harada_jpms 1:d2ebf1c3ae5a 887 }
harada_jpms 1:d2ebf1c3ae5a 888 // コマンド
harada_jpms 5:3ba4c087853b 889 else if( cmd_no == 13 )
harada_jpms 5:3ba4c087853b 890 {
harada_jpms 5:3ba4c087853b 891 unsigned int high = atoh(ble_str[1], strlen(ble_str[1]));
harada_jpms 5:3ba4c087853b 892 unsigned int low = atoh(ble_str[2], strlen(ble_str[2]));
harada_jpms 5:3ba4c087853b 893
harada_jpms 5:3ba4c087853b 894 pc.printf( "MMR %08X %08X\r\n", high, low );
harada_jpms 5:3ba4c087853b 895 }
harada_jpms 5:3ba4c087853b 896 // コマンド PAUSE
harada_jpms 5:3ba4c087853b 897 else if( cmd_no == 14 )
harada_jpms 1:d2ebf1c3ae5a 898 {
harada_jpms 5:3ba4c087853b 899 if( connect_check == 0 )
harada_jpms 5:3ba4c087853b 900 {
harada_jpms 5:3ba4c087853b 901 pc.printf( "PAUSE\r" );
harada_jpms 5:3ba4c087853b 902 }
harada_jpms 5:3ba4c087853b 903 else
harada_jpms 5:3ba4c087853b 904 {
harada_jpms 5:3ba4c087853b 905 connect_check = 3;
harada_jpms 5:3ba4c087853b 906 }
harada_jpms 5:3ba4c087853b 907 }
harada_jpms 5:3ba4c087853b 908 // コマンド REG09 Ver12
harada_jpms 5:3ba4c087853b 909 else if( cmd_no == 15 )
harada_jpms 5:3ba4c087853b 910 {
harada_jpms 5:3ba4c087853b 911 pc.printf( "REG09\r" );
harada_jpms 5:3ba4c087853b 912 }
harada_jpms 5:3ba4c087853b 913 // コマンド REG0A Ver12
harada_jpms 5:3ba4c087853b 914 else if( cmd_no == 16 )
harada_jpms 5:3ba4c087853b 915 {
harada_jpms 5:3ba4c087853b 916 pc.printf( "REG0A\r" );
harada_jpms 5:3ba4c087853b 917 }
harada_jpms 5:3ba4c087853b 918 // コマンド REG0B Ver12
harada_jpms 5:3ba4c087853b 919 else if( cmd_no == 17 )
harada_jpms 5:3ba4c087853b 920 {
harada_jpms 5:3ba4c087853b 921 pc.printf( "REG0B\r" );
harada_jpms 5:3ba4c087853b 922 }
harada_jpms 5:3ba4c087853b 923 // コマンド ICMR Ver12
harada_jpms 5:3ba4c087853b 924 else if( cmd_no == 18 )
harada_jpms 5:3ba4c087853b 925 {
harada_jpms 5:3ba4c087853b 926 unsigned int adr = atow(ble_str[1], strlen(ble_str[1]));
harada_jpms 5:3ba4c087853b 927 unsigned int dat = atoh(ble_str[2], strlen(ble_str[2]));
harada_jpms 5:3ba4c087853b 928
harada_jpms 5:3ba4c087853b 929 pc.printf( "ICMR %d %08X\r", adr, dat );
harada_jpms 1:d2ebf1c3ae5a 930 }
harada_jpms 1:d2ebf1c3ae5a 931 else
harada_jpms 1:d2ebf1c3ae5a 932 {
harada_jpms 2:a88b0b4c4f37 933 //pc.printf("CMD_ERR\r\n");
harada_jpms 1:d2ebf1c3ae5a 934 }
harada_jpms 1:d2ebf1c3ae5a 935 }
harada_jpms 1:d2ebf1c3ae5a 936 }
harada_jpms 1:d2ebf1c3ae5a 937 }
harada_jpms 1:d2ebf1c3ae5a 938 }
harada_jpms 1:d2ebf1c3ae5a 939 }
harada_jpms 1:d2ebf1c3ae5a 940
harada_jpms 4:1920e4a63bde 941 void pc_rx()
harada_jpms 4:1920e4a63bde 942 {
harada_jpms 5:3ba4c087853b 943 //NVIC_DisableIRQ(UART0_IRQn); // 割り込み禁止
harada_jpms 4:1920e4a63bde 944
harada_jpms 4:1920e4a63bde 945 pc_uart_buf.buf[pc_uart_buf.wp] = pc.getc();
harada_jpms 4:1920e4a63bde 946 pc_uart_buf.data_cnt++;
harada_jpms 4:1920e4a63bde 947
harada_jpms 4:1920e4a63bde 948 if( pc_uart_buf.wp == SIO_BUF_SIZE-1 )
harada_jpms 4:1920e4a63bde 949 {
harada_jpms 4:1920e4a63bde 950 pc_uart_buf.wp = 0;
harada_jpms 4:1920e4a63bde 951 }
harada_jpms 4:1920e4a63bde 952 else
harada_jpms 4:1920e4a63bde 953 {
harada_jpms 4:1920e4a63bde 954 pc_uart_buf.wp++;
harada_jpms 4:1920e4a63bde 955 }
harada_jpms 4:1920e4a63bde 956
harada_jpms 5:3ba4c087853b 957 //NVIC_EnableIRQ(UART0_IRQn); // 割り込み許可
harada_jpms 4:1920e4a63bde 958 }
harada_jpms 4:1920e4a63bde 959
harada_jpms 5:3ba4c087853b 960 #define CMD_NUM 21
harada_jpms 1:d2ebf1c3ae5a 961
harada_jpms 1:d2ebf1c3ae5a 962 char pc_str[16][10];
harada_jpms 1:d2ebf1c3ae5a 963 char pc_str2[CMD_NUM][8] = { "START ", // 0
harada_jpms 1:d2ebf1c3ae5a 964 "STOP ", // 1
harada_jpms 5:3ba4c087853b 965 "VER ", // 2
harada_jpms 5:3ba4c087853b 966 "ISETL ", // 3
harada_jpms 5:3ba4c087853b 967 "ISETR ", // 4
harada_jpms 5:3ba4c087853b 968 "CONNECT", // 5
harada_jpms 5:3ba4c087853b 969 "DISC ", // 6
harada_jpms 5:3ba4c087853b 970 "MMR ", // 7
harada_jpms 5:3ba4c087853b 971 "TC ", // 8
harada_jpms 5:3ba4c087853b 972 "MES ", // 9
harada_jpms 5:3ba4c087853b 973 "IDGET ", // 10
harada_jpms 5:3ba4c087853b 974 "RSSI ", // 11
harada_jpms 5:3ba4c087853b 975 "RES ", // 12
harada_jpms 5:3ba4c087853b 976 "READ ", // 13
harada_jpms 5:3ba4c087853b 977 "PRES ", // 14
harada_jpms 5:3ba4c087853b 978 "TS ", // 15
harada_jpms 5:3ba4c087853b 979 "PAUSE ", // 16
harada_jpms 5:3ba4c087853b 980 "REG09 ", // 17 Ver12
harada_jpms 5:3ba4c087853b 981 "REG0A ", // 18 Ver12
harada_jpms 5:3ba4c087853b 982 "REG0B ", // 19 Ver12
harada_jpms 5:3ba4c087853b 983 "ICMR "}; // 20 Ver12
harada_jpms 1:d2ebf1c3ae5a 984
harada_jpms 1:d2ebf1c3ae5a 985 /****************************************************************************/
harada_jpms 2:a88b0b4c4f37 986 /* 関数名 : rs232c_cmd */
harada_jpms 2:a88b0b4c4f37 987 /* 概要 : 通信コマンド処理 */
harada_jpms 2:a88b0b4c4f37 988 /* 作成者 : JPMS H.Harada */
harada_jpms 2:a88b0b4c4f37 989 /* 作成日 : 2017.08.30 */
harada_jpms 1:d2ebf1c3ae5a 990 /****************************************************************************/
harada_jpms 1:d2ebf1c3ae5a 991 void pc_rs232c_cmd()
harada_jpms 1:d2ebf1c3ae5a 992 {
harada_jpms 1:d2ebf1c3ae5a 993 unsigned int c, i, j;
harada_jpms 1:d2ebf1c3ae5a 994 int rdat;
harada_jpms 1:d2ebf1c3ae5a 995
harada_jpms 5:3ba4c087853b 996 #if 1
harada_jpms 5:3ba4c087853b 997 while( pc.readable() )
harada_jpms 5:3ba4c087853b 998 {
harada_jpms 5:3ba4c087853b 999 pc_uart_buf.buf[pc_uart_buf.wp] = pc.getc();
harada_jpms 5:3ba4c087853b 1000 pc_uart_buf.data_cnt++;
harada_jpms 5:3ba4c087853b 1001
harada_jpms 5:3ba4c087853b 1002 //pc.putc(pc_uart_buf.buf[pc_uart_buf.wp]);
harada_jpms 5:3ba4c087853b 1003
harada_jpms 5:3ba4c087853b 1004 if( pc_uart_buf.wp == SIO_BUF_SIZE-1 )
harada_jpms 5:3ba4c087853b 1005 {
harada_jpms 5:3ba4c087853b 1006 pc_uart_buf.wp = 0;
harada_jpms 5:3ba4c087853b 1007 }
harada_jpms 5:3ba4c087853b 1008 else
harada_jpms 5:3ba4c087853b 1009 {
harada_jpms 5:3ba4c087853b 1010 pc_uart_buf.wp++;
harada_jpms 5:3ba4c087853b 1011 }
harada_jpms 5:3ba4c087853b 1012 }
harada_jpms 5:3ba4c087853b 1013 #endif
harada_jpms 5:3ba4c087853b 1014
harada_jpms 1:d2ebf1c3ae5a 1015 if( pc_uart_buf.data_cnt > 0 )
harada_jpms 5:3ba4c087853b 1016 {
harada_jpms 1:d2ebf1c3ae5a 1017 unsigned int len = pc_uart_buf.data_cnt;
harada_jpms 4:1920e4a63bde 1018
harada_jpms 1:d2ebf1c3ae5a 1019 for( c=0; c<len; c++ )
harada_jpms 1:d2ebf1c3ae5a 1020 {
harada_jpms 5:3ba4c087853b 1021 //NVIC_DisableIRQ(UART0_IRQn); // 割り込み禁止
harada_jpms 4:1920e4a63bde 1022
harada_jpms 1:d2ebf1c3ae5a 1023 rdat = pc_uart_buf.buf[pc_uart_buf.rp];
harada_jpms 1:d2ebf1c3ae5a 1024 pc_uart_buf.data_cnt--;
harada_jpms 1:d2ebf1c3ae5a 1025
harada_jpms 1:d2ebf1c3ae5a 1026 if( pc_uart_buf.rp == SIO_BUF_SIZE-1 )
harada_jpms 1:d2ebf1c3ae5a 1027 {
harada_jpms 1:d2ebf1c3ae5a 1028 pc_uart_buf.rp = 0;
harada_jpms 1:d2ebf1c3ae5a 1029 }
harada_jpms 1:d2ebf1c3ae5a 1030 else
harada_jpms 1:d2ebf1c3ae5a 1031 {
harada_jpms 1:d2ebf1c3ae5a 1032 pc_uart_buf.rp++;
harada_jpms 1:d2ebf1c3ae5a 1033 }
harada_jpms 1:d2ebf1c3ae5a 1034
harada_jpms 5:3ba4c087853b 1035 //NVIC_EnableIRQ(UART0_IRQn); // 割り込み許可
harada_jpms 4:1920e4a63bde 1036
harada_jpms 1:d2ebf1c3ae5a 1037 if( rdat != '\n' )
harada_jpms 1:d2ebf1c3ae5a 1038 {
harada_jpms 1:d2ebf1c3ae5a 1039 pc_cmd_buf.buf[pc_cmd_buf.data_cnt++] = rdat;
harada_jpms 1:d2ebf1c3ae5a 1040 }
harada_jpms 1:d2ebf1c3ae5a 1041
harada_jpms 1:d2ebf1c3ae5a 1042 if( rdat == '\r' )
harada_jpms 1:d2ebf1c3ae5a 1043 {
harada_jpms 1:d2ebf1c3ae5a 1044 int k = 0;
harada_jpms 1:d2ebf1c3ae5a 1045 int l = 0;
harada_jpms 4:1920e4a63bde 1046 int p = 0;
harada_jpms 4:1920e4a63bde 1047
harada_jpms 4:1920e4a63bde 1048 for( i=0;i<pc_cmd_buf.data_cnt;i++ )
harada_jpms 1:d2ebf1c3ae5a 1049 {
harada_jpms 4:1920e4a63bde 1050 if( ( ( pc_cmd_buf.buf[i] == ' ' ) && ( p > 0 ) ) ||
harada_jpms 4:1920e4a63bde 1051 ( pc_cmd_buf.buf[i] == '\r') )
harada_jpms 1:d2ebf1c3ae5a 1052 {
harada_jpms 1:d2ebf1c3ae5a 1053 pc_str[k++][l] = '\0';
harada_jpms 1:d2ebf1c3ae5a 1054 l = 0;
harada_jpms 4:1920e4a63bde 1055 p = 0;
harada_jpms 1:d2ebf1c3ae5a 1056 }
harada_jpms 1:d2ebf1c3ae5a 1057 else
harada_jpms 1:d2ebf1c3ae5a 1058 {
harada_jpms 4:1920e4a63bde 1059 p++;
harada_jpms 1:d2ebf1c3ae5a 1060 pc_str[k][l++] = pc_cmd_buf.buf[i];
harada_jpms 1:d2ebf1c3ae5a 1061 }
harada_jpms 1:d2ebf1c3ae5a 1062 }
harada_jpms 1:d2ebf1c3ae5a 1063
harada_jpms 1:d2ebf1c3ae5a 1064 if( pc_cmd_buf.data_cnt == 1 )
harada_jpms 1:d2ebf1c3ae5a 1065 {
harada_jpms 1:d2ebf1c3ae5a 1066 k = 0;
harada_jpms 1:d2ebf1c3ae5a 1067 }
harada_jpms 1:d2ebf1c3ae5a 1068
harada_jpms 1:d2ebf1c3ae5a 1069 pc_cmd_buf.data_cnt = 0;
harada_jpms 1:d2ebf1c3ae5a 1070 pc_cmd_buf.buf[0] = '\0';
harada_jpms 1:d2ebf1c3ae5a 1071
harada_jpms 1:d2ebf1c3ae5a 1072 if (k > 0)
harada_jpms 1:d2ebf1c3ae5a 1073 {
harada_jpms 1:d2ebf1c3ae5a 1074 int ret;
harada_jpms 1:d2ebf1c3ae5a 1075 int cmd_no = 0xFF;
harada_jpms 1:d2ebf1c3ae5a 1076
harada_jpms 1:d2ebf1c3ae5a 1077 for( j=0; j<CMD_NUM; j++ )
harada_jpms 1:d2ebf1c3ae5a 1078 {
harada_jpms 1:d2ebf1c3ae5a 1079 ret = 1;
harada_jpms 1:d2ebf1c3ae5a 1080
harada_jpms 1:d2ebf1c3ae5a 1081 if( strlen(pc_str[0]) > 0 )
harada_jpms 1:d2ebf1c3ae5a 1082 {
harada_jpms 1:d2ebf1c3ae5a 1083 for( i=0; i<strlen(pc_str[0]); i++ )
harada_jpms 1:d2ebf1c3ae5a 1084 {
harada_jpms 1:d2ebf1c3ae5a 1085 if( pc_str[0][i] != pc_str2[j][i] )
harada_jpms 1:d2ebf1c3ae5a 1086 {
harada_jpms 1:d2ebf1c3ae5a 1087 ret = 0;
harada_jpms 1:d2ebf1c3ae5a 1088 }
harada_jpms 1:d2ebf1c3ae5a 1089 }
harada_jpms 1:d2ebf1c3ae5a 1090
harada_jpms 1:d2ebf1c3ae5a 1091 if( ret )
harada_jpms 1:d2ebf1c3ae5a 1092 {
harada_jpms 1:d2ebf1c3ae5a 1093 cmd_no = j;
harada_jpms 1:d2ebf1c3ae5a 1094 break;
harada_jpms 1:d2ebf1c3ae5a 1095 }
harada_jpms 1:d2ebf1c3ae5a 1096 }
harada_jpms 1:d2ebf1c3ae5a 1097 }
harada_jpms 1:d2ebf1c3ae5a 1098
harada_jpms 1:d2ebf1c3ae5a 1099 // コマンド START
harada_jpms 1:d2ebf1c3ae5a 1100 if (cmd_no == 0)
harada_jpms 1:d2ebf1c3ae5a 1101 {
harada_jpms 1:d2ebf1c3ae5a 1102 ble_write( "START\r" );
harada_jpms 1:d2ebf1c3ae5a 1103
harada_jpms 5:3ba4c087853b 1104 //pc.printf( "START OK\r\n" );
harada_jpms 1:d2ebf1c3ae5a 1105 }
harada_jpms 1:d2ebf1c3ae5a 1106 // コマンド STOP
harada_jpms 1:d2ebf1c3ae5a 1107 else if( cmd_no == 1 )
harada_jpms 1:d2ebf1c3ae5a 1108 {
harada_jpms 1:d2ebf1c3ae5a 1109 ble_write( "STOP\r" );
harada_jpms 1:d2ebf1c3ae5a 1110 }
harada_jpms 5:3ba4c087853b 1111 // コマンド VER
harada_jpms 5:3ba4c087853b 1112 else if( cmd_no == 2 )
harada_jpms 1:d2ebf1c3ae5a 1113 {
harada_jpms 5:3ba4c087853b 1114 pc.printf( "VER %03d\r", VER );
harada_jpms 1:d2ebf1c3ae5a 1115 }
harada_jpms 5:3ba4c087853b 1116 // コマンド ISETL
harada_jpms 1:d2ebf1c3ae5a 1117 else if( cmd_no == 3 )
harada_jpms 1:d2ebf1c3ae5a 1118 {
harada_jpms 5:3ba4c087853b 1119 int no = atow(pc_str[1], strlen(pc_str[1]));
harada_jpms 5:3ba4c087853b 1120 int id_LH = atoh(pc_str[2], strlen(pc_str[2]));
harada_jpms 5:3ba4c087853b 1121 int id_LL = atoh(pc_str[3], strlen(pc_str[3]));
harada_jpms 5:3ba4c087853b 1122
harada_jpms 5:3ba4c087853b 1123 char buf[BFSIZE];
harada_jpms 5:3ba4c087853b 1124
harada_jpms 5:3ba4c087853b 1125 if( no == 0 )
harada_jpms 5:3ba4c087853b 1126 {
harada_jpms 5:3ba4c087853b 1127 sprintf( buf, "A %8X %8X\r", id_LH, id_LL );
harada_jpms 5:3ba4c087853b 1128 }
harada_jpms 5:3ba4c087853b 1129 else if( no == 1 )
harada_jpms 5:3ba4c087853b 1130 {
harada_jpms 5:3ba4c087853b 1131 sprintf( buf, "B %8X %8X\r", id_LH, id_LL );
harada_jpms 5:3ba4c087853b 1132 }
harada_jpms 5:3ba4c087853b 1133 else if( no == 2 )
harada_jpms 5:3ba4c087853b 1134 {
harada_jpms 5:3ba4c087853b 1135 sprintf( buf, "C %8X %8X\r", id_LH, id_LL );
harada_jpms 5:3ba4c087853b 1136 }
harada_jpms 5:3ba4c087853b 1137 else if( no == 3 )
harada_jpms 5:3ba4c087853b 1138 {
harada_jpms 5:3ba4c087853b 1139 sprintf( buf, "D %8X %8X\r", id_LH, id_LL );
harada_jpms 5:3ba4c087853b 1140 }
harada_jpms 5:3ba4c087853b 1141
harada_jpms 5:3ba4c087853b 1142 //sprintf( buf, "L %8X %8X\r", id_LH, id_LL );
harada_jpms 5:3ba4c087853b 1143
harada_jpms 5:3ba4c087853b 1144 ble_write( buf );
harada_jpms 5:3ba4c087853b 1145
harada_jpms 5:3ba4c087853b 1146 //pc.printf( "ISETL OK\r\n" );
harada_jpms 5:3ba4c087853b 1147 }
harada_jpms 5:3ba4c087853b 1148 // コマンド ISETR
harada_jpms 5:3ba4c087853b 1149 else if( cmd_no == 4 )
harada_jpms 5:3ba4c087853b 1150 {
harada_jpms 5:3ba4c087853b 1151 int no = atow(pc_str[1], strlen(pc_str[1]));
harada_jpms 5:3ba4c087853b 1152 int id_RH = atoh(pc_str[2], strlen(pc_str[2]));
harada_jpms 5:3ba4c087853b 1153 int id_RL = atoh(pc_str[3], strlen(pc_str[3]));
harada_jpms 5:3ba4c087853b 1154
harada_jpms 5:3ba4c087853b 1155 char buf[BFSIZE];
harada_jpms 5:3ba4c087853b 1156
harada_jpms 5:3ba4c087853b 1157 if( no == 0 )
harada_jpms 5:3ba4c087853b 1158 {
harada_jpms 5:3ba4c087853b 1159 sprintf( buf, "E %8X %8X\r", id_RH, id_RL );
harada_jpms 5:3ba4c087853b 1160 }
harada_jpms 5:3ba4c087853b 1161 else if( no == 1 )
harada_jpms 5:3ba4c087853b 1162 {
harada_jpms 5:3ba4c087853b 1163 sprintf( buf, "F %8X %8X\r", id_RH, id_RL );
harada_jpms 5:3ba4c087853b 1164 }
harada_jpms 5:3ba4c087853b 1165 else if( no == 2 )
harada_jpms 5:3ba4c087853b 1166 {
harada_jpms 5:3ba4c087853b 1167 sprintf( buf, "G %8X %8X\r", id_RH, id_RL );
harada_jpms 5:3ba4c087853b 1168 }
harada_jpms 5:3ba4c087853b 1169 else if( no == 3 )
harada_jpms 5:3ba4c087853b 1170 {
harada_jpms 5:3ba4c087853b 1171 sprintf( buf, "H %8X %8X\r", id_RH, id_RL );
harada_jpms 5:3ba4c087853b 1172 }
harada_jpms 5:3ba4c087853b 1173
harada_jpms 5:3ba4c087853b 1174 //sprintf( buf, "R %8X %8X\r", id_RH, id_RL );
harada_jpms 5:3ba4c087853b 1175
harada_jpms 5:3ba4c087853b 1176 ble_write( buf );
harada_jpms 5:3ba4c087853b 1177
harada_jpms 5:3ba4c087853b 1178 //pc.printf( "ISETR OK\r\n" );
harada_jpms 5:3ba4c087853b 1179 }
harada_jpms 5:3ba4c087853b 1180 // コマンド CONNECT
harada_jpms 5:3ba4c087853b 1181 else if( cmd_no == 5 )
harada_jpms 5:3ba4c087853b 1182 {
harada_jpms 5:3ba4c087853b 1183 //pc.printf( "CONNECT\r" );
harada_jpms 5:3ba4c087853b 1184 //led_p(1);
harada_jpms 1:d2ebf1c3ae5a 1185 mac_1 = atoh(pc_str[1], strlen(pc_str[1]));
harada_jpms 1:d2ebf1c3ae5a 1186 mac_2 = atoh(pc_str[2], strlen(pc_str[2]));
harada_jpms 1:d2ebf1c3ae5a 1187 mac_3 = atoh(pc_str[3], strlen(pc_str[3]));
harada_jpms 1:d2ebf1c3ae5a 1188
harada_jpms 3:455575531b33 1189 mac_board_0[0] = ( mac_3 >> 0 ) & 0x00FF;
harada_jpms 3:455575531b33 1190 mac_board_0[1] = ( mac_3 >> 8 ) & 0x00FF;
harada_jpms 3:455575531b33 1191 mac_board_0[2] = ( mac_2 >> 0 ) & 0x00FF;
harada_jpms 3:455575531b33 1192 mac_board_0[3] = ( mac_2 >> 8 ) & 0x00FF;
harada_jpms 3:455575531b33 1193 mac_board_0[4] = ( mac_1 >> 0 ) & 0x00FF;
harada_jpms 3:455575531b33 1194 mac_board_0[5] = ( mac_1 >> 8 ) & 0x00FF;
harada_jpms 3:455575531b33 1195
harada_jpms 5:3ba4c087853b 1196 // CONNECT処理
harada_jpms 5:3ba4c087853b 1197 ble_uart.gap().connect( mac_board_0, Gap::ADDR_TYPE_RANDOM_STATIC, NULL, NULL);
harada_jpms 5:3ba4c087853b 1198 //led_p(2);
harada_jpms 4:1920e4a63bde 1199
harada_jpms 5:3ba4c087853b 1200
harada_jpms 1:d2ebf1c3ae5a 1201 }
harada_jpms 5:3ba4c087853b 1202 // コマンド DISC
harada_jpms 1:d2ebf1c3ae5a 1203 else if( cmd_no == 6 )
harada_jpms 1:d2ebf1c3ae5a 1204 {
harada_jpms 5:3ba4c087853b 1205 // DISC処理
harada_jpms 5:3ba4c087853b 1206 Gap::DisconnectionReason_t reason;
harada_jpms 5:3ba4c087853b 1207 ble_uart.gap().disconnect( reason );
harada_jpms 1:d2ebf1c3ae5a 1208 }
harada_jpms 5:3ba4c087853b 1209 // コマンド MMR
harada_jpms 1:d2ebf1c3ae5a 1210 else if( cmd_no == 7 )
harada_jpms 1:d2ebf1c3ae5a 1211 {
harada_jpms 5:3ba4c087853b 1212 int no = atow(pc_str[1], strlen(pc_str[1]));
harada_jpms 5:3ba4c087853b 1213
harada_jpms 5:3ba4c087853b 1214 char buf[BFSIZE];
harada_jpms 5:3ba4c087853b 1215 sprintf( buf, "MMR %d\r", no);
harada_jpms 1:d2ebf1c3ae5a 1216 ble_write( buf );
harada_jpms 1:d2ebf1c3ae5a 1217 }
harada_jpms 5:3ba4c087853b 1218 // コマンド TC
harada_jpms 1:d2ebf1c3ae5a 1219 else if( cmd_no == 8 )
harada_jpms 1:d2ebf1c3ae5a 1220 {
harada_jpms 5:3ba4c087853b 1221 unsigned int not_touch_cnt = atow(pc_str[1], strlen(pc_str[1]));
harada_jpms 5:3ba4c087853b 1222 unsigned int touch_cnt = atow(pc_str[2], strlen(pc_str[2]));
harada_jpms 5:3ba4c087853b 1223
harada_jpms 5:3ba4c087853b 1224 char buf[BFSIZE];
harada_jpms 5:3ba4c087853b 1225 sprintf( buf, "TC %d %d\r", not_touch_cnt, touch_cnt);
harada_jpms 5:3ba4c087853b 1226 ble_write( buf );
harada_jpms 1:d2ebf1c3ae5a 1227
harada_jpms 5:3ba4c087853b 1228 //pc.printf( "NTC OK\r\n" );
harada_jpms 1:d2ebf1c3ae5a 1229 }
harada_jpms 5:3ba4c087853b 1230 // コマンド MES
harada_jpms 1:d2ebf1c3ae5a 1231 else if( cmd_no == 9 )
harada_jpms 1:d2ebf1c3ae5a 1232 {
harada_jpms 5:3ba4c087853b 1233 ble_write( "MES\r" );
harada_jpms 1:d2ebf1c3ae5a 1234 }
harada_jpms 5:3ba4c087853b 1235 // コマンド IDGET
harada_jpms 1:d2ebf1c3ae5a 1236 else if( cmd_no == 10 )
harada_jpms 1:d2ebf1c3ae5a 1237 {
harada_jpms 5:3ba4c087853b 1238 ble_write( "IDGET\r" );
harada_jpms 1:d2ebf1c3ae5a 1239 }
harada_jpms 5:3ba4c087853b 1240 // コマンド RSSI
harada_jpms 1:d2ebf1c3ae5a 1241 else if( cmd_no == 11 )
harada_jpms 1:d2ebf1c3ae5a 1242 {
harada_jpms 5:3ba4c087853b 1243 ble_write( "RSSI\r" );
harada_jpms 1:d2ebf1c3ae5a 1244 }
harada_jpms 5:3ba4c087853b 1245 // コマンド
harada_jpms 1:d2ebf1c3ae5a 1246 else if( cmd_no == 12 )
harada_jpms 1:d2ebf1c3ae5a 1247 {
harada_jpms 5:3ba4c087853b 1248 pc.printf( "RES\r" );
harada_jpms 1:d2ebf1c3ae5a 1249 }
harada_jpms 5:3ba4c087853b 1250 // コマンド READ
harada_jpms 1:d2ebf1c3ae5a 1251 else if( cmd_no == 13 )
harada_jpms 1:d2ebf1c3ae5a 1252 {
harada_jpms 5:3ba4c087853b 1253 //led = 1;
harada_jpms 5:3ba4c087853b 1254 ble_write( "READ\r" );
harada_jpms 5:3ba4c087853b 1255
harada_jpms 5:3ba4c087853b 1256 //pc.printf( "READ_BLE\r" );
harada_jpms 5:3ba4c087853b 1257 //char buf[BFSIZE];
harada_jpms 5:3ba4c087853b 1258 //sprintf( buf, "READ %d\r", read_cnt++ );
harada_jpms 5:3ba4c087853b 1259 //ble_write( buf );
harada_jpms 1:d2ebf1c3ae5a 1260
harada_jpms 5:3ba4c087853b 1261 //ble_write( "~R\r" );
harada_jpms 1:d2ebf1c3ae5a 1262 }
harada_jpms 5:3ba4c087853b 1263 // コマンド PRES
harada_jpms 1:d2ebf1c3ae5a 1264 else if( cmd_no == 14 )
harada_jpms 1:d2ebf1c3ae5a 1265 {
harada_jpms 5:3ba4c087853b 1266 ble_write( "PRES\r" );
harada_jpms 1:d2ebf1c3ae5a 1267 }
harada_jpms 5:3ba4c087853b 1268 // コマンド TS
harada_jpms 1:d2ebf1c3ae5a 1269 else if( cmd_no == 15 )
harada_jpms 1:d2ebf1c3ae5a 1270 {
harada_jpms 5:3ba4c087853b 1271 unsigned int touch_start = atow(pc_str[1], strlen(pc_str[1]));
harada_jpms 5:3ba4c087853b 1272
harada_jpms 1:d2ebf1c3ae5a 1273 char buf[BFSIZE];
harada_jpms 5:3ba4c087853b 1274 sprintf( buf, "TS %d\r", touch_start );
harada_jpms 5:3ba4c087853b 1275 ble_write( buf );
harada_jpms 1:d2ebf1c3ae5a 1276 }
harada_jpms 5:3ba4c087853b 1277 // コマンド PAUSE
harada_jpms 1:d2ebf1c3ae5a 1278 else if( cmd_no == 16 )
harada_jpms 1:d2ebf1c3ae5a 1279 {
harada_jpms 5:3ba4c087853b 1280 ble_write( "PAUSE\r" );
harada_jpms 1:d2ebf1c3ae5a 1281 }
harada_jpms 5:3ba4c087853b 1282 // コマンド REG09 Ver12
harada_jpms 1:d2ebf1c3ae5a 1283 else if( cmd_no == 17 )
harada_jpms 1:d2ebf1c3ae5a 1284 {
harada_jpms 5:3ba4c087853b 1285 char reg09 = ( char )( atoh(pc_str[1], strlen(pc_str[1])) );
harada_jpms 5:3ba4c087853b 1286 char buf[BFSIZE];
harada_jpms 5:3ba4c087853b 1287 sprintf( buf, "REG09 %02X\r", reg09 );
harada_jpms 5:3ba4c087853b 1288 ble_write( buf );
harada_jpms 1:d2ebf1c3ae5a 1289 }
harada_jpms 5:3ba4c087853b 1290 // コマンド REG0A Ver12
harada_jpms 1:d2ebf1c3ae5a 1291 else if( cmd_no == 18 )
harada_jpms 1:d2ebf1c3ae5a 1292 {
harada_jpms 5:3ba4c087853b 1293 char reg0A = ( char )( atoh(pc_str[1], strlen(pc_str[1])) );
harada_jpms 5:3ba4c087853b 1294 char buf[BFSIZE];
harada_jpms 5:3ba4c087853b 1295 sprintf( buf, "REG0A %02X\r", reg0A );
harada_jpms 5:3ba4c087853b 1296 ble_write( buf );
harada_jpms 1:d2ebf1c3ae5a 1297 }
harada_jpms 5:3ba4c087853b 1298 // コマンド REG0B Ver12
harada_jpms 1:d2ebf1c3ae5a 1299 else if( cmd_no == 19 )
harada_jpms 1:d2ebf1c3ae5a 1300 {
harada_jpms 5:3ba4c087853b 1301 char reg0B = ( char )( atoh(pc_str[1], strlen(pc_str[1])) );
harada_jpms 5:3ba4c087853b 1302 char buf[BFSIZE];
harada_jpms 5:3ba4c087853b 1303 sprintf( buf, "REG0B %02X\r", reg0B );
harada_jpms 5:3ba4c087853b 1304 ble_write( buf );
harada_jpms 1:d2ebf1c3ae5a 1305 }
harada_jpms 5:3ba4c087853b 1306 // コマンド ICMR Ver12
harada_jpms 1:d2ebf1c3ae5a 1307 else if( cmd_no == 20 )
harada_jpms 1:d2ebf1c3ae5a 1308 {
harada_jpms 5:3ba4c087853b 1309 unsigned int adr = atow(pc_str[1], strlen(pc_str[1]));
harada_jpms 1:d2ebf1c3ae5a 1310
harada_jpms 5:3ba4c087853b 1311 char buf[BFSIZE];
harada_jpms 5:3ba4c087853b 1312 sprintf( buf, "ICMR %d\r", adr );
harada_jpms 5:3ba4c087853b 1313 ble_write( buf );
harada_jpms 1:d2ebf1c3ae5a 1314 }
harada_jpms 1:d2ebf1c3ae5a 1315 else
harada_jpms 1:d2ebf1c3ae5a 1316 {
harada_jpms 4:1920e4a63bde 1317 pc.printf("CMD_ERR_BLE\r");
harada_jpms 1:d2ebf1c3ae5a 1318 }
harada_jpms 1:d2ebf1c3ae5a 1319 }
harada_jpms 1:d2ebf1c3ae5a 1320 }
harada_jpms 1:d2ebf1c3ae5a 1321 }
harada_jpms 1:d2ebf1c3ae5a 1322 }
harada_jpms 1:d2ebf1c3ae5a 1323 }
harada_jpms 1:d2ebf1c3ae5a 1324
harada_jpms 1:d2ebf1c3ae5a 1325 void ble_write(char* dat)
harada_jpms 1:d2ebf1c3ae5a 1326 {
harada_jpms 1:d2ebf1c3ae5a 1327 uint8_t linebf_irq[BFSIZE];
harada_jpms 1:d2ebf1c3ae5a 1328
harada_jpms 1:d2ebf1c3ae5a 1329 sprintf( (char *)linebf_irq, "%s", dat);
harada_jpms 1:d2ebf1c3ae5a 1330
harada_jpms 1:d2ebf1c3ae5a 1331 if( connected2server == true )
harada_jpms 1:d2ebf1c3ae5a 1332 {
harada_jpms 5:3ba4c087853b 1333 bletx_mutex.lock();
harada_jpms 5:3ba4c087853b 1334
harada_jpms 1:d2ebf1c3ae5a 1335 uartTXCharacteristic.write(NUM_ONCE, linebf_irq);
harada_jpms 5:3ba4c087853b 1336
harada_jpms 5:3ba4c087853b 1337 bletx_mutex.unlock();
harada_jpms 1:d2ebf1c3ae5a 1338 }
harada_jpms 1:d2ebf1c3ae5a 1339 }