Working Code
Dependencies: BLE_API mbed nRF51822
Fork of BLE_Central_Light_Demo by
Diff: main.cpp
- Revision:
- 10:5e5fa5bf77b5
- Parent:
- 9:b967a01810e1
- Child:
- 11:58d8a3129877
--- a/main.cpp Wed Jan 25 14:41:05 2017 +0000 +++ b/main.cpp Mon Jan 30 15:20:48 2017 +0000 @@ -12,13 +12,11 @@ void bleint(); void SPI_Slave_read(); +void waitBleEvent(); +void ble_actions(int spi_data); SPISlave spiSlave(P0_9, P0_11, P0_8, P0_10); -bool serviceDiscover = true; -int spiRX[4]; - // uint8_t spiTX[4]; -uint8_t bufferSize; void advertisementCallback(const Gap::AdvertisementCallbackParams_t *params) { uint8_t con_status =0; @@ -63,9 +61,9 @@ pc.printf("Matched char UUID\r\n"); printf("Conn Handle = %dand %d \r\n",characteristicP->getConnectionHandle(), lightCharacteristic.getConnectionHandle()); printf("Value Handle = %d and %d\r\n",characteristicP->getValueHandle(),lightCharacteristic.getValueHandle()); + AddCharNodes(lightCharacteristic); charDiscover = 1; serviceDiscover = true; - AddCharNodes(lightCharacteristic); }else { printf("Not Matched char UUID\r\n"); } @@ -114,6 +112,8 @@ pc.printf("Service and characterstics discovery callback\r\n"); BLE::Instance().gattClient().onServiceDiscoveryTermination(discoveryTerminationCallback); BLE::Instance().gattClient().launchServiceDiscovery(params->handle, serviceDiscoveryCallback, characteristicDiscoveryCallback, 0xffe5, 0xffe9); + // 0xffe5 --> Services UUID + // 0xffe9 --> Characteristics UUID } } @@ -138,63 +138,63 @@ ble.gap().onConnection(connectionCallback); ble.gap().onDisconnection(disconnectionCallback); - ble.gap().setScanParams(1000, 800); ble.gap().startScan(advertisementCallback); + } void light_actions(int service_char[]){ - uint8_t *write_data=NULL; - //={0x56,0xff,0x00,0x00,0x00,0xf0,0xaa}; - write_data = new uint8_t[7]; + write_data = new uint8_t[8]; lightCharacteristic_t *ptr_tmp = NULL; ptr_tmp = lightChar.services_Char[service_char[1]-1]; - // printf("Conn Handle = %d\r\n",ptr_tmp->connHandle); - // printf("Value Handle = %d\r\n",ptr_tmp->valueHandle); - if(connect_status) - { + if(connect_status) + { - switch(service_char[2]) - { - case TURN_OFF: // off - write_data[0]=0x56; - write_data[1]=0x00; - write_data[2]=0x00; - write_data[3]=0x00; - write_data[4]=0x00; - write_data[5]=0xf0; - write_data[6]=0xaa; - error_status = BLE::Instance().gattClient().write(GattClient::GATT_OP_WRITE_CMD,ptr_tmp->connHandle,ptr_tmp->valueHandle,7,write_data); - break; + switch(service_char[2]) + { + case TURN_OFF: // off + write_data[0]=0x56; + write_data[1]=0x00; + write_data[2]=0x00; + write_data[3]=0x00; + write_data[4]=0x00; + write_data[5]=0xf0; + write_data[6]=0xaa; + error_status = BLE::Instance().gattClient().write(GattClient::GATT_OP_WRITE_CMD,ptr_tmp->connHandle,ptr_tmp->valueHandle,8,write_data); + break; - case TURN_ON: //on - write_data[0]=0x56; - write_data[1]=0xff; - write_data[2]=0xff; - write_data[3]=0xff; - write_data[4]=0x00; - write_data[5]=0xf0; - write_data[6]=0xaa; - error_status = BLE::Instance().gattClient().write(GattClient::GATT_OP_WRITE_CMD,ptr_tmp->connHandle,ptr_tmp->valueHandle,7,write_data); - break; + case TURN_ON: //on + if(first_on){ + pre_write_data[0]=0x56; + pre_write_data[1]=0xDE; + pre_write_data[2]=0x8E; + pre_write_data[3]=0xEE; + pre_write_data[4]=0x00; + pre_write_data[5]=0xf0; + pre_write_data[6]=0xaa; + } + error_status = BLE::Instance().gattClient().write(GattClient::GATT_OP_WRITE_CMD,ptr_tmp->connHandle,ptr_tmp->valueHandle,8,pre_write_data); + break; - case COLOR: // Color - write_data[0]=0x56; - write_data[1]=lightColor[service_char[3]][0];//0xff - write_data[2]=lightColor[service_char[3]][1];//0x00; - write_data[3]=lightColor[service_char[3]][2];//0x00; - write_data[4]=0x00; - write_data[5]=0xf0; - write_data[6]=0xaa; - //datancpy(pre_write_data, (char *)write_data,6); - error_status = BLE::Instance().gattClient().write(GattClient::GATT_OP_WRITE_CMD,ptr_tmp->connHandle,ptr_tmp->valueHandle,7,write_data); - break; + case COLOR: // Color + write_data[0]=0x56; + write_data[1]=lightColor[service_char[3]][0];//0xff + write_data[2]=lightColor[service_char[3]][1];//0x00; + write_data[3]=lightColor[service_char[3]][2];//0x00; + write_data[4]=0x00; + write_data[5]=0xf0; + write_data[6]=0xaa; + datancpy((char *)pre_write_data, (char *)write_data,6); + first_on=false; + error_status = BLE::Instance().gattClient().write(GattClient::GATT_OP_WRITE_CMD,ptr_tmp->connHandle,ptr_tmp->valueHandle,8,write_data); + break; - default: - printf("Invalid Options\r\n"); - } - delete [] write_data; - } + default: + printf("Invalid Options\r\n"); + } + printf("Error Status =%d\n\r",error_status); + delete [] write_data; + } } void datancpy(char *pre_write, char *writeData, int data_size){ @@ -212,42 +212,44 @@ BLE::Instance().init(bleInitComplete); } - int main() { // Serial port configuration pc.baud(9600); wait(8.0); pc.printf("Start\n\r"); + // int options; spiSlave.reply(191); - // Initialize the Ble bleint(); - while(1){ + bufferSize = 0; + while(1){ //printf("loop\r\n"); - if (serviceDiscover || BLE::Instance().gattClient().isServiceDiscoveryActive()){ - BLE::Instance().waitForEvent(); - - }else{ - // printf("Slave Read loop\r\n"); - SPI_Slave_read(); + if(!(connect_status && charDiscover)) + waitBleEvent(); + + if(spiSlave.receive()){ + // printf("Slave Read loop1\r\n"); + spiRX[bufferSize] = spiSlave.read(); + spiSlave.reply(spiRX[bufferSize]); + bufferSize++; + + if(bufferSize >= 5){ + bufferSize=0; + light_actions(spiRX); + spiSlave.reply(0xAA); + } + } - + + wait_us(15); } } -void SPI_Slave_read(){ - - wait_us(2); - if(spiSlave.receive()){ - // printf("Slave Read loop1\r\n"); - spiRX[bufferSize] = spiSlave.read(); - spiSlave.reply(spiRX[bufferSize]); - bufferSize++; - if(bufferSize>=4){ - bufferSize=0; - light_actions(spiRX); - // printf("Receive\n\r"); - } - } +void waitBleEvent() +{ + while(serviceDiscover || BLE::Instance().gattClient().isServiceDiscoveryActive()){ + BLE::Instance().waitForEvent(); + } } +