228 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			228 lines
		
	
	
		
			5.8 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 _APP_COMMON_H_
							 | 
						||
| 
								 | 
							
								#define _APP_COMMON_H_
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "app_types.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef __cplusplus
							 | 
						||
| 
								 | 
							
								  extern "C" {
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define APP_ARRAY_COUNT(x) (sizeof(x) / sizeof((x)[0]))
							 | 
						||
| 
								 | 
							
								#define APP_SWAP16(x) ((((x)&0xff00) >> 8) | (((x)&0x00ff) << 8))
							 | 
						||
| 
								 | 
							
								#define APP_MAKE_U16(a, b) \
							 | 
						||
| 
								 | 
							
								    ((uint16_t)(((uint8_t)(a)) | ((uint16_t)((uint8_t)(b))) << 8))
							 | 
						||
| 
								 | 
							
								#define APP_MAKE_U32(a, b) \
							 | 
						||
| 
								 | 
							
								    ((uint32_t)(((uint16_t)(a)) | ((uint32_t)((uint16_t)(b))) << 16))
							 | 
						||
| 
								 | 
							
								#define APP_MAKE_IDENTIFIER(a, b, c, d) \
							 | 
						||
| 
								 | 
							
								    APP_MAKE_U32(APP_MAKE_U16(a, b), APP_MAKE_U16(c, d))
							 | 
						||
| 
								 | 
							
								#define APP_VER2BCD(v, r, spc) \
							 | 
						||
| 
								 | 
							
								    ((((v)&0xF) << 12) | (((r)&0xF) << 8) | ((spc)&0xFF))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define APP_PRINTF(fmt, ...) \
							 | 
						||
| 
								 | 
							
								do { \
							 | 
						||
| 
								 | 
							
								    if (app_get_log_enable()) { \
							 | 
						||
| 
								 | 
							
								        iot_cus_printf(fmt, ##__VA_ARGS__); \
							 | 
						||
| 
								 | 
							
								        iot_cus_printf("\n"); \
							 | 
						||
| 
								 | 
							
								    } \
							 | 
						||
| 
								 | 
							
								} while(0)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define APP_PRINT_BUF(sz, buf, len) \
							 | 
						||
| 
								 | 
							
								do { \
							 | 
						||
| 
								 | 
							
								    if (app_get_log_enable()) { \
							 | 
						||
| 
								 | 
							
								        int32_t tmp_length = (len); \
							 | 
						||
| 
								 | 
							
								        int32_t tmp_i = 0; \
							 | 
						||
| 
								 | 
							
								        iot_cus_printf((sz)); \
							 | 
						||
| 
								 | 
							
								        iot_cus_printf("[len=%d]", len); \
							 | 
						||
| 
								 | 
							
								        for (tmp_i = 0; tmp_i < tmp_length; tmp_i++) { \
							 | 
						||
| 
								 | 
							
								            iot_cus_printf(" %02X", (uint8_t)(buf)[tmp_i]); \
							 | 
						||
| 
								 | 
							
								        } \
							 | 
						||
| 
								 | 
							
								        iot_cus_printf("\n"); \
							 | 
						||
| 
								 | 
							
								    } \
							 | 
						||
| 
								 | 
							
								} while (0)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef MAC_FMT
							 | 
						||
| 
								 | 
							
								#define MAC_FMT "%02X%02X%02X%02X%02X%02X"
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef MAC_ARG
							 | 
						||
| 
								 | 
							
								#define MAC_ARG(x) ((uint8_t*)(x))[0],((uint8_t*)(x))[1],((uint8_t*)(x))[2], \
							 | 
						||
| 
								 | 
							
								                    ((uint8_t*)(x))[3],((uint8_t*)(x))[4],((uint8_t*)(x))[5]
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define IOT_APP_DL645_MID           IOT_APP_DEMO_MID
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* DLT645 data */
							 | 
						||
| 
								 | 
							
								#define ID_PLC_DLT645_DATA           (0x60)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define TIMER_TYPE_ONCE              false  /* Single-period timer */
							 | 
						||
| 
								 | 
							
								#define TIMER_TYPE_PERIOD            true   /* Periodic timer */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define STA_OFFLINE_EVENT            (0)
							 | 
						||
| 
								 | 
							
								#define STA_ONLINE_EVENT             (1)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define MAX_RSP_DATA_LEN             (512)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef enum {
							 | 
						||
| 
								 | 
							
								    /* app timer for reboot local device. */
							 | 
						||
| 
								 | 
							
								    APP_TIMER_ID_REBOOT = 0,
							 | 
						||
| 
								 | 
							
								    /* app timer for set mac address. */
							 | 
						||
| 
								 | 
							
								    APP_TIMER_ID_SET_MAC,
							 | 
						||
| 
								 | 
							
								    /* app timer for signal led show. */
							 | 
						||
| 
								 | 
							
								    APP_TIMER_ID_SIGNAL_LED,
							 | 
						||
| 
								 | 
							
								    /* app timer for check if network done. */
							 | 
						||
| 
								 | 
							
								    APP_TIMER_ID_NET_DONE_CHECK,
							 | 
						||
| 
								 | 
							
								    APP_TIMER_ID_MAX
							 | 
						||
| 
								 | 
							
								} app_timer_id_e;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef enum {
							 | 
						||
| 
								 | 
							
								    APP_TASK_MAIN,
							 | 
						||
| 
								 | 
							
								    APP_TASK_CUS,
							 | 
						||
| 
								 | 
							
								    APP_TASK_MAX
							 | 
						||
| 
								 | 
							
								} app_task_e;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* save the pack status */
							 | 
						||
| 
								 | 
							
								#pragma pack(push)
							 | 
						||
| 
								 | 
							
								/* 1 byte align */
							 | 
						||
| 
								 | 
							
								#pragma pack(1)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct {
							 | 
						||
| 
								 | 
							
								    /* PLC packet ID */
							 | 
						||
| 
								 | 
							
								    uint16_t id;
							 | 
						||
| 
								 | 
							
								    /* destination address */
							 | 
						||
| 
								 | 
							
								    uint8_t mac[IOT_MAC_ADDR_LEN];
							 | 
						||
| 
								 | 
							
								} app_custom_data;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* append data before send plc data */
							 | 
						||
