A DTMF sequence editor and player for HAM radio equipment command & control.

Dependencies:   mbed ExtTextLCD

Committer:
osmeest
Date:
Mon Mar 07 22:51:19 2011 +0000
Revision:
0:1324e7d9d471

        

Who changed what in which revision?

UserRevisionLine numberNew 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 }