232 lines
5.8 KiB
C
232 lines
5.8 KiB
C
#ifndef _TCP_TASK_H
|
||
#define _TCP_TASK_H
|
||
#include "config.h"
|
||
|
||
#if USE_SPECT_DATA_TASK
|
||
#include "type.h"
|
||
#define SPECT_DEBUG_MODE 0
|
||
#define SPECT_TASK_UART_DEBUG 0 //串口调试信息开关
|
||
|
||
#if SPECT_TASK_UART_DEBUG
|
||
#define spect_printf printf
|
||
#else
|
||
#define spect_printf(p,...) do{;}while(0)
|
||
#endif
|
||
|
||
#define FRAME_WITHOUT_DATA_LEN (10) //FRAME结构中,数据区为空时的最小数据长度
|
||
|
||
#define FRAME_HEADER (0X46)
|
||
#define FRAME_TAIL (0X96)
|
||
|
||
#define SPECT_CMD_ACK (1<<15) //高位置1表示ack
|
||
enum SPECT_CMD_TYPE
|
||
{
|
||
FRAME_CMD_READ_1 = 0x0001, //读取复数信息
|
||
FRAME_CMD_READ_2 = 0X0002, //读取IMD和SNR信息
|
||
FRAME_CMD_RETURN_ERR_LICENCE = 0x0003, //licence 错误,
|
||
|
||
FRAME_CMD_WRITE_1 = 0x0101,
|
||
FRAME_CMD_OTHER_1 = 0x0201,
|
||
};
|
||
|
||
enum SPECT_FRAME_ERR
|
||
{
|
||
FRAME_ERR_NONE = 0,
|
||
FRAME_ERR_ID,
|
||
FRAME_ERR_HEADER,
|
||
FRAME_ERR_LEN,
|
||
FRAME_ERR_INDEX,
|
||
FRAME_ERR_DATA,
|
||
FRAME_ERR_SUM,
|
||
FRAME_ERR_TAIL,
|
||
};
|
||
|
||
|
||
struct frame_index
|
||
{
|
||
uint8 index1;
|
||
uint8 index2;
|
||
};
|
||
|
||
//数据结构体,类似于串口通讯的,但进行了部分改动,如长度域由单字节扩充为双字节(数据比较长)
|
||
//超过1字节的,按照小端序存放,低字节在前,高字节在后
|
||
//__packed
|
||
#pragma pack(1)
|
||
struct tcp_data_frame
|
||
{
|
||
uint8 id; //激励器ID
|
||
uint8 header; //帧头,固定值
|
||
uint16 len; //帧长度 整帧,从id到tail
|
||
uint16 cmd; //数据内容类型
|
||
uint16 index; //当应答数据存在多帧时,为应答序号 高字节为第n帧(从1开始),低字节为总帧号
|
||
//uint16 reserved; //保留字节 以待扩充(字节对齐)
|
||
void *pdata; //数据区 也可定义为数组模式 实际长度为len-10
|
||
uint8 sum; //数据校验和 从帧头道sum前的字节累加和,不包含sum //利用指针直接访问sum和tail域不可
|
||
uint8 tail; //帧尾,固定值
|
||
};
|
||
#pragma pack()
|
||
|
||
//字节对齐
|
||
struct snr_imd
|
||
{
|
||
uint8 rsnr;
|
||
uint8 tsnr;
|
||
uint8 limd;
|
||
uint8 uimd;
|
||
};
|
||
|
||
|
||
|
||
struct complex
|
||
{
|
||
uint16 real;
|
||
uint16 imag;
|
||
};
|
||
|
||
#define TCP_FRAME_DATA_LEN (1024) //应答数据时,包含的有效数据长度
|
||
#define TCP_DATA_COMPLEX_NUM (4096*2) //一总数据包含的复数个数 tx和rx共8k个复数 原先是只有tx
|
||
#define TCP_DATA_BUF_LEN (TCP_DATA_COMPLEX_NUM*sizeof(struct complex))
|
||
|
||
#define TCP_FRAM_SNR_IMD_LEN (sizeof(struct snr_imd))
|
||
|
||
#define TCP_SPECT_REC_BUF_LEN (64)
|
||
#define TCP_SPECT_SEND_BUF_LEN (1536+64)
|
||
|
||
|
||
#define TCP_SPECT_COMM_PORT (5700)
|
||
|
||
|
||
|
||
struct frame_struct
|
||
{
|
||
uint8 spect_data[TCP_FRAME_DATA_LEN];
|
||
struct snr_imd snr_imd_data;
|
||
};
|
||
|
||
|
||
#ifndef htons
|
||
#define htons(a) \
|
||
((((a) >> 8) & 0x00ff) | \
|
||
(((a) << 8) & 0xff00))
|
||
#endif
|
||
#endif
|
||
|
||
|
||
|
||
#if 1
|
||
#define FPGA_UPGRADE_CTRL_ADDR (0xe0)
|
||
#define FPGA_UP_CTRL_RESET_EN_MASK (1<<0)
|
||
#define FPGA_UP_CTRL_CHECKID_MASK (1<<1)
|
||
#define FPGA_UP_CTRL_VERIFY_MASK (1<<2)
|
||
#define FPGA_UP_CTRL_HDRESET_EN_MASK (1<<7)
|
||
|
||
#define FPGA_UPGRADE_STATUS_ERROR_MASK (1<<0)
|
||
#define FPGA_UP_STATUS_DONE_MASK (1<<1)
|
||
#define FPGA_UP_STATUS_BUSY_MASK (1<<2)
|
||
#define FPGA_UP_STATUS_EARSE_OK_MASK (1<<3)
|
||
#endif
|
||
|
||
#define __tcp_fpgaUp_task__ 1
|
||
#if __tcp_fpgaUp_task__
|
||
|
||
//-----------------------------------------------
|
||
#define FPGA1_UPGRADE_ADDRESS (0XFFFF)
|
||
#define FPGA2_UPGRADE_ADDRESS (0X1FFF)
|
||
|
||
#define MAX_PER_FRAME_LEN 100
|
||
#define MAX_DATA_LEN 544
|
||
#define TX_DATA_LEN 10
|
||
|
||
/*
|
||
:10F14000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF
|
||
10F14000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||
*/
|
||
#define UPDATA_RAW_FRAME_MIN_LEN 11
|
||
#define UPDATA_RAW_FRAME_MAX_LEN 50
|
||
|
||
|
||
#define FRAME_NO_DATA_LEN 4
|
||
|
||
#define USE_FPGA_UP_WRITE (1)
|
||
|
||
//-----------------------------------------------
|
||
|
||
enum E_upgrade_step{
|
||
UPGRADE_START = 0x01, // 发起升级
|
||
POLL_ERASER = 0x02, // poll MCU 的 eraser 状态,是否完成
|
||
W_DATA_BLOCK = 0x03, // 取文件数据块发送给 MCU
|
||
W_DATA_BLOCK_LAST = 0x04, // 最后一个文件数据块发送给MCU的 STEP_BUT
|
||
};
|
||
|
||
enum E_ack{
|
||
START_OK = 0x01, // MCU 回复 可以开始升级
|
||
ERASER_ING, // MCU 回复 正在擦除
|
||
ERASER_END, // MCU 回复 擦除完成
|
||
READY, // MCU 回复 烧写当前数据块完成,可发送下一数据块
|
||
NOT_READY, // MCU 回复 当前数据块失败,PC等1ms再重复发送当前数据块
|
||
ABORT_SUCCESS, // MCU 回复 成功结束
|
||
ABORT_ERROR, // MCU 回复 失败结束
|
||
ACKP_BUT
|
||
};
|
||
|
||
/*
|
||
head | 帧头 0xAA
|
||
cmd |
|
||
datalen | 0x0000-0xffff 后面数据断的长度
|
||
data | datalen长度的字节数据
|
||
crc | 0xx 1个字节的校验码,从head到crc之前的数据字节sum,head、cmd、datalen、data
|
||
tail | 帧尾 0xBB
|
||
*/
|
||
//__packed
|
||
#pragma pack(1)
|
||
typedef struct
|
||
{
|
||
uint8 head;
|
||
uint8 cmd;
|
||
uint16 datalen;
|
||
uint8 *pdata;
|
||
uint8 sum;
|
||
uint8 tail;
|
||
}S_FPGA_UP_FRAME_NEW ;
|
||
#pragma pack()
|
||
|
||
typedef struct
|
||
{
|
||
uint8 head;
|
||
uint8 lenH;
|
||
uint8 lenL;
|
||
uint8 addr1;
|
||
uint8 addr2;
|
||
uint8 addr3;
|
||
uint8 addr4;
|
||
uint8 typeH;
|
||
uint8 typeL;
|
||
uint8 data[32];
|
||
uint8 crcH;
|
||
uint8 crcL;
|
||
}S_FGPA_UPDATA_FRAME;
|
||
|
||
//-----------------------------------------------
|
||
|
||
extern int fpga_up_thr(void * pvParameters);
|
||
extern void * tcp_remote_thr(void *args);
|
||
extern void * udp_remote_thr(void * args);
|
||
|
||
|
||
#endif//#if __tcp_fpgaUp_task__
|
||
|
||
|
||
|
||
|
||
|
||
void check_fpga_up_finished_reboot_sys(void);
|
||
|
||
void tcp_remote_task(void * pvParameters);
|
||
void udp_remote_task(void * pvParameters);
|
||
void fpga_upgrade_task(void * pvParameters);
|
||
void check_ts_err_status(void);
|
||
void check_fpga_gps_lock_status(void);
|
||
extern void check_send_alarm_state(void);
|
||
|
||
#endif
|