Thomas Cauwelier / Mbed 2 deprecated visible_light_communication

Dependencies:   SoftSerial SDFileSystem mbed wave_player

Revision:
24:d91e9b3b5bd5
Child:
25:d28cfa47ff46
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Relay.cpp	Wed May 17 00:10:42 2017 +0200
@@ -0,0 +1,90 @@
+//
+// Created by thoma on 16-May-17.
+//
+
+#include "Relay.h"
+
+
+Relay::Relay(PinName tx_luart, int baudrate_luart, PinName tx_usb, PinName rx_usb, int baudrate_usb) :
+        softSerial(tx_luart,NC), usb(tx_usb,rx_usb,baudrate_usb) {
+    softSerial.baud(baudrate_luart);
+}
+
+void Relay::run() {
+    while(true){
+        handle_type();
+    }
+}
+
+void Relay::set_volume(){
+    while (!usb.readable());
+    int volume = usb.getc();
+
+    while(!softSerial.writeable());
+    softSerial.putc(volume);
+
+    while (!usb.writeable());
+    usb.putc(ACK);
+}
+
+void Relay::send_file(){
+    // get file size
+    int size = 0;
+    for (int i = 0; i < 4; ++i) {
+        while (!usb.readable());
+        int b = usb.getc();
+        while(!softSerial.writeable());
+        softSerial.putc(b);
+        size |=  b << ((3-i) << 3);
+    }
+
+    // send data
+    int j = 0;
+    while(j < size){
+
+        // get max 64 bytes
+        int k = 0;
+        for (k; k < 64; ++k) {
+            if(j == size){
+                break;
+            }
+            while (!usb.readable());
+            int b = usb.getc();
+            buffer[k] = b;
+            j++;
+        }
+
+        // send max 64 bytes
+        int m = 0;
+        for (m; m < k; ++m) {
+            while (!softSerial.readable());
+            softSerial.putc(buffer[m]);
+        }
+
+        // request new bytes from rpi
+        while (!usb.writeable());
+        usb.putc(ACK);
+    }
+}
+
+void Relay::handle_type() {
+    while (!usb.readable());
+    int packet_type = usb.getc();
+
+    while(!softSerial.writeable());
+    softSerial.putc(packet_type);
+
+    while (!usb.writeable());
+    usb.putc(ACK);
+
+    switch (packet_type){
+        case SET_VOLUME:
+            set_volume();
+            break;
+        case SEND_FILE:
+            send_file();
+            break;
+        default:
+            break;
+    }
+}