Ble Demo with Raspberry PI updated
Dependencies: BLE_API mbed nRF51822
Fork of BLE_DEMO_SPI by
Revision 9:b967a01810e1, committed 2017-01-25
- Comitter:
- hmiot
- Date:
- Wed Jan 25 14:41:05 2017 +0000
- Parent:
- 8:285ebd0e83fb
- Child:
- 10:5e5fa5bf77b5
- Commit message:
- Updated
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
mbed.bld | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Wed Jan 25 08:08:20 2017 +0000 +++ b/main.cpp Wed Jan 25 14:41:05 2017 +0000 @@ -4,29 +4,27 @@ ************************************************************************/ #include "hm_config.h" +//#include "rtos.h" DiscoveredCharacteristic lightCharacteristic; s_serviceInfo lightChar = {NULL,NULL,NULL,NULL}; Serial pc(USBTX, USBRX); - void bleint(); -bool serviceDiscover = true; -void readCharacteristics(); -void spiRead(); -void testaction(uint8_t options); -bool isint = true; +void bleint(); +void SPI_Slave_read(); + 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; - // uint8_t i; //0x51 for Magic light //0x5A - if ((params->peerAddr[0] == 0x51) || (params->peerAddr[0] == 0x5A)) { // 0x2F for red bear1.5 /* !ALERT! Alter this filter to suit your device. */ + if (params->peerAddr[0] == 0x51) { // 0x2F for red bear1.5 /* !ALERT! Alter this filter to suit your device. */ pc.printf("adv peerAddr[%02x %02x %02x %02x %02x %02x] rssi %d, isScanResponse %u, AdvertisementType %u\r\n", params->peerAddr[5], params->peerAddr[4], params->peerAddr[3], params->peerAddr[2], params->peerAddr[1], params->peerAddr[0], @@ -36,9 +34,10 @@ pc.printf("Connection Status : %d\r\n",con_status); connect_status = 1; BLE::Instance().gap().stopScan(); + }else{ printf("Not Matched your device\r\n"); - return; + return; } } @@ -59,20 +58,15 @@ void characteristicDiscoveryCallback(const DiscoveredCharacteristic *characteristicP) { pc.printf(" C UUID-%x valueAttr[%u] props[%x]\r\n", characteristicP->getUUID().getShortUUID(), characteristicP->getValueHandle(), (uint8_t)characteristicP->getProperties().broadcast()); - if (characteristicP->getUUID().getShortUUID() == 0xffe9 ) { /* !ALERT! Alter this filter to suit your device. */ + if (characteristicP->getUUID().getShortUUID() == 0xffe9) { /* !ALERT! Alter this filter to suit your device. */ lightCharacteristic = *characteristicP; 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()); - // lightCharacteristic.writeWoResponse(sizeof(write_data), write_data); - charDiscover = 1; - serviceDiscover = true; - AddCharNodes(lightCharacteristic); - //light_actions(1); - - //BLE::Instance().gattClient().write(GattClient::GATT_OP_WRITE_CMD,characteristicP->getConnectionHandle(),characteristicP->getValueHandle(),sizeof(write_data),write_data); - - }else { + charDiscover = 1; + serviceDiscover = true; + AddCharNodes(lightCharacteristic); + }else { printf("Not Matched char UUID\r\n"); } } @@ -81,9 +75,6 @@ { printf("Add Char Nodes\r\n"); lightCharacteristic_t *ptr_temp_char = NULL; - - printf("\n\rAdding Node..."); - ptr_temp_char = lightChar.services_Char[0]; if(NULL == ptr_temp_char) @@ -109,8 +100,6 @@ printf("Value Handle = %d\r\n",light_Characteristic.getValueHandle()); ptr_temp_char->connHandle = light_Characteristic.getConnectionHandle(); ptr_temp_char->valueHandle = light_Characteristic.getValueHandle(); - printf("After Conn Handle = %d\r\n",ptr_temp_char->connHandle); - printf("After Value Handle = %d\r\n",ptr_temp_char->valueHandle); ptr_temp_char->nextChar = NULL; } @@ -142,16 +131,16 @@ BLE& ble = params->ble; pc.printf("Ble Init\n\r"); - /* Ensure that it is the default instance of BLE + /* Ensure that it is the default instance of BLE */ if(ble.getInstanceID() != BLE::DEFAULT_INSTANCE) { return; - }*/ + } - // ble.gap().onConnection(connectionCallback); -// ble.gap().onDisconnection(disconnectionCallback); + ble.gap().onConnection(connectionCallback); + ble.gap().onDisconnection(disconnectionCallback); - // ble.gap().setScanParams(1000, 800); - // ble.gap().startScan(advertisementCallback); + ble.gap().setScanParams(1000, 800); + ble.gap().startScan(advertisementCallback); } void light_actions(int service_char[]){ @@ -159,15 +148,13 @@ //={0x56,0xff,0x00,0x00,0x00,0xf0,0xaa}; write_data = new uint8_t[7]; lightCharacteristic_t *ptr_tmp = NULL; - // uint8_t op; - ptr_tmp = lightChar.services_Char[service_char[0]-1]; - printf("Conn Handle = %d\r\n",ptr_tmp->connHandle); - printf("Value Handle = %d\r\n",ptr_tmp->valueHandle); - if(connect_status) + 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) { - //scanf("%d", &op); - printf("options : %d\n",service_char[1]); - switch(service_char[1]) + + switch(service_char[2]) { case TURN_OFF: // off write_data[0]=0x56; @@ -183,7 +170,7 @@ case TURN_ON: //on write_data[0]=0x56; write_data[1]=0xff; - write_data[2]=0x00; + write_data[2]=0xff; write_data[3]=0xff; write_data[4]=0x00; write_data[5]=0xf0; @@ -193,9 +180,9 @@ case COLOR: // Color write_data[0]=0x56; - write_data[1]=0xff; //lightColor[service_char[2]][0];//0xff - write_data[2]=0x00;//lightColor[service_char[2]][1];//0x00; - write_data[3]=0x00;//lightColor[service_char[2]][2];//0x00; + 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; @@ -204,30 +191,16 @@ break; default: - printf("Invalid Options\r\n"); - + printf("Invalid Options\r\n"); } - printf("Write Status : %d\r\n",error_status); delete [] write_data; - } -} - -void readCharacteristics(){ - printf("Read Characteristics \r\n"); - lightCharacteristic_t *ptr_tmp = NULL; - ptr_tmp = lightChar.services_Char[1]; - uint16_t read_data; - error_status = BLE::Instance().gattClient().read(ptr_tmp->connHandle,ptr_tmp->valueHandle,read_data); - printf("Read Data : %d\r\n",read_data); + } } void datancpy(char *pre_write, char *writeData, int data_size){ int numCount; - printf("length %d\r\n",sizeof(writeData)); for(numCount=0; numCount <= data_size; numCount++){ pre_write[numCount] = writeData[numCount]; - // printf("write Value = %02x\r\n",writeData[numCount]); - //printf("Copy Value = %2x %d \r\n",pre_write[numCount],pre_write[numCount]); } } @@ -235,11 +208,8 @@ void bleint() { printf("Init\r\n"); - if(isint){ + BLE &ble = BLE::Instance(); BLE::Instance().init(bleInitComplete); - isint=false; - } - } @@ -248,81 +218,36 @@ // Serial port configuration pc.baud(9600); wait(8.0); + pc.printf("Start\n\r"); spiSlave.reply(191); - pc.printf("Start\n\r"); - BLE &ble = BLE::Instance(); - //ble.init(bleInitComplete); - //bleint(); - - //ble.waitForEvent(); - while(true) { - printf("loop\r\n"); - printf("Status : %d\r\n",BLE::Instance().gattClient().isServiceDiscoveryActive()); - - // if(connect_status && charDiscover){ - if(spiSlave.receive()) - { - spiRX[bufferSize] = spiSlave.read(); - spiSlave.reply(spiRX[bufferSize]); - bufferSize++; - if(bufferSize>=4){ - bufferSize=0; - - // light_actions(spiRX); - - } + // Initialize the Ble + bleint(); + 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(); } - bleint(); - // } - if (serviceDiscover || BLE::Instance().gattClient().isServiceDiscoveryActive()){ - ble.waitForEvent(); - //serviceDiscover = false; - } - } -} -/* -void testaction(uint8_t options) -{ - int tx_buf[4]; - switch(options) - { - case 1: //off - tx_buf[0] = 0x1; - tx_buf[1] = 0x0; - tx_buf[2] = 0x0; - tx_buf[3] = 0x0; - light_actions(tx_buf); - break; - case 2: //on - tx_buf[0] = 0x1; - tx_buf[1] = 0x1; - tx_buf[2] = 0x0; - tx_buf[3] = 0x0; - light_actions(tx_buf); - break; - case 3: //Red - tx_buf[0] = 0x1; - tx_buf[1] = 0x2; - tx_buf[2] = 0x0; - tx_buf[3] = 0x0; - light_actions(tx_buf); - break; - case 4: //Green - tx_buf[0] = 0x1; - tx_buf[1] = 0x2; - tx_buf[2] = 0x1; - tx_buf[3] = 0x0; - light_actions(tx_buf); - break; - case 5: //Blue - tx_buf[0] = 0x1; - tx_buf[1] = 0x2; - tx_buf[2] = 0x2; - tx_buf[3] = 0x0; - light_actions(tx_buf); - break; */ - /* default: - printf("Invalid \r\n"); + } + +} + +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"); } -}*/ \ No newline at end of file + } +}
--- a/mbed.bld Wed Jan 25 08:08:20 2017 +0000 +++ b/mbed.bld Wed Jan 25 14:41:05 2017 +0000 @@ -1,1 +1,1 @@ -http://mbed.org/users/mbed_official/code/mbed/builds/99b5ccf27215 \ No newline at end of file +http://mbed.org/users/mbed_official/code/mbed/builds/ad3be0349dc5 \ No newline at end of file