/* * myComms.c * * Created on: Mar 27, 2026 * Author: ewars */ #include "myComms.h" #include "usart.h" #include "clock.h" #include "ds1307.h" typedef struct { uint8_t cmdId; struct{ uint8_t pByte_3; uint8_t pByte_2; uint8_t pByte_1; uint8_t pByte_0; } bytes; uint8_t crc; } uartMessage_s; static uint8_t ok[] = "OK\n"; uint8_t myId[] = "Clock\n"; uint8_t UART_RxBuf[6] = {0}; void (*commands[])(uint32_t) = { cmd_WhoAmI, cmd_SetTime, cmd_GetTime, cmd_SetOffsetDiode, cmd_setColour_hour, cmd_setColour_minute, cmd_setColour_second }; void cmd_SetOffsetDiode(uint32_t diode){ uint8_t offset = (uint8_t) diode; clock_LedOffset(offset); HAL_UART_Transmit(&huart2, ok, sizeof(ok), 1000); } void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){ cmd_UART_Request(); } void cmd_UART_Request(void){ uartMessage_s* msg = (uartMessage_s*) &UART_RxBuf[0]; cmd_RunCommand((uint8_t) msg->cmdId, (uint32_t*) &msg->bytes); HAL_UART_Transmit(&huart2, (uint8_t*) msg, sizeof(*msg), 1000); HAL_UART_Transmit(&huart2, ok, sizeof(ok), 1000); } void cmd_RunCommand(commands_e cmd, uint32_t* input){ uint32_t i = *input; if(cmd < com_MAX_command){ commands[cmd](i); } } void cmd_WhoAmI(uint32_t){ HAL_UART_Transmit(&huart2, myId, sizeof(myId), 1000); } void cmd_SetTime(uint32_t time){ uint8_t h, m, s; h = time & 0xFF; m = time >> 8 & 0xFF; s = time >> 16 & 0xFF; ds1307_set_hour(h); ds1307_set_minutes(m); ds1307_set_second(s); HAL_UART_Transmit(&huart2, ok, sizeof(ok), 1000); } void cmd_GetTime(uint32_t time){} void cmd_setColour_hour(uint32_t colour){ uint8_t r, g, b; r = colour & 0xFF; g = colour >> 8 & 0xFF; b = colour >> 16 & 0xFF; clock_setColourHours(r, g, b); HAL_UART_Transmit(&huart2, ok, sizeof(ok), 1000); } void cmd_setColour_minute(uint32_t colour){ uint8_t r, g, b; r = colour & 0xFF; g = colour >> 8 & 0xFF; b = colour >> 16 & 0xFF; clock_setColourMinutes(r, g, b); HAL_UART_Transmit(&huart2, ok, sizeof(ok), 1000); } void cmd_setColour_second(uint32_t colour){ uint8_t r, g, b; r = colour & 0xFF; g = colour >> 8 & 0xFF; b = colour >> 16 & 0xFF; clock_setColourSeconds(r, g, b); HAL_UART_Transmit(&huart2, ok, sizeof(ok), 1000); } void cmd_setColour_background(uint32_t colour){ uint8_t r, g, b; r = colour & 0xFF; g = colour >> 8 & 0xFF; b = colour >> 16 & 0xFF; clock_setColourBackground(r, g, b); HAL_UART_Transmit(&huart2, ok, sizeof(ok), 1000); }