| 
								 | 
							
								typedef struct append_tx_info {
							 | 
						||
| 
								 | 
							
								    /* send plc no connectness */
							 | 
						||
| 
								 | 
							
								    uint16_t  force_connless : 1,
							 | 
						||
| 
								 | 
							
								    /* reserve */
							 | 
						||
| 
								 | 
							
								              resv           : 15;
							 | 
						||
| 
								 | 
							
								} append_tx_info_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* restore the pack status */
							 | 
						||
| 
								 | 
							
								#pragma pack(pop)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief app_set_freq_band() - set carrier communication frequency band.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @param [in] band_id: band id.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @return None.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								void app_set_freq_band(uint8_t band_id);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief app_set_scan_band_bitmap() - set scan band bitmap.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @param [in] band_bitmap: band bitmap.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @return None.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								void app_set_scan_band_bitmap(uint8_t *band_bitmap);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief app_get_cco_mac_addr() - get the MAC of CCO in this topo.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @param None.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @return mac address.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								uint8_t *app_get_cco_mac_addr(void);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief app_get_cco_mac_addr() - get the MAC of local device.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @param None.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @return mac address.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								uint8_t *app_get_mac_addr(void);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief app_set_mac_addr() - set the MAC of local device.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @param [in] mac: mac address.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @return None.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								void app_set_mac_addr(uint8_t *mac);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief app_get_log_enable() - get log print enable or disable.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @param None.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @return true: enable;
							 | 
						||
| 
								 | 
							
								 * @return false: disable;
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								uint8_t app_get_log_enable(void);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief app_set_log_enable() - set log print enable or disable.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @param [in] flag: true, eanble; false, disable;
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @return None.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								void app_set_log_enable(uint8_t flag);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief app_timer_start() - start app timer.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @param [in] id: app timer id, see app_timer_id_e.
							 | 
						||
| 
								 | 
							
								 * @param [in] period: timer period in milliseconds.
							 | 
						||
| 
								 | 
							
								 * @param [in] type: timer type, TIMER_TYPE_ONCE or TIMER_TYPE_PERIOD.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @return 0: failed;
							 | 
						||
| 
								 | 
							
								 * @return others: timer id;
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								timer_id_t app_timer_start(app_timer_id_e id, uint32_t period, uint8_t type);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief app_get_random_num32() - get a random number in range.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @param [in] min: range minimum.
							 | 
						||
| 
								 | 
							
								 * @param [in] max: range maximum.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @return random number;
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								uint32_t app_get_random_num32(uint32_t min, uint32_t max);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief app_plc_tx() - send data to destination address throw plc, add append
							 | 
						||
| 
								 | 
							
								 *          info before data.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @param [in] data: data to send.
							 | 
						||
| 
								 | 
							
								 * @param [in] data_length: data length to send.
							 | 
						||
| 
								 | 
							
								 * @param [in] dst_addr: destination address.
							 | 
						||
| 
								 | 
							
								 * @param [in] id: APP id.
							 | 
						||
| 
								 | 
							
								 * @param [in] tx_info: append info.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @return ERR_OK: send succeeded;
							 | 
						||
| 
								 | 
							
								 * @return ERR_FAIL: send failed;
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								uint32_t app_plc_tx(uint8_t *data, uint16_t data_length, uint8_t *dst_addr,
							 | 
						||
| 
								 | 
							
								    uint16_t id, append_tx_info_t *tx_info);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef __cplusplus
							 | 
						||
| 
								 | 
							
								 }
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif  /* _APP_COMMON_H_ */
							 |