思澈科技软件开发工具包  2.20
Inter-Processor Queue Library

Sifli ipc_queue library interface. More...

Data Structures

struct  ipc_queue_cfg_t
 
typedef int32_t ipc_queue_handle_t
 
typedef int32_t(* ipc_queue_rx_ind_t) (ipc_queue_handle_t handle, size_t size)
 
ipc_queue_handle_t ipc_queue_init (ipc_queue_cfg_t *q_cfg)
 
int32_t ipc_queue_get_user_data (ipc_queue_handle_t handle, uint32_t *user_data)
 
int32_t ipc_queue_set_user_data (ipc_queue_handle_t handle, uint32_t user_data)
 
int32_t ipc_queue_open (ipc_queue_handle_t handle)
 
bool ipc_queue_is_open (ipc_queue_handle_t handle)
 
int32_t ipc_queue_close (ipc_queue_handle_t handle)
 
int32_t ipc_queue_deinit (ipc_queue_handle_t handle)
 
size_t ipc_queue_read (ipc_queue_handle_t handle, void *buffer, size_t size)
 
size_t ipc_queue_write (ipc_queue_handle_t handle, const void *buffer, size_t size, uint32_t timeout)
 
bool ipc_queue_check_idle (void)
 
bool ipc_queue_check_idle_rom (void)
 
void ipc_queue_restore_all (void)
 
void ipc_queue_restore_all_rom (void)
 
size_t ipc_queue_get_rx_size (ipc_queue_handle_t handle)
 
#define IPC_QUEUE_INVALID_HANDLE   (0)
 

Detailed Description

Sifli ipc_queue library interface.

Macro Definition Documentation

◆ IPC_QUEUE_INVALID_HANDLE

#define IPC_QUEUE_INVALID_HANDLE   (0)

Invalid queue handle

Typedef Documentation

◆ ipc_queue_handle_t

typedef int32_t ipc_queue_handle_t

IPC queue handle type

◆ ipc_queue_rx_ind_t

typedef int32_t(* ipc_queue_rx_ind_t) (ipc_queue_handle_t handle, size_t size)

IPC queue rx callback type

Function Documentation

◆ ipc_queue_check_idle()

bool ipc_queue_check_idle ( void  )

Check whether ipc queue is idle from sender perspective

If all tx_buffer are empty, it's idle, even though rx_buffer is not empty

Returns
true: idle, false: not idle

◆ ipc_queue_check_idle_rom()

bool ipc_queue_check_idle_rom ( void  )

ipc_queue_check_idle ROM implementation placeholder

Weak function, can be replaced by ROM symbol. If not use ROM symbol, it's same as ipc_queue_check_idle.

Returns
true: idle, false: not idle

◆ ipc_queue_close()

int32_t ipc_queue_close ( ipc_queue_handle_t  handle)

Close the IPC queue

After closing the queue, it cannot receive and send data.

Parameters
[in]handlequeue handle
Returns
status, 0: success, otherwise: error

◆ ipc_queue_deinit()

int32_t ipc_queue_deinit ( ipc_queue_handle_t  handle)

Deinitialize the IPC queue

After deinitializatio the queue with same queue id can be intialized again.

Parameters
[in]handlequeue handle
Returns
status, 0: success, otherwise: error

◆ ipc_queue_get_rx_size()

size_t ipc_queue_get_rx_size ( ipc_queue_handle_t  handle)

Get available data size in rx buffer

Parameters
[in]handlequeue handle
Returns
data size in rx buffer

◆ ipc_queue_get_user_data()

int32_t ipc_queue_get_user_data ( ipc_queue_handle_t  handle,
uint32_t *  user_data 
)

Get user data

Parameters
[in]handlequeue handle
[in,out]user_datauser data is saved in the memory pointed by user_data pointer
Returns
status, 0: success, otherwise: error

◆ ipc_queue_init()

ipc_queue_handle_t ipc_queue_init ( ipc_queue_cfg_t q_cfg)

Initialize one IPC queue according to the q_cfg

A valid queue handle is returned if queue is intialized succesfully. The queue with same queue id cannot be initialized twice.

Parameters
[in]q_cfgqueue configuration
Returns
queue handle, IPC_QUEUE_INVALID_HANDLE denotes initialization failure

◆ ipc_queue_is_open()

bool ipc_queue_is_open ( ipc_queue_handle_t  handle)

Check whether the IPC queue is open

Parameters
[in]handlequeue handle
Returns
true: open, false: not open

◆ ipc_queue_open()

int32_t ipc_queue_open ( ipc_queue_handle_t  handle)

Open the IPC queue

After opened, the queue is ready to receive and send data

Parameters
[in]handlequeue handle
Returns
status, 0: success, otherwise: error

◆ ipc_queue_read()

size_t ipc_queue_read ( ipc_queue_handle_t  handle,
void *  buffer,
size_t  size 
)

Read data from IPC queue

Data is read from rx buffer to saved in buffer

Parameters
[in]handlequeue handle
[in]bufferpoint to the buffer to save read data
[in]sizesize of data to be read
Returns
actual size of data that has been read

◆ ipc_queue_restore_all()

void ipc_queue_restore_all ( void  )

Restore IPC queue hardware setting

HW setting may get lost if the power domain is powered off, if the software configuration is present, this function can be used to restore the hw setting after power domain is powered on.

Returns
void

◆ ipc_queue_restore_all_rom()

void ipc_queue_restore_all_rom ( void  )

ipc_queue_restore_all ROM implementation placeholder

Weak function, can be replaced by ROM symbol. If not use ROM symbol, it's same as ipc_queue_restore_all.

Returns
void

◆ ipc_queue_set_user_data()

int32_t ipc_queue_set_user_data ( ipc_queue_handle_t  handle,
uint32_t  user_data 
)

Set user data

Parameters
[in]handlequeue handle
[in]user_datauser data
Returns
status, 0: success, otherwise: error

◆ ipc_queue_write()

size_t ipc_queue_write ( ipc_queue_handle_t  handle,
const void *  buffer,
size_t  size,
uint32_t  timeout 
)

Write data to IPC queue and inform the receiver to read

Data is written to tx buffer, interrupt is triggered to inform the receiver. The API is not thread-safe. It should be avoided to write the same queue in different threads.

Parameters
[in]handlequeue handle
[in]bufferdata buffer
[in]sizesize of data to be written
[in]timeouttime to wait if tx buffer is full, the unit is HAL_GetTick
Returns
actual size of data that has been written