#include "ch.h" #include "hal.h" #include "debug.h" #include "threads.h" #include "config.h" #include "radio.h" #include "aprs.h" #include "morse.h" #include "sleep.h" #include "chprintf.h" #include #include #include "watchdog.h" void str_replace(char *string, uint32_t size, char *search, char *replace) { for(uint32_t i=0; string[i] != 0; i++) { // Find search string uint32_t j=0; for(j=0; search[j] != 0; j++) if(string[i+j] != search[j]) break; if(search[j] == 0) { // String found, replace it string[i] = 0; char temp[size-i-j]; memcpy(temp, &string[i+j], size-i-j); chsnprintf(string, size, "%s%s%s", string, replace, temp); return; } } } uint16_t crc16(char *string) { size_t i; uint16_t crc; crc = 0xFFFF; for(i = 0; i < strlen(string); i++) { crc = crc ^ ((uint16_t)string[i] << 8); for(uint8_t j=0; j<8; j++) { if(crc & 0x8000) crc = (crc << 1) ^ 0x1021; else crc <<= 1; } } return crc; } void positionToMaidenhead(char m[], double lat, double lon) { lon = lon + 180; lat = lat + 90; m[0] = ((uint8_t)'A') + ((uint8_t)(lon / 20)); m[1] = ((uint8_t)'A') + ((uint8_t)(lat / 10)); m[2] = ((uint8_t)'0') + ((uint8_t)(fmod(lon, 20)/2)); m[3] = ((uint8_t)'0') + ((uint8_t)(fmod(lat, 10)/1)); m[4] = ((uint8_t)'A') + ((uint8_t)((lon - ( ((uint8_t)(lon/2))*2)) / (5.0/60.0))); m[5] = ((uint8_t)'A') + ((uint8_t)((lat - ( ((uint8_t)(lat/1))*1)) / (2.5/60.0))); m[6] = 0; } /** * Replaces placeholders with variables */ void replace_placeholders(char* fskmsg, uint16_t size, trackPoint_t *tp) { char buf[16]; chsnprintf(buf, sizeof(buf), "%d", tp->id); str_replace(fskmsg, size, "", buf); chsnprintf(buf, sizeof(buf), "%04d-%02d-%02d", tp->time.year, tp->time.month, tp->time.day); str_replace(fskmsg, size, "", buf); chsnprintf(buf, sizeof(buf), "%02d:%02d:%02d", tp->time.hour, tp->time.minute, tp->time.second); str_replace(fskmsg, size, "