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.
MorseOut.cpp
- Committer:
- Kaedroho
- Date:
- 2010-10-27
- Revision:
- 2:6aa52f0d9001
- Parent:
- 1:9a3ebec0fb2c
- Child:
- 3:7c78cf1605d3
File content as of revision 2:6aa52f0d9001:
#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 '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;
}
//Insert code into buffer
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)
{
//Loop through string and convert each character
unsigned short i=0;
while(value[i]!=0){
putc(value[i]);
i++;
}
}
void MorseOut::_Update()
{
//Check if there is any new data in the buffer
if(_InputPos!=_OutputPos){
//Send next bit
write(_Buffer[_OutputPos]);
//Increase output pos
_OutputPos++;
if(_OutputPos>=_BufferSize)
_OutputPos=0;
}
}