Files
kunlun/app/iot_sunsolar_app/inc/iot_sunsolar_task.h

231 lines
7.7 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 _IOT_SUNSOLAR_TASK_H_
#define _IOT_SUNSOLAR_TASK_H_
/* os shim includes */
#include "os_timer_api.h"
/* common includes */
#include "iot_plc_api.h"
#include "iot_task_api.h"
#include "iot_uart_api.h"
#include "iot_pkt_api.h"
#include "iot_ipc_api.h"
#include "proto_645_vendor.h"
/* sunsolar internal header files */
#include "iot_sunsolar_sta.h"
#include "iot_sunsolar_cco.h"
#ifdef __cplusplus
extern "C" {
#endif
/* enable/disable sunsolar app data print */
#define IOT_SUNSOLAR_DEBUG (1)
#define iot_sunsolar_printf(fmt, ...) \
do { \
iot_cus_printf("[sunsolar]" fmt, ##__VA_ARGS__); \
}while(0)
#define TASK_NAME "[sunsolar]"
#define IOT_SUNSOLAR_TASK_UART_BUF_SIZE (2048 + 64)
#define IOT_SUNSOLAR_UART_BANDRATE (9600)
/** Message type defination: */
#define IOT_SUNSOLAR_MSG_TYPE_SG_APP 1 /* messages from sg app */
#define IOT_SUNSOLAR_MSG_TYPE_PLC 2 /* messages from PLC */
#define IOT_SUNSOLAR_MSG_TYPE_UART 3 /* messages from uart port */
#define IOT_SUNSOLAR_MSG_TYPE_TIMER 4 /* messages from timer */
#define IOT_SUNSOLAR_MSG_TYPE_INTERNAL 5 /* messages from internal */
/* event type definition */
#define IOT_SUNSOLAR_EVENT_PV0_LOW_VOLT (1 << 0) /* pv0 low volt event */
#define IOT_SUNSOLAR_EVENT_PV1_LOW_VOLT (1 << 1) /* pv1 low volt event */
/* SG_APP type message id definition */
#define IOT_SUNSOLAR_MSG_ID_SG_DATA 1 /* data from SG APP */
/* UART type message id definition */
#define IOT_SUNSOLAR_MSG_ID_UART_DATA 1 /* data delivered from UART */
/* PLC type message id definition */
#define IOT_SUNSOLAR_MSG_ID_PLC_PKT 1 /* pkt delivered from PLC */
/* message id for updating device info */
#define IOT_SUNSOLAR_TASK_MSG_ID_DEV_INFO_UPDATE (1)
#define IOT_SUNSOLAR_TASK_ID IOT_SUNSOLAR_MID
/* stack size of task */
#define IOT_SUNSOLAR_TASK_STACK_SIZE (0)
#define IOT_SUNSOLAR_TASK_PROTO_TASK_PRIO (6)
/* number of messages pending in queue. */
#if (IOT_PSRAM_ENABLE)
#define IOT_SUNSOLAR_TASK_POOL_SIZE (254)
#else
#define IOT_SUNSOLAR_TASK_POOL_SIZE (64)
#endif
/* sunsolar module protocol type definition */
#define IOT_SUNSOLAR_PROTO_TYPE_TRANSPARENT 0
#define IOT_SUNSOLAR_PROTO_TYPE_645_2007 1
/* sunsolar device link state */
#define SUNSOLAR_OFFLINE 0
#define SUNSOLAR_ONLINE 1
/* define the data transfer road */
#define IOT_SUNSOLAR_DATA_FROM_SG_APP 0
#define IOT_SUNSOLAR_DATA_FROM_UART 1
/* define WDG reset time, uint is 1min */
#define IOT_SG_STA_COLLECTOR_WDG_RESET_TIME (120)
/* define sunsolar alloc buffer size */
#define IOT_SUNSOLAR_BUFFER_SIZE (255)
/** sunsolar task message */
typedef struct _sunsolar_msg_t {
/* iot task message */
iot_task_msg_t task_msg;
/* pointer to message data */
void *data;
/* another data field */
uint32_t data2;
} sunsolar_msg_t;
typedef struct _g_sunsolar_t {
iot_task_config_t task_cfg;
/* task handle */
iot_task_h task;
/* uart handle */
iot_uart_h uart_h;
/* cfg role */
uint8_t role;
/* local mac address. */
uint8_t local_mac[IOT_MAC_ADDR_LEN];
/* cco mac */
uint8_t cco_mac[IOT_MAC_ADDR_LEN];
/* module joined network */
uint8_t plclink_state;
/* plc app regsiter configuration */
iot_plc_app_t app_cfg;
/* handle of registered IPC */
iot_ipc_h ipc_h;
/* handle of registered plc app */
iot_plc_app_h plc_app_h;
/* plc app register status. 1 means registered */
uint8_t app_reg;
/* msdu recv snr */
int8_t snr;
/* msdu recv rssi */
uint8_t rssi;
/* sunsolar message executing callback */
iot_task_msg_execute_func_t msg_exe_func;
/* sunsolar message canceling callback */
iot_task_msg_cancel_func_t msg_cancel_func;
/* sunsolar event executing callback */
iot_task_event_func_t event_exe_func;
union {
/* sta role specific global data */
iot_sunsolar_sta_global_t *sta;
/* cco role specific global data */
iot_sunsolar_cco_global_t *cco;
} desc;
} g_sunsolar_t;
/* sunsolar global internal structure */
extern g_sunsolar_t *p_gsunsolar;
/**
* @brief iot_sunsolar_data_print() - print data, format is hex.
* @param str: a short string to be printed before data
* @param buf: buffer contain data to be printed
* @param len: length of data in the buffer
*/
void iot_sunsolar_data_print(const char* str, uint8_t* buf, uint32_t len);
/**
* @brief iot_sunsolar_rtctime_to_time() - convert rtc time to integer timestamp.
* @param tm: pointer to the rtc time
* @retval: integer timestamp relative to 1970-1-1 00:00:00
*/
int32_t iot_sunsolar_rtctime_to_time(iot_time_tm_t *tm);
/**
* @brief iot_sunsolar_time_to_rtctime() - convert integer timestamp to rtc time.
* @param time: integer timestamp relative to 1970-1-1 00:00:00
* @param tm: return rtc time
*/
void iot_sunsolar_time_to_rtctime(uint32_t time, iot_time_tm_t *tm);
/**
* @brief iot_sunsolar_uart_config() - uart config setting.
* @param baud: baudrate
* @param parity: see IOT_UART_PARITY_XXX
* @param data: data bits
* @param stop: stop flag
* @param proto_type: proto type to set.
*/
void iot_sunsolar_uart_config(uint32_t baud, uint8_t parity,
uint8_t data, uint8_t stop, uint8_t proto_type);
/**
* @brief iot_sunsolar_send_data_to_sg_app() - send data to sg app.
* @param data : the data to send.
* @param data_len : the send data length.
*/
void iot_sunsolar_send_data_to_sg_app(uint8_t *data, uint8_t data_len);
/**
* @brief iot_sunsolar_task_msg_post() - post messages to sunsolar app queue
* @param msg_type: message type, see IOT_SUNSOLAR_MSG_TYPE_XXXX.
* @param msg_id: message id, see IOT_SUNSOLAR_MSG_ID_XXXX.
* @param prio: message prio.
* @param data: data pointer carried by message
* @param data2: integer data carried by messages
*/
void iot_sunsolar_task_msg_post(uint16_t msg_type, uint16_t msg_id,
uint8_t prio, void *data, uint32_t data2);
/**
* @brief iot_sunsolar_uart_send() - send data to uart port.
* @param p_pkt: packet for sending to uart port.
* @return: ERR_OK - send successfully.
* ERR_FAIL - send failed.
*/
uint32_t iot_sunsolar_uart_send(iot_pkt_t *p_pkt);
/**
* @brief iot_sunsolar_msdu_send() - send data to plc.
* @param addr : send data to dst address.
* @param data : send data.
* @param len : send data length.
*/
int8_t iot_sunsolar_msdu_send(uint8_t *addr, uint8_t *data, uint16_t len);
#ifdef __cplusplus
}
#endif
#endif /* _IOT_SUNSOLAR_TASK_H_ */