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
Relay.cpp@29:c2d95d88ee0b, 2017-05-17 (annotated)
- 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?
User | Revision | Line number | New 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 | } |