Files
kunlun/app/iot_plc_uart/iot_plc_demo.h
2024-09-28 14:24:04 +08:00

208 lines
8.2 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 _INCLUDE_IOT_PLC_DEMO_H_
#define _INCLUDE_IOT_PLC_DEMO_H_
#ifdef __cplusplus
extern "C" {
#endif
/********************** FOR USER CONFIGURATION ** START ***********************/
#define DEMO_APP_DEBUG_EN 1 /* enable data print debug or not.
demo_app_data_print() */
#define DEMO_PRINT_DEBUG 1 /* enable data print debug or not */
#define DEMO_APP_CTRL_LED 1 /* enable led function or not */
/********************** FOR USER CONFIGURATION ** END *************************/
/********************** FOR DEMO CONFIGURATION ** START ***********************/
#if DEMO_APP_DEBUG_EN
#define DEMO_APP_LOG_BUF_LEN (256) /* define the buffer length for
debug infon printing */
#endif /* DEMO_APP_DEBUG_EN */
#define DEMO_UART_RCV_BUF_LEN 256 /*demo uart recv buffer */
/* for demo debug print function */
#if DEMO_PRINT_DEBUG
#define DEMO_DEBUG_LOG(X0, X1, X2, X3, X4, X5, X6) \
iot_cus_printf((char *)X0, (int)X1, (int)X2, (int)X3, (int)X4, \
(int)X5, (int)X6);
#else /*DEMO_PRINT_DEBUG*/
#define DEMO_DEBUG_LOG(X0, X1, X2, X3, X4, X5, X6)
#endif /*DEMO_PRINT_DEBUG*/
#define DEMO_INFO(x0, x1, x2, x3, x4, x5, x6) \
DEMO_DEBUG_LOG("\r\n>>DEMO INFOR : " x0 "<<\r\n", x1, x2, x3, x4, \
x5, x6)
#define DEMO_ERROR(x0, x1, x2, x3, x4, x5, x6) \
DEMO_DEBUG_LOG("\r\n##DEMO ERROR : " x0 "##\r\n", x1, x2, x3, x4, \
x5, x6)
/* led configuration */
#define DEMO_LED_LIGHT_UP_FLAG 0 /* Low led pin level */
#define DEMO_LED_LIGHT_DOWN_FLAG 1 /* High led pin level */
#define DEMO_LED_TMR_PERIO 225 /* Time in micro-seconds. */
#define DEMO_LED_BLINK_RX_TM (DEMO_LED_TMR_PERIO)
#define DEMO_LED_BLINK_TX_TM (DEMO_LED_TMR_PERIO*4) /* 1S */
#define DEMO_LED_TM_FOREVER (-1)
#define DEMO_LED_RX_CONTINUE_TM 2000 /* 2s */
#define DEMO_LED_TX_CONTINUE_TM DEMO_LED_TM_FOREVER /* always blinking */
/* led attribute descriptor */
typedef struct _demo_led_struct {
uint32_t blink_time;
uint16_t load_perio;
uint16_t cur_perio;
uint16_t status;
uint8_t pin;
} dm_led_t;
/* led device descriptor */
typedef struct _demo_led_entity {
timer_id_t tmr_id; /* To triger repeatedly works. */
os_mutex_h sem_h;
dm_led_t tx; /* Designed to blinking all the time. */
dm_led_t rx; /* Designed to blinking when there are packets from
PLC-layer. */
} dm_led_dev_t;
/* msg task descriptor */
typedef struct _demo_msg_task {
iot_task_h handle; /* Task handle. */
iot_task_config_t cfg; /* Keep the task configuration. */
} dm_msg_task_t;
/* msg descriptor */
typedef struct _demo_msg {
iot_task_msg_t msg; /* The main entity of message. */
void *data; /* The user data inside this message. */
} dm_msg_t;
#define DEMO_APP_LINK_ID 2 /* maximum number of app connections */
typedef struct demo_device {
uint8_t rmt_valid; /* Indicates if the remote device is ready. */
uint8_t link_id; /* dev connections number. */
uint8_t dev_ready; /* Indicates if this local device is ready. */
uint8_t dev_role; /* This local device role, CCO or STA ... */
uint32_t dev_type; /* device type */
uint8_t mac_addr[IOT_MAC_ADDR_LEN];/* MAC of this local device. */
uint8_t cco_addr[IOT_MAC_ADDR_LEN];/* MAC of CCO in this topo. */
uint8_t rmt_addr[IOT_MAC_ADDR_LEN];/* MAC of remote device we
communicate with. */
uint32_t nid; /* The network ID of this topo. */
} dm_dev_t;
/* timer period to print core temperature. unit is ms */
#define DEMO_APP_TEMP_PRINT_TMR_PERIOD (5000)
/* timer period to check associated sta. unit is ms */
#define DEMO_APP_ASSOC_CHECK_TMR_PERIOD (1000)
/* minimum count of tmr period wait for sta to associate */
#define DEMO_APP_MIN_ASSOC_PERIODS (20)
/* medium count of tmr period wait for sta to associate */
#define DEMO_APP_MED_ASSOC_PERIODS (60)
/* maximum count of tmr period wait for sta to associate */
#define DEMO_APP_MAX_ASSOC_PERIODS (120)
/* count of whitelist entries to retrieve */
#define DEMO_APP_WL_QR_CNT (200)
/* size of bitmap. unit is byte */
#define DEMO_APP_BIT_MAP_SIZE (IOT_APP_WL_PIB_ADDR_CNT / 8 + 1)
/* demo app entity descriptor */
typedef struct _app_demo_entity {
iot_uart_h cmd_uart;
dm_msg_task_t msg_task; /* This task will process all messages and events
that from this very module. */
dm_led_dev_t led;
iot_plc_app_h app_hdl; /* The handle of this DEMO APP. */
uint32_t app_reg; /* Indicates if this APP has registered
to PLC-layer. */
dm_dev_t dev; /* Device information. */
timer_id_t tmr_assoc_check; /* timer id for associated sta check*/
uint8_t addr_bitmap[DEMO_APP_BIT_MAP_SIZE];
/* array used to mark associated sta */
uint32_t assoc_timeout_period; /* period of associated timeout */
uint32_t periods_count; /* count for tmr periods */
uint8_t assoc_done; /* label for all stas associated to network */
} app_dm_entity_t;
/* demo msg type */
typedef enum {
E_DEMO_MSG_START = 0,
E_DEMO_MSG_FROM_MAC, /* message type from plc */
E_DEMO_MSG_TIMER, /* message type from timer */
E_DEMO_MSG_PROCESS, /* message type from process */
E_DEMO_MSG_END
} e_msg_t;
/* demo message id */
typedef enum {
E_CMD_ID_START,
E_CMD_ID_RCV_FROM_PLC, /* message id of plc */
E_CMD_ID_RCV_FROM_UART, /* message id of uart */
E_CMD_ID_RCV_FROM_CLI, /* message id of cli */
E_CMD_ID_TMR_ASSOC_CHECK, /* message id of check connect */
E_CMD_ID_END
} e_cmd_id_t;;
/* demo event type */
typedef enum {
E_EVENT_START = 0,
E_EVENT_TIMR, /* timer event */
E_EVENT_END = 31
} e_ev_t;
#define DEMO_EVENT_VALID(ev) ((ev) <= E_EVENT_END && (ev) >= E_EVENT_START)
#ifndef EVENT_BIT
#define EVENT_BIT(n) (1 << (n))
#endif
/* demo task configuration */
#define DEMO_PLC_CMD_PRIO 3 /* plc application priority */
#define DEMO_TASK_MSG_PRIO 0 /* message priority */
#define DEMO_MSG_HANDLE_TASK_PRIO 8 /* task priority */
#define DEMO_MSG_TASK_PRIO_QUE 1 /* task message queue count */
#define DEMO_MSG_PENDING_LIMIT 64 /* task message count */
#define DEMO_MSG_VALID(msg) ((msg) > E_DEMO_MSG_START && (msg) < E_DEMO_MSG_END)
#define DEMO_TMR_PERIO 225 /* Time in micro-seconds. */
#define DEMO_RUN_STAMP_TM (DEMO_TMR_PERIO * 120) /* 30S */
#define DEMO_APP_QUERY_TM (DEMO_TMR_PERIO * 8) /* 2S */
#define DEMO_APP_SAMPL_TM (DEMO_TMR_PERIO * 20) /* 5S */
#define DEMO_APP_CONNLESS_RETRY_CNT (1) /* Retry cnt for conn less pkt */
/********************** FOR DEMO CONFIGURATION ** END *************************/
#ifdef __cplusplus
}
#endif
#endif /* _INCLUDE_IOT_PLC_DEMO_H_ */