/* * myComms.c * * Created on: Mar 27, 2026 * Author: ewars */ #include "myComms.h" #include "usart.h" #include "clock.h" #include "stdio.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_setColour_hour, cmd_setColour_minute, cmd_setColour_second }; 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){ extern ds1307_dev_t my_rtc; uint8_t msg[6] = {0}; uint8_t resp[] = "Hello Ewaryst\n"; // sprintf(resp, "%d, %d, %d, \n", my_rtc.hours, my_rtc.minutes, my_rtc.seconds); msg[0] = com_getTime + 200; msg[1] = my_rtc.hours; msg[2] = my_rtc.minutes; msg[3] = my_rtc.seconds; msg[4] = 251; msg[5] = 44; HAL_UART_Transmit(&huart2, resp, sizeof(resp), 1000); } 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); }