Merge branch 'ds1307_NVRAM'

This commit is contained in:
StefansE
2026-04-03 19:03:28 +02:00
12 changed files with 198 additions and 10 deletions

View File

@@ -12,6 +12,12 @@
#include "clock.h"
#include "ds1307.h"
#define NV_COLOUR_HOURS_ADDR 0x08
#define NV_COLOUR_MINUTES_ADDR 0x0B
#define NV_COLOUR_SECONDS_ADDR 0x0E
#define NV_COLOUR_BACKGND_ADDR 0x11
typedef struct {
uint8_t cmdId;
@@ -25,7 +31,10 @@ typedef struct {
uint8_t crc;
} uartMessage_s;
static void cmd_readNV(uint32_t data);
static void cmd_writeNV(uint8_t data);
static uint8_t nok[] = "NOK\n";
static uint8_t ok[] = "OK\n";
uint8_t myId[] = "Clock\n";
@@ -38,9 +47,44 @@ void (*commands[])(uint32_t) = {
cmd_GetTime,
cmd_setColour_hour,
cmd_setColour_minute,
cmd_setColour_second,
cmd_setColour_background,
cmd_readNV,
cmd_writeNV,
cmd_setColour_second
};
static void cmd_readNV(uint32_t data){
HAL_StatusTypeDef status = HAL_ERROR;
uint8_t addr = (uint8_t) data;
uint8_t respBuf[3] = {0};
status = ds1307_read_user_RAM(addr, respBuf, sizeof(respBuf));
if(HAL_OK == status){
CDC_Transmit_FS(respBuf, sizeof(respBuf));
}
else{
CDC_Transmit_FS(nok, sizeof(nok));
}
}
static void cmd_writeNV(uint8_t data){
HAL_StatusTypeDef status = HAL_ERROR;
status = ds1307_write_user_RAM(UART_RxBuf[1], &UART_RxBuf[2], 3);
if(HAL_OK == status){
CDC_Transmit_FS(ok, sizeof(ok));
}
else{
CDC_Transmit_FS(nok, sizeof(nok));
}
}
void setRxFlag(void){
RxComplete_fl = 1;
@@ -128,6 +172,15 @@ void cmd_setColour_hour(uint32_t colour){
clock_setColourHours(r, g, b);
uint8_t nv[] = {
NV_COLOUR_HOURS_ADDR,
r,
g,
b
};
cmd_writeNV(nv);
CDC_Transmit_FS(ok, sizeof(ok));
}
@@ -141,6 +194,16 @@ void cmd_setColour_minute(uint32_t colour){
clock_setColourMinutes(r, g, b);
uint8_t nv[] = {
NV_COLOUR_MINUTES_ADDR,
r,
g,
b
};
cmd_writeNV(nv);
CDC_Transmit_FS(ok, sizeof(ok));
}
@@ -154,6 +217,16 @@ void cmd_setColour_second(uint32_t colour){
clock_setColourSeconds(r, g, b);
uint8_t nv[] = {
NV_COLOUR_SECONDS_ADDR,
r,
g,
b
};
cmd_writeNV(nv);
CDC_Transmit_FS(ok, sizeof(ok));
}
@@ -167,5 +240,15 @@ void cmd_setColour_background(uint32_t colour){
clock_setColourBackground(r, g, b);
uint8_t nv[] = {
NV_COLOUR_BACKGND_ADDR,
r,
g,
b
};
cmd_writeNV(nv);
CDC_Transmit_FS(ok, sizeof(ok));
}