Skip to content

Commit 45f46f2

Browse files
committed
Move led init to badge init, accept values between 0 and 255
1 parent c3000a4 commit 45f46f2

File tree

1 file changed

+29
-19
lines changed

1 file changed

+29
-19
lines changed

app/src/main.c

Lines changed: 29 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,9 @@ LOG_MODULE_REGISTER(badge_shell);
2929
#define LED_DELAY K_MSEC(600)
3030
#define RGB(_r, _g, _b) ((struct led_rgb) { .r = (_r), .g = (_g), .b = (_b)})
3131
static const struct device *const strip = DEVICE_DT_GET(STRIP_NODE);
32+
3233
static struct led_rgb pixels[STRIP_NUM_PIXELS];
34+
3335
static void set_led_color(struct led_rgb color)
3436
{
3537
for (int i = 0; i < STRIP_NUM_PIXELS; i++){
@@ -42,23 +44,32 @@ static void set_led_color(struct led_rgb color)
4244
LOG_INF("LED color set: R=%u G=%u B=%u", color.r, color.g, color.b);
4345
}
4446
}
47+
4548
static int cmd_led(const struct shell *shell, size_t argc, char **argv)
4649
{
47-
if (argc != 2){
48-
shell_print(shell, "Usage: led<r/g/b>");
50+
if (argc != 4){
51+
shell_print(shell, "Usage: led <red> <green> <blue> (each 0-255)");
4952
return -EINVAL;
5053
}
51-
const char *c = argv[1];
52-
if(strcmp(c, "r") == 0){
53-
set_led_color(RGB(0x0F, 0x00, 0x00));
54-
} else if (strcmp(c, "g") == 0){
55-
set_led_color(RGB(0x00, 0x0F, 0x00));
56-
}else if (strcmp(c, "b") == 0){
57-
set_led_color(RGB(0x00, 0x00, 0x0F));
58-
}else{
59-
shell_error(shell, "Invalid color (r/g/b)");
54+
55+
char *endptr;
56+
long r = strtol(argv[1], &endptr, 10);
57+
if (*endptr != '\0' || r < 0 || r > 255) {
58+
shell_error(shell, "Invalid red value (0-255)");
59+
return -EINVAL;
60+
}
61+
long g = strtol(argv[2], &endptr, 10);
62+
if (*endptr != '\0' || g < 0 || g > 255) {
63+
shell_error(shell, "Invalid green value (0-255)");
64+
return -EINVAL;
65+
}
66+
long b = strtol(argv[3], &endptr, 10);
67+
if (*endptr != '\0' || b < 0 || b > 255) {
68+
shell_error(shell, "Invalid blue value (0-255)");
6069
return -EINVAL;
6170
}
71+
72+
set_led_color(RGB((uint8_t)r, (uint8_t)g, (uint8_t)b));
6273
return 0;
6374
}
6475
SHELL_CMD_REGISTER(led, NULL, "Set LED color (r, g, b)", cmd_led);
@@ -373,7 +384,12 @@ char text[MAX_STRINGS][32]= {
373384
void badge_init_entry(void* arg)
374385
{
375386
LOG_INF("Badge init entry");
376-
387+
if (!device_is_ready(strip)){
388+
LOG_ERR("LED strip not ready");
389+
return ;
390+
}
391+
LOG_INF("LED strip ready. Use shell command: led r/g/b");
392+
set_led_color(RGB(0x0F, 0x0F, 0x0F)); // Default: white
377393
// Initialize display work queue
378394
k_work_queue_init(&display_work_q);
379395
k_work_queue_start(&display_work_q, display_stack, K_THREAD_STACK_SIZEOF(display_stack),
@@ -507,13 +523,7 @@ int main(void)
507523
{
508524
int32_t ret;
509525
int rc;
510-
511-
if (!device_is_ready(strip)){
512-
LOG_ERR("LED strip not ready");
513-
return ;
514-
}
515-
LOG_INF("LED strip ready. Use shell command: led r/g/b");
516-
set_led_color(RGB(0x0F, 0x0F, 0x0F)); // Default: white
526+
517527
smf_set_initial(SMF_CTX(&s_obj), &badge_states[BADGE_STATE_INIT]);
518528
while(1) {
519529
rc = k_msgq_get(&event_msgq, &s_obj.event, K_NO_WAIT);

0 commit comments

Comments
 (0)