Files
kunlun/common/plc_lib/inc/plc_lib_internal.h

142 lines
4.1 KiB
C
Raw Normal View History

2024-09-28 14:24:04 +08:00
/****************************************************************************
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 PLC_LIB_INTERNAL_H
#define PLC_LIB_INTERNAL_H
/* os shim includes */
#include "os_types.h"
#include "os_lock.h"
#include "os_event.h"
#include "os_task.h"
/* common includes */
#include "iot_queue.h"
#include "iot_mem_pool.h"
#include "iot_ipc.h"
#include "iot_plc_api.h"
#include "iot_task.h"
#include "iot_pkt_api.h"
#include "iot_config.h"
#ifdef __cplusplus
extern "C" {
#endif
#if PLC_SUPPORT_CCO_ROLE
/* define plc lib message pool size */
#define PLC_LIB_MSG_POOL_SIZE 255
#else
/* define plc lib message pool size */
#define PLC_LIB_MSG_POOL_SIZE 128
#endif
/* define the plc lib message queue count and priorities, the higer the priority
* the lower the queue number.
*/
#define PLC_LIB_MSG_QUEUE_HP 0
#define PLC_LIB_MSG_QUEUE_MAX_PRIO 1
/* define max number of concurrent app supported */
#define PLC_LIB_APP_SUPP_MAX 4
/* define plc lib internal message id */
#define PLC_LIB_MSG_IPC_EVENT 1
/* default request id */
#define PLC_LIB_REQ_ID_DEFAULT 0
/* plc lib internal message */
typedef struct _plc_lib_msg {
/* iot task message */
iot_task_msg_t task_msg;
/* pointer to message data */
void *data;
} plc_lib_msg_t;
/* plc lib gobal variable */
typedef struct _plc_lib_global {
/* plc lib task configuration */
iot_task_config_t task_cfg;
/* plc lib task handle */
iot_task_h task_h;
/* ipc handler to communicate with plc stack */
iot_ipc_h ipc_h;
/* lock to protect the app array */
os_mutex_h lock;
/* app info array */
iot_plc_app_t app[PLC_LIB_APP_SUPP_MAX];
/* device running mode */
uint8_t proto;
/* device running role */
uint8_t client;
} plc_lib_global_t;
extern plc_lib_global_t *p_plc_lib;
extern iot_ipc_addr_t plc_stack_addr;
/**
* @brief plc_lib_find_app() - find plc app info by app id
* @param app_id: application id to be searched
*
* @return:
* NULL -- for failure case
* othersie -- plc application info pointer
*/
iot_plc_app_t *plc_lib_find_app(uint8_t app_id);
/**
* @brief plc_lib_find_free_app() - find free plc app slot
*
* @return:
* NULL -- for failure case
* othersie -- free plc application slot pointer
*/
iot_plc_app_t *plc_lib_find_free_app();
/**
* @brief plc_lib_prep_msg() - prepare plc lib message header a iot pkt
* @param pkt: pointer to the packet
* @param app_id: application id of the packet
* @param msg_id: msg id of the packet
* @param req_id: request id
* @return:
* pointer to the buffer right after the plc lib message header
*/
uint8_t *plc_lib_prep_msg(iot_pkt_t *buf, uint8_t app_id,
uint8_t msg_id, uint8_t req_id);
/**
* @brief iot_plc_query() - query plc info
* @param handle: plc application handler
* @param req_id: request id, the request id will be transferred back to
* app in the report. app can define the mean of each id
* itself.
* @param msg_id: message id of the info to be queried.
* see IOT_PLC_MSG_XXX.
*/
void iot_plc_query(iot_plc_app_h handle, uint8_t req_id, uint8_t msg_id);
#ifdef __cplusplus
}
#endif
#endif /* PLC_LIB_INTERNAL_H */