test

Dependencies:   BLE_API mbed nRF51822

Fork of Connect_Test4 by Aura-Tech Solutions

Revision:
19:da48cacdb4c1
Parent:
18:8454c63488ee
Child:
20:e9d6adb5162b
--- a/main.cpp	Mon Nov 09 14:34:14 2015 +0000
+++ b/main.cpp	Fri Nov 13 03:33:39 2015 +0000
@@ -1,8 +1,30 @@
 #include "mbed.h"
 #include "BLEDevice.h"
+#include "AltBeaconService.h"
+#include "iBeaconService.h"
+
 
 BLEDevice ble;
 DigitalOut led(LED1);
+
+/*..........................................................................
+uint8_t beaconID[] =    {   0xE2, 0x0A, 0x39, 0xF4, 0x73, 0xF5, 0x4B, 0xC4,
+                            0xA1, 0x2F, 0x17, 0xD1, 0xAD, 0x07, 0xA9, 0x61,
+                            0x11, 0x22, 0x33, 0x44
+                        };
+uint16_t manufacturerID = 0x5900; //Nordic SIG ID
+int8_t rssi = -122;
+..........................................................................*/
+
+
+uint8_t beaconID[] =    {   0xE2, 0x0A, 0x39, 0xF4, 0x73, 0xF5, 0x4B, 0xC4,
+                            0xA1, 0x2F, 0x17, 0xD1, 0xAD, 0x07, 0xA9, 0x61
+                        };
+uint16_t majorNumber = 1122;
+uint16_t minorNumber = 3344;
+uint16_t txPower = 0xC8;
+
+
 uint16_t customServiceUUID  = 0xA000;
 uint16_t readCharUUID       = 0xA001;
 uint16_t writeCharUUID      = 0xA002;
@@ -11,23 +33,32 @@
 
 
 
-uint8_t b1_id               = 0x01;
-uint8_t b2_id               = 0x02;
-uint8_t b3_id               = 0x03;
-uint8_t b4_id               = 0x04;
-uint8_t b5_id               = 0x05;
-uint8_t b6_id               = 0x06;
-uint8_t b7_id               = 0x07;
+
+const uint8_t b1_id   = 0x01;
+const uint8_t b2_id   = 0x02;
+const uint8_t b3_id   = 0x03;
+const uint8_t b4_id   = 0x04;
+const uint8_t b5_id   = 0x05;
+const uint8_t b6_id   = 0x06;
+const uint8_t b7_id   = 0x07;
+const uint8_t b8_id   = 0x08;
 
-PinName flood_p              = P0_4;
+const uint8_t bA1_id  = 0x31;
+const uint8_t bA2_id  = 0x32;
+const uint8_t bA3_id  = 0x33;
+const uint8_t bA4_id  = 0x34;
+const uint8_t bA5_id  = 0x35;
+const uint8_t bA6_id  = 0x36;
+const uint8_t bA7_id  = 0x37;
 
