142 lines
4.1 KiB
C
142 lines
4.1 KiB
C
/****************************************************************************
|
|
|
|
Copyright(c) 2019 by Aerospace C.Power (Chongqing) Microelectronics. ALL RIGHTS RESERVED.
|
|
|
|
This Information is proprietary to Aerospace C.Power (Chongqing) Microelectronics and MAY NOT
|
|
be copied by any method or incorporated into another program without
|
|
the express written consent of Aerospace C.Power. This Information or any portion
|
|
thereof remains the property of Aerospace C.Power. The Information contained herein
|
|
is believed to be accurate and Aerospace C.Power assumes no responsibility or
|
|
liability for its use in any way and conveys no license or title under
|
|
any patent or copyright and makes no representation or warranty that this
|
|
Information is free from patent or copyright infringement.
|
|
|
|
****************************************************************************/
|
|
|
|
#ifndef IOT_IPC_API_H
|
|
#define IOT_IPC_API_H
|
|
|
|
#include "os_types_api.h"
|
|
#include "iot_pkt_api.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/** \defgroup IPC_APIs IPC APIs
|
|
* @brief WQ30x1 INTER PROCESS COMMUNICATION API
|
|
*
|
|
* Inter process cummunication helper functions
|
|
*
|
|
*/
|
|
|
|
/** @addtogroup IPC_APIs
|
|
* @{
|
|
*/
|
|
|
|
/* PLC family definitions */
|
|
#define IOT_IPC_FID_PLC 0
|
|
#define IOT_IPC_CID_PLC_LIB 0
|
|
#define IOT_IPC_CID_PLC_MAC 1
|
|
|
|
/* SWC family definitions */
|
|
#define IOT_IPC_FID_SWC 1
|
|
#define IOT_IPC_CID_SWC_APP 0
|
|
#define IOT_IPC_CID_SWC_MAC 1
|
|
|
|
/* SG extend SDK family definitions */
|
|
#define IOT_IPC_FID_SG_EXT_SDK 2
|
|
#define IOT_IPC_CID_SG_EXT_CUS_APP 0
|
|
#define IOT_IPC_CID_SG_EXT_SG_APP 1
|
|
|
|
/* ADA Dump family definitions */
|
|
#define IOT_IPC_FID_ADA 3
|
|
#define IOT_IPC_CID_ADA_CLI 0
|
|
#define IOT_IPC_CID_ADA_MAC 1
|
|
|
|
/* DEVICE family definitions */
|
|
#define IOT_IPC_FID_DEV 4
|
|
#define IOT_IPC_CID_DEV_LED_CUS 0
|
|
#define IOT_IPC_CID_DEV_LED_PLC 1
|
|
#define IOT_IPC_CID_DEV_PM_CUS 2
|
|
#define IOT_IPC_CID_DEV_PM_PLC 3
|
|
/* common definitions */
|
|
#define IOT_IPC_CID_BCAST 0xf
|
|
|
|
typedef struct _iot_ipc_addr {
|
|
/** IPC family ID */
|
|
uint8_t f_id :4,
|
|
/** IPC client ID */
|
|
c_id :4;
|
|
} iot_ipc_addr_t;
|
|
|
|
/*
|
|
* callback to receive pkt from ipc. pkt ownership will transferred to the
|
|
* callee. the callee should call iot_pkt_free to free the pkt ASAP.
|
|
* @param: parameter registered in iot_ipc_register_client
|
|
* @addr: source of the packet
|
|
* @pkt: pointer to the packet
|
|
*/
|
|
typedef void (*iot_ipc_recv_func_t)(void *param, iot_ipc_addr_t *addr,
|
|
iot_pkt_t *pkt);
|
|
|
|
typedef struct _iot_ipc_client {
|
|
/** address of the client */
|
|
iot_ipc_addr_t addr;
|
|
/** callback to receive packet from ipc */
|
|
iot_ipc_recv_func_t recv;
|
|
/** parameter that will be transferred back alone with the callback */
|
|
void *param;
|
|
} iot_ipc_client_t;
|
|
|
|
/* ipc client hanlder */
|
|
typedef void *iot_ipc_h;
|
|
|
|
/*
|
|
* iot_ipc_register_client() - register ipc client
|
|
* @client: pointer to client descripter
|
|
*
|
|
* return:
|
|
* NULL -- for failure case
|
|
* othersie -- ipc client handler
|
|
*/
|
|
iot_ipc_h iot_ipc_register_client(iot_ipc_client_t *client);
|
|
|
|
/*
|
|
* iot_ipc_deregister_client() - deregister ipc client
|
|
* @handle: ipc client handler
|
|
*
|
|
* return:
|
|
* 0 -- for success case
|
|
* othersie -- error code
|
|
*/
|
|
uint32_t iot_ipc_deregister_client(iot_ipc_h handle);
|
|
|
|
/*
|
|
* iot_ipc_send() - send a packet through ipc
|
|
* @handle: ipc client handler
|
|
* @addr: target address
|
|
* @pkt: pointer to the packet.
|
|
* iot_ipc_send will forward or free the pkt.
|
|
*/
|
|
void iot_ipc_send(iot_ipc_h handle, iot_ipc_addr_t *addr, iot_pkt_t *pkt);
|
|
|
|
/**
|
|
* @brief: allocate a packet for ipc sending data.
|
|
* @param size: size of the packet user want to be allocate.
|
|
* @param module_id: id of the module to allocate the packet
|
|
* @retval: NULL -- No memory available.
|
|
* @retval: otherwise -- address of the new allocated packet.
|
|
*/
|
|
iot_pkt_t *iot_ipc_pkt_alloc(uint32_t size, module_id_t module_id);
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* IOT_IPC_API_H */ |