@@ -185,17 +185,27 @@ enum apipc_rc apipc_register_obj(uint16_t obj_idx, enum apipc_obj_type obj_type,
185185 return rc ;
186186}
187187
188- /* apipc_send: request transfer an object on demand. Object should have been
189- * inited to APIPC_OBJ_SM_STARTED to function */
190- enum apipc_rc apipc_send (uint16_t obj_idx )
188+ /* apipc_obj_state: consult the actual state of the obj_idx object sm. */
189+ enum apipc_obj_sm apipc_obj_state (uint16_t obj_idx )
190+ {
191+ struct apipc_obj * plobj ;
192+
193+ plobj = & l_apipc_obj [obj_idx ];
194+ return plobj -> obj_sm ;
195+ }
196+
197+
198+ /* apipc_send: request transfer an object on demand. object should have been
199+ * inited to apipc_obj_sm_started to function */
200+ ram_func enum apipc_rc apipc_send (uint16_t obj_idx )
191201{
192202 enum apipc_rc rc ;
193203 struct apipc_obj * plobj ;
194204
195205 rc = APIPC_RC_SUCCESS ;
196206 plobj = & l_apipc_obj [obj_idx ];
197207
198- if (plobj -> obj_sm == APIPC_OBJ_SM_STARTED )
208+ if (plobj -> obj_sm == APIPC_OBJ_SM_IDLE )
199209 plobj -> obj_sm = APIPC_OBJ_SM_INIT ;
200210 else
201211 rc = APIPC_RC_FAIL ;
@@ -349,12 +359,12 @@ static void apipc_proc_obj(struct apipc_obj *plobj)
349359 case APIPC_OBJ_SM_UNKNOWN :
350360 if (plobj -> paddr == NULL )
351361 {
352- plobj -> obj_sm = APIPC_OBJ_SM_IDLE ;
362+ plobj -> obj_sm = APIPC_OBJ_SM_FREE ;
353363 break ;
354364 }
355365 if (!plobj -> flag .startup )
356366 {
357- plobj -> obj_sm = APIPC_OBJ_SM_STARTED ;
367+ plobj -> obj_sm = APIPC_OBJ_SM_IDLE ;
358368 break ;
359369 }
360370
@@ -383,7 +393,7 @@ static void apipc_proc_obj(struct apipc_obj *plobj)
383393 plobj -> pGSxM = NULL ;
384394 }
385395
386- plobj -> obj_sm = APIPC_OBJ_SM_IDLE ;
396+ plobj -> obj_sm = APIPC_OBJ_SM_FAIL ;
387397 plobj -> flag .error = 1 ;
388398 }
389399 break ;
@@ -405,7 +415,7 @@ static void apipc_proc_obj(struct apipc_obj *plobj)
405415 plobj -> obj_sm = APIPC_OBJ_SM_RETRY ;
406416 break ;
407417 }
408- plobj -> obj_sm = APIPC_OBJ_SM_IDLE ;
418+ plobj -> obj_sm = APIPC_OBJ_SM_FAIL ;
409419 plobj -> flag .error = 1 ;
410420 }
411421 break ;
@@ -418,12 +428,16 @@ static void apipc_proc_obj(struct apipc_obj *plobj)
418428 }
419429 break ;
420430
421- case APIPC_OBJ_SM_STARTED :
431+ case APIPC_OBJ_SM_FAIL :
432+ if (!plobj -> flag .startup )
433+ plobj -> obj_sm = APIPC_OBJ_SM_IDLE ;
422434 break ;
423435
436+ /* obj is started and idle ready to transmit */
424437 case APIPC_OBJ_SM_IDLE :
425- // if(!plobj->flag.startup)
426- // plobj->obj_sm = APIPC_OBJ_SM_STARTED;
438+ break ;
439+ /* obj is free, do nothing */
440+ case APIPC_OBJ_SM_FREE :
427441 break ;
428442 }
429443}
@@ -518,11 +532,11 @@ static void apipc_message_handler (tIpcMessage *psMessage)
518532
519533 switch (plobj -> obj_sm )
520534 {
521- case APIPC_OBJ_SM_STARTED :
535+ case APIPC_OBJ_SM_IDLE :
522536 break ;
523537
524538 case APIPC_OBJ_SM_WAITTING_RESPONSE :
525- plobj -> obj_sm = APIPC_OBJ_SM_STARTED ;
539+ plobj -> obj_sm = APIPC_OBJ_SM_IDLE ;
526540 break ;
527541
528542 default :
@@ -600,7 +614,7 @@ enum apipc_rc apipc_startup_config(void)
600614
601615 apipc_proc_obj (plobj );
602616
603- if (plobj -> obj_sm != APIPC_OBJ_SM_IDLE && plobj -> obj_sm != APIPC_OBJ_SM_STARTED )
617+ if (plobj -> obj_sm != APIPC_OBJ_SM_FREE && plobj -> obj_sm != APIPC_OBJ_SM_IDLE )
604618 startup_finished = 0 ;
605619
606620 plobj ++ ;
0 commit comments