12
Dependencies: BLE_API mbed nRF51822
Diff: main.cpp
- Revision:
- 17:6abf0e1667a1
- Parent:
- 16:bd87bb636883
--- a/main.cpp Mon Oct 16 11:53:06 2017 +0000 +++ b/main.cpp Thu Oct 19 11:23:08 2017 +0000 @@ -5,7 +5,6 @@ #include "mbed.h" #include "toolchain.h" #include "ble/BLE.h" -#include <SPISlave.h> #include <string> #include <stdio.h> @@ -16,14 +15,10 @@ //#include <stdio.h> //#include <conio.h> #include <stdlib.h> - -//# CS P0_14 //? -//# SCK P0_25 //+ -//# MOSI P0_20 //+ -//# MISO P0_22 //+ -SPISlave device(p25, p28, p29, p24); // mosi, miso, sclk, ssel -//SPISlave device(p20, p22, p25, p14); // mosi, miso, sclk, ssel - +#include "MbedJSONValue.h" +MbedJSONValue demo; +std::string s; + DigitalIn esp_baglimi(P0_11); // ############################### DigitalOut alivenessLED(p2, 1); // ############################### @@ -38,14 +33,6 @@ uint8_t buffertoSpi[100]; uint8_t say=0; int boyut, byt, databoyut; - -//int y[8]= {0x08, 0x0A, 0x01, 0x02, 0x03, 0x04, 0x05, 0x0F}; -///////int vx[15]= {15, 10, 2, 3, 4, 5, 6, 7,8,9,10,11,12,13, 15}; // ilk, boyut, data, 15 -//uint8_t z[8]= {0x08, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07}; -//uint8_t w[8]= {8, 1, 2, 3, 4, 5, 6, 7}; -//v = {0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00}; -//v[] = [0x07; 0x01; 0x02; 0x03; 0x04; 0x05; 0x06; 0x07]; -//v[] = [7; 1; 2; 3; 4; 5; 6; 7]; int a, sayac = 1, sayac2 = 2, sayac3 = 0, sayac4 = 0; int gelen, gelene; @@ -58,201 +45,51 @@ uint8_t PAKET_LENGTH;//SPI -> STM32 GÖNDERİLCEK DATANIN TOPLAM UZUNLUGU. } PACKED_Data[ToplamCihaz]; +int *f; +int size=0; -void dataGndr(int DataLen, int *D){ - - T: - - byt = DataLen; +void enqueue(int data){ // kuyruğa ekle // data + int * b = (int * ) malloc(sizeof(int)*size+1); + int i=0; - int data[byt]; - //gelen = 5; - - //while(gelen != 3){ - - //gelen = 9; - - if(device.receive()){ - - yineal: + printf("\r\n\r\nENQ_Giris = data= %d %x", data, data); - gelen = device.read(); - //pc.printf("\r\nA = %d %x", a, a); - - //while(gelen != 3){ - - if(gelene != gelen){ - pc.printf("\r\n"); - } - gelene = gelen; - - //if(gelen != 9){ // ???? - - pc.printf("\r\nGelen = %d %x", gelen, gelen); - - if(gelen == 0){ - device.reply(0); - pc.printf("\r\ngelen = 0 !!!!!!!!!"); - //gelen = 9; - goto T; - //goto deneme; - //reset(); //?????????????????????????????????????????????? - } - else if(gelen == 1){ // (boyut) 1 ise boyutu (D[0]) gönder - device.reply(D[0]); - //wait_ms(500); - //pc.printf("\r\nGelen = %d %x", gelen, gelen); - pc.printf("\t\tData[0] (boyut) = %d %x", D[0], D[0]); - sayac = 1; - } - else if(gelen == 2){ // gitmesi gereken data // D[1] - D[boyut-1] arasını gönderir - device.reply(D[sayac]); - pc.printf("\t\tData[%d] = %d %x", sayac, D[sayac], D[sayac]); - sayac++; - int s = sayac; - boyut = D[0]; - if(s == (boyut)){ // boyut -1'e kadar olmalı - s = 1; - sayac = 1; - } - } - else if(gelen == 3){ - //gelen = 9; - device.reply(0); - pc.printf("connection out\r\n"); - wait_ms(100); - goto T; - } - else{ - pc.printf("goto al\r\n"); - goto yineal; - } - - //} // if gelen != 9 - } // if device.recieve - else - { - pc.printf("\r\nMaster bagli degil\r\n\r\n"); - led1 != led1; - //b = 0; - wait_ms(500); - } + for(i = 0; i<size; i++){ + b[i]=f[i]; + printf("\r\nENQ_for b[i] = %d %x \t_data = %d %x", b[i], b[i], data, data); + } - //} // while -} // data gönder - - -//Flash_Buff_WriteBytes(0, buffertoSpi, bufferSize); -//Flash_Buff_WriteBytes(bufferSize, buffertoSpi); -//void Flash_Buff_WriteBytes(uint16_t addr, uint8_t *pbuf, uint16_t len) -/*void Flash_Buff_WriteBytes(uint8_t len, uint8_t *gndr) -{ - tekrar: - int v[len]; + b[i]=data; + //b[i]=*data; + + printf("\r\n\r\nENQ_ i = %d b[i] = %d %x \tENQ_data_son = %d %x", i, b[i], b[i], data, data); - //pc.printf("\r\n\r\nlen = %d %x\tGndr = %d %x\t**Gndr = %d %x\t&Gndr = %d %x", len, len, gndr, gndr, *gndr, *gndr, &gndr, &gndr); - for(int n = 0; n <60; n++){ - //pc.printf("\r\n%d\tlen = %d %x\tGndr = %d %x\t**Gndr = %d %x\t&Gndr = %d %x", n, len, len, gndr, gndr, *gndr, *gndr, &gndr, &gndr); - int d = n+2; - if(d < (len-1)){ // 2-58 arası - v[d] = *gndr; - } - - gndr++; - //wait_ms(500); - } - - //wait_ms(500); - - v[0] = len; - v[1] = 10; - pc.printf("\r\n"); - for(int g = 2; g < (len-1); g++){ - //pc.printf("\r\nV[g] = %d %x", v[g], v[g]); - } - v[(len-1)] = 15; // dizinin son elemanı + size++; + f=b; +} + +int dequeue(){ // kuyruktan çıkar + if(size<=0) + return -1; - pc.printf("\r\n\r\n"); - for(int j = 0; j < len; j++){ - pc.printf("\r\n%d\tDATAM[%d] = %d %x", j, j, v[j], v[j]); - } - pc.printf("\r\n\r\n"); - - //for(int f = 0; f < len; f++){ - //wait_ms(500); - //pc.printf("\r\ndata2[len] = %d %x \tGndr = %d %x\t**Gndr = %d %x\t&&Gndr = %d %x", v[len], v[len], gndr, gndr, *gndr, *gndr, &gndr, &gndr); - //} - - return(len, v); - //dataGndr(len, v); - //tekrar: - - //byt = len; - //int data[byt]; -/ * - gelen = 5; - - while(gelen != 3){ - - gelen = 9; - - if(device.receive()){ + int * b = (int * ) malloc(sizeof(int)*size-1); - gelen = device.read(); - //pc.printf("\r\nA = %d %x", a, a); - - //while(gelen != 3){ - - if(gelene != gelen){ - pc.printf("\r\n"); - } - gelene = gelen; - - if(gelen != 9){ // ???? - - pc.printf("\r\nGelen = %d %x", gelen, gelen); - - if(gelen == 0){ - wait_ms(500); - gelen = 9; - //return; - goto tekrar; - //reset(); //?????????????????????????????????????????????? - } - else if(gelen == 1){ // (boyut) 1 ise boyutu (D[0]) gönder - device.reply(v[0]); - //wait_ms(500); - //pc.printf("\r\nGelen = %d %x", gelen, gelen); - pc.printf("\t\tData[0] (boyut) = %d %x", v[0], v[0]); - sayac = 1; - } - else if(gelen == 2){ // gitmesi gereken data // D[1] - D[boyut-1] arasını gönderir - device.reply(v[sayac]); - pc.printf("\t\tData[%d] = %d %x", sayac, v[sayac], v[sayac]); - sayac++; - int s = sayac; - boyut = v[0]; - if(s == boyut){ // boyut -1'e kadar olmalı - s = 1; - sayac = 1; - } - } - - } // if gelen != 9 - } // if device.recieve - else - { - pc.printf("\r\nMaster bagli degil"); - led1 != led1; - //b = 0; - wait_ms(500); - } - - } // while -* / + for(int i = 0;i<size-1;i++){ + b[i]=f[i+1]; + } + + int result=f[0]; + size--; + f=b; + return result; } -*/ - + +void printqueue(){ + printf("\n"); + for(int i = 0;i<size;i++) + printf("%d_",f[i]); +} + void periodicCallback(void) { // Do blinky on LED1 while we're waiting for BLE events. This is optional. @@ -370,7 +207,12 @@ for (unsigned a = 0; a < bufferSize; a++) { - pc.printf("%02x",buffertoSpi[a]); + pc.printf("\r\n%02x",buffertoSpi[a]); + + //string str[] = buffertoSpi[a]; + pc.printf("\r\n%02x",buffertoSpi[a]); + demo["my_array"][0] = "demo_string"; + //enqueue(); } pc.printf("\r\n"); @@ -382,7 +224,7 @@ //Flash_Buff_WriteBytes(0, buffertoSpi, bufferSize); // eski //Flash_Buff_WriteBytes(bufferSize, buffertoSpi); // BU! //databoyut = bufferSize; - dataGndr(bufferSize, buffertoSpi); + //dataGndr(bufferSize, buffertoSpi); wait_ms(20); bulunan_index[i]=0x00; @@ -436,16 +278,7 @@ pc.baud(115200); //local terminal baud pc.printf("\r\n\r\nSLAVE main \r\n"); - - - - - - //mac_id_gir(); - - //int v[byt]; - - device.reply(0x00); + //mac_id_gir(); //ticker.attach(periodicCallback, 1); // trigger sensor polling every 2 seconds @@ -458,256 +291,36 @@ BLE &ble = BLE::Instance(); ble.init(bleInitComplete); - while(true){ - - tekrar: - - //deneme: - //wait_ms(3000); - - ble.waitForEvent(); - -//tekrar: - - //byt = DataLen; - - //int data[databoyutu]; - int data[byt]; -// son - gelen = 5; - - while(gelen != 3){ - - gelen = 9; - - if(device.receive()){ - - gelen = device.read(); - //pc.printf("\r\nA = %d %x", a, a); - - //while(gelen != 3){ - - if(gelene != gelen){ - pc.printf("\r\n"); - } - gelene = gelen; - - if(gelen != 9){ // ???? - - pc.printf("\r\nGelen = %d %x", gelen, gelen); - - if(gelen == 0){ - wait_ms(500); - gelen = 9; - //return; - goto tekrar; - //reset(); //?????????????????????????????????????????????? - } - else if(gelen == 1){ // (boyut) 1 ise boyutu (D[0]) gönder - device.reply(data[0]); - //wait_ms(500); - //pc.printf("\r\nGelen = %d %x", gelen, gelen); - pc.printf("\t\tData[0] (boyut) = %d %x", data[0], data[0]); - sayac = 1; - } - else if(gelen == 2){ // gitmesi gereken data // D[1] - D[boyut-1] arasını gönderir - device.reply(data[sayac]); - pc.printf("\t\tData[%d] = %d %x", sayac, data[sayac], data[sayac]); - sayac++; - int s = sayac; - boyut = data[0]; - if(s == (boyut)){ // boyut -1'e kadar olmalı - s = 1; - sayac = 1; - } - } - - } // if gelen != 9 - } // if device.recieve - else - { - pc.printf("\r\nMaster bagli degil\r\n"); - led1 != led1; - //b = 0; - wait_ms(500); - } - - } // while 3 -// son -//* / - - //byt = DataLen; - -/***** - if(device.receive()){ - //while(device.receive()){ - AL: - gelen = device.read(); - //pc.printf("\r\nA = %d %x", a, a); - - if(gelene != gelen){ // gelen farklıysa boşluk bırak - gelene = gelen; - pc.printf("\r\n"); - } - //gelene = gelen; - - //if(gelen != 9){ - //if(gelen != 3){ - - pc.printf("\r\nGelen = %d %x", gelen, gelen); - - if(gelen == 0){ - //wait_ms(1000); - device.reply(0); - pc.printf("\r\ngelen = 0 !"); - //gelen = 9; - goto tekrar; - //goto deneme; - //reset(); //?????????????????????????????????????????????? - } - else if(gelen == 1){ // (boyut) 1 ise boyutu (vx[0]) gönder - device.reply(data[0]); - //wait_ms(500); - //pc.printf("\r\nGelen = %d %x", gelen, gelen); - pc.printf("\t\tData[0] (boyut) = %d %x", data[0], data[0]); - sayac = 1; - } - else if(gelen == 2){ // gitmesi gereken data // vx[1] - vx[boyut-1] arasını gönderir - device.reply(D[sayac]); - pc.printf("\t\tData[%d] = %d %x", sayac, data[sayac], data[sayac]); - sayac++; - int s = sayac; - boyut = data[0]; - if(s == (boyut)){ // boyut -1'e kadar olmalı - s = 1; - sayac = 1; - } - } - else if(gelen == 3){ - //gelen = 9; - device.reply(0); - pc.printf("connection out\r\n"); - wait_ms(100); - goto tekrar; - } - else{ - pc.printf("goto al\r\n"); - goto AL; - } - - //}// if gelen != 3; - / *else{ - gelen = 9; - device.reply(0); - wait_ms(500); - pc.printf("connection out\r\n"); - goto tekrar; - }* / - - - //} // if gelen != 9 - - //gelen = 9; - - }// if device.recieve - -// spi beacon gönderme -*********/ -/* -///////// SPI sabit data gönderme ÇALIŞAN: /////////// - //AL: - if(device.receive()){ - //while(device.receive()){ - AL: - gelen = device.read(); - //pc.printf("\r\nA = %d %x", a, a); - - if(gelene != gelen){ // gelen farklıysa boşluk bırak - gelene = gelen; - pc.printf("\r\n"); - } - //gelene = gelen; - - //if(gelen != 9){ - //if(gelen != 3){ + + + + //fill the object + //demo["my_array"][0] = "demo_string"; + demo["my_array"][1] = 10; + demo["my_boolean"] = false; + + //serialize it into a JSON string + s = demo.serialize(); + printf("json: %s\r\n", s.c_str()); - pc.printf("\r\nGelen = %d %x", gelen, gelen); - - if(gelen == 0){ - //wait_ms(1000); - device.reply(0); - pc.printf("\r\ngelen = 0 !"); - //gelen = 9; - goto tekrar; - //goto deneme; - //reset(); //?????????????????????????????????????????????? - } - else if(gelen == 1){ // (boyut) 1 ise boyutu (vx[0]) gönder - device.reply(vx[0]); - //wait_ms(500); - //pc.printf("\r\nGelen = %d %x", gelen, gelen); - pc.printf("\t\tvx[0] (boyut) = %d %x", vx[0], vx[0]); - sayac = 1; - } - else if(gelen == 2){ // gitmesi gereken data // vx[1] - vx[boyut-1] arasını gönderir - device.reply(vx[sayac]); - pc.printf("\t\tvx[%d] = %d %x", sayac, vx[sayac], vx[sayac]); - sayac++; - int s = sayac; - boyut = vx[0]; - if(s == (boyut)){ // boyut -1'e kadar olmalı - s = 1; - sayac = 1; - } - } - else if(gelen == 3){ - //gelen = 9; - device.reply(0); - pc.printf("connection out\r\n"); - wait_ms(100); - goto tekrar; - } - else{ - pc.printf("goto al\r\n"); - goto AL; - } - - //}// if gelen != 3; - / *else{ - gelen = 9; - device.reply(0); - wait_ms(500); - pc.printf("connection out\r\n"); - goto tekrar; - }* / - - - //} // if gelen != 9 - - //gelen = 9; - - }// if device.recieve - / *else if(device.receive() && gelen == 3){ - goto tekrar; - } - else if(gelen != 3){ - goto AL; - }* / - - else // bağlı değilse veriyi alana kaydet (fifo yap) - { - pc.printf("\r\nMaster bagli degil"); - led1 != led1; - wait_ms(200); - - } -*/ //spi bilinen data son + + + while(true){ + + ble.waitForEvent(); + + //enqueue(n); + //printf("\r\ndequeue -> %d",dequeue()) + + + } // while } // ###################### MAIN ############### +//############################# SLAVE ################################### -//########## SLAVE ########## +