-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmorse.c
113 lines (99 loc) · 3.05 KB
/
morse.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
/*
* morse.c
*
* Created: 2012-01-10 17:03:13
* Author: pn264889
*/
#include <stdlib.h>
#include "morse.h"
#include "config.h"
const uint16_t _ditRepeat = REPEAT_TIME * MORSE_DIT;
const uint16_t _dahRepeat = REPEAT_TIME * MORSE_DAH;
const uint16_t _bitSpaceRepeat = REPEAT_TIME * MORSE_BIT_SPACE;
const uint16_t _charSpaceRepeat = REPEAT_TIME * MORSE_CHAR_SPACE;
const uint16_t _wordSpaceRepeat = REPEAT_TIME * MORSE_WORD_SPACE;
const uint16_t _messageSpaceRepeat = REPEAT_TIME * MORSE_MESSAGE_SPACE;
uint8_t _minIndex = 255; //probably after morseInit it will be "
uint8_t _maxIndex = 0; //probably after morseInit it will be `
char morseTable[MORSE_TABLE_SIZE][MORSE_CODE_SIZE];
static void setMorseTable(uint8_t index, const char *morseCode) {
uint8_t end = 0;
for (uint8_t i = 0; i < MORSE_CODE_SIZE; i++) {
if (!end && morseCode[i] == 0)
end = 1;
if (end)
morseTable[index][i] = 0;
else
morseTable[index][i] = morseCode[i];
}
if (index > _maxIndex)
_maxIndex = index;
if (index < _minIndex)
_minIndex = index;
}
void morseInit() {
for (uint8_t i = 0; i < MORSE_TABLE_SIZE; i++)
setMorseTable(i, 0);
setMorseTable('A', ".-");
setMorseTable('U', "..-");
setMorseTable('B', "-...");
setMorseTable('V', "...-");
setMorseTable('C', "-.-.");
setMorseTable('W', ".--");
setMorseTable('D', "-..");
setMorseTable('X', "-..-");
setMorseTable('E', ".");
setMorseTable('Y', "-.--");
setMorseTable('Z', "--..");
setMorseTable('F', "..-.");
setMorseTable('G', "--.");
setMorseTable('0', "-----");
setMorseTable('H', "....");
setMorseTable('1', ".----");
setMorseTable('I', "..");
setMorseTable('2', "..---");
setMorseTable('J', ".---");
setMorseTable('3', "...--");
setMorseTable('4', "....-");
setMorseTable('K', "-.-");
setMorseTable('5', ".....");
setMorseTable('L', ".-..");
setMorseTable('6', "-....");
setMorseTable('M', "--");
setMorseTable('7', "--...");
setMorseTable('N', "-.");
setMorseTable('8', "---..");
setMorseTable('O', "---");
setMorseTable('9', "----.");
setMorseTable('P', ".--.");
setMorseTable('.', ".-.-.-");
setMorseTable('Q', "--.-");
setMorseTable(',', "--..--");
setMorseTable('R', ".-.");
setMorseTable('?', "..--..");
setMorseTable('S', "...");
setMorseTable('-', "-....-");
setMorseTable('T', "-");
setMorseTable('`', ".----.");
setMorseTable(':', "---...");
setMorseTable('U', "..-");
setMorseTable('"', ".-..-.");
setMorseTable('V', "...-");
setMorseTable('/', "-..-.");
setMorseTable('W', ".--");
setMorseTable('@', ".--.-.");
setMorseTable('X', "-..-");
setMorseTable('Y', "-.--");
setMorseTable('Z', "--..");
};
const char* getMorseString(uint8_t c) {
return morseTable[c];
};
uint8_t getMorseChar(const char *morseString) {
for (uint8_t i = _minIndex; i <= _maxIndex; i++) {
const char *str = getMorseString(i);
if (str && (strcmp(str, morseString) == 0))
return i;
}
return '~';
}