Skip to content

Commit dc50309

Browse files
[CXRD-19] Added LED/Buzzer feedback on button actions
- play led pattern on button click - play croxel morse on button click_n_hold Signed-off-by: Anuj Pathak <[email protected]>
1 parent b8ddf29 commit dc50309

File tree

5 files changed

+46
-0
lines changed

5 files changed

+46
-0
lines changed

app/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,5 @@ target_sources(app PRIVATE
1111
src/main.c
1212
src/buzzer.c
1313
src/ledui.c
14+
src/user_button.c
1415
)

app/prj.conf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
CONFIG_LOG=y
22
CONFIG_PWM=y
33
CONFIG_USER_ALERTS=y
4+
CONFIG_USER_BUTTON_ACTIONS=y

app/src/buzzer.c

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#include <zephyr/logging/log.h>
33
#include <zephyr/drivers/pwm.h>
44
#include <user_alerts/user_alerts.h>
5+
#include <user_button_actions/user_button_actions.h>
56
#include <morse_beep_codes.h>
67

78
LOG_MODULE_REGISTER(buzzer);
@@ -29,8 +30,20 @@ static struct user_alerts_channel _buzzer_ch = {
2930
.pattern = NULL,
3031
};
3132

33+
void buzzer_btn_action_handler(struct user_button_actions_channel *ch)
34+
{
35+
if (ch->result.code == eUSER_BUTTON_CLICK_AND_HOLD) {
36+
user_alerts_channel_play(&_buzzer_ch, &_croxel_inc_morse_beeps, true);
37+
}
38+
}
39+
40+
SLL_LISTENER_DEFINE_NODE(user_button_actions,
41+
buzzer_btn_action_listener,
42+
.handler = buzzer_btn_action_handler);
43+
3244
int play_bootup_buzzer_beeps(void)
3345
{
46+
SLL_LISTENER_ADD_NODE(user_button_actions, buzzer_btn_action_listener);
3447
user_alerts_channel_init_timer(&_buzzer_ch);
3548
user_alerts_channel_play(&_buzzer_ch, &_zephyr_morse_beeps, true);
3649
return 0;

app/src/ledui.c

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#include <zephyr/logging/log.h>
33
#include <user_alerts/user_alerts.h>
44
#include <zephyr/drivers/gpio.h>
5+
#include <user_button_actions/user_button_actions.h>
56

67
LOG_MODULE_REGISTER(ledui);
78

@@ -56,10 +57,23 @@ static struct user_alerts_channel _bi_led_ch = {
5657
.pattern = NULL,
5758
};
5859

60+
void led_btn_action_handler(struct user_button_actions_channel *ch)
61+
{
62+
if (ch->result.code == eUSER_BUTTON_CLICK) {
63+
user_alerts_channel_play(&_bi_led_ch, &_btn_click_bi_led_pattern, true);
64+
}
65+
}
66+
67+
SLL_LISTENER_DEFINE_NODE(user_button_actions,
68+
led_btn_action_listener,
69+
.handler = led_btn_action_handler);
70+
5971
int play_bootup_led_blinks(void)
6072
{
6173
int err;
6274

75+
SLL_LISTENER_ADD_NODE(user_button_actions, led_btn_action_listener);
76+
6377
err = gpio_is_ready_dt(&_bi_led_io.led1);
6478
if (!err) {
6579
LOG_ERR("Led1 is not ready");

app/src/user_button.c

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
#include <zephyr/kernel.h>
2+
#include <zephyr/logging/log.h>
3+
#include <user_button_actions/user_button_actions.h>
4+
5+
LOG_MODULE_REGISTER(user_button);
6+
7+
static struct user_button_actions_channel btn = {
8+
.btn = GPIO_DT_SPEC_GET(DT_ALIAS(sw0), gpios),
9+
};
10+
11+
int user_button_setup(void)
12+
{
13+
user_button_actions_start_monitor(&btn);
14+
return 0;
15+
}
16+
17+
SYS_INIT(user_button_setup, APPLICATION, 99);

0 commit comments

Comments
 (0)