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 9 :
123+ lwm2m_data_encode_int (targetP -> download_progress , * 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 ;
@@ -200,29 +207,23 @@ static uint8_t target_write(uint16_t instanceId,
200207 break;*/
201208 case 2 :
202209 {
210+ if (targetP -> download_state == DOWNLOAD_IN_PROGRESS ) {
211+ return COAP_412_PRECONDITION_FAILED ;
212+ }
203213 if (!dataArray [i ].type == LWM2M_TYPE_STRING && !dataArray [i ].type == LWM2M_TYPE_OPAQUE ) {
204214 return COAP_400_BAD_REQUEST ;
205215 }
206- // if (targetP->firmware_url != NULL) {
207- // lwm2m_free(targetP->firmware_url);
208- // }
216+ if (targetP -> firmware_url != NULL ) {
217+ lwm2m_free (targetP -> firmware_url );
218+ }
209219 dataArray [i ].value .asBuffer .buffer [dataArray [i ].value .asBuffer .length ] = '\0' ;
210220 targetP -> firmware_url = lwm2m_strdup ((char * )dataArray [i ].value .asBuffer .buffer );
211221 targetP -> firmware_version = lwm2m_gettime ();
212222 targetP -> download_state = DOWNLOAD_IN_PROGRESS ;
213223 sprintf (targetP -> binary_filename , "%d" , targetP -> firmware_version );
214-
224+ targetP -> download_progress = 0 ;
215225
216226 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- // }
226227 }
227228 break ;
228229 case 3 :
@@ -237,6 +238,8 @@ static uint8_t target_write(uint16_t instanceId,
237238 return COAP_405_METHOD_NOT_ALLOWED ;
238239 case 8 :
239240 return COAP_405_METHOD_NOT_ALLOWED ;
241+ case 9 :
242+ return COAP_405_METHOD_NOT_ALLOWED ;
240243 default :
241244 return COAP_404_NOT_FOUND ;
242245 }
@@ -369,6 +372,7 @@ lwm2m_object_t * get_target_object(void)
369372 targetP -> download_state = NO_DOWNLOAD_DATA ;
370373 targetP -> firmware_version = 0 ;
371374 targetP -> flash_state = 0 ;
375+ targetP -> download_progress = 0 ;
372376 targetP -> download_error = NO_ERROR ;
373377 targetP -> binary_filename = lwm2m_malloc (25 );
374378
0 commit comments