-PinName b1_p             = P0_28;
-PinName b2_p             = P0_29;
-PinName b3_p             = P0_15;
-PinName b4_p             = P0_10; //CTX
-PinName b5_p             = P0_9;  //TXD
-PinName b6_p             = P0_11; //RXD
-PinName b7_p             = P0_8;  //RTS
+PinName flood_p     = P0_4;
+PinName b1_p        = P0_28;
+PinName b2_p        = P0_29;
+PinName b3_p        = P0_15;
+PinName b4_p        = P0_10; //CTX
+PinName b5_p        = P0_9;  //TXD
+PinName b6_p        = P0_11; //RXD
+PinName b7_p        = P0_8;  //RTS
 
 
 /*
@@ -41,31 +72,98 @@
 const static char     DEVICE_NAME[]        = "PETE2"; // change this
 static const uint16_t uuid16_list[]        = {0xFF02}; //Custom UUID, FFFF is reserved for development
 
-// Set Up custom Characteristics
+
+//setup custom characteristics
+
+//read
 static uint8_t readValue[10] = {0};
 ReadOnlyArrayGattCharacteristic<uint8_t, sizeof(readValue)> readChar(readCharUUID, readValue);
-
+//write
 static uint8_t writeValue[10] = {0};
 WriteOnlyArrayGattCharacteristic<uint8_t, sizeof(writeValue)> writeChar(writeCharUUID, writeValue);
 
+
 // Set up custom service
-GattCharacteristic *characteristics[] = {&readChar, &writeChar};
-GattService        customService(customServiceUUID, characteristics, sizeof(characteristics) / sizeof(GattCharacteristic *));
+GattCharacteristic  *characteristics[] = {&readChar, &writeChar};
+GattService         customService(customServiceUUID, characteristics, sizeof(characteristics) / sizeof(GattCharacteristic *));
 
 //setup led
 DigitalOut led1(P0_19);
 
-
+//setup digital outs
 DigitalOut b1(b1_p);
 DigitalOut b2(b2_p);
 DigitalOut b3(b3_p);
 DigitalOut b4(b4_p);
 DigitalOut b5(b5_p);
-DigitalOut b6(b6_p);
+//DigitalOut b6(b6_p);
 DigitalOut b7(b7_p);
 
+DigitalIn enable(flood_p);
 
-DigitalIn enable(flood_p);
+
+void disconnectionCallback(Gap::Handle_t handle, Gap::DisconnectionReason_t reason);
+void writeCharCallback(const GattCharacteristicWriteCBParams *params);
+void testAll(void);
+void blinky(void);
+int flip(char value);
+
+
+//main loop............................................................................................................
+int main(void)
+{
+    /* initialize stuff */
+    led1 = 1;
+    
+    b1 = 1;//b1_p = P0_28;
+    b2 = 1;//b2_p = P0_29;
+    b3 = 1;//b3_p = P0_9;
+    b4 = 1;//b4_p = P0_10; //CTX
+    b5 = 1;//b5_p = P0_9;  //TXD
+    //b6 = 1;//b6_p = P0_11; //RXD
+    b7 = 1;//b7_p = P0_8;  //RTS
+              
+    
+
+    
+    ble.init();
+    
+    //setup beacon service
+    //AltBeaconService altbeacon(ble, manufacturerID, beaconID, rssi);
+    iBeaconService ibeacon(ble, beaconID, majorNumber, minorNumber, txPower);
+    
+    
+    ble.onDisconnection(disconnectionCallback);
+    ble.onDataWritten(writeCharCallback);
+
+
+    /* setup advertising */
+    
+    // BLE only, no classic BT
+    ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE);
+    // advertising type
+    ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
+    // add name
+    ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME));
+    // UUID's broadcast in advertising packet
+    ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *)uuid16_list, sizeof(uuid16_list));
+    
+    
+    // set interval
+    ble.setAdvertisingInterval(100); // 100ms. 
+
+    // add our custom service
+    ble.addService(customService);
+
+    // start advertising
+    ble.startAdvertising(); 
+    
+    // infinite loop waiting for BLE interrupt events
+    while (true) {
+        ble.waitForEvent(); //Save power
+    }
+}
+//.......................end main............................................................................................
 
 /*
  *  Restart advertising when phone app disconnects
@@ -83,99 +181,76 @@
     // check to see what characteristic was written, by handle
     if(params->charHandle == writeChar.getValueHandle()) 
     {
-        // toggle LED if...
-        if(params->data[0] == b1_id)
-        {
-            b1 = !b1;
-            //led1 = 0;
-        }
-        else if(params->data[0] == b2_id)
-        {
-            b2 = !b2;
-            //led1 = 0;
-        }
-        else if(params->data[0] == b3_id)
-        {
-            b3 = !b3;
-            //led1 = 0;
-        }
-        if(params->data[0] == b4_id)
-        {
-            b4 = !b4;
-        }
-        else if(params->data[0] == b5_id)
-        {
-            b5 = !b5;
-            //led1 = 0;
-        }
-        else if(params->data[0] == b6_id)
-        {
-            b6 = !b6;
-            //led1 = 0;
-        }
-        else if(params->data[0] == b7_id)
-        {
-            b7 = !b7;
-            led1 = 0;
-            wait(3);
-            led1 = 1;
-        }
-        // print the data if more than 1 byte is written
-        else 
-        {
-            
-            printf("\n\r Data received: length = %d, data = 0x",params->len); 
-            for(int x=0; x < params->len; x++) {
-                printf("%x",params->data[x]);
-            }
-            
-        }
+        //testAll();
+        flip(params->data[0]);
+
         // update the readChar with the value of writeChar
         ble.updateCharacteristicValue(readChar.getValueHandle(),params->data,params->len);
     }
 }
 
-/*
- *  main loop
-*/ 
-int
-main(void)
+void testAll(void)
 {
-    /* initialize stuff */
-    printf("\n\r********* Starting Main Loop *********\n\r");
-    led1 = 1;
-    
-    b1 = 1;//b1_p = P0_28;
-    b2 = 1;//b2_p = P0_29;
-    b3 = 1;//b3_p = P0_9;
-    b4 = 1;//b4_p = P0_10; //CTX
-    b5 = 1;//b5_p = P0_9;  //TXD
-    b6 = 1;//b6_p = P0_11; //RXD
-    b7 = 1;//b7_p = P0_8;  //RTS
-              
-    
-
-    
-    ble.init();
-    ble.onDisconnection(disconnectionCallback);
-    
-    ble.onDataWritten(writeCharCallback);
-
-    /* setup advertising */
-    ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE); // BLE only, no classic BT
-    ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); // advertising type
-    ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME)); // add name
-    ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *)uuid16_list, sizeof(uuid16_list)); // UUID's broadcast in advertising packet
-    ble.setAdvertisingInterval(100); // 100ms. 
-
-    // add our custom service
-    ble.addService(customService);
-
-    // start advertising
-    ble.startAdvertising(); 
-    
-    // infinite loop waiting for BLE interrupt events
-    while (true) {
-        ble.waitForEvent(); //Save power
+    for(int i=0; i<4; i++)    
+    {
+        led1 = !led1;
+        b1 = !b1;
+        b2 = !b2;
+        b3 = !b3;
+        b4 = !b4;
+        b5 = !b5;
+        //b6 = !b6;
+        b7 = !b7;
+        wait(1);
+    }
+}
+void blinky(void)
+{
+    for(int i=0; i<20; i++)    
+    {
+        led1 = !led1;
+        wait(.3);
     }
 }
+int flip(char value)
+{
+    int ret = 0;
+    
+    switch(value)
+    {
+        case b1_id  :
+        case bA1_id :       led1 = !led1;
+                            b1 = !b1;
+                            break;
+                            
+        case b2_id  :
+        case bA2_id :       led1 = !led1;
+                            b2 = !b2;
+                            break;
+        
+        case b3_id  :
+        case bA3_id :       led1 = !led1;
+                            b3 = !b3;
+                            break;
+        
+        case b4_id  :
+        case bA4_id :       led1 = !led1;
+                            b4 = !b4;
+                            break;
+        
+        case b5_id  :
+        case bA5_id :       led1 = !led1;
+                            b5 = !b5;
+                            break;
+        
+        case b7_id  :
+        case bA7_id :       led1 = !led1;
+                            b7 = !b7;
+                            break;
+        
+        default :           blinky();
+                            ret = 1;
+                            break;
+    }
+    return ret;
+}
\ No newline at end of file