12

Dependencies:   BLE_API mbed nRF51822

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 ##########
+