/* * myComms.c * * Created on: Mar 27, 2026 * Author: ewars */ #include "myComms.h" #include "usbd_cdc_if.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}; uint8_t RxComplete_fl = 0; void (*commands[])(uint32_t) = { cmd_WhoAmI, cmd_SetTime, cmd_GetTime, cmd_setColour_hour, cmd_setColour_minute, cmd_setColour_second }; void setRxFlag(void){ RxComplete_fl = 1; } void RxCpltCallback(){ if(RxComplete_fl == 1){ RxComplete_fl = 0; 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); } 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){ CDC_Transmit_FS(myId, sizeof(myId)); } 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); CDC_Transmit_FS(ok, sizeof(ok)); } 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; CDC_Transmit_FS(msg, sizeof(msg)); } 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); CDC_Transmit_FS(ok, sizeof(ok)); } 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); CDC_Transmit_FS(ok, sizeof(ok)); } 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); CDC_Transmit_FS(ok, sizeof(ok)); } 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); CDC_Transmit_FS(ok, sizeof(ok)); }