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|
12+ * target_type | 1 | R/W | No | Yes | string | | | type of the programmable board|
1313 * firmware_url | 2 | R/W | No | Yes | string | | | url to the binary |
1414 * download_state | 3 | R | No | Yes | integer | 0-255 | | state of the download |
1515 * firmware_version | 4 | R | No | Yes | integer | | | timestamp of the latest binary|
1616 * flash_target | 5 | E | No | Yes | | | | programms the target |
1717 * flash_state | 6 | R | No | Yes | integer | 0-100 | % | progress of flashing the board|
1818 * reset_target | 7 | E | No | Yes | | | | resets the target |
1919 * download_error | 8 | R | No | Yes | integer | | | download error |
20- * download_progres | 9 | R | No | Yes | integer | 0-100 | % | progress of binary download |
20+ * download_progress| 9 | R | No | Yes | integer | 0-100 | % | progress of binary download |
21+ * flash_error | 10| R | No | Yes | integer | | | flashing error |
2122 *
2223 */
2324
@@ -81,7 +82,7 @@ static uint8_t target_read(uint16_t instanceId,
8182
8283 if (* numDataP == 0 )
8384 {
84- * dataArrayP = lwm2m_data_new (7 );
85+ * dataArrayP = lwm2m_data_new (8 );
8586 if (* dataArrayP == NULL ) return COAP_500_INTERNAL_SERVER_ERROR ;
8687 * numDataP = 4 ;
8788 (* dataArrayP )[0 ].id = 1 ;
@@ -91,14 +92,15 @@ static uint8_t target_read(uint16_t instanceId,
9192 (* dataArrayP )[4 ].id = 6 ;
9293 (* dataArrayP )[5 ].id = 8 ;
9394 (* dataArrayP )[6 ].id = 9 ;
95+ (* dataArrayP )[7 ].id = 10 ;
9496 }
9597
9698 for (i = 0 ; i < * numDataP ; i ++ )
9799 {
98100 switch ((* dataArrayP )[i ].id )
99101 {
100102 case 1 :
101- lwm2m_data_encode_int (targetP -> target_type , * dataArrayP + i );
103+ lwm2m_data_encode_string (targetP -> target_type , * dataArrayP + i );
102104 break ;
103105 case 2 :
104106 lwm2m_data_encode_string (targetP -> firmware_url , * dataArrayP + i );
@@ -122,6 +124,9 @@ static uint8_t target_read(uint16_t instanceId,
122124 case 9 :
123125 lwm2m_data_encode_int (targetP -> download_progress , * dataArrayP + i );
124126 break ;
127+ case 10 :
128+ lwm2m_data_encode_int (targetP -> flash_error , * dataArrayP + i );
129+ break ;
125130 default :
126131 return COAP_404_NOT_FOUND ;
127132 }
@@ -140,7 +145,7 @@ static uint8_t target_discover(uint16_t instanceId,
140145 // is the server asking for the full object ?
141146 if (* numDataP == 0 )
142147 {
143- * dataArrayP = lwm2m_data_new (9 );
148+ * dataArrayP = lwm2m_data_new (10 );
144149 if (* dataArrayP == NULL ) return COAP_500_INTERNAL_SERVER_ERROR ;
145150 * numDataP = 8 ;
146151 (* dataArrayP )[0 ].id = 1 ;
@@ -152,6 +157,7 @@ static uint8_t target_discover(uint16_t instanceId,
152157 (* dataArrayP )[6 ].id = 7 ;
153158 (* dataArrayP )[7 ].id = 8 ;
154159 (* dataArrayP )[8 ].id = 9 ;
160+ (* dataArrayP )[9 ].id = 10 ;
155161 }
156162 else
157163 {
@@ -168,6 +174,7 @@ static uint8_t target_discover(uint16_t instanceId,
168174 case 7 :
169175 case 8 :
170176 case 9 :
177+ case 10 :
171178 break ;
172179 default :
173180 return COAP_404_NOT_FOUND ;
@@ -194,17 +201,6 @@ static uint8_t target_write(uint16_t instanceId,
194201 {
195202 case 1 :
196203 return COAP_405_METHOD_NOT_ALLOWED ;
197- /* we do not support writing the target_type yet
198- {
199- int64_t value;
200-
201- if (1 != lwm2m_data_decode_int(dataArray + i, &value))
202- {
203- return COAP_400_BAD_REQUEST;
204- }
205- targetP->target_type = (uint32_t) value;
206- }
207- break;*/
208204 case 2 :
209205 {
210206 if (targetP -> download_state == DOWNLOAD_IN_PROGRESS ) {
@@ -240,6 +236,8 @@ static uint8_t target_write(uint16_t instanceId,
240236 return COAP_405_METHOD_NOT_ALLOWED ;
241237 case 9 :
242238 return COAP_405_METHOD_NOT_ALLOWED ;
239+ case 10 :
240+ return COAP_405_METHOD_NOT_ALLOWED ;
243241 default :
244242 return COAP_404_NOT_FOUND ;
245243 }
@@ -319,30 +317,38 @@ static uint8_t target_exec(uint16_t instanceId,
319317 return COAP_412_PRECONDITION_FAILED ;
320318 }
321319 fprintf (stdout , "\r\n-----------------\r\n"
322- "Execute flash_target on %hu/%d/%d\r\n"
320+ "Executing flash_target on %hu/%d/%d\r\n"
321+ "Target Name: %s\n"
323322 " Parameter (%d bytes):\r\n" ,
324- objectP -> objID , instanceId , resourceId , length );
323+ objectP -> objID , instanceId , resourceId , targetP -> target_type , length );
325324 prv_output_buffer ((uint8_t * )buffer , length );
326325 fprintf (stdout , "-----------------\r\n\r\n" );
327-
328- // TODO: FLASH TARGET AND Update flash progress
326+ targetP -> flash_state = FLASH_IN_PROGRESS ;
327+ // targetP->flash_progress=0;
328+ xTaskCreate (flash_target_task , "Flash_Target" , 2000 , targetP , 2 , NULL );
329329 return COAP_204_CHANGED ;
330330 case 6 :
331331 return COAP_405_METHOD_NOT_ALLOWED ;
332332 case 7 :
333- if (targetP -> flash_state != 100 && targetP -> flash_state != 0 ) {
334- return COAP_503_SERVICE_UNAVAILABLE ;
333+ if (targetP -> flash_state == FLASH_IN_PROGRESS ) {
334+ return COAP_412_PRECONDITION_FAILED ;
335335 }
336336 fprintf (stdout , "\r\n-----------------\r\n"
337337 "Execute reset_target on %hu/%d/%d\r\n"
338+ "Target Name: %s\n"
338339 " Parameter (%d bytes):\r\n" ,
339- objectP -> objID , instanceId , resourceId , length );
340+ objectP -> objID , instanceId , resourceId , targetP -> target_type , length );
340341 prv_output_buffer ((uint8_t * )buffer , length );
341342 fprintf (stdout , "-----------------\r\n\r\n" );
343+ xTaskCreate (reset_target_task , "ResetTarget" , 300 , targetP , 2 , NULL );
342344// TODO: RESET TARGET
343345 return COAP_204_CHANGED ;
344346 case 8 :
345347 return COAP_405_METHOD_NOT_ALLOWED ;
348+ case 9 :
349+ return COAP_405_METHOD_NOT_ALLOWED ;
350+ case 10 :
351+ return COAP_405_METHOD_NOT_ALLOWED ;
346352 default :
347353 return COAP_404_NOT_FOUND ;
348354 }
@@ -351,47 +357,52 @@ static uint8_t target_exec(uint16_t instanceId,
351357lwm2m_object_t * get_target_object (void )
352358{
353359 lwm2m_object_t * targetObj ;
360+ targetObj = (lwm2m_object_t * )lwm2m_malloc (sizeof (lwm2m_object_t ));
361+
362+ if (NULL != targetObj ) {
363+ target_instance_t * targetP ;
364+ int i = 1 ;
365+ memset (targetObj , 0 , sizeof (lwm2m_object_t ));
366+ targetObj -> objID = 31025 ;
367+
368+ TARGET_t * target = target_list .next ;
369+ while (target != NULL ) {
370+ printf ("Add targetObject: %d\n" , i );
371+ targetP = (target_instance_t * )lwm2m_malloc (sizeof (target_instance_t ));
372+ if (NULL == targetP ) return NULL ;
373+ memset (targetP , 0 , sizeof (target_instance_t ));
374+ targetP -> shortID = i ;
375+ targetP -> target_type = target -> name ;
376+ targetP -> firmware_url = NULL ;
377+ targetP -> download_state = NO_DOWNLOAD_DATA ;
378+ targetP -> firmware_version = 0 ;
379+ targetP -> flash_state = NO_FLASH_DATA ;
380+ targetP -> download_progress = 0 ;
381+ targetP -> download_error = NO_ERROR ;
382+ targetP -> binary_filename = lwm2m_malloc (25 );
383+ targetP -> target = target ;
384+
385+ targetObj -> instanceList = LWM2M_LIST_ADD (targetObj -> instanceList , targetP );
386+
387+ target = target -> next ;
388+ i ++ ;
389+ }
354390
355- targetObj = (lwm2m_object_t * )lwm2m_malloc (sizeof (lwm2m_object_t ));
356-
357- if (NULL != targetObj )
358- {
359- int i ;
360- target_instance_t * targetP ;
361-
362- memset (targetObj , 0 , sizeof (lwm2m_object_t ));
363-
364- targetObj -> objID = 31025 ;
365-
366- targetP = (target_instance_t * )lwm2m_malloc (sizeof (target_instance_t ));
367- if (NULL == targetP ) return NULL ;
368- memset (targetP , 0 , sizeof (target_instance_t ));
369- targetP -> shortID = 1 ;
370- targetP -> target_type = 3124 ;
371- targetP -> firmware_url = NULL ;
372- targetP -> download_state = NO_DOWNLOAD_DATA ;
373- targetP -> firmware_version = 0 ;
374- targetP -> flash_state = 0 ;
375- targetP -> download_progress = 0 ;
376- targetP -> download_error = NO_ERROR ;
377- targetP -> binary_filename = lwm2m_malloc (25 );
378-
379- targetObj -> instanceList = LWM2M_LIST_ADD (targetObj -> instanceList , targetP );
380- /*
381- * From a single instance object, two more functions are available.
382- * - The first one (createFunc) create a new instance and filled it with the provided informations. If an ID is
383- * provided a check is done for verifying his disponibility, or a new one is generated.
384- * - The other one (deleteFunc) delete an instance by removing it from the instance list (and freeing the memory
385- * allocated to it)
386- */
387- targetObj -> readFunc = target_read ;
388- targetObj -> writeFunc = target_write ;
389- targetObj -> executeFunc = target_exec ;
390- targetObj -> createFunc = target_create ;
391- targetObj -> deleteFunc = target_delete ;
392- targetObj -> discoverFunc = target_discover ;
393- }
394391
392+ /*
393+ * From a single instance object, two more functions are available.
394+ * - The first one (createFunc) create a new instance and filled it with the provided informations. If an ID is
395+ * provided a check is done for verifying his disponibility, or a new one is generated.
396+ * - The other one (deleteFunc) delete an instance by removing it from the instance list (and freeing the memory
397+ * allocated to it)
398+ */
399+ targetObj -> readFunc = target_read ;
400+ targetObj -> writeFunc = target_write ;
401+ targetObj -> executeFunc = target_exec ;
402+ targetObj -> createFunc = target_create ;
403+ targetObj -> deleteFunc = target_delete ;
404+ targetObj -> discoverFunc = target_discover ;
405+ }
395406 return targetObj ;
396407}
397408
0 commit comments