project_sensor

Dependencies:   project mbed nRF51822

Committer:
didierlauwerys
Date:
Sun May 28 16:26:53 2017 +0000
Revision:
0:75d0e1bb5990
spi_ctrl

Who changed what in which revision?

UserRevisionLine numberNew contents of line
didierlauwerys 0:75d0e1bb5990 1 using namespace std;
didierlauwerys 0:75d0e1bb5990 2
didierlauwerys 0:75d0e1bb5990 3 #include "mbed.h"
didierlauwerys 0:75d0e1bb5990 4 #include "spi_master.h"
didierlauwerys 0:75d0e1bb5990 5 #include "adxl345.h"
didierlauwerys 0:75d0e1bb5990 6 #include "ble/BLE.h"
didierlauwerys 0:75d0e1bb5990 7 #include "ble/Gap.h"
didierlauwerys 0:75d0e1bb5990 8 #include "ble/UUID.h"
didierlauwerys 0:75d0e1bb5990 9 #include "ble/GattCharacteristic.h"
didierlauwerys 0:75d0e1bb5990 10 #include "ble/GattCallbackParamTypes.h"
didierlauwerys 0:75d0e1bb5990 11 #include "ble/GattServer.h"
didierlauwerys 0:75d0e1bb5990 12
didierlauwerys 0:75d0e1bb5990 13 //#define CS P0_7 //chipselect
didierlauwerys 0:75d0e1bb5990 14 #define MOSI P0_9 //Master Out Slave In
didierlauwerys 0:75d0e1bb5990 15 #define MISO P0_11 //Master In Slave Out
didierlauwerys 0:75d0e1bb5990 16 #define SCK P0_8 //Clock
didierlauwerys 0:75d0e1bb5990 17 //additional IO
didierlauwerys 0:75d0e1bb5990 18 #define ON_SW P0_28 //ON/OFF switch
didierlauwerys 0:75d0e1bb5990 19 #define BEPB P0_29 //Enable/disable bluetooth push button
didierlauwerys 0:75d0e1bb5990 20 #define CHARACT_DATA 0
didierlauwerys 0:75d0e1bb5990 21
didierlauwerys 0:75d0e1bb5990 22 #define MIN_CONN_INTERVAL 10 //250 milliseconds
didierlauwerys 0:75d0e1bb5990 23 #define MAX_CONN_INTERVAL 30 //350 milliseconds
didierlauwerys 0:75d0e1bb5990 24
didierlauwerys 0:75d0e1bb5990 25 DigitalOut spi_cs(P0_28);
didierlauwerys 0:75d0e1bb5990 26 DigitalIn int1(P0_15);
didierlauwerys 0:75d0e1bb5990 27 DigitalIn location(P0_07);
didierlauwerys 0:75d0e1bb5990 28 SPIClass SPI1(NRF_SPI1);
didierlauwerys 0:75d0e1bb5990 29 data_member_t data[513];
didierlauwerys 0:75d0e1bb5990 30 BLEDevice ble;
didierlauwerys 0:75d0e1bb5990 31 Gap::Handle_t connectionHandle = 0xFFFF;
didierlauwerys 0:75d0e1bb5990 32
didierlauwerys 0:75d0e1bb5990 33 /*SET UUID*/
didierlauwerys 0:75d0e1bb5990 34 const UUID GATT_SERVICE = "88888888-5555-4444-1111-777777777777";
didierlauwerys 0:75d0e1bb5990 35 const UUID ADV_DATA = "11001100-2200-3300-4400-550055005500";
didierlauwerys 0:75d0e1bb5990 36 const UUID RECV_DATA = "22002200-3300-4400-5500-660066006600";
didierlauwerys 0:75d0e1bb5990 37 char *compbuf= new char[26];
didierlauwerys 0:75d0e1bb5990 38 uint16_t compbufLen=0;
didierlauwerys 0:75d0e1bb5990 39 char *sendbuf= new char[26];
didierlauwerys 0:75d0e1bb5990 40 char *sendbufaddr=sendbuf;
didierlauwerys 0:75d0e1bb5990 41 uint16_t sendbufLen=20*sizeof(uint8_t);
didierlauwerys 0:75d0e1bb5990 42 char *readystr = "data ready";
didierlauwerys 0:75d0e1bb5990 43 uint16_t readyLen = sizeof("data ready");
didierlauwerys 0:75d0e1bb5990 44 char *startstr = "START";
didierlauwerys 0:75d0e1bb5990 45 uint16_t startLen = sizeof("START");
didierlauwerys 0:75d0e1bb5990 46 char *sendstr = "SEND";
didierlauwerys 0:75d0e1bb5990 47 uint16_t sendLen = sizeof("SEND");
didierlauwerys 0:75d0e1bb5990 48 bool data_ready;
didierlauwerys 0:75d0e1bb5990 49 uint16_t sendindex;
didierlauwerys 0:75d0e1bb5990 50 uint8_t *AdvData= new uint8_t[26];
didierlauwerys 0:75d0e1bb5990 51 uint16_t AdvDataLen=0;
didierlauwerys 0:75d0e1bb5990 52 uint8_t *RcvData= new uint8_t[26];
didierlauwerys 0:75d0e1bb5990 53 uint16_t RcvDataLen=0;
didierlauwerys 0:75d0e1bb5990 54 uint8_t devnr = 1;
didierlauwerys 0:75d0e1bb5990 55 unsigned count;
didierlauwerys 0:75d0e1bb5990 56 /* Device Name, simpel discovey */
didierlauwerys 0:75d0e1bb5990 57 const static char DEVICE_NAME[] = "Trump";
didierlauwerys 0:75d0e1bb5990 58 GattCharacteristic gattchar = GattCharacteristic(ADV_DATA, AdvData, AdvDataLen, 26, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY|GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ);
didierlauwerys 0:75d0e1bb5990 59 GattCharacteristic rxCharacteristic = GattCharacteristic(RECV_DATA, RcvData, RcvDataLen, 26, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE);// | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ);
didierlauwerys 0:75d0e1bb5990 60
didierlauwerys 0:75d0e1bb5990 61 GattCharacteristic *CHARACT_ARRAY[] = {&gattchar,&rxCharacteristic};
didierlauwerys 0:75d0e1bb5990 62 GattService gatt_service(GATT_SERVICE,CHARACT_ARRAY,2);
didierlauwerys 0:75d0e1bb5990 63 GattAttribute::Handle_t writeHandle;
didierlauwerys 0:75d0e1bb5990 64 GattAttribute::Handle_t readHandle;
didierlauwerys 0:75d0e1bb5990 65
didierlauwerys 0:75d0e1bb5990 66
didierlauwerys 0:75d0e1bb5990 67
didierlauwerys 0:75d0e1bb5990 68
didierlauwerys 0:75d0e1bb5990 69 bool poll_start_send_data(uint8_t *compare_str, uint8_t comp_length){
didierlauwerys 0:75d0e1bb5990 70 uint16_t bufLen = 27;
didierlauwerys 0:75d0e1bb5990 71 uint8_t *rdbuf= new uint8_t[bufLen];
didierlauwerys 0:75d0e1bb5990 72 ble.readCharacteristicValue(readHandle,rdbuf,&bufLen);
didierlauwerys 0:75d0e1bb5990 73 for (uint8_t i=0 ; i<comp_length-1 ; i++)
didierlauwerys 0:75d0e1bb5990 74 {
didierlauwerys 0:75d0e1bb5990 75 if (*(rdbuf+i*sizeof(uint8_t)) != *(compare_str+i*sizeof(uint8_t)))
didierlauwerys 0:75d0e1bb5990 76 {
didierlauwerys 0:75d0e1bb5990 77 delete rdbuf;
didierlauwerys 0:75d0e1bb5990 78 return false;
didierlauwerys 0:75d0e1bb5990 79 }
didierlauwerys 0:75d0e1bb5990 80 }
didierlauwerys 0:75d0e1bb5990 81 delete rdbuf;
didierlauwerys 0:75d0e1bb5990 82 return true;
didierlauwerys 0:75d0e1bb5990 83 }
didierlauwerys 0:75d0e1bb5990 84
didierlauwerys 0:75d0e1bb5990 85 void Flash_Buff_WriteBytes(uint8_t addr, uint8_t pbuf)
didierlauwerys 0:75d0e1bb5990 86 {
didierlauwerys 0:75d0e1bb5990 87 spi_cs = 0;
didierlauwerys 0:75d0e1bb5990 88 wait_us(200);
didierlauwerys 0:75d0e1bb5990 89 SPI1.transfer((uint8_t)addr);
didierlauwerys 0:75d0e1bb5990 90 SPI1.transfer(pbuf);
didierlauwerys 0:75d0e1bb5990 91
didierlauwerys 0:75d0e1bb5990 92 wait_us(200);
didierlauwerys 0:75d0e1bb5990 93 spi_cs = 1;
didierlauwerys 0:75d0e1bb5990 94 }
didierlauwerys 0:75d0e1bb5990 95
didierlauwerys 0:75d0e1bb5990 96 void Flash_Buff_ReadBytes(uint8_t addr, uint8_t *pbuf)
didierlauwerys 0:75d0e1bb5990 97 {
didierlauwerys 0:75d0e1bb5990 98 spi_cs = 0;
didierlauwerys 0:75d0e1bb5990 99 wait_us(20);
didierlauwerys 0:75d0e1bb5990 100
didierlauwerys 0:75d0e1bb5990 101 SPI1.transfer((uint8_t)addr|0x80);
didierlauwerys 0:75d0e1bb5990 102 *pbuf = SPI1.transfer(0x00);
didierlauwerys 0:75d0e1bb5990 103
didierlauwerys 0:75d0e1bb5990 104 wait_us(20);
didierlauwerys 0:75d0e1bb5990 105 spi_cs = 1;
didierlauwerys 0:75d0e1bb5990 106 }
didierlauwerys 0:75d0e1bb5990 107
didierlauwerys 0:75d0e1bb5990 108 void init_adxl()
didierlauwerys 0:75d0e1bb5990 109 {
didierlauwerys 0:75d0e1bb5990 110 Flash_Buff_WriteBytes(INT_ENABLE, 0x00);
didierlauwerys 0:75d0e1bb5990 111 Flash_Buff_WriteBytes(THRESH_TAP, THRESH_TAP_INIT);
didierlauwerys 0:75d0e1bb5990 112 Flash_Buff_WriteBytes(OFSX, OFSX_INIT);
didierlauwerys 0:75d0e1bb5990 113 Flash_Buff_WriteBytes(OFSY, OFSY_INIT);
didierlauwerys 0:75d0e1bb5990 114 Flash_Buff_WriteBytes(OFSZ, OFSZ_INIT);
didierlauwerys 0:75d0e1bb5990 115 Flash_Buff_WriteBytes(DUR, DUR_INIT);
didierlauwerys 0:75d0e1bb5990 116 Flash_Buff_WriteBytes(Latent, Latent_INIT);
didierlauwerys 0:75d0e1bb5990 117 Flash_Buff_WriteBytes(Window, Window_INIT);
didierlauwerys 0:75d0e1bb5990 118 Flash_Buff_WriteBytes(THRESH_ACT, THRESH_ACT_INIT);
didierlauwerys 0:75d0e1bb5990 119 Flash_Buff_WriteBytes(THRESH_INACT, THRESH_INACT_INIT);
didierlauwerys 0:75d0e1bb5990 120 Flash_Buff_WriteBytes(TIME_INACT, TIME_INACT_INIT);
didierlauwerys 0:75d0e1bb5990 121 Flash_Buff_WriteBytes(ACT_INACT_CTL, ACT_INACT_CTL_INIT);
didierlauwerys 0:75d0e1bb5990 122 Flash_Buff_WriteBytes(THRESH_FF, THRESH_FF_INIT);
didierlauwerys 0:75d0e1bb5990 123 Flash_Buff_WriteBytes(TIME_FF, TIME_FF_INIT);
didierlauwerys 0:75d0e1bb5990 124 Flash_Buff_WriteBytes(TAP_AXES, TAP_AXES_INIT);
didierlauwerys 0:75d0e1bb5990 125 Flash_Buff_WriteBytes(BW_RATE, BW_RATE_INIT);
didierlauwerys 0:75d0e1bb5990 126 Flash_Buff_WriteBytes(POWER_CTL, POWER_CTL_INIT);
didierlauwerys 0:75d0e1bb5990 127 Flash_Buff_WriteBytes(INT_MAP, INT_MAP_INIT);
didierlauwerys 0:75d0e1bb5990 128 Flash_Buff_WriteBytes(DATA_FORMAT, DATA_FORMAT_INIT);
didierlauwerys 0:75d0e1bb5990 129 Flash_Buff_WriteBytes(FIFO_CTL, FIFO_CTL_INIT);
didierlauwerys 0:75d0e1bb5990 130 Flash_Buff_WriteBytes(POWER_CTL, POWER_CTL_INIT | 0x08);
didierlauwerys 0:75d0e1bb5990 131 Flash_Buff_WriteBytes(INT_ENABLE, INT_ENABLE_INIT);
didierlauwerys 0:75d0e1bb5990 132 }
didierlauwerys 0:75d0e1bb5990 133
didierlauwerys 0:75d0e1bb5990 134 void read_data(uint16_t index)
didierlauwerys 0:75d0e1bb5990 135 {
didierlauwerys 0:75d0e1bb5990 136 spi_cs = 0;
didierlauwerys 0:75d0e1bb5990 137 wait_us(20);
didierlauwerys 0:75d0e1bb5990 138
didierlauwerys 0:75d0e1bb5990 139 SPI1.transfer((uint8_t)(DATAX0|0xC0));
didierlauwerys 0:75d0e1bb5990 140 data[index].data_x0 = SPI1.transfer(0x00)^0x80;
didierlauwerys 0:75d0e1bb5990 141 data[index].data_x1 = SPI1.transfer(0x00);
didierlauwerys 0:75d0e1bb5990 142 data[index].data_y0 = SPI1.transfer(0x00)^0x80;
didierlauwerys 0:75d0e1bb5990 143 data[index].data_y1 = SPI1.transfer(0x00);
didierlauwerys 0:75d0e1bb5990 144 data[index].data_z0 = SPI1.transfer(0x00)^0x80;
didierlauwerys 0:75d0e1bb5990 145 data[index].data_z1 = SPI1.transfer(0x00);
didierlauwerys 0:75d0e1bb5990 146
didierlauwerys 0:75d0e1bb5990 147 wait_us(20);
didierlauwerys 0:75d0e1bb5990 148 spi_cs = 1;
didierlauwerys 0:75d0e1bb5990 149 }
didierlauwerys 0:75d0e1bb5990 150
didierlauwerys 0:75d0e1bb5990 151
didierlauwerys 0:75d0e1bb5990 152 /* WHEN CONNECTION ... */
didierlauwerys 0:75d0e1bb5990 153 void connectionCallback(const Gap::ConnectionCallbackParams_t *params) {
didierlauwerys 0:75d0e1bb5990 154 if (params->role == Gap::CENTRAL) {
didierlauwerys 0:75d0e1bb5990 155 connectionHandle = params->handle;
didierlauwerys 0:75d0e1bb5990 156 }
didierlauwerys 0:75d0e1bb5990 157 }
didierlauwerys 0:75d0e1bb5990 158
didierlauwerys 0:75d0e1bb5990 159
didierlauwerys 0:75d0e1bb5990 160 /* Restart advertising when the peer disconnects */
didierlauwerys 0:75d0e1bb5990 161 void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params)
didierlauwerys 0:75d0e1bb5990 162 {
didierlauwerys 0:75d0e1bb5990 163 BLE::Instance().gap().startAdvertising();
didierlauwerys 0:75d0e1bb5990 164 }
didierlauwerys 0:75d0e1bb5990 165
didierlauwerys 0:75d0e1bb5990 166 /*This function is called when the ble initialization process has failed*/
didierlauwerys 0:75d0e1bb5990 167 void onBleInitError(BLE &ble, ble_error_t error)
didierlauwerys 0:75d0e1bb5990 168 {
didierlauwerys 0:75d0e1bb5990 169 /* Avoid compiler warnings, library said to do this */
didierlauwerys 0:75d0e1bb5990 170 (void) ble;
didierlauwerys 0:75d0e1bb5990 171 (void) error;
didierlauwerys 0:75d0e1bb5990 172
didierlauwerys 0:75d0e1bb5990 173 /* Initialization error handling should go here */
didierlauwerys 0:75d0e1bb5990 174 }
didierlauwerys 0:75d0e1bb5990 175
didierlauwerys 0:75d0e1bb5990 176 void dataSentCallback(unsigned count)
didierlauwerys 0:75d0e1bb5990 177 {
didierlauwerys 0:75d0e1bb5990 178 SPI1.transfer(0xCC);
didierlauwerys 0:75d0e1bb5990 179 sendindex+=1;
didierlauwerys 0:75d0e1bb5990 180 memcpy(sendbufaddr+0*sizeof(uint8_t), &sendindex, sizeof(uint16_t));
didierlauwerys 0:75d0e1bb5990 181 memcpy(sendbufaddr+2*sizeof(uint8_t), &(data[sendindex].data_x0), sizeof(uint8_t));
didierlauwerys 0:75d0e1bb5990 182 memcpy(sendbufaddr+3*sizeof(uint8_t), &(data[sendindex].data_x1), sizeof(uint8_t));
didierlauwerys 0:75d0e1bb5990 183 memcpy(sendbufaddr+4*sizeof(uint8_t), &(data[sendindex].data_y0), sizeof(uint8_t));
didierlauwerys 0:75d0e1bb5990 184 memcpy(sendbufaddr+5*sizeof(uint8_t), &(data[sendindex].data_y1), sizeof(uint8_t));
didierlauwerys 0:75d0e1bb5990 185 memcpy(sendbufaddr+6*sizeof(uint8_t), &(data[sendindex].data_z0), sizeof(uint8_t));
didierlauwerys 0:75d0e1bb5990 186 memcpy(sendbufaddr+7*sizeof(uint8_t), &(data[sendindex].data_z1), sizeof(uint8_t));
didierlauwerys 0:75d0e1bb5990 187 sendindex+=1;
didierlauwerys 0:75d0e1bb5990 188 memcpy(sendbufaddr+8*sizeof(uint8_t), &(data[sendindex].data_x0), sizeof(uint8_t));
didierlauwerys 0:75d0e1bb5990 189 memcpy(sendbufaddr+9*sizeof(uint8_t), &(data[sendindex].data_x1), sizeof(uint8_t));
didierlauwerys 0:75d0e1bb5990 190 memcpy(sendbufaddr+10*sizeof(uint8_t), &(data[sendindex].data_y0), sizeof(uint8_t));
didierlauwerys 0:75d0e1bb5990 191 memcpy(sendbufaddr+11*sizeof(uint8_t), &(data[sendindex].data_y1), sizeof(uint8_t));
didierlauwerys 0:75d0e1bb5990 192 memcpy(sendbufaddr+12*sizeof(uint8_t), &(data[sendindex].data_z0), sizeof(uint8_t));
didierlauwerys 0:75d0e1bb5990 193 memcpy(sendbufaddr+13*sizeof(uint8_t), &(data[sendindex].data_z1), sizeof(uint8_t));
didierlauwerys 0:75d0e1bb5990 194 sendindex+=1;
didierlauwerys 0:75d0e1bb5990 195 memcpy(sendbufaddr+14*sizeof(uint8_t), &(data[sendindex].data_x0), sizeof(uint8_t));
didierlauwerys 0:75d0e1bb5990 196 memcpy(sendbufaddr+15*sizeof(uint8_t), &(data[sendindex].data_x1), sizeof(uint8_t));
didierlauwerys 0:75d0e1bb5990 197 memcpy(sendbufaddr+16*sizeof(uint8_t), &(data[sendindex].data_y0), sizeof(uint8_t));
didierlauwerys 0:75d0e1bb5990 198 memcpy(sendbufaddr+17*sizeof(uint8_t), &(data[sendindex].data_y1), sizeof(uint8_t));
didierlauwerys 0:75d0e1bb5990 199 memcpy(sendbufaddr+18*sizeof(uint8_t), &(data[sendindex].data_z0), sizeof(uint8_t));
didierlauwerys 0:75d0e1bb5990 200 memcpy(sendbufaddr+19*sizeof(uint8_t), &(data[sendindex].data_z1), sizeof(uint8_t));
didierlauwerys 0:75d0e1bb5990 201 if(sendindex>=512)
didierlauwerys 0:75d0e1bb5990 202 data_ready=false;
didierlauwerys 0:75d0e1bb5990 203
didierlauwerys 0:75d0e1bb5990 204 }
didierlauwerys 0:75d0e1bb5990 205
didierlauwerys 0:75d0e1bb5990 206 /*Callback triggered when ble initialization process has finished*/
didierlauwerys 0:75d0e1bb5990 207 void bleInitComplete(BLE::InitializationCompleteCallbackContext *params)
didierlauwerys 0:75d0e1bb5990 208 {
didierlauwerys 0:75d0e1bb5990 209 BLE& ble = params->ble;
didierlauwerys 0:75d0e1bb5990 210 ble_error_t error = params->error;
didierlauwerys 0:75d0e1bb5990 211
didierlauwerys 0:75d0e1bb5990 212 /* In case of error, forward the error handling to onBleInitError */
didierlauwerys 0:75d0e1bb5990 213 if (error != BLE_ERROR_NONE) {
didierlauwerys 0:75d0e1bb5990 214 onBleInitError(ble, error);
didierlauwerys 0:75d0e1bb5990 215 return;
didierlauwerys 0:75d0e1bb5990 216 }
didierlauwerys 0:75d0e1bb5990 217
didierlauwerys 0:75d0e1bb5990 218 /* Ensure that it is the default instance of BLE */
didierlauwerys 0:75d0e1bb5990 219 if(ble.getInstanceID() != BLE::DEFAULT_INSTANCE) {
didierlauwerys 0:75d0e1bb5990 220 return;
didierlauwerys 0:75d0e1bb5990 221 }
didierlauwerys 0:75d0e1bb5990 222
didierlauwerys 0:75d0e1bb5990 223 /* Set device name characteristic data */
didierlauwerys 0:75d0e1bb5990 224 ble.gap().setDeviceName((const uint8_t *) DEVICE_NAME);
didierlauwerys 0:75d0e1bb5990 225
didierlauwerys 0:75d0e1bb5990 226 ble.gattServer().onDataSent(dataSentCallback);
didierlauwerys 0:75d0e1bb5990 227
didierlauwerys 0:75d0e1bb5990 228
didierlauwerys 0:75d0e1bb5990 229 /* callback when disconnected */
didierlauwerys 0:75d0e1bb5990 230 ble.gap().onDisconnection(disconnectionCallback);
didierlauwerys 0:75d0e1bb5990 231
didierlauwerys 0:75d0e1bb5990 232 /* Sacrifice 3B of 31B to some Advertising Flags (see nrfconnect toolbox for flag parameters :) ) */
didierlauwerys 0:75d0e1bb5990 233 // for
didierlauwerys 0:75d0e1bb5990 234 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE);// say this device can be discovered by other BLE supportingdevices
didierlauwerys 0:75d0e1bb5990 235 ble.gap().setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); // say that a connection can be set ( connectable) and that it does not matter with who it connects (unidirected)
didierlauwerys 0:75d0e1bb5990 236
didierlauwerys 0:75d0e1bb5990 237
didierlauwerys 0:75d0e1bb5990 238 /* Sacrifice another 2B of 31B (actually 29B) to AdvType overhead, rest goes to AdvData array --> about 26B of actual sendable data :o */
didierlauwerys 0:75d0e1bb5990 239 //Overhead = 1B Length, 1B Type
didierlauwerys 0:75d0e1bb5990 240 //Type = AdvData
didierlauwerys 0:75d0e1bb5990 241 //Length = sizeof(AdvData)
didierlauwerys 0:75d0e1bb5990 242 //ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::SERVICE_DATA, AdvData, sizeof(AdvData));
didierlauwerys 0:75d0e1bb5990 243
didierlauwerys 0:75d0e1bb5990 244 /*fill in device name as local name*/
didierlauwerys 0:75d0e1bb5990 245 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME));
didierlauwerys 0:75d0e1bb5990 246
didierlauwerys 0:75d0e1bb5990 247 /* Set advertising interval. Longer interval == Less radiothingies use == longer battery life :) */
didierlauwerys 0:75d0e1bb5990 248 ble.gap().setAdvertisingInterval(20); /* 100ms */
didierlauwerys 0:75d0e1bb5990 249
didierlauwerys 0:75d0e1bb5990 250
didierlauwerys 0:75d0e1bb5990 251
didierlauwerys 0:75d0e1bb5990 252 ble.addService(gatt_service);
didierlauwerys 0:75d0e1bb5990 253
didierlauwerys 0:75d0e1bb5990 254 //ble.gap().addData(GapAdvertisingData::SERVICE_DATA, (uint8_t *)AdvData, sizeof(AdvData));
didierlauwerys 0:75d0e1bb5990 255 /* Start advertising */
didierlauwerys 0:75d0e1bb5990 256 ble.gap().startAdvertising(); //start sending advertising packets
didierlauwerys 0:75d0e1bb5990 257
didierlauwerys 0:75d0e1bb5990 258 ble.initializeSecurity();
didierlauwerys 0:75d0e1bb5990 259 //end
didierlauwerys 0:75d0e1bb5990 260 }
didierlauwerys 0:75d0e1bb5990 261
didierlauwerys 0:75d0e1bb5990 262
didierlauwerys 0:75d0e1bb5990 263 main() {
didierlauwerys 0:75d0e1bb5990 264 wait_ms(1);
didierlauwerys 0:75d0e1bb5990 265 data_ready=false;
didierlauwerys 0:75d0e1bb5990 266 BLE& ble = BLE::Instance();
didierlauwerys 0:75d0e1bb5990 267 ble.init(bleInitComplete);
didierlauwerys 0:75d0e1bb5990 268 spi_cs = 1;
didierlauwerys 0:75d0e1bb5990 269 if (location==1) {
didierlauwerys 0:75d0e1bb5990 270 char *waitingstr = "waiting1";
didierlauwerys 0:75d0e1bb5990 271 uint16_t waitingLen = sizeof("waiting1"); }
didierlauwerys 0:75d0e1bb5990 272 else if(location==0) {
didierlauwerys 0:75d0e1bb5990 273 char *waitingstr = "waiting0";
didierlauwerys 0:75d0e1bb5990 274 uint16_t waitingLen = sizeof("waiting0"); }
didierlauwerys 0:75d0e1bb5990 275 uint16_t index;
didierlauwerys 0:75d0e1bb5990 276 for(uint16_t i=0; i<513;i++){
didierlauwerys 0:75d0e1bb5990 277 data[i].data_x0=(uint8_t)0;
didierlauwerys 0:75d0e1bb5990 278 data[i].data_x1=(uint8_t)0;
didierlauwerys 0:75d0e1bb5990 279 data[i].data_y0=(uint8_t)0;
didierlauwerys 0:75d0e1bb5990 280 data[i].data_y1=(uint8_t)0;
didierlauwerys 0:75d0e1bb5990 281 data[i].data_z0=(uint8_t)0;
didierlauwerys 0:75d0e1bb5990 282 data[i].data_z1=(uint8_t)0;
didierlauwerys 0:75d0e1bb5990 283 }
didierlauwerys 0:75d0e1bb5990 284 SPI1.begin(SCK, MOSI, MISO);
didierlauwerys 0:75d0e1bb5990 285 init_adxl();
didierlauwerys 0:75d0e1bb5990 286 writeHandle = gattchar.getValueHandle();
didierlauwerys 0:75d0e1bb5990 287 readHandle = rxCharacteristic.getValueHandle();
didierlauwerys 0:75d0e1bb5990 288
didierlauwerys 0:75d0e1bb5990 289 while(1)
didierlauwerys 0:75d0e1bb5990 290 {
didierlauwerys 0:75d0e1bb5990 291 ble.gattServer().write(writeHandle,(uint8_t *)waitingstr, waitingLen);
didierlauwerys 0:75d0e1bb5990 292 while (poll_start_send_data((uint8_t *)startstr, startLen) != true)
didierlauwerys 0:75d0e1bb5990 293 {
didierlauwerys 0:75d0e1bb5990 294 ble.waitForEvent();
didierlauwerys 0:75d0e1bb5990 295 }
didierlauwerys 0:75d0e1bb5990 296 //SPI
didierlauwerys 0:75d0e1bb5990 297 Flash_Buff_WriteBytes(POWER_CTL, POWER_CTL_INIT | 0x08);
didierlauwerys 0:75d0e1bb5990 298 for (index=0 ; index<513 ; index++){
didierlauwerys 0:75d0e1bb5990 299 while(!int1){wait_us(1);}
didierlauwerys 0:75d0e1bb5990 300 read_data(index);
didierlauwerys 0:75d0e1bb5990 301 }
didierlauwerys 0:75d0e1bb5990 302 Flash_Buff_WriteBytes(POWER_CTL, POWER_CTL_INIT | 0x04);
didierlauwerys 0:75d0e1bb5990 303 ble.gattServer().write(writeHandle,(uint8_t *)readystr, readyLen);
didierlauwerys 0:75d0e1bb5990 304 //condition to send data
didierlauwerys 0:75d0e1bb5990 305 while (poll_start_send_data((uint8_t *)sendstr, sendLen) != true)
didierlauwerys 0:75d0e1bb5990 306 {
didierlauwerys 0:75d0e1bb5990 307 ble.waitForEvent();
didierlauwerys 0:75d0e1bb5990 308 }
didierlauwerys 0:75d0e1bb5990 309 index=0;
didierlauwerys 0:75d0e1bb5990 310 sendindex=2;
didierlauwerys 0:75d0e1bb5990 311 data_ready=true;
didierlauwerys 0:75d0e1bb5990 312 memcpy(sendbufaddr+0*sizeof(uint8_t), &index, sizeof(uint16_t));
didierlauwerys 0:75d0e1bb5990 313 memcpy(sendbufaddr+2*sizeof(uint8_t), &(data[index].data_x0), sizeof(uint8_t));
didierlauwerys 0:75d0e1bb5990 314 memcpy(sendbufaddr+3*sizeof(uint8_t), &(data[index].data_x1), sizeof(uint8_t));
didierlauwerys 0:75d0e1bb5990 315 memcpy(sendbufaddr+4*sizeof(uint8_t), &(data[index].data_y0), sizeof(uint8_t));
didierlauwerys 0:75d0e1bb5990 316 memcpy(sendbufaddr+5*sizeof(uint8_t), &(data[index].data_y1), sizeof(uint8_t));
didierlauwerys 0:75d0e1bb5990 317 memcpy(sendbufaddr+6*sizeof(uint8_t), &(data[index].data_z0), sizeof(uint8_t));
didierlauwerys 0:75d0e1bb5990 318 memcpy(sendbufaddr+7*sizeof(uint8_t), &(data[index].data_z1), sizeof(uint8_t));
didierlauwerys 0:75d0e1bb5990 319 memcpy(sendbufaddr+8*sizeof(uint8_t), &(data[index+1].data_x0), sizeof(uint8_t));
didierlauwerys 0:75d0e1bb5990 320 memcpy(sendbufaddr+9*sizeof(uint8_t), &(data[index+1].data_x1), sizeof(uint8_t));
didierlauwerys 0:75d0e1bb5990 321 memcpy(sendbufaddr+10*sizeof(uint8_t), &(data[index+1].data_y0), sizeof(uint8_t));
didierlauwerys 0:75d0e1bb5990 322 memcpy(sendbufaddr+11*sizeof(uint8_t), &(data[index+1].data_y1), sizeof(uint8_t));
didierlauwerys 0:75d0e1bb5990 323 memcpy(sendbufaddr+12*sizeof(uint8_t), &(data[index+1].data_z0), sizeof(uint8_t));
didierlauwerys 0:75d0e1bb5990 324 memcpy(sendbufaddr+13*sizeof(uint8_t), &(data[index+1].data_z1), sizeof(uint8_t));
didierlauwerys 0:75d0e1bb5990 325 memcpy(sendbufaddr+14*sizeof(uint8_t), &(data[index+2].data_x0), sizeof(uint8_t));
didierlauwerys 0:75d0e1bb5990 326 memcpy(sendbufaddr+15*sizeof(uint8_t), &(data[index+2].data_x1), sizeof(uint8_t));
didierlauwerys 0:75d0e1bb5990 327 memcpy(sendbufaddr+16*sizeof(uint8_t), &(data[index+2].data_y0), sizeof(uint8_t));
didierlauwerys 0:75d0e1bb5990 328 memcpy(sendbufaddr+17*sizeof(uint8_t), &(data[index+2].data_y1), sizeof(uint8_t));
didierlauwerys 0:75d0e1bb5990 329 memcpy(sendbufaddr+18*sizeof(uint8_t), &(data[index+2].data_z0), sizeof(uint8_t));
didierlauwerys 0:75d0e1bb5990 330 memcpy(sendbufaddr+19*sizeof(uint8_t), &(data[index+2].data_z1), sizeof(uint8_t));
didierlauwerys 0:75d0e1bb5990 331 wait(2);
didierlauwerys 0:75d0e1bb5990 332 while (data_ready == true)
didierlauwerys 0:75d0e1bb5990 333 {
didierlauwerys 0:75d0e1bb5990 334 ble.gattServer().write(writeHandle, (uint8_t *)sendbufaddr, sendbufLen);
didierlauwerys 0:75d0e1bb5990 335 ble.waitForEvent();
didierlauwerys 0:75d0e1bb5990 336
didierlauwerys 0:75d0e1bb5990 337 }
didierlauwerys 0:75d0e1bb5990 338 }
didierlauwerys 0:75d0e1bb5990 339 }