提交SMOD ATSC IMX APP版本 V122

This commit is contained in:
2026-07-16 14:35:59 +08:00
commit 7601c270d5
485 changed files with 255032 additions and 0 deletions
+231
View File
@@ -0,0 +1,231 @@
#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