#ifndef __GATEWAY_COLLECT_H__
#define __GATEWAY_COLLECT_H__

#include "stm32f10x.h"
//#include "downlink.h"
#include "../../APP/network/downlink.h"
#include "../globalDef.h"
#include "../ota/ota.h"
/*采集器与网关通信的消息类型*/
#define GATE_COLL_HEART_QUERY       0x56	//网关与采集器的下行心跳包
#define COLL_GATE_HEART_QUERY       0x66	//网关与采集器的上行心跳包
#define GATE_COLL_TAX_QUERY         0x57    //业务数据下行发送消息
#define COLL_GATE_TAX_QUERY         0x67    //业务数据上行接收消息
#define GATE_COLL_FIRMMSG_QUERY     0x58	//网关下发查询固件信息
#define COLL_GATE_FIRMMSG_QUERY     0x68	//采集器上发固件信息
#define COLL_GATE_RESTART_QUERY     0x59	//采集器设备重新启动




#define YTSF_0XA2_0X00   0xA2
#define YTSF_0XA1_0X11   0xA1
#define YTSF_0XA1_0X14   0xA4

#define FRAME_LEN 19

#define PLAINTEXT   1  //明文
#define CIPHERTEXT  2  //密文
#define DISPLAY     3  //显示屏

#define GATE_COLL_HEAD_LEN 12 // 网关与采集器通信的协议头为12个字节
#define GATE_COLL_CMD5767_LEN 11 //0x57 0x67指令的长度
#define GATE_COLL_CMD56_LEN 5 // 56命令的长度
#define GATE_COLL_CMD58_LEN 5 // 58命令的长度
#define GATE_COLL_CMD59_LEN 5 // 59命令的长度

#define GATE_COLL_PROTOTYPE 0x11 // 网关与采集器通信协议的版本
/*业务数据头0x17 0x27*/
typedef struct _tax_query_info
{
    uint32_t device_sn;         //设备编号
    uint8_t device_type;        // 设备类型 1：报税口 2：显示屏
    uint8_t msg_com;            //串口号
    uint8_t coll_no;            // 采集器索引 从1开始
    uint8_t tax_no;             //报税口号 从1开始
    uint8_t gun_msgid;          //枪号  从1开始
    uint8_t prot_type;          //协议类型 1:明文 2：密文
    uint8_t status;             //1:成功 2：数据超时
    char  info[160];
}__attribute__((packed)) tax_query_info_t;

/* 心跳0x56 查询固件信息0x58 设备重新启动0x59*/
typedef struct _TAX_COMM_HEAD_{
    uint32_t device_sn; // 设备编号
    uint8_t coll_no;            // 采集器索引 从1开始
}__attribute__((packed))taxComHead;

/*心跳返回的数据0x56*/
typedef struct _TAX_Encry_STATUS_{
    uint32_t device_sn; // 设备编号
    uint8_t coll_no;            // 采集器索引 从1开始
    uint8_t factory; // 1：明文  2：密文
}__attribute__((packed))taxEncryptStatus;

/*固件信息返回0x58*/
typedef struct _TAX_FIRM_MSG_{
    uint32_t device_sn;    //设备SN
    uint8_t coll_no;            // 采集器索引 从1开始
    uint32_t bootloaderVr; // bootloader版本事情
    uint32_t appVr;       //APP版本号
    uint32_t resetNum;    //复位次数
    uint8_t resetType;    //最后一次复位类型
    uint32_t runTime;     //运行时间
    uint8_t updateStatus; // 升级状态码
    uint8_t uuid[12];       //UUID
    char info[160];       //数据内容
}__attribute__((packed))taxFirmMsg;

typedef  union TAX_DATA_INFO_{
    tax_query_info_t data; // 业务数据
    taxComHead comdata; //心跳 查询固件信息 设备重新启动信息
    taxFirmMsg firmMsg; //固件信息
    taxEncryptStatus taxEnStatus; // 心跳包的返回
    char info[160];
}__attribute__((packed))taxDaInfo;

/*网关向采集发送或是接收消息的结构体*/
typedef struct _gateway_collect_com
{
    uint16_t frame_header;      //帧头
    uint8_t  proto_ver;         //协议版本 0x11
    uint32_t seq_no;            //消息序列号
    uint8_t  type;              //一级消息类型
    uint16_t secondType;        // 2级消息类型
    uint16_t len;               //消息长度
    taxDaInfo taxinfo;            //
}__attribute__((packed)) gateway_collect_com_t;


///////////////////////////






extern void gateway_net_send_gatewayMsg(void);

#endif


