Roy
2023-06-01 15:47:52 +08:00
parent 1462879b29
commit 49d13b8d34
5 changed files with 45 additions and 118 deletions
@@ -141,23 +141,3 @@ uint8_t spi_write(uint8_t spi_n, uint8_t *rxBuf, uint8_t *txBuf, uint8_t len)
return 0;
}
/* utils.c.h */
/*
#include <stdint.h>
#include <stdio.h>
static void ___print_hex(uint8_t* p, int len)
{
// ___print_hex((uint8_t *)p, sizeof(struct led_series_data_t));
int i;
for (i = 0; i < len; i++) {
printf("0x%x, ", *p++);
}
printf("\n\n");
return;
}
*/
@@ -4,6 +4,6 @@
#define VERSION_DATE_YEAR 23
#define VERSION_DATE_MONTH 6
#define VERSION_DATE_DAY 1
#define VERSION_DATE_HOUR 13
#define VERSION_DATE_MINUTE 42
#define VERSION_DATE_HOUR 15
#define VERSION_DATE_MINUTE 47
#endif
@@ -78,12 +78,6 @@ struct led_color_t {
uint8_t r;
};
struct led_frame_t {
uint8_t bright: 5,
rsvd: 3;
struct led_color_t color;
};
int led_color_set(enum led_series_nb_e led_nb, enum led_bright_e bright, enum led_color_e color);
int led_color_code_set(enum led_series_nb_e led_nb, enum led_bright_e bright, struct led_color_t *color);
int led_rainbow(enum led_bright_e bright);
@@ -2,9 +2,15 @@
#include <string.h>
#include "module/led_APA_102.h"
#define LED_FRME_FILL_RSVD(_f) (_f)->rsvd = 0x07 // 0x11100000 || bright
#define LED_SERIES_D_START 0x00000000
#define LED_SERIES_D_END 0xFFFFFFFF
#define LED_FRAME_RSVD 0x07 // 0x11100000 || bright
#define LED_SERIES_D_START 0x00000000
#define LED_SERIES_D_END 0xFFFFFFFF
struct led_frame_t {
uint8_t bright: 5,
rsvd: 3;
struct led_color_t color;
};
struct led_series_data_t {
uint32_t f_start;
@@ -12,8 +18,6 @@ struct led_series_data_t {
uint32_t f_end;
};
static struct led_series_data_t led_series_data_g = {0};
const struct led_color_t led_color_list_g[LED_CLR_MAX] = {
// {blue, green, red}
{0x00, 0x00, 0x00}, // LED_CLR_BLACK
@@ -31,43 +35,10 @@ const struct led_color_t led_color_list_g[LED_CLR_MAX] = {
{0x05, 0x35, 0x9E}, // LED_CLR_LOW_BAT (orange)
};
static int __led_single_set(struct led_series_data_t *led_s_d, struct led_frame_t *led_f, enum led_series_nb_e led_nb)
static int __led_complete(struct led_series_data_t *sd)
{
struct led_series_data_t *sd = led_s_d;
struct led_frame_t *f = led_f;
enum led_series_nb_e nb = led_nb;
memcpy(&sd->f_led[nb], f, sizeof(struct led_frame_t));
return 0;
}
static int __led_multiple_set(struct led_series_data_t *led_s_d, struct led_frame_t *led_f)
{
struct led_series_data_t *sd = led_s_d;
struct led_frame_t *f = led_f;
int i;
/*
* use __led_single_set() to finish all led;
*/
for (i = LED_NB_1; i < LED_NB_MAX; i++) {
__led_single_set(sd, f, (enum led_series_nb_e)i);
}
return 0;
}
static int __led_complete(struct led_series_data_t *led_s_d)
{
struct led_series_data_t *sd = led_s_d;
struct led_frame_t *f = sd->f_led;
int i;
for (i = LED_NB_1; i < LED_NB_MAX; i++) {
LED_FRME_FILL_RSVD(f);
f++;
}
for (int i = LED_NB_1; i < LED_NB_MAX; i++)
sd->f_led[i].rsvd = LED_FRAME_RSVD;
sd->f_start = LED_SERIES_D_START;
sd->f_end = LED_SERIES_D_END;
@@ -77,35 +48,29 @@ static int __led_complete(struct led_series_data_t *led_s_d)
static int __led_color_set(enum led_series_nb_e led_nb, struct led_frame_t *led_f)
{
enum led_series_nb_e nb = led_nb;
struct led_frame_t *f = led_f;
static struct led_series_data_t led_series_data_g = {0};
struct led_series_data_t *sd = &led_series_data_g;
if (f == NULL)
return -1;
/*
* nb - < LED_NB_MAX: fill one led_frame
* led_nb - < LED_NB_MAX: fill one led_frame
* == LED_NB_MAX: fill multiple led_frame
*
* complete: then, fill (start_frame, end_frame and the rsvd of every led_frame)
*
* finally, write cmd to hw by spi
*/
if (nb < LED_NB_MAX) {
__led_single_set(sd, f, nb);
} else if (nb == LED_NB_MAX) {
__led_multiple_set(sd, f);
} else {
return -2;
if (led_nb < LED_NB_MAX) {
memcpy(&sd->f_led[led_nb], led_f, sizeof(struct led_frame_t));
} else if (led_nb == LED_NB_MAX) {
for (enum led_series_nb_e i = LED_NB_1; i < LED_NB_MAX; i++) {
memcpy(&sd->f_led[i], led_f, sizeof(struct led_frame_t));
}
}
__led_complete(sd);
#define WRITE_TO_HW(_d, _l) spi_write(SPI0, NULL, (uint8_t *)(_d), (_l))
spi_open(SPI0, SPI_RATE_1M, SPI_POL0, SPI_PHA1); //SPI 1M: LED
led_cs(1);
WRITE_TO_HW(sd, sizeof(struct led_series_data_t));
spi_write(SPI0, NULL, (uint8_t *)sd, sizeof(struct led_series_data_t));
led_cs(0);
spi_close(SPI0);
@@ -114,60 +79,48 @@ static int __led_color_set(enum led_series_nb_e led_nb, struct led_frame_t *led_
int led_color_set(enum led_series_nb_e led_nb, enum led_bright_e bright, enum led_color_e color)
{
enum led_series_nb_e nb = led_nb;
enum led_bright_e b = bright;
enum led_color_e c = color;
struct led_frame_t led_f;
struct led_frame_t led_f = {0};
if (nb > LED_NB_MAX)
if (led_nb > LED_NB_MAX)
return -1;
if (c >= LED_CLR_MAX)
if (bright > LED_BR_MAX)
return -2;
if (b > LED_BR_MAX)
if (color >= LED_CLR_MAX)
return -3;
led_f.bright = b;
led_f.color = led_color_list_g[c];
__led_color_set(nb, &led_f);
led_f.bright = bright;
led_f.color = led_color_list_g[color];
__led_color_set(led_nb, &led_f);
return 0;
}
int led_color_code_set(enum led_series_nb_e led_nb, enum led_bright_e bright, struct led_color_t *color)
{
enum led_series_nb_e nb = led_nb;
enum led_bright_e b = bright;
struct led_color_t *c = color;
struct led_frame_t led_f;
struct led_frame_t led_f = {0};
// valid the input values
if (nb > LED_NB_MAX)
if (led_nb > LED_NB_MAX)
return -1;
if (b > LED_BR_MAX)
if (bright > LED_BR_MAX)
return -2;
led_f.bright = b;
memcpy(&led_f.color, c, sizeof(struct led_color_t));
__led_color_set(nb, &led_f);
led_f.bright = bright;
memcpy(&led_f.color, &color, sizeof(struct led_color_t));
__led_color_set(led_nb, &led_f);
return 0;
}
int led_rainbow(enum led_bright_e bright)
{
enum led_bright_e b = bright;
int i;
if (b > LED_BR_MAX)
{
if (bright > LED_BR_MAX)
return -1;
for(i=0; i<LED_NB_MAX; i++) {
led_color_set((enum led_series_nb_e)i, b, (enum led_color_e)i);
}
for(enum led_series_nb_e i=LED_NB_1; i<LED_NB_MAX; i++)
led_color_set(i, bright, (enum led_color_e)i);
return 0;
}
@@ -183,7 +136,7 @@ int led_rainbow(enum led_bright_e bright)
* led_c.g = ins[4];
* led_c.b = ins[5];
* bri = ins[6];
* led_color_code_set(LED_NB_4, bri, &led_c);
* led_color_code_set(LED_NB_4, bri, led_c);
*
* single led:
* led_color_set(LED_NB_1, LED_BR_LV1, LED_CLR_WHITE);
@@ -209,8 +209,8 @@ struct date_t {
// RIS (real instruction)
enum all_mode_e
{
MODE_ANALOG_CURRENT_CTRL = 0x0F, // 0x0E
MODE_ALL_OUTPUT_CTRL = 0x0E, // 0x0F
MODE_ANALOG_CURRENT_CTRL = 0x0E, // 0x0E
MODE_ALL_OUTPUT_CTRL = 0x0F, // 0x0F
DEV_TEST = 0xFF, // 0xFF,
SET_SAMPLE_RATE = 0xE0, // 0xE0,
SET_EN_CHAN = 0x81, // 0x81,