Skip to content

Commit 51a388f

Browse files
committed
applications: clime: Improve IAQ button behaviour
1 parent 5219dcd commit 51a388f

File tree

6 files changed

+134
-70
lines changed

6 files changed

+134
-70
lines changed

applications/clime/src/app_cbor.c

+27-27
Original file line numberDiff line numberDiff line change
@@ -445,6 +445,9 @@ static int encode(zcbor_state_t *zs)
445445
#if defined(CONFIG_SHIELD_CTR_S1)
446446
zcbor_uint32_put(zs, MSG_KEY_IAQ_SENSOR);
447447
{
448+
struct app_data_iaq_sensors *sensors = &g_app_data.iaq.sensors;
449+
struct app_data_iaq_button *button = &g_app_data.iaq.button;
450+
448451
zcbor_map_start_encode(zs, ZCBOR_VALUE_IS_INDEFINITE_LENGTH);
449452

450453
zcbor_uint32_put(zs, MSG_KEY_TEMPERATURE);
@@ -455,12 +458,11 @@ static int encode(zcbor_state_t *zs)
455458
{
456459
zcbor_list_start_encode(zs, ZCBOR_VALUE_IS_INDEFINITE_LENGTH);
457460

458-
zcbor_uint64_put(zs, g_app_data.iaq.timestamp);
461+
zcbor_uint64_put(zs, sensors->timestamp);
459462
zcbor_uint32_put(zs, g_app_config.interval_aggreg);
460463

461-
for (int i = 0; i < g_app_data.iaq.measurement_count; i++) {
462-
put_sample_mul(zs,
463-
&g_app_data.iaq.measurements[i].temperature,
464+
for (int i = 0; i < sensors->measurement_count; i++) {
465+
put_sample_mul(zs, &sensors->measurements[i].temperature,
464466
100.f);
465467
}
466468

@@ -477,10 +479,10 @@ static int encode(zcbor_state_t *zs)
477479
{
478480
zcbor_list_start_encode(zs, ZCBOR_VALUE_IS_INDEFINITE_LENGTH);
479481

480-
zcbor_uint64_put(zs, g_app_data.iaq.timestamp);
482+
zcbor_uint64_put(zs, sensors->timestamp);
481483
zcbor_uint32_put(zs, g_app_config.interval_aggreg);
482-
for (int i = 0; i < g_app_data.iaq.measurement_count; i++) {
483-
put_sample_mul(zs, &g_app_data.iaq.measurements[i].humidity,
484+
for (int i = 0; i < sensors->measurement_count; i++) {
485+
put_sample_mul(zs, &sensors->measurements[i].humidity,
484486
100.f);
485487
}
486488

@@ -497,11 +499,11 @@ static int encode(zcbor_state_t *zs)
497499
{
498500
zcbor_list_start_encode(zs, ZCBOR_VALUE_IS_INDEFINITE_LENGTH);
499501

500-
zcbor_uint64_put(zs, g_app_data.iaq.timestamp);
502+
zcbor_uint64_put(zs, sensors->timestamp);
501503
zcbor_uint32_put(zs, g_app_config.interval_aggreg);
502504

503-
for (int i = 0; i < g_app_data.iaq.measurement_count; i++) {
504-
put_sample(zs, &g_app_data.iaq.measurements[i].illuminance);
505+
for (int i = 0; i < sensors->measurement_count; i++) {
506+
put_sample(zs, &sensors->measurements[i].illuminance);
505507
}
506508

507509
zcbor_list_end_encode(zs, ZCBOR_VALUE_IS_INDEFINITE_LENGTH);
@@ -517,11 +519,11 @@ static int encode(zcbor_state_t *zs)
517519
{
518520
zcbor_list_start_encode(zs, ZCBOR_VALUE_IS_INDEFINITE_LENGTH);
519521

520-
zcbor_uint64_put(zs, g_app_data.iaq.timestamp);
522+
zcbor_uint64_put(zs, sensors->timestamp);
521523
zcbor_uint32_put(zs, g_app_config.interval_aggreg);
522524

523-
for (int i = 0; i < g_app_data.iaq.measurement_count; i++) {
524-
put_sample(zs, &g_app_data.iaq.measurements[i].altitude);
525+
for (int i = 0; i < sensors->measurement_count; i++) {
526+
put_sample(zs, &sensors->measurements[i].altitude);
525527
}
526528

527529
zcbor_list_end_encode(zs, ZCBOR_VALUE_IS_INDEFINITE_LENGTH);
@@ -537,11 +539,11 @@ static int encode(zcbor_state_t *zs)
537539
{
538540
zcbor_list_start_encode(zs, ZCBOR_VALUE_IS_INDEFINITE_LENGTH);
539541

540-
zcbor_uint64_put(zs, g_app_data.iaq.timestamp);
542+
zcbor_uint64_put(zs, sensors->timestamp);
541543
zcbor_uint32_put(zs, g_app_config.interval_aggreg);
542544

543-
for (int i = 0; i < g_app_data.iaq.measurement_count; i++) {
544-
put_sample(zs, &g_app_data.iaq.measurements[i].pressure);
545+
for (int i = 0; i < sensors->measurement_count; i++) {
546+
put_sample(zs, &sensors->measurements[i].pressure);
545547
}
546548

547549
zcbor_list_end_encode(zs, ZCBOR_VALUE_IS_INDEFINITE_LENGTH);
@@ -557,11 +559,11 @@ static int encode(zcbor_state_t *zs)
557559
{
558560
zcbor_list_start_encode(zs, ZCBOR_VALUE_IS_INDEFINITE_LENGTH);
559561

560-
zcbor_uint64_put(zs, g_app_data.iaq.timestamp);
562+
zcbor_uint64_put(zs, sensors->timestamp);
561563
zcbor_uint32_put(zs, g_app_config.interval_aggreg);
562564

563-
for (int i = 0; i < g_app_data.iaq.measurement_count; i++) {
564-
put_sample(zs, &g_app_data.iaq.measurements[i].co2_conc);
565+
for (int i = 0; i < sensors->measurement_count; i++) {
566+
put_sample(zs, &sensors->measurements[i].co2_conc);
565567
}
566568

567569
zcbor_list_end_encode(zs, ZCBOR_VALUE_IS_INDEFINITE_LENGTH);
@@ -577,12 +579,11 @@ static int encode(zcbor_state_t *zs)
577579
{
578580
zcbor_list_start_encode(zs, ZCBOR_VALUE_IS_INDEFINITE_LENGTH);
579581

580-
zcbor_uint64_put(zs, g_app_data.iaq.timestamp);
582+
zcbor_uint64_put(zs, sensors->timestamp);
581583
zcbor_uint32_put(zs, g_app_config.interval_aggreg);
582584

583-
for (int i = 0; i < g_app_data.iaq.measurement_count; i++) {
584-
zcbor_int32_put(
585-
zs, g_app_data.iaq.measurements[i].motion_count);
585+
for (int i = 0; i < sensors->measurement_count; i++) {
586+
zcbor_int32_put(zs, sensors->measurements[i].motion_count);
586587
}
587588

588589
zcbor_list_end_encode(zs, ZCBOR_VALUE_IS_INDEFINITE_LENGTH);
@@ -598,12 +599,11 @@ static int encode(zcbor_state_t *zs)
598599
{
599600
zcbor_list_start_encode(zs, ZCBOR_VALUE_IS_INDEFINITE_LENGTH);
600601

601-
zcbor_uint64_put(zs, g_app_data.iaq.timestamp);
602+
zcbor_uint64_put(zs, button->timestamp);
602603
zcbor_uint32_put(zs, g_app_config.interval_aggreg);
603604

604-
for (int i = 0; i < g_app_data.iaq.measurement_count; i++) {
605-
zcbor_int32_put(zs,
606-
g_app_data.iaq.measurements[i].press_count);
605+
for (int i = 0; i < button->measurement_count; i++) {
606+
zcbor_int32_put(zs, button->measurements[i].press_count);
607607
}
608608

609609
zcbor_list_end_encode(zs, ZCBOR_VALUE_IS_INDEFINITE_LENGTH);

applications/clime/src/app_data.h

+24-7
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,13 @@
1818
#include <zephyr/kernel.h>
1919

2020
#define APP_DATA_MAX_MEASUREMENTS 32
21-
#define APP_DATA_MAX_SAMPLES 32
21+
#define APP_DATA_MAX_SAMPLES 32
2222
#define APP_DATA_MAX_TAMPER_EVENTS 32
2323
#define APP_DATA_MAX_BACKUP_EVENTS 32
2424
#define APP_DATA_MAX_HYGRO_EVENTS 32
2525

2626
#if defined(CONFIG_SHIELD_CTR_DS18B20)
27-
#define APP_DATA_W1_THERM_COUNT 10
27+
#define APP_DATA_W1_THERM_COUNT 10
2828
#define APP_DATA_W1_THERM_MAX_SAMPLES 128
2929
#endif /* defined(CONFIG_SHIELD_CTR_DS18B20) */
3030

@@ -77,20 +77,22 @@ struct app_data_aggreg {
7777
};
7878

7979
#if defined(CONFIG_SHIELD_CTR_S1)
80-
struct app_data_iaq_measurement {
80+
struct app_data_iaq_sensors_measurement {
8181
struct app_data_aggreg temperature;
8282
struct app_data_aggreg humidity;
8383
struct app_data_aggreg illuminance;
8484
struct app_data_aggreg altitude;
8585
struct app_data_aggreg pressure;
8686
struct app_data_aggreg co2_conc;
8787

88-
int press_count;
8988
int motion_count;
9089
};
9190

92-
struct app_data_iaq {
93-
atomic_t press_count;
91+
struct app_data_iaq_button_measurement {
92+
int press_count;
93+
};
94+
95+
struct app_data_iaq_sensors {
9496
atomic_t motion_count;
9597

9698
int sample_count;
@@ -102,10 +104,25 @@ struct app_data_iaq {
102104
float samples_co2_conc[APP_DATA_MAX_SAMPLES];
103105

104106
int measurement_count;
105-
struct app_data_iaq_measurement measurements[APP_DATA_MAX_MEASUREMENTS];
107+
struct app_data_iaq_sensors_measurement measurements[APP_DATA_MAX_MEASUREMENTS];
106108

107109
int64_t timestamp;
108110
};
111+
112+
struct app_data_iaq_button {
113+
atomic_t press_count;
114+
115+
int measurement_count;
116+
struct app_data_iaq_button_measurement measurements[APP_DATA_MAX_MEASUREMENTS];
117+
118+
int64_t timestamp;
119+
};
120+
121+
struct app_data_iaq {
122+
struct app_data_iaq_sensors sensors;
123+
struct app_data_iaq_button button;
124+
};
125+
109126
#endif /* defined(CONFIG_SHIELD_CTR_S1) */
110127

111128
#if defined(CONFIG_SHIELD_CTR_S2)

applications/clime/src/app_handler.c

+7-3
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include "app_handler.h"
1111
#include "app_init.h"
1212
#include "app_send.h"
13+
#include "app_sensor.h"
1314
#include "app_work.h"
1415

1516
/* CHESTER includes */
@@ -203,7 +204,7 @@ void ctr_s1_event_handler(const struct device *dev, enum ctr_s1_event event, voi
203204
case CTR_S1_EVENT_BUTTON_PRESSED:
204205
LOG_INF("Event `CTR_S1_EVENT_BUTTON_PRESSED`");
205206

206-
atomic_inc(&g_app_data.iaq.press_count);
207+
atomic_inc(&g_app_data.iaq.button.press_count);
207208

208209
struct ctr_s1_led_param param_led = {
209210
.brightness = CTR_S1_LED_BRIGHTNESS_HIGH,
@@ -234,6 +235,8 @@ void ctr_s1_event_handler(const struct device *dev, enum ctr_s1_event event, voi
234235
k_oops();
235236
}
236237

238+
app_sensor_iaq_button_aggreg();
239+
237240
app_work_send();
238241

239242
break;
@@ -253,7 +256,7 @@ void ctr_s1_event_handler(const struct device *dev, enum ctr_s1_event event, voi
253256
case CTR_S1_EVENT_MOTION_DETECTED:
254257
LOG_INF("Event `CTR_S1_EVENT_MOTION_DETECTED`");
255258

256-
atomic_inc(&g_app_data.iaq.motion_count);
259+
atomic_inc(&g_app_data.iaq.sensors.motion_count);
257260

258261
int motion_count;
259262
ret = ctr_s1_read_motion_count(dev, &motion_count);
@@ -341,8 +344,9 @@ void app_handler_ctr_button(enum ctr_button_channel chan, enum ctr_button_event
341344
{
342345
int ret;
343346

344-
if (chan != CTR_BUTTON_CHANNEL_INT)
347+
if (chan != CTR_BUTTON_CHANNEL_INT) {
345348
return;
349+
}
346350

347351
if (ev == CTR_BUTTON_EVENT_CLICK) {
348352
for (int i = 0; i < val; i++) {

0 commit comments

Comments
 (0)