228 lines
		
	
	
		
			8.1 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			228 lines
		
	
	
		
			8.1 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
/****************************************************************************
 | 
						|
 | 
						|
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 PROTO_CONN_LESS_H
 | 
						|
#define PROTO_CONN_LESS_H
 | 
						|
 | 
						|
/* os shim includes */
 | 
						|
#include "os_types_api.h"
 | 
						|
#include "iot_utils_api.h"
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
extern "C" {
 | 
						|
#endif
 | 
						|
 | 
						|
/* pack for the structures in the whole file */
 | 
						|
#pragma pack(push) /* save the pack status */
 | 
						|
#pragma pack(1) /* 1 byte align */
 | 
						|
 | 
						|
/* connectionless application protocol version */
 | 
						|
#define CONN_LESS_APP_PROTO_VERSION                 0x01
 | 
						|
 | 
						|
/* connectionless application protocol id definitions */
 | 
						|
#define CONN_LESS_APP_ID_METER_R                    (0xFF01)
 | 
						|
#define CONN_LESS_APP_ID_CONFIG_ACK                 (0xFF02)
 | 
						|
#define CONN_LESS_APP_ID_DATA_PUSH                  (0xFF03)
 | 
						|
#define CONN_LESS_APP_ID_CORRECT_TIME               (0xFF04)
 | 
						|
#define CONN_LESS_APP_ID_TSFM_INFO_RPT              (0xFF05)
 | 
						|
#define CONN_LESS_APP_ID_SUNSOLAR                   (0xFF06)
 | 
						|
#define CONN_LESS_APP_ID_CONFIG                     (0xFF07)
 | 
						|
 | 
						|
/* connectionless application protocol port definitions */
 | 
						|
#define CONN_LESS_APP_PORT                          (0x11)
 | 
						|
 | 
						|
/* connectionless frame priority definition */
 | 
						|
#define CONN_LESS_CFG_PRIO                          3
 | 
						|
#define CONN_LESS_APP_PRIO_METER_READ               3
 | 
						|
#define CONN_LESS_APP_PRIO_CORRECT_TIME             3
 | 
						|
 | 
						|
/* connectionless application data direction: master->master */
 | 
						|
#define CONN_LESS_APP_DIR_M2M                       2
 | 
						|
 | 
						|
/* connectionless application data direction: slave->master */
 | 
						|
#define CONN_LESS_APP_DIR_SLAVE                     1
 | 
						|
 | 
						|
/* connectionless application data direction: master->slave */
 | 
						|
#define CONN_LESS_APP_DIR_MASTER                    0
 | 
						|
 | 
						|
/* connectionless protocol type definition */
 | 
						|
#define CONN_LESS_PROTO_TYPE_TRANSPARENT            0
 | 
						|
#define CONN_LESS_PROTO_TYPE_645_1997               1
 | 
						|
#define CONN_LESS_PROTO_TYPE_645_2007               2
 | 
						|
#define CONN_LESS_PROTO_TYPE_69845                  3
 | 
						|
 | 
						|
/* define config target device ID */
 | 
						|
#define CONN_LESS_CFG_TARGET_ID_CCO                 0
 | 
						|
#define CONN_LESS_CFG_TARGET_ID_STA                 1
 | 
						|
 | 
						|
/* connectionless device type definitions */
 | 
						|
#define CONN_LESS_DEV_TYPE_METER_CONTROLLER         (1)
 | 
						|
#define CONN_LESS_DEV_TYPE_CONCENTRATOR             (2)
 | 
						|
#define CONN_LESS_DEV_TYPE_POWER_METER              (3)
 | 
						|
#define CONN_LESS_DEV_TYPE_REPEAT                   (4)
 | 
						|
#define CONN_LESS_DEV_TYPE_COLLECTOR_2              (5)
 | 
						|
#define CONN_LESS_DEV_TYPE_COLLECTOR_1              (6)
 | 
						|
#define CONN_LESS_DEV_TYPE_THREE_PHASE_METER        (7)
 | 
						|
 | 
						|
/* connectionless device physical phase line definition */
 | 
						|
#define CONN_LESS_DEV_PHASE_TYPE_DEFAULT            0
 | 
						|
#define CONN_LESS_DEV_PHASE_TYPE_A                  1
 | 
						|
#define CONN_LESS_DEV_PHASE_TYPE_B                  2
 | 
						|
#define CONN_LESS_DEV_PHASE_TYPE_C                  3
 | 
						|
 | 
						|
/* define the maximum response message allowed for connectionless meter
 | 
						|
 * reading.
 | 
						|
 */
 | 
						|
#define PROTO_CONN_LESS_MR_RESPONSE_MAX_SIZE        460
 | 
						|
 | 
						|
/* defining config target device type identifier mask */
 | 
						|
#define CONN_LESS_CFG_TARGET_ID_MSK_CCO \
 | 
						|
    (1 << CONN_LESS_CFG_TARGET_ID_CCO)
 | 
						|
#define CONN_LESS_CFG_TARGET_ID_MSK_STA \
 | 
						|
    (1 << CONN_LESS_CFG_TARGET_ID_STA)
 | 
						|
 | 
						|
/* connectionless devive push data type */
 | 
						|
#define CONN_LESS_DEV_PUSH_DATA_TYPE_FWD            0
 | 
						|
#define CONN_LESS_DEV_PUSH_DATA_TYPE_EVT            1
 | 
						|
 | 
						|
/* connectionless application protocol frame header */
 | 
						|
typedef struct _proto_conn_less_hdr {
 | 
						|
    uint8_t     port;
 | 
						|
    uint16_t    id;
 | 
						|
} proto_conn_less_hdr_t;
 | 
						|
 | 
						|
/* connectionless application protocol ppm describe */
 | 
						|
typedef struct _proto_conn_less_ppm_desc {
 | 
						|
    /* ppm value */
 | 
						|
    int8_t value;
 | 
						|
    /* reserve */
 | 
						|
    uint8_t reserve;
 | 
						|
} proto_conn_less_ppm_desc_t;
 | 
						|
 | 
						|
/* connectionless meter reading protocol */
 | 
						|
typedef struct _proto_conn_less_mr_t {
 | 
						|
    /* data length */
 | 
						|
    uint32_t    data_len        :11,
 | 
						|
    /* flag of source id extension,
 | 
						|
     * only used link_type is IOT_SG_LINK_TYPE_APP
 | 
						|
     * flag of add a new request after the req list head,
 | 
						|
     * only used link_type is IOT_SG_LINK_TYPE_CUS
 | 
						|
     */
 | 
						|
                src_id_ext      :1,
 | 
						|
    /* meter reading timeout, uint is 100ms */
 | 
						|
                mr_timeout      :8,
 | 
						|
    /* data type. see GW_APP_DATA_TYPE_XXX */
 | 
						|
                data_type       :4,
 | 
						|
    /* direction flag */
 | 
						|
                dir             :2,
 | 
						|
    /* m2m mdoe to switch mode */
 | 
						|
                m2m_switch_mode :1,
 | 
						|
    /* source id, only used link_type is IOT_SG_LINK_TYPE_APP */
 | 
						|
                src_id          :3,
 | 
						|
    /* timeout retry count allowed */
 | 
						|
                retry_cnt       :2;
 | 
						|
    /* packet sequence */
 | 
						|
    uint16_t    seq;
 | 
						|
    union {
 | 
						|
        /* ack bitmap only for up link valid */
 | 
						|
        uint16_t                   up_ack_bm;
 | 
						|
        /* conn less ppm describe only for down link valid */
 | 
						|
        proto_conn_less_ppm_desc_t dl_ppm_desc;
 | 
						|
    } option;
 | 
						|
    /* data */
 | 
						|
    uint8_t     data[0];
 | 
						|
} proto_conn_less_mr_t;
 | 
						|
 | 
						|
/* connectionless meter push data */
 | 
						|
typedef struct _proto_conn_less_push_data_t {
 | 
						|
    /* data length */
 | 
						|
    uint32_t    data_len        :12,
 | 
						|
    /* direction flag */
 | 
						|
                dir             :2,
 | 
						|
    /* data type, see CONN_LESS_DEV_PUSH_DATA_TYPE_XXX */
 | 
						|
                data_type       :2,
 | 
						|
    /* reserve for future */
 | 
						|
                rsvd            :16;
 | 
						|
    /* packet sequence */
 | 
						|
    uint16_t    seq;
 | 
						|
    /* options */
 | 
						|
    uint16_t    option;
 | 
						|
    /* address of meter, little endian */
 | 
						|
    uint8_t     addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* data */
 | 
						|
    uint8_t     data[0];
 | 
						|
} proto_conn_less_push_data_t;
 | 
						|
 | 
						|
/* configuration acknowledgement message */
 | 
						|
typedef struct _proto_conn_less_config_ack {
 | 
						|
    /* current working band ID */
 | 
						|
    uint8_t band_id;
 | 
						|
} proto_conn_less_config_ack_t;
 | 
						|
 | 
						|
/* connectionless correcting time message layout */
 | 
						|
typedef struct _proto_conn_less_correct_time {
 | 
						|
    /* len of payload */
 | 
						|
    uint16_t    len;
 | 
						|
    /* payload label */
 | 
						|
    uint8_t     data[0];
 | 
						|
} proto_conn_less_correct_time_t;
 | 
						|
 | 
						|
/* target configuration command message layout */
 | 
						|
typedef struct _proto_conn_less_mode_cfg {
 | 
						|
    /* band ID to be configured, see PLC_LIB_FREQ_BAND_X */
 | 
						|
    uint8_t     band_id;
 | 
						|
    /* configuring effective duration, uint is sec */
 | 
						|
    uint8_t     dur;
 | 
						|
    /* the target device ID group that needs to respond to this command.
 | 
						|
     * see CONN_LESS_CFG_TARGET_ID_MSK_XXX.
 | 
						|
     */
 | 
						|
    uint32_t    target_id_mask;
 | 
						|
} proto_conn_less_mode_cfg_t;
 | 
						|
 | 
						|
/* connectionless report tsfm info data layout */
 | 
						|
typedef struct _proto_conn_less_tsfm_info_rpt {
 | 
						|
    /* protocol version */
 | 
						|
    uint8_t     ver              :4,
 | 
						|
    /* reserve for future */
 | 
						|
                reserve1         :4;
 | 
						|
    /* protocol type, see CONN_LESS_PROTO_TYPE_XXX */
 | 
						|
    uint8_t     pro_type         :4,
 | 
						|
    /* device type, see CONN_LESS_DEV_TYPE_XXX */
 | 
						|
                dev_type         :4;
 | 
						|
    /* first physical phase line, see CONN_LESS_DEV_PHASE_TYPE_XXX */
 | 
						|
    uint8_t     phase_1          :2,
 | 
						|
    /* second physical phase line, see CONN_LESS_DEV_PHASE_TYPE_XXX */
 | 
						|
                phase_2          :2,
 | 
						|
    /* third physical phase line, see CONN_LESS_DEV_PHASE_TYPE_XXX */
 | 
						|
                phase_3          :2,
 | 
						|
    /* reserve for future */
 | 
						|
                reserve2         :2;
 | 
						|
    /* sta mac address, little-endian */
 | 
						|
    uint8_t     sta_mac[IOT_MAC_ADDR_LEN];
 | 
						|
    /* cco mac address, little-endian */
 | 
						|
    uint8_t     cco_mac[IOT_MAC_ADDR_LEN];
 | 
						|
    /* tsfm address, little-endian */
 | 
						|
    uint8_t     tsfm_mac[IOT_MAC_ADDR_LEN];
 | 
						|
} proto_conn_less_tsfm_info_rpt_t;
 | 
						|
 | 
						|
#pragma pack(pop)/* restore the pack status */
 | 
						|
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
}
 | 
						|
#endif
 | 
						|
 | 
						|
#endif /* PROTO_CONN_LESS_H */
 |