Trying to encode a configuration file and a set of instructions to be passed to a microcontroller

Dependencies:   MODSERIAL Nanopb

Revision:
0:abf096b1334e
Child:
1:5752892425a3
diff -r 000000000000 -r abf096b1334e main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Sun Aug 18 18:53:32 2019 +0000
@@ -0,0 +1,147 @@
+#include "mbed.h"
+#include "pb.h"
+#include "pb_decode.h"
+#include "pb_encode.h"
+#include "LEX_Initialisation.pb.h"
+#include "MODSERIAL.h"
+
+DigitalOut led1(LED1);
+MODSERIAL pc(USBTX, USBRX, 512);
+uint8_t buffer_in[128];
+uint8_t buffer[128];
+size_t set_point_length;
+size_t set_point_in_length;
+bool status;
+int i = 0;
+char c = 0;
+char cn = 0;
+char cnn = 0;
+volatile bool sent_flag = false;
+SetPoint set_point;
+SetPoint set_point_in;
+
+Thread thread;
+
+//indicator LEDs
+DigitalOut signal1(p26);       //Green
+DigitalOut signal2(p25);         //Red
+
+
+void incr(int i, int n = 1){
+    for (int k = 0; k < n; k++){
+        i++;
+        i = i % sizeof(buffer);
+        }
+    }
+    
+void read_setpoint(){
+    if (pc.scanf("%d",&set_point_in_length) < 0){pc.printf("Error in reading message length");}
+    for (int i = 0; i < set_point_length; i++) {
+            c = pc.getc();
+            if (c == '#'){
+                i++;
+                }
+            else{
+            if (c == 'E'){
+                if ((cn = pc.getc()) == 'o'){
+                    if ((cnn = pc.getc()) == 'T'){
+                        break;
+                        }
+                    else {
+                        buffer_in[i+2] = cnn;
+                        buffer_in[i+1] = cn;
+                        buffer_in[i] = c;
+                        incr(i,3);
+                        }
+                    }
+                else{
+                    buffer_in[i+1] = cn;
+                    buffer_in[i] = c;
+                    incr(i,2);
+                    }
+                }
+            else{
+                buffer_in[i] = c;
+                pc.putc(buffer_in[i]);
+                incr(i);
+                }
+            }
+            }
+}      
+
+void write_setpoint(){
+    pc.printf("%d ",set_point_length);
+    for (int i = 0; i < set_point_length; i++) {
+        if (buffer[i] == NULL){
+            pc.putc('#');
+            }
+        else{
+            pc.putc(buffer[i]);
+            }
+    }
+    pc.printf("EoT");
+    }
+       
+       
+
+void decode_setpoint(){
+            // Create a stream that reads from the buffer. 
+                
+                pb_istream_t istream = pb_istream_from_buffer(buffer_in, set_point_in_length);
+        
+                //Now we are ready to decode the message. 
+                status = pb_decode(&istream, SetPoint_fields, &set_point_in);
+        
+                // Check for errors... 
+                if (!status)
+                {
+                    pc.printf("Decoding failed: %s\n", PB_GET_ERROR(&istream));
+                }
+        
+                // Print the data contained in the message. 
+                pc.printf("Your set point was %f,%d,%d!\n", set_point_in.r_set_point,set_point_in.time_point,set_point_in.trig_time);
+            }
+    
+
+
+
+// main() runs in its own thread in the OS
+int main()
+{
+    /* This is the buffer where we will store our message. */
+    pc.baud(115200);
+
+
+
+    
+    
+    
+    pb_ostream_t stream = pb_ostream_from_buffer(buffer, sizeof(buffer));
+
+    set_point.r_set_point = 0.5;
+    set_point.time_point = 100;
+    set_point.trig_time = 101;
+    
+    status = pb_encode(&stream, SetPoint_fields, &set_point);
+    set_point_length = stream.bytes_written;
+
+    
+    if (!status)
+    {
+        pc.printf("Encoding failed: %s\n", PB_GET_ERROR(&stream));
+        return 1;
+    }
+    
+    write_setpoint();
+    
+    
+    pc.getc();
+    pc.printf("\n Input your set point:\n");
+    read_setpoint();
+    decode_setpoint();
+    
+
+    return 0;
+}
+
+