Olivier Smeesters
/
DtmfKit
A DTMF sequence editor and player for HAM radio equipment command & control.
sending_state.cpp@0:1324e7d9d471, 2011-03-07 (annotated)
- Committer:
- osmeest
- Date:
- Mon Mar 07 22:51:19 2011 +0000
- Revision:
- 0:1324e7d9d471
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
osmeest | 0:1324e7d9d471 | 1 | #include "system_states.hpp" |
osmeest | 0:1324e7d9d471 | 2 | #include "system.hpp" |
osmeest | 0:1324e7d9d471 | 3 | #include "display_manager.hpp" |
osmeest | 0:1324e7d9d471 | 4 | #include "dtmf_generator.hpp" |
osmeest | 0:1324e7d9d471 | 5 | #include <iostream> |
osmeest | 0:1324e7d9d471 | 6 | |
osmeest | 0:1324e7d9d471 | 7 | float SendingState::ToneTime = 1.0; |
osmeest | 0:1324e7d9d471 | 8 | float SendingState::PauseTime = 0.25; |
osmeest | 0:1324e7d9d471 | 9 | |
osmeest | 0:1324e7d9d471 | 10 | namespace { |
osmeest | 0:1324e7d9d471 | 11 | DigitalOut toneLed(LED3); |
osmeest | 0:1324e7d9d471 | 12 | DigitalOut pauseLed(LED4); |
osmeest | 0:1324e7d9d471 | 13 | } |
osmeest | 0:1324e7d9d471 | 14 | |
osmeest | 0:1324e7d9d471 | 15 | void SendingState::enterState() { |
osmeest | 0:1324e7d9d471 | 16 | system()->moveCursorTo(0); |
osmeest | 0:1324e7d9d471 | 17 | |
osmeest | 0:1324e7d9d471 | 18 | DisplayManager *display = system()->display(); |
osmeest | 0:1324e7d9d471 | 19 | display->hideCursor(); |
osmeest | 0:1324e7d9d471 | 20 | display->writeStatus("Sending..."); |
osmeest | 0:1324e7d9d471 | 21 | |
osmeest | 0:1324e7d9d471 | 22 | toneLed = 0; |
osmeest | 0:1324e7d9d471 | 23 | pauseLed = 0; |
osmeest | 0:1324e7d9d471 | 24 | |
osmeest | 0:1324e7d9d471 | 25 | playSymbol(); |
osmeest | 0:1324e7d9d471 | 26 | } |
osmeest | 0:1324e7d9d471 | 27 | |
osmeest | 0:1324e7d9d471 | 28 | void SendingState::handleKey(char key) { |
osmeest | 0:1324e7d9d471 | 29 | this->timer.detach(); |
osmeest | 0:1324e7d9d471 | 30 | pauseLed = 0; |
osmeest | 0:1324e7d9d471 | 31 | |
osmeest | 0:1324e7d9d471 | 32 | system()->dtmf()->stop(); |
osmeest | 0:1324e7d9d471 | 33 | toneLed = 0; |
osmeest | 0:1324e7d9d471 | 34 | |
osmeest | 0:1324e7d9d471 | 35 | system()->setState(System::Edit); |
osmeest | 0:1324e7d9d471 | 36 | } |
osmeest | 0:1324e7d9d471 | 37 | |
osmeest | 0:1324e7d9d471 | 38 | void SendingState::playSymbol() { |
osmeest | 0:1324e7d9d471 | 39 | std::cout << "Sending: Play @" << system()->cursor() << "/" << system()->text_size() << "\r" << std::endl; |
osmeest | 0:1324e7d9d471 | 40 | DisplayManager *display = system()->display(); |
osmeest | 0:1324e7d9d471 | 41 | display->moveTo(system()->cursor()); |
osmeest | 0:1324e7d9d471 | 42 | display->showCursor(); |
osmeest | 0:1324e7d9d471 | 43 | |
osmeest | 0:1324e7d9d471 | 44 | char symbol = system()->text().at(system()->cursor()); |
osmeest | 0:1324e7d9d471 | 45 | system()->dtmf()->play(symbol); |
osmeest | 0:1324e7d9d471 | 46 | |
osmeest | 0:1324e7d9d471 | 47 | toneLed = 1; |
osmeest | 0:1324e7d9d471 | 48 | |
osmeest | 0:1324e7d9d471 | 49 | this->timer.attach(this, &SendingState::endSymbol, ToneTime); |
osmeest | 0:1324e7d9d471 | 50 | } |
osmeest | 0:1324e7d9d471 | 51 | |
osmeest | 0:1324e7d9d471 | 52 | void SendingState::endSymbol() { |
osmeest | 0:1324e7d9d471 | 53 | std::cout << "Sending: End @" << system()->cursor() << "/" << system()->text_size() << "\r" << std::endl; |
osmeest | 0:1324e7d9d471 | 54 | system()->dtmf()->stop(); |
osmeest | 0:1324e7d9d471 | 55 | |
osmeest | 0:1324e7d9d471 | 56 | toneLed = 0; |
osmeest | 0:1324e7d9d471 | 57 | |
osmeest | 0:1324e7d9d471 | 58 | if (system()->cursor() < system()->text_size()-1) { |
osmeest | 0:1324e7d9d471 | 59 | this->timer.attach(this, &SendingState::nextSymbol, PauseTime); |
osmeest | 0:1324e7d9d471 | 60 | pauseLed = 1; |
osmeest | 0:1324e7d9d471 | 61 | } |
osmeest | 0:1324e7d9d471 | 62 | else { |
osmeest | 0:1324e7d9d471 | 63 | DisplayManager *display = system()->display(); |
osmeest | 0:1324e7d9d471 | 64 | display->hideCursor(); |
osmeest | 0:1324e7d9d471 | 65 | |
osmeest | 0:1324e7d9d471 | 66 | system()->moveCursorBy(1); |
osmeest | 0:1324e7d9d471 | 67 | |
osmeest | 0:1324e7d9d471 | 68 | // 1234567890123456 |
osmeest | 0:1324e7d9d471 | 69 | display->writeStatus("Done sending..."); |
osmeest | 0:1324e7d9d471 | 70 | } |
osmeest | 0:1324e7d9d471 | 71 | } |
osmeest | 0:1324e7d9d471 | 72 | |
osmeest | 0:1324e7d9d471 | 73 | void SendingState::nextSymbol() { |
osmeest | 0:1324e7d9d471 | 74 | std::cout << "Sending: Next @" << system()->cursor() << "/" << system()->text_size() << "\r" << std::endl; |
osmeest | 0:1324e7d9d471 | 75 | |
osmeest | 0:1324e7d9d471 | 76 | pauseLed = 0; |
osmeest | 0:1324e7d9d471 | 77 | |
osmeest | 0:1324e7d9d471 | 78 | system()->moveCursorBy(1); |
osmeest | 0:1324e7d9d471 | 79 | playSymbol(); |
osmeest | 0:1324e7d9d471 | 80 | } |