This is a simple program to work with RedBearLab BLE Controller App. Type something from the Terminal to send to the BLEController App or vice verse. Characteristics received from App will print on Terminal. This version works on the first hw version of the BLE Nano (1)
Dependencies: BLE_API mbed nRF51822
Fork of nRF51822_SimpleChat by
Diff: main.cpp
- Revision:
- 6:a574229993b8
- Parent:
- 5:ee7e1a9e1985
- Child:
- 7:609dff35b660
--- a/main.cpp Thu Mar 31 15:23:00 2016 +0000 +++ b/main.cpp Thu Mar 31 16:29:40 2016 +0000 @@ -45,6 +45,7 @@ static const uint8_t uart_rx_uuid[] = {0x71, 0x3D, 0, 2, 0x50, 0x3E, 0x4C, 0x75, 0xBA, 0x94, 0x31, 0x48, 0xF1, 0x8D, 0x94, 0x1E}; static const uint8_t uart_base_uuid_rev[] = {0x1E, 0x94, 0x8D, 0xF1, 0x48, 0x31, 0x94, 0xBA, 0x75, 0x4C, 0x3E, 0x50, 0, 0, 0x3D, 0x71}; +uint16_t txPower = 0xCD; uint8_t txPayload[TXRX_BUF_LEN] = {0,}; uint8_t rxPayload[TXRX_BUF_LEN] = {0,}; @@ -72,17 +73,22 @@ void WrittenHandler(const GattWriteCallbackParams *Handler) { - uint8_t buf[TXRX_BUF_LEN]; + uint8_t buf[TXRX_BUF_LEN+1]; uint16_t bytesRead, index; if (Handler->handle == txCharacteristic.getValueAttribute().getHandle()) { - ble.readCharacteristicValue(txCharacteristic.getValueAttribute().getHandle(), buf, &bytesRead); + ble.readCharacteristicValue(txCharacteristic.getValueAttribute().getHandle(), &buf[2], &bytesRead); memset(txPayload, 0, TXRX_BUF_LEN); - memcpy(txPayload, buf, TXRX_BUF_LEN); - pc.printf("WriteHandler \r\n"); - pc.printf("Length: %d \r\n", bytesRead); - pc.printf("Data: "); + memcpy(txPayload, &buf[2], TXRX_BUF_LEN); + //echo back + buf[0]='R'; + buf[1]=':'; + ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), buf, bytesRead+2); + // print on PC monitor + //pc.printf("WriteHandler \r\n"); + //pc.printf("Length: %d \r\n", bytesRead); + pc.printf("R: "); for(index=0; index<bytesRead; index++) { pc.putc(txPayload[index]); @@ -97,11 +103,12 @@ { rx_buf[rx_len++] = pc.getc(); if(rx_len>=20 || rx_buf[rx_len-1]=='\0' || rx_buf[rx_len-1]=='\n') - { - ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), rx_buf, rx_len); - pc.printf("RecHandler \r\n"); - pc.printf("Length: %d \r\n",rx_len); - rx_len = 0; + { + ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), rx_buf, rx_len); + //pc.printf("Rec: Length: %d \r\n",rx_len); + rx_len = 2; + rx_buf[0]='S'; + rx_buf[1]=':'; break; } } @@ -113,7 +120,7 @@ ble.onDisconnection(disconnectionCallback); ble.onDataWritten(WrittenHandler); - pc.baud(9600); + pc.baud(19200); pc.printf("SimpleChat Init \r\n"); pc.attach( uartCB , pc.RxIrq); @@ -121,9 +128,11 @@ ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED); ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); ble.accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME, - (const uint8_t *)"Biscuit", sizeof("Biscuit") - 1); + (const uint8_t *)"MyBleVT", sizeof("MyBleVT") - 1); ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS, (const uint8_t *)uart_base_uuid_rev, sizeof(uart_base_uuid)); + //ble.accumulateAdvertisingPayload(GapAdvertisingData::TX_POWER_LEVEL,(const uint8_t *)txPower, sizeof(txPower)); + ble.setTxPower(txPower); // 100ms; in multiples of 0.625ms. ble.setAdvertisingInterval(160);