@@ -23,46 +23,67 @@ LOG_MODULE_DECLARE(app_lwm2m, CONFIG_APP_LOG_LEVEL);
2323#define BUTTON2_OBJ_INST_ID 1
2424#define BUTTON2_APP_NAME "Push button 2"
2525
26- static time_t lwm2m_timestamp [2 ];
26+ static const char * const button_names [] = {
27+ "Push button 1" ,
28+ #if CONFIG_LWM2M_IPSO_PUSH_BUTTON_INSTANCE_COUNT > 1
29+ "Push button 2" ,
30+ #endif
31+ #if CONFIG_LWM2M_IPSO_PUSH_BUTTON_INSTANCE_COUNT > 2
32+ "Push button 3" ,
33+ #endif
34+ #if CONFIG_LWM2M_IPSO_PUSH_BUTTON_INSTANCE_COUNT > 3
35+ "Push button 4" ,
36+ #endif
37+ };
38+
39+ static time_t lwm2m_timestamp [ARRAY_SIZE (button_names )];
2740
2841static int lwm2m_init_push_button (void )
2942{
30- ui_input_init ();
31-
32- /* create button1 object */
33- lwm2m_create_object_inst (& LWM2M_OBJ (IPSO_OBJECT_PUSH_BUTTON_ID , BUTTON1_OBJ_INST_ID ));
34-
35- lwm2m_set_res_buf (
36- & LWM2M_OBJ (IPSO_OBJECT_PUSH_BUTTON_ID , BUTTON1_OBJ_INST_ID , APPLICATION_TYPE_RID ),
37- BUTTON1_APP_NAME , sizeof (BUTTON1_APP_NAME ), sizeof (BUTTON1_APP_NAME ),
38- LWM2M_RES_DATA_FLAG_RO );
39-
40- if (IS_ENABLED (CONFIG_LWM2M_IPSO_PUSH_BUTTON_VERSION_1_1 )) {
41- lwm2m_set_res_buf (
42- & LWM2M_OBJ (IPSO_OBJECT_PUSH_BUTTON_ID , BUTTON1_OBJ_INST_ID , TIMESTAMP_RID ),
43- & lwm2m_timestamp [BUTTON1_OBJ_INST_ID ],
44- sizeof (lwm2m_timestamp [BUTTON1_OBJ_INST_ID ]),
45- sizeof (lwm2m_timestamp [BUTTON1_OBJ_INST_ID ]),
46- LWM2M_RES_DATA_FLAG_RW );
43+ int ret ;
44+
45+ ret = ui_input_init ();
46+ if (ret < 0 ) {
47+ return ret ;
4748 }
4849
49- if (CONFIG_LWM2M_IPSO_PUSH_BUTTON_INSTANCE_COUNT == 2 ) {
50- /* create button2 object */
51- lwm2m_create_object_inst (& LWM2M_OBJ (IPSO_OBJECT_PUSH_BUTTON_ID ,
52- BUTTON2_OBJ_INST_ID ));
50+ /* create button objects */
51+ for (int i = 0 ; i < ARRAY_SIZE (button_names ); i ++ ) {
52+ struct lwm2m_obj_path path = LWM2M_OBJ (IPSO_OBJECT_PUSH_BUTTON_ID , i );
53+
54+ ret = lwm2m_create_object_inst (& path );
55+ if (ret < 0 ) {
56+ return ret ;
57+ }
58+
59+ path = LWM2M_OBJ (IPSO_OBJECT_PUSH_BUTTON_ID , i , APPLICATION_TYPE_RID );
5360
54- lwm2m_set_res_buf (& LWM2M_OBJ (IPSO_OBJECT_PUSH_BUTTON_ID ,
55- BUTTON2_OBJ_INST_ID , APPLICATION_TYPE_RID ),
56- BUTTON2_APP_NAME , sizeof (BUTTON2_APP_NAME ),
57- sizeof (BUTTON2_APP_NAME ), LWM2M_RES_DATA_FLAG_RO );
61+ const uint16_t len = sizeof ("Push button X" );
62+
63+ ret = lwm2m_set_res_buf (& path , (void * )button_names [i ], len , len ,
64+ LWM2M_RES_DATA_FLAG_RO );
65+ if (ret < 0 ) {
66+ return ret ;
67+ }
5868
5969 if (IS_ENABLED (CONFIG_LWM2M_IPSO_PUSH_BUTTON_VERSION_1_1 )) {
60- lwm2m_set_res_buf (& LWM2M_OBJ (IPSO_OBJECT_PUSH_BUTTON_ID ,
61- BUTTON2_OBJ_INST_ID , TIMESTAMP_RID ),
62- & lwm2m_timestamp [BUTTON2_OBJ_INST_ID ],
63- sizeof (lwm2m_timestamp [BUTTON2_OBJ_INST_ID ]),
64- sizeof (lwm2m_timestamp [BUTTON2_OBJ_INST_ID ]),
65- LWM2M_RES_DATA_FLAG_RW );
70+ path = LWM2M_OBJ (IPSO_OBJECT_PUSH_BUTTON_ID , i , TIMESTAMP_RID );
71+ ret = lwm2m_set_res_buf (& path , & lwm2m_timestamp [i ], sizeof (time_t ),
72+ sizeof (time_t ), 0 );
73+ if (ret < 0 ) {
74+ return ret ;
75+ }
76+ }
77+ path = LWM2M_OBJ (IPSO_OBJECT_PUSH_BUTTON_ID , i , DIGITAL_INPUT_STATE_RID );
78+ ret = lwm2m_set_bool (& path , false);
79+ if (ret < 0 ) {
80+ return ret ;
81+ }
82+
83+ path = LWM2M_OBJ (IPSO_OBJECT_PUSH_BUTTON_ID , i , DIGITAL_INPUT_COUNTER_RID );
84+ ret = lwm2m_set_s64 (& path , 0 );
85+ if (ret < 0 ) {
86+ return ret ;
6687 }
6788 }
6889
@@ -79,37 +100,17 @@ static bool app_event_handler(const struct app_event_header *aeh)
79100 return false;
80101 }
81102
82- switch (event -> device_number ) {
83- case 1 :
84- lwm2m_set_bool (& LWM2M_OBJ (IPSO_OBJECT_PUSH_BUTTON_ID ,
85- BUTTON1_OBJ_INST_ID ,
86- DIGITAL_INPUT_STATE_RID ),
87- event -> state );
88-
89- if (event -> state ) {
90- if (IS_ENABLED (CONFIG_LWM2M_IPSO_PUSH_BUTTON_VERSION_1_1 )) {
91- set_ipso_obj_timestamp (IPSO_OBJECT_PUSH_BUTTON_ID ,
92- BUTTON1_OBJ_INST_ID );
93- }
94- }
95- break ;
96-
97- case 2 :
98- lwm2m_set_bool (& LWM2M_OBJ (IPSO_OBJECT_PUSH_BUTTON_ID ,
99- BUTTON2_OBJ_INST_ID ,
100- DIGITAL_INPUT_STATE_RID ),
101- event -> state );
102-
103- if (event -> state ) {
104- if (IS_ENABLED (CONFIG_LWM2M_IPSO_PUSH_BUTTON_VERSION_1_1 )) {
105- set_ipso_obj_timestamp (IPSO_OBJECT_PUSH_BUTTON_ID ,
106- BUTTON2_OBJ_INST_ID );
107- }
108- }
109- break ;
103+ uint16_t id = event -> device_number - 1 ;
110104
111- default :
112- return false;
105+ lwm2m_set_bool (& LWM2M_OBJ (IPSO_OBJECT_PUSH_BUTTON_ID , id ,
106+ DIGITAL_INPUT_STATE_RID ),
107+ event -> state );
108+
109+ if (event -> state ) {
110+ if (IS_ENABLED (CONFIG_LWM2M_IPSO_PUSH_BUTTON_VERSION_1_1 )) {
111+ set_ipso_obj_timestamp (IPSO_OBJECT_PUSH_BUTTON_ID ,
112+ id );
113+ }
113114 }
114115
115116 LOG_DBG ("Button %d changed state to %d." , event -> device_number , event -> state );
0 commit comments