diff --git a/firmware/scripts/wspr_coding.c b/firmware/scripts/wspr_coding.c new file mode 100644 index 0000000..193d2dd --- /dev/null +++ b/firmware/scripts/wspr_coding.c @@ -0,0 +1,66 @@ +#include +#include +#include + +uint8_t wspr_call_char(char c) { + c = toupper(c); + if(c >= '0' && c <= '9') { + return c - '0'; + } + else if(c >= 'A' && c <= 'Z') { + return 10 + (c - 'A'); + } + // Turn everything else to space + else { + return 36; + } +} + +uint8_t wspr_loc_char(char c) { + c = toupper(c); + if(c >= '0' && c <= '9') { + return c - '0'; + } + else if(c >= 'A' && c <= 'R') { + return c - 'A'; + } + // Everthing else becomes 9/I + else { + return 9; + } +} + +uint8_t wspr_power(uint8_t power) { + if(power > 60) { + return 60; + } + return power; +} + +uint64_t wspr_message(char *call, char* loc, uint8_t power) { + uint32_t m, n; + + n = wspr_loc_char(call[0]); + n = n * 36 + wspr_loc_char(call[1]); + n = n * 10 + wspr_loc_char(call[2]); + n = n * 27 + wspr_loc_char(call[3]) - 10; + n = n * 27 + wspr_loc_char(call[4]) - 10; + n = n * 27 + wspr_loc_char(call[5]) - 10; + + m = 179 - 10 * wspr_loc_char(loc[0]) - wspr_loc_char(loc[2]); + m = m * 180 + 10 * wspr_loc_char(loc[1]) + wspr_loc_char(loc[3]); + m = m * 128 + wspr_power(power) + 64; + + return n << 21 | m; +} + + + +int main(int argc, char const *argv[]) { + + + + + + return 0; +}