Feat(#7): optimization led code
https://www.notion.so/439a3c3a2694457ebb9233903291d6cd?v=6f499c754ed34fc09ee1d8d7590f8478&p=c382a9f88a444185873dbb62a7deee1a&pm=s
This commit is contained in:
-20
@@ -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;
|
||||
}
|
||||
*/
|
||||
|
||||
+2
-2
@@ -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
|
||||
|
||||
-6
@@ -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);
|
||||
|
||||
+41
-88
@@ -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);
|
||||
|
||||
+2
-2
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user