Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: SoftSerial SDFileSystem mbed wave_player
Diff: Relay.cpp
- 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; + } +}