Files
smod_atsc_app/atsc_app/inc/tcp_task.h
T

232 lines
5.8 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#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