Skip to content

Commit 8ec2ee3

Browse files
author
Maksymilian Wojczuk
committed
Download Progress
Added download progress monitoring
1 parent c1e0695 commit 8ec2ee3

File tree

3 files changed

+29
-24
lines changed

3 files changed

+29
-24
lines changed

Inc/communication/wakaama_client/objects/object_target.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ typedef struct _target_instance_
2323
int16_t download_error;
2424
uint32_t firmware_version;
2525
char * binary_filename;
26+
uint8_t download_progress;
2627
} target_instance_t;
2728

2829

Src/communication/binary_download.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,9 +84,12 @@ int startDownload(target_instance_t *targetP) {
8484

8585
if( received_len < 0 ){
8686
printf("recv failed\r\n");
87-
download_error(targetP, RECEIVE_ERROR, socket);
87+
download_error(targetP, RECEIVE_ERROR, socket);gst
8888
}
8989

90+
91+
targetP->download_progress = 100 * total_received_len / payload_len;
92+
9093
total_received_len += received_len;
9194
server_reply[received_len] = '\0';
9295

Src/communication/wakaama_client/objects/object_target.c

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,15 @@
99
* Supported Multiple
1010
* Name | ID | Operations | Instances | Mandatory | Type | Range | Units | Description |
1111
* -----------------|----|------------|-----------|-----------|---------|-------|-------|-------------------------------|
12-
* target_type | 1 | R/W | No | Yes | | | | type of the programmable board|
13-
* firmware_url | 2 | R/W | No | Yes | string | | | url to the binary |
14-
* download_state | 3 | R | No | Yes | integer | 0-255 | | state of the download |
15-
* firmware_version| 4 | R | No | Yes | integer | | | timestamp of the latest binary|
16-
* flash_target | 5 | E | No | Yes | | | | programms the target |
17-
* flash_state | 6 | R | No | Yes | integer | 0-100 | % | progress of flashing the board|
18-
* reset_target | 7 | E | No | Yes | | | | resets the target |
19-
* download_error | 8 | R | No | Yes | integer | | | download error |
12+
* target_type | 1 | R/W | No | Yes | | | | type of the programmable board|
13+
* firmware_url | 2 | R/W | No | Yes | string | | | url to the binary |
14+
* download_state | 3 | R | No | Yes | integer | 0-255 | | state of the download |
15+
* firmware_version | 4 | R | No | Yes | integer | | | timestamp of the latest binary|
16+
* flash_target | 5 | E | No | Yes | | | | programms the target |
17+
* flash_state | 6 | R | No | Yes | integer | 0-100 | % | progress of flashing the board|
18+
* reset_target | 7 | E | No | Yes | | | | resets the target |
19+
* download_error | 8 | R | No | Yes | integer | | | download error |
20+
* download_progres | 9 | R | No | Yes | integer | 0-100 | % | progress of binary download |
2021
*
2122
*/
2223

@@ -80,7 +81,7 @@ static uint8_t target_read(uint16_t instanceId,
8081

8182
if (*numDataP == 0)
8283
{
83-
*dataArrayP = lwm2m_data_new(6);
84+
*dataArrayP = lwm2m_data_new(7);
8485
if (*dataArrayP == NULL) return COAP_500_INTERNAL_SERVER_ERROR;
8586
*numDataP = 4;
8687
(*dataArrayP)[0].id = 1;
@@ -89,6 +90,7 @@ static uint8_t target_read(uint16_t instanceId,
8990
(*dataArrayP)[3].id = 4;
9091
(*dataArrayP)[4].id = 6;
9192
(*dataArrayP)[5].id = 8;
93+
(*dataArrayP)[6].id = 9;
9294
}
9395

9496
for (i = 0 ; i < *numDataP ; i++)
@@ -117,6 +119,9 @@ static uint8_t target_read(uint16_t instanceId,
117119
case 8:
118120
lwm2m_data_encode_int(targetP->download_error, *dataArrayP + i);
119121
break;
122+
case 8:
123+
lwm2m_data_encode_int(targetP->download_progres, *dataArrayP + i);
124+
break;
120125
default:
121126
return COAP_404_NOT_FOUND;
122127
}
@@ -135,7 +140,7 @@ static uint8_t target_discover(uint16_t instanceId,
135140
// is the server asking for the full object ?
136141
if (*numDataP == 0)
137142
{
138-
*dataArrayP = lwm2m_data_new(8);
143+
*dataArrayP = lwm2m_data_new(9);
139144
if (*dataArrayP == NULL) return COAP_500_INTERNAL_SERVER_ERROR;
140145
*numDataP = 8;
141146
(*dataArrayP)[0].id = 1;
@@ -146,6 +151,7 @@ static uint8_t target_discover(uint16_t instanceId,
146151
(*dataArrayP)[5].id = 6;
147152
(*dataArrayP)[6].id = 7;
148153
(*dataArrayP)[7].id = 8;
154+
(*dataArrayP)[8].id = 9;
149155
}
150156
else
151157
{
@@ -161,6 +167,7 @@ static uint8_t target_discover(uint16_t instanceId,
161167
case 6:
162168
case 7:
163169
case 8:
170+
case 9:
164171
break;
165172
default:
166173
return COAP_404_NOT_FOUND;
@@ -203,26 +210,17 @@ static uint8_t target_write(uint16_t instanceId,
203210
if (!dataArray[i].type == LWM2M_TYPE_STRING && !dataArray[i].type == LWM2M_TYPE_OPAQUE) {
204211
return COAP_400_BAD_REQUEST;
205212
}
206-
// if (targetP->firmware_url != NULL) {
207-
// lwm2m_free(targetP->firmware_url);
208-
// }
213+
if (targetP->firmware_url != NULL) {
214+
lwm2m_free(targetP->firmware_url);
215+
}
209216
dataArray[i].value.asBuffer.buffer[dataArray[i].value.asBuffer.length] = '\0';
210217
targetP->firmware_url = lwm2m_strdup((char*)dataArray[i].value.asBuffer.buffer);
211218
targetP->firmware_version = lwm2m_gettime();
212219
targetP->download_state = DOWNLOAD_IN_PROGRESS;
213220
sprintf(targetP->binary_filename, "%d", targetP->firmware_version);
214-
221+
targetP->download_progress = 0;
215222

216223
xTaskCreate(startDownload, NULL, 2000, targetP, 2, NULL);
217-
218-
// int res = startDownload(targetP->firmware_url, targetP->binary_filename);
219-
// if (res == NO_ERROR) {
220-
// targetP->download_state = DOWNLOAD_COMPLETED;
221-
// targetP->download_error = NO_ERROR;
222-
// } else {
223-
// targetP->download_state = DOWNLOAD_ERROR;
224-
// targetP->download_error = res;
225-
// }
226224
}
227225
break;
228226
case 3:
@@ -237,6 +235,8 @@ static uint8_t target_write(uint16_t instanceId,
237235
return COAP_405_METHOD_NOT_ALLOWED;
238236
case 8:
239237
return COAP_405_METHOD_NOT_ALLOWED;
238+
case 9:
239+
return COAP_405_METHOD_NOT_ALLOWED;
240240
default:
241241
return COAP_404_NOT_FOUND;
242242
}
@@ -369,6 +369,7 @@ lwm2m_object_t * get_target_object(void)
369369
targetP->download_state = NO_DOWNLOAD_DATA;
370370
targetP->firmware_version = 0;
371371
targetP->flash_state = 0;
372+
targetP->download_progress = 0;
372373
targetP->download_error = NO_ERROR;
373374
targetP->binary_filename = lwm2m_malloc(25);
374375

0 commit comments

Comments
 (0)