Skip to content

Commit 37613e7

Browse files
song-fthjunyoun-kim
authored andcommitted
add attribute updateAvailable to ota demo
1 parent a9a79a9 commit 37613e7

File tree

6 files changed

+151
-0
lines changed

6 files changed

+151
-0
lines changed

apps/capability_sample/caps_firmwareUpdate.c

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,52 @@
2323
#include "st_dev.h"
2424
#include "caps_firmwareUpdate.h"
2525

26+
static bool caps_firmwareUpdate_get_updateAvailable_value(caps_firmwareUpdate_data_t *caps_data)
27+
{
28+
if (!caps_data) {
29+
printf("caps_data is NULL\n");
30+
return false;
31+
}
32+
return (*caps_data).updateAvailable_value;
33+
}
34+
35+
static void caps_firmwareUpdate_set_updateAvailable_value(caps_firmwareUpdate_data_t *caps_data, bool updateAvailable)
36+
{
37+
if (!caps_data) {
38+
printf("caps_data is NULL\n");
39+
return;
40+
}
41+
if ((*caps_data).updateAvailable_value) {
42+
(*caps_data).updateAvailable_value = false;
43+
}
44+
(*caps_data).updateAvailable_value = updateAvailable;
45+
}
46+
47+
static void caps_firmwareUpdate_attr_updateAvailable_send(caps_firmwareUpdate_data_t *caps_data)
48+
{
49+
int sequence_no = -1;
50+
51+
if (!caps_data || !caps_data->handle) {
52+
printf("fail to get handle\n");
53+
return;
54+
}
55+
if (!(*caps_data).updateAvailable_value) {
56+
printf("warning:updateAvailable value is false\n");
57+
}
58+
59+
ST_CAP_SEND_ATTR_BOOLEAN(caps_data->handle,
60+
(char *)caps_helper_firmwareUpdate.attr_updateAvailable.name,
61+
(*caps_data).updateAvailable_value,
62+
NULL,
63+
NULL,
64+
sequence_no);
65+
66+
if (sequence_no < 0)
67+
printf("fail to send state value\n");
68+
else
69+
printf("Sequence number return : %d\n", sequence_no);
70+
}
71+
2672
static int caps_firmwareUpdate_attr_lastUpdateStatus_str2idx(const char *value)
2773
{
2874
int index;
@@ -368,6 +414,7 @@ static void caps_firmwareUpdate_init_cb(IOT_CAP_HANDLE *handle, void *usr_data)
368414
caps_firmwareUpdate_attr_lastUpdateTime_send(caps_data);
369415
caps_firmwareUpdate_attr_availableVersion_send(caps_data);
370416
caps_firmwareUpdate_attr_lastUpdateStatusReason_send(caps_data);
417+
caps_firmwareUpdate_attr_updateAvailable_send(caps_data);
371418
}
372419

