Skip to content

Commit 845fde8

Browse files
committed
implemented a funtion to retrieve an ipc obj status, and modified the states of the obj sm. replaced started for idle, included a fail state and a free one for objects that arent allocated
1 parent d19a80d commit 845fde8

File tree

3 files changed

+38
-16
lines changed

3 files changed

+38
-16
lines changed

include/ipc.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,13 @@ void apipc_init(void);
3333
enum apipc_rc apipc_register_obj(uint16_t obj_idx, enum apipc_obj_type obj_type,
3434
void *paddr, size_t size, uint16_t startup);
3535

36+
/**
37+
* @fn apipc_obj_state
38+
*
39+
* @brief consult the actual state of the obj_idx object sm
40+
*/
41+
enum apipc_obj_sm apipc_obj_state(uint16_t obj_idx);
42+
3643
/**
3744
* @fn apipc_send
3845
*

include/ipc_defs.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,12 +80,13 @@ enum apipc_startup_sm
8080
enum apipc_obj_sm
8181
{
8282
APIPC_OBJ_SM_UNKNOWN = 0,
83+
APIPC_OBJ_SM_FREE,
8384
APIPC_OBJ_SM_INIT,
84-
APIPC_OBJ_SM_IDLE,
8585
APIPC_OBJ_SM_WRITING,
8686
APIPC_OBJ_SM_WAITTING_RESPONSE,
8787
APIPC_OBJ_SM_RETRY,
88-
APIPC_OBJ_SM_STARTED,
88+
APIPC_OBJ_SM_IDLE,
89+
APIPC_OBJ_SM_FAIL,
8990
};
9091

9192
enum apipc_msg_cmd

src/ipc.c

Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)