disconnect

Dependencies:   Puck lz mbed-src seeedstudio-epaper

Fork of display-puck by Nordic Pucks

Files at this revision

API Documentation at this revision

Comitter:
sigveseb
Date:
Thu Jul 17 14:16:16 2014 +0000
Child:
1:42882ba4c901
Commit message:
-

Changed in this revision

BLE_API.lib Show annotated file Show diff for this revision Revisions of this file
display_service.cpp Show annotated file Show diff for this revision Revisions of this file
lz.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-src.lib Show annotated file Show diff for this revision Revisions of this file
nRF51822.lib Show annotated file Show diff for this revision Revisions of this file
seedstudio-epaper.lib Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/BLE_API.lib	Thu Jul 17 14:16:16 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/teams/Bluetooth-Low-Energy/code/BLE_API/#8890715aaf55
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/display_service.cpp	Thu Jul 17 14:16:16 2014 +0000
@@ -0,0 +1,20 @@
+#include "BLEDevice.h"
+
+uint8_t uuid_array_service[16]   = {'b', 'f', 't', 'j', ' ', 'd', 'i', 's', 'p', 'l', 'a', 'y', ' ', ' ', ' ', ' '};
+uint8_t uuid_array_command[16]    = {'b', 'f', 't', 'j', ' ', 'd', 'i', 's', 'p', 'l', 'a', 'y', ' ', 'c', 'o', 'm'};
+uint8_t uuid_array_data[16]    = {'b', 'f', 't', 'j', ' ', 'd', 'i', 's', 'p', 'l', 'a', 'y', ' ', 'd', 'a', 't'};
+
+const UUID uuid_service = UUID(uuid_array_service);
+const UUID uuid_command = UUID(uuid_array_command);
+const UUID uuid_data = UUID(uuid_array_data);
+
+uint8_t command_data[1];
+uint16_t command_data_length = 1;
+uint8_t data_data[20];
+uint16_t data_data_length = 20;
+
+GattCharacteristic command = GattCharacteristic(uuid_command, command_data, sizeof(command_data), sizeof(command_data), GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ);
+GattCharacteristic data = GattCharacteristic(uuid_data, data_data, sizeof(data_data), sizeof(data_data), GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ);
+
+GattCharacteristic *characteristics[] = {&command, &data};
+GattService display_service = GattService(uuid_service, characteristics, sizeof(characteristics) / sizeof(GattCharacteristic *));
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lz.lib	Thu Jul 17 14:16:16 2014 +0000
@@ -0,0 +1,1 @@
+lz#ce4be867658b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu Jul 17 14:16:16 2014 +0000
@@ -0,0 +1,218 @@
+#include <mbed.h>
+#include <EPD.h>
+#include "mbed.h"
+#include "BLEDevice.h"
+#include "lz.h"
+
+Serial py(USBTX, USBRX);
+BLEDevice ble;
+DigitalOut myled(LED1);
+
+int receive_index = 0;
+
+
+ /*
+ 
+ connections:
+
+ 
+LPC1768 <--> nRF51822 <--> Shield
+---------||------------||--------
+  p12   <-->    p2    <-->   D2 (M_EPD_PANEL_ON)
+  p13   <-->    p3    <-->   D3 (M_EPD_BORDER)
+  p14   <-->    p4    <-->   D4 (M_/SD_CS)
+  p25   <-->    p5    <-->   D5 (M_EPD_PWM)
+  p16   <-->    p6    <-->   D6 (M_EPD_/RESET) 
+  p17   <-->    p7    <-->   D7 (M_EPD_BUSY)
+  p18   <-->    p8    <-->   D8 (M_EPD_DISCHARGE)
+  p19   <-->   p26    <-->   D9 (M_/WORD_STOCK_CS)
+  p20   <-->    p0    <-->   D10 (M_/EPD_CS)
+  p21   <-->   p27    <-->   A1 (M_OE123)
+  p22   <-->   p28    <-->   A2 (M_CKV)
+  p23   <-->   p29    <-->   A3 (M_STV_IN)
+   
+  p5   <-->    p20    <-->   MOSI
+  p6   <-->    p22    <-->   MISO
+  p7   <-->    p25    <-->   SCK
+  
+  VCC <--> VCC
+  GND <--> GND
+ 
+ */
+ 
+#define COMMAND_NOOP 0
+#define COMMAND_CLEAR 1
+#define COMMAND_IMAGE_UPPER 2
+#define COMMAND_IMAGE_LOWER 3
+#define COMMAND_BEGIN_UPPER 4
+#define COMMAND_BEGIN_LOWER 5
+
+//#define IMAGE_SIZE 5808
+//#define Y_SIZE 176
+//#define X_SIZE 264
+#define IMAGE_SIZE 2904
+#define Y_SIZE 88
+#define X_SIZE 264
+ 
+uint8_t image[IMAGE_SIZE];
+
+extern GattService display_service;
+extern GattCharacteristic command, data;
+int current_command = COMMAND_NOOP;
+ 
+const static uint8_t beaconPayload[] = {
+    0x00, 0x4C, // Company identifier code (0x004C == Apple)
+    0x02,       // ID
+    0x15,       // length of the remaining payload
+    0xE2, 0x0A, 0x39, 0xF4, 0x73, 0xF5, 0x4B, 0xC4, // UUID
+    0xA1, 0x2F, 0x17, 0xD1, 0xAD, 0x07, 0xA9, 0x61,
+    0x13, 0x37, // the major value to differenciate a location
+    0xFA, 0xCC, // the minor value to differenciate a location
+    0xC0        // 2's complement of the Tx power (-56dB) (now modified)
+};
+
+void onDataWritten(uint16_t handle)
+{
+    for (int i = 0; i < display_service.getCharacteristicCount(); i++) {
+        GattCharacteristic* characteristic = display_service.getCharacteristic(i);
+        characteristic->getMaxLength();
+        if (characteristic->getHandle() == handle) {
+            uint16_t max_length = characteristic->getMaxLength();
+            ble.readCharacteristicValue(handle, characteristic->getValuePtr(), &max_length);
+            break;
+        }
+    }
+    
+    if (command.getHandle() == handle) {
+        current_command = command.getValuePtr()[0];
+        
+        
+        py.printf("%i\n", current_command);
+        
+        if(current_command == COMMAND_BEGIN_UPPER || current_command == COMMAND_BEGIN_LOWER) {
+            receive_index = 0;
+        }
+    }
+    
+    if (data.getHandle() == handle) {
+        uint8_t* value = data.getValuePtr();
+        for(int i = 0; i < 20 && receive_index < IMAGE_SIZE; i++) {
+            image[receive_index++] = value[i];
+        }
+        if (receive_index == IMAGE_SIZE) {
+            receive_index = 0;
+            if(current_command == COMMAND_BEGIN_UPPER) { current_command = COMMAND_IMAGE_UPPER; }
+            if(current_command == COMMAND_BEGIN_LOWER) { current_command = COMMAND_IMAGE_LOWER; }
+        }
+    }
+}
+
+void disconnectionCallback(void)
+{
+    py.printf("Disconnected!\n");
+    py.printf("Restarting the advertising process\n");
+    ble.startAdvertising();
+}
+
+ void connectionCallback(void)
+{
+    py.printf("Connected!\n");
+}
+
+
+ 
+//uint8_t image[5808];
+
+void clear(){
+    for(int i=0;i<IMAGE_SIZE;i++){
+        image[i] = 0;
+    } 
+}
+
+void set_pixel(int x, int y, int color) {
+    int byte_x = x / 8;
+    int byte_w = X_SIZE / 8;
+    int byte_offset = x % 8;
+    int byte = image[byte_x + byte_w * y];
+    if(color) {
+        byte |= 1 << byte_offset;
+    } else {
+        byte &= ~(1 << byte_offset);     
+    }
+    image[byte_x + byte_w * y] = byte;
+}
+
+int main() {
+    DigitalOut SD_CS(p4);
+    DigitalOut WORD_STOCK_CS(p26);
+      
+    SD_CS = 1;
+    WORD_STOCK_CS = 1;
+    
+    clear();
+    
+    EPD_Class EPD(p0, p2, p3, p8, p5, p6, p7);
+    
+    EPD.begin(EPD_2_7);
+    EPD.start();
+    EPD.clear();
+    EPD.end();
+    
+    ble.init();
+    ble.onDisconnection(disconnectionCallback);
+    ble.onConnection(connectionCallback);
+    ble.onDataWritten(onDataWritten);
+    ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED);
+    ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
+    ble.setAdvertisingInterval(160); /* 100ms; in multiples of 0.625ms. */
+    
+    
+    ble.accumulateAdvertisingPayload(GapAdvertisingData::MANUFACTURER_SPECIFIC_DATA,
+                    beaconPayload, sizeof(beaconPayload));
+    
+    ble.startAdvertising();
+
+    ble.addService(display_service);
+    
+    myled = 1;
+    
+    py.printf("Starting up.\n");
+    
+    current_command = COMMAND_NOOP;    
+
+    while (true) {
+        ble.waitForEvent();
+        myled = !myled;
+        
+        if(current_command == COMMAND_CLEAR) {
+                
+                py.printf("Clearing.\n");
+                EPD.begin(EPD_2_7);
+                EPD.start();
+                EPD.clear();
+                EPD.end();
+                current_command = COMMAND_NOOP;
+        }
+        
+        
+        if(current_command == COMMAND_IMAGE_UPPER) {
+                py.printf("Uppering.\n");
+                EPD.begin(EPD_2_7);
+                EPD.start();
+                EPD.image(image, 0, EPD.lines_per_display / 2);
+                EPD.end();
+                current_command = COMMAND_NOOP;
+        }
+        
+        
+        if(current_command == COMMAND_IMAGE_LOWER) {
+                py.printf("Lowering.\n");
+                EPD.begin(EPD_2_7);
+                EPD.start();
+                EPD.image(image, EPD.lines_per_display / 2);
+                EPD.end();
+                current_command = COMMAND_NOOP;
+        }
+        
+    }   
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-src.lib	Thu Jul 17 14:16:16 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed-src/#3424e7e3604b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/nRF51822.lib	Thu Jul 17 14:16:16 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/teams/Nordic-Semiconductor/code/nRF51822/#bd0186ce644a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/seedstudio-epaper.lib	Thu Jul 17 14:16:16 2014 +0000
@@ -0,0 +1,1 @@
+seedstudio-epaper#6ac5ba1343bf