UART commands work
This commit is contained in:
157
Core/Src/myComms.c
Normal file
157
Core/Src/myComms.c
Normal file
@@ -0,0 +1,157 @@
|
||||
/*
|
||||
* 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);
|
||||
}
|
||||
Reference in New Issue
Block a user