Karl Hobley / MorseOut
Revision:
0:bb2a7cd319b4
Child:
1:9a3ebec0fb2c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MorseOut.cpp	Wed Oct 27 17:32:30 2010 +0000
@@ -0,0 +1,87 @@
+#include "MorseOut.h"
+
+MorseOut::MorseOut(PinName Pin):DigitalOut(Pin)
+{
+    _Timer.attach(this,&MorseOut::_Update,0.1);
+    _InputPos=_OutputPos=0;
+}
+
+void MorseOut::putc(char value)
+{
+//Get code
+    char *Code=0;
+    switch(value){ //a = low, b = high
+        case 'a': Code="babbba"; break;
+        case 'b': Code="bbbabababa"; break;
+        case 'c': Code="bbbababbbaba"; break;
+        case 'd': Code="bbbababa"; break;
+        case 'e': Code="ba"; break;
+        case 'f': Code="bababbbaba"; break;
+        case 'g': Code="bbbabbbaba"; break;
+        case 'h': Code="babababa"; break;
+        case 'i': Code="baba"; break;
+        case 'j': Code="babbbabbbabbba"; break;
+        case 'k': Code="bbbababbba"; break;
+        case 'l': Code="babbbababa"; break;
+        case 'm': Code="bbbabbba"; break;
+        case 'n': Code="bbbaba"; break;
+        case 'o': Code="bbbabbbabbba"; break;
+        case 'p': Code="babbbabbbaba"; break;
+        case 'q': Code="bbbabbbababbba"; break;
+        case 'r': Code="babbbaba"; break;
+        case 's': Code="bababa"; break;
+        case 't': Code="bbba"; break;
+        case 'u': Code="bababbba"; break;
+        case 'v': Code="babababbba"; break;
+        case 'w': Code="babbbabbba"; break;
+        case 'x': Code="bbbabababbba"; break;
+        case 'y': Code="bbbababbbabbba"; break;
+        case 'z': Code="bbbabbbababa"; break;
+        case '0': Code="bbbabbbabbbabbbabbba"; break;
+        case '1': Code="babbbabbbabbbabbba"; break;
+        case '2': Code="bababbbabbbabbba"; break;
+        case '3': Code="babababbbabbba"; break;
+        case '4': Code="bababababbba"; break;
+        case '5': Code="bababababa"; break;
+        case '6': Code="bbbababababa"; break;
+        case '7': Code="bbbabbbabababa"; break;
+        case '8': Code="bbbabbbabbbababa"; break;
+        case '9': Code="bbbabbbabbbabbbaba"; break;
+        case ' ': Code="aa"; break;
+        default:
+            return;
+    
+    }
+
+//Convert character to morse
+    unsigned short i=0;
+    while(Code[i]!=0){
+        _Buffer[_InputPos]=Code[i]-'a';
+        _InputPos++;
+        if(_InputPos>=_BufferSize)
+            _InputPos=0;
+        i++;
+    }
+}
+
+void MorseOut::puts(char* value)
+{
+    unsigned short i=0;
+    while(value[i]!=0){
+        putc(value[i]);
+        i++;
+    }
+}
+
+void MorseOut::_Update()
+{
+    if(_InputPos!=_OutputPos){
+    //Send next bit
+        write(_Buffer[_OutputPos]);
+        
+    //Increase output pos
+        _OutputPos++;
+        if(_OutputPos>=_BufferSize)
+            _OutputPos=0;
+    }
+}
\ No newline at end of file