Ble Demo with Raspberry PI updated

Dependencies:   BLE_API mbed nRF51822

Fork of BLE_DEMO_SPI by HM_IOT_Demo

Files at this revision

API Documentation at this revision

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