Thomas Cauwelier / Mbed 2 deprecated visible_light_communication

Dependencies:   SoftSerial SDFileSystem mbed wave_player

Committer:
Desertification
Date:
Wed May 17 09:43:38 2017 +0000
Revision:
29:c2d95d88ee0b
Parent:
25:d28cfa47ff46
DONE (for now)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Thomas Cauwelier 24:d91e9b3b5bd5 1 //
Thomas Cauwelier 24:d91e9b3b5bd5 2 // Created by thoma on 16-May-17.
Thomas Cauwelier 24:d91e9b3b5bd5 3 //
Thomas Cauwelier 24:d91e9b3b5bd5 4
Thomas Cauwelier 24:d91e9b3b5bd5 5 #include "Relay.h"
Thomas Cauwelier 24:d91e9b3b5bd5 6
Thomas Cauwelier 24:d91e9b3b5bd5 7
Thomas Cauwelier 24:d91e9b3b5bd5 8 Relay::Relay(PinName tx_luart, int baudrate_luart, PinName tx_usb, PinName rx_usb, int baudrate_usb) :
Thomas Cauwelier 24:d91e9b3b5bd5 9 softSerial(tx_luart,NC), usb(tx_usb,rx_usb,baudrate_usb) {
Thomas Cauwelier 24:d91e9b3b5bd5 10 softSerial.baud(baudrate_luart);
Thomas Cauwelier 24:d91e9b3b5bd5 11 }
Thomas Cauwelier 24:d91e9b3b5bd5 12
Thomas Cauwelier 24:d91e9b3b5bd5 13 void Relay::run() {
Thomas Cauwelier 24:d91e9b3b5bd5 14 while(true){
Thomas Cauwelier 24:d91e9b3b5bd5 15 handle_type();
Thomas Cauwelier 24:d91e9b3b5bd5 16 }
Thomas Cauwelier 24:d91e9b3b5bd5 17 }
Thomas Cauwelier 24:d91e9b3b5bd5 18
Desertification 29:c2d95d88ee0b 19 void Relay::play_last(){
Desertification 29:c2d95d88ee0b 20
Desertification 29:c2d95d88ee0b 21 }
Desertification 29:c2d95d88ee0b 22
Thomas Cauwelier 24:d91e9b3b5bd5 23 void Relay::set_volume(){
Thomas Cauwelier 24:d91e9b3b5bd5 24 while (!usb.readable());
Thomas Cauwelier 24:d91e9b3b5bd5 25 int volume = usb.getc();
Thomas Cauwelier 24:d91e9b3b5bd5 26
Thomas Cauwelier 24:d91e9b3b5bd5 27 while(!softSerial.writeable());
Thomas Cauwelier 24:d91e9b3b5bd5 28 softSerial.putc(volume);
Thomas Cauwelier 24:d91e9b3b5bd5 29
Thomas Cauwelier 24:d91e9b3b5bd5 30 while (!usb.writeable());
Thomas Cauwelier 24:d91e9b3b5bd5 31 usb.putc(ACK);
Thomas Cauwelier 24:d91e9b3b5bd5 32 }
Thomas Cauwelier 24:d91e9b3b5bd5 33
Thomas Cauwelier 24:d91e9b3b5bd5 34 void Relay::send_file(){
Thomas Cauwelier 24:d91e9b3b5bd5 35 // get file size
Thomas Cauwelier 24:d91e9b3b5bd5 36 int size = 0;
Thomas Cauwelier 24:d91e9b3b5bd5 37 for (int i = 0; i < 4; ++i) {
Thomas Cauwelier 24:d91e9b3b5bd5 38 while (!usb.readable());
Thomas Cauwelier 24:d91e9b3b5bd5 39 int b = usb.getc();
Thomas Cauwelier 24:d91e9b3b5bd5 40 while(!softSerial.writeable());
Thomas Cauwelier 24:d91e9b3b5bd5 41 softSerial.putc(b);
Desertification 29:c2d95d88ee0b 42 while (!usb.writeable());
Desertification 29:c2d95d88ee0b 43 usb.putc(ACK);
Thomas Cauwelier 24:d91e9b3b5bd5 44 size |= b << ((3-i) << 3);
Thomas Cauwelier 24:d91e9b3b5bd5 45 }
Thomas Cauwelier 24:d91e9b3b5bd5 46
Thomas Cauwelier 24:d91e9b3b5bd5 47 // send data
Thomas Cauwelier 24:d91e9b3b5bd5 48 int j = 0;
Thomas Cauwelier 24:d91e9b3b5bd5 49 while(j < size){
Thomas Cauwelier 24:d91e9b3b5bd5 50
Thomas Cauwelier 24:d91e9b3b5bd5 51 // get max 64 bytes
Thomas Cauwelier 24:d91e9b3b5bd5 52 int k = 0;
Desertification 29:c2d95d88ee0b 53 for (k; k < 512; ++k) {
Thomas Cauwelier 24:d91e9b3b5bd5 54 if(j == size){
Thomas Cauwelier 24:d91e9b3b5bd5 55 break;
Thomas Cauwelier 24:d91e9b3b5bd5 56 }
Thomas Cauwelier 24:d91e9b3b5bd5 57 while (!usb.readable());
Thomas Cauwelier 24:d91e9b3b5bd5 58 int b = usb.getc();
Thomas Cauwelier 24:d91e9b3b5bd5 59 buffer[k] = b;
Thomas Cauwelier 24:d91e9b3b5bd5 60 j++;
Thomas Cauwelier 24:d91e9b3b5bd5 61 }
Thomas Cauwelier 24:d91e9b3b5bd5 62
Thomas Cauwelier 24:d91e9b3b5bd5 63 // send max 64 bytes
Thomas Cauwelier 24:d91e9b3b5bd5 64 int m = 0;
Thomas Cauwelier 24:d91e9b3b5bd5 65 for (m; m < k; ++m) {
Desertification 25:d28cfa47ff46 66 while (!softSerial.writeable());
Thomas Cauwelier 24:d91e9b3b5bd5 67 softSerial.putc(buffer[m]);
Thomas Cauwelier 24:d91e9b3b5bd5 68 }
Thomas Cauwelier 24:d91e9b3b5bd5 69
Thomas Cauwelier 24:d91e9b3b5bd5 70 // request new bytes from rpi
Thomas Cauwelier 24:d91e9b3b5bd5 71 while (!usb.writeable());
Thomas Cauwelier 24:d91e9b3b5bd5 72 usb.putc(ACK);
Thomas Cauwelier 24:d91e9b3b5bd5 73 }
Thomas Cauwelier 24:d91e9b3b5bd5 74 }
Thomas Cauwelier 24:d91e9b3b5bd5 75
Thomas Cauwelier 24:d91e9b3b5bd5 76 void Relay::handle_type() {
Thomas Cauwelier 24:d91e9b3b5bd5 77 while (!usb.readable());
Thomas Cauwelier 24:d91e9b3b5bd5 78 int packet_type = usb.getc();
Thomas Cauwelier 24:d91e9b3b5bd5 79
Thomas Cauwelier 24:d91e9b3b5bd5 80 while(!softSerial.writeable());
Thomas Cauwelier 24:d91e9b3b5bd5 81 softSerial.putc(packet_type);
Thomas Cauwelier 24:d91e9b3b5bd5 82
Thomas Cauwelier 24:d91e9b3b5bd5 83 while (!usb.writeable());
Thomas Cauwelier 24:d91e9b3b5bd5 84 usb.putc(ACK);
Thomas Cauwelier 24:d91e9b3b5bd5 85
Thomas Cauwelier 24:d91e9b3b5bd5 86 switch (packet_type){
Thomas Cauwelier 24:d91e9b3b5bd5 87 case SET_VOLUME:
Thomas Cauwelier 24:d91e9b3b5bd5 88 set_volume();
Thomas Cauwelier 24:d91e9b3b5bd5 89 break;
Thomas Cauwelier 24:d91e9b3b5bd5 90 case SEND_FILE:
Thomas Cauwelier 24:d91e9b3b5bd5 91 send_file();
Thomas Cauwelier 24:d91e9b3b5bd5 92 break;
Thomas Cauwelier 24:d91e9b3b5bd5 93 default:
Thomas Cauwelier 24:d91e9b3b5bd5 94 break;
Thomas Cauwelier 24:d91e9b3b5bd5 95 }
Thomas Cauwelier 24:d91e9b3b5bd5 96 }