373420
caps_firmwareUpdate_data_t *caps_firmwareUpdate_initialize(IOT_CTX *ctx, const char *component, void *init_usr_cb, void *usr_data)
@@ -386,6 +433,9 @@ caps_firmwareUpdate_data_t *caps_firmwareUpdate_initialize(IOT_CTX *ctx, const c
386433
caps_data->init_usr_cb = init_usr_cb;
387434
caps_data->usr_data = usr_data;
388435

436+
caps_data->get_updateAvailable_value = caps_firmwareUpdate_get_updateAvailable_value;
437+
caps_data->set_updateAvailable_value = caps_firmwareUpdate_set_updateAvailable_value;
438+
caps_data->attr_updateAvailable_send = caps_firmwareUpdate_attr_updateAvailable_send;
389439
caps_data->get_lastUpdateStatus_value = caps_firmwareUpdate_get_lastUpdateStatus_value;
390440
caps_data->set_lastUpdateStatus_value = caps_firmwareUpdate_set_lastUpdateStatus_value;
391441
caps_data->attr_lastUpdateStatus_str2idx = caps_firmwareUpdate_attr_lastUpdateStatus_str2idx;

apps/capability_sample/caps_firmwareUpdate.h

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,20 @@
2222
extern "C" {
2323
#endif
2424

25+
#define ST_CAP_SEND_ATTR_BOOLEAN(cap_handle, attribute, value_number, unit, data, output_seq_num)\
26+
{\
27+
IOT_EVENT *attr = NULL;\
28+
iot_cap_val_t value;\
29+
\
30+
value.type = IOT_CAP_VAL_TYPE_BOOLEAN;\
31+
value.boolean = value_number;\
32+
attr = st_cap_create_attr(cap_handle, attribute, &value, unit, data);\
33+
if (attr != NULL){\
34+
output_seq_num = st_cap_send_attr(&attr, 1);\
35+
st_cap_free_attr(attr);\
36+
}\
37+
}
38+
2539
typedef struct caps_firmwareUpdate_data {
2640
IOT_CAP_HANDLE* handle;
2741
void *usr_data;
@@ -34,6 +48,13 @@ typedef struct caps_firmwareUpdate_data {
3448
char *availableVersion_value;
3549
char *lastUpdateStatusReason_value;
3650

51+
bool updateAvailable_value;
52+
53+
bool (*get_updateAvailable_value)(struct caps_firmwareUpdate_data *caps_data);
54+
void (*set_updateAvailable_value)(struct caps_firmwareUpdate_data *caps_data, bool updateAvailable);
55+
void (*attr_updateAvailable_send)(struct caps_firmwareUpdate_data *caps_data);
56+
57+
3758
const char *(*get_lastUpdateStatus_value)(struct caps_firmwareUpdate_data *caps_data);
3859
void (*set_lastUpdateStatus_value)(struct caps_firmwareUpdate_data *caps_data, const char *value);
3960
int (*attr_lastUpdateStatus_str2idx)(const char *value);

apps/esp32/ota_demo/main/caps_firmwareUpdate.c

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,52 @@
2323
#include "st_dev.h"
2424
#include "caps_firmwareUpdate.h"
2525

26+
static bool caps_firmwareUpdate_get_updateAvailable_value(caps_firmwareUpdate_data_t *caps_data)
27+
{
28+
if (!caps_data) {
29+
printf("caps_data is NULL\n");
30+
return false;
31+
}
32+
return (*caps_data).updateAvailable_value;
33+
}
34+
35+
static void caps_firmwareUpdate_set_updateAvailable_value(caps_firmwareUpdate_data_t *caps_data, bool updateAvailable)
36+
{
37+
if (!caps_data) {
38+
printf("caps_data is NULL\n");
39+
return;
40+
}
41+
if ((*caps_data).updateAvailable_value) {
42+
(*caps_data).updateAvailable_value = false;
43+
}
44+
(*caps_data).updateAvailable_value = updateAvailable;
45+
}
46+
47+
static void caps_firmwareUpdate_attr_updateAvailable_send(caps_firmwareUpdate_data_t *caps_data)
48+
{
49+
int sequence_no = -1;
50+
51+
if (!caps_data || !caps_data->handle) {
52+
printf("fail to get handle\n");
53+
return;
54+
}
55+
if (!(*caps_data).updateAvailable_value) {
56+
printf("warning:updateAvailable value is false\n");
57+
}
58+
59+
ST_CAP_SEND_ATTR_BOOLEAN(caps_data->handle,
60+
(char *)caps_helper_firmwareUpdate.attr_updateAvailable.name,
61+
(*caps_data).updateAvailable_value,
62+
NULL,
63+
NULL,
64+
sequence_no);
65+
66+
if (sequence_no < 0)
67+
printf("fail to send state value\n");
68+
else
69+
printf("Sequence number return : %d\n", sequence_no);
70+
}
71+
2672
static int caps_firmwareUpdate_attr_lastUpdateStatus_str2idx(const char *value)
2773
{
2874
int index;
@@ -368,6 +414,8 @@ static void caps_firmwareUpdate_init_cb(IOT_CAP_HANDLE *handle, void *usr_data)
368414
caps_firmwareUpdate_attr_lastUpdateTime_send(caps_data);
369415
caps_firmwareUpdate_attr_availableVersion_send(caps_data);
370416
caps_firmwareUpdate_attr_lastUpdateStatusReason_send(caps_data);
417+
caps_firmwareUpdate_set_updateAvailable_value(caps_data, false);
418+
caps_firmwareUpdate_attr_updateAvailable_send(caps_data);
371419
}
372420

373421
caps_firmwareUpdate_data_t *caps_firmwareUpdate_initialize(IOT_CTX *ctx, const char *component, void *init_usr_cb, void *usr_data)
@@ -386,6 +434,9 @@ caps_firmwareUpdate_data_t *caps_firmwareUpdate_initialize(IOT_CTX *ctx, const c
386434
caps_data->init_usr_cb = init_usr_cb;
387435
caps_data->usr_data = usr_data;
388436

437+
caps_data->get_updateAvailable_value = caps_firmwareUpdate_get_updateAvailable_value;
438+
caps_data->set_updateAvailable_value = caps_firmwareUpdate_set_updateAvailable_value;
439+
caps_data->attr_updateAvailable_send = caps_firmwareUpdate_attr_updateAvailable_send;
389440
caps_data->get_lastUpdateStatus_value = caps_firmwareUpdate_get_lastUpdateStatus_value;
390441
caps_data->set_lastUpdateStatus_value = caps_firmwareUpdate_set_lastUpdateStatus_value;
391442
caps_data->attr_lastUpdateStatus_str2idx = caps_firmwareUpdate_attr_lastUpdateStatus_str2idx;

apps/esp32/ota_demo/main/caps_firmwareUpdate.h

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,20 @@
2222
extern "C" {
2323
#endif
2424

25+
#define ST_CAP_SEND_ATTR_BOOLEAN(cap_handle, attribute, value_number, unit, data, output_seq_num)\
26+
{\
27+
IOT_EVENT *attr = NULL;\
28+
iot_cap_val_t value;\
29+
\
30+
value.type = IOT_CAP_VAL_TYPE_BOOLEAN;\
31+
value.boolean = value_number;\
32+
attr = st_cap_create_attr(cap_handle, attribute, &value, unit, data);\
33+
if (attr != NULL){\
34+
output_seq_num = st_cap_send_attr(&attr, 1);\
35+
st_cap_free_attr(attr);\
36+
}\
37+
}
38+
2539
typedef struct caps_firmwareUpdate_data {
2640
IOT_CAP_HANDLE* handle;
2741
void *usr_data;
@@ -34,6 +48,13 @@ typedef struct caps_firmwareUpdate_data {
3448
char *availableVersion_value;
3549
char *lastUpdateStatusReason_value;
3650

51+
bool updateAvailable_value;
52+
53+
bool (*get_updateAvailable_value)(struct caps_firmwareUpdate_data *caps_data);
54+
void (*set_updateAvailable_value)(struct caps_firmwareUpdate_data *caps_data, bool updateAvailable);
55+
void (*attr_updateAvailable_send)(struct caps_firmwareUpdate_data *caps_data);
56+
57+
3758
const char *(*get_lastUpdateStatus_value)(struct caps_firmwareUpdate_data *caps_data);
3859
void (*set_lastUpdateStatus_value)(struct caps_firmwareUpdate_data *caps_data, const char *value);
3960
int (*attr_lastUpdateStatus_str2idx)(const char *value);

apps/esp32/ota_demo/main/main.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,9 @@ static void cap_update_cmd_cb(struct caps_firmwareUpdate_data *caps_data)
151151
{
152152
ota_nvs_flash_init();
153153

154+
caps_data->set_state_value(caps_data, "updateInProgress");
155+
caps_data->attr_state_send(caps_data);
156+
154157
xTaskCreate(&ota_update_task, "ota_update_task", 8096, NULL, 5, &ota_task_handle);
155158
}
156159

apps/esp32/ota_demo/main/ota_util.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -701,6 +701,7 @@ void ota_check_for_update(void *user_data)
701701

702702
char *read_data = NULL;
703703
unsigned int read_data_len = 0;
704+
bool updateAvailable_value = false;
704705

705706
ota_err_t ret = _read_version_info_from_server(&read_data, &read_data_len);
706707
if (ret == OTA_OK) {
@@ -718,9 +719,13 @@ void ota_check_for_update(void *user_data)
718719
}
719720

720721
if (available_version) {
722+
updateAvailable_value = true;
721723
caps_data->set_availableVersion_value(caps_data, available_version);
722724
caps_data->attr_availableVersion_send(caps_data);
723725

726+
caps_data->set_updateAvailable_value(caps_data, updateAvailable_value);
727+
caps_data->attr_updateAvailable_send(caps_data);
728+
724729
free(available_version);
725730
}
726731
}

0 commit comments

Comments
 (0)