Karl Hobley / MorseOut

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;
    }
}