📄 hss.h
字号:
#ifndef HSS_HEAD
#define HSS_HEAD
//双口ram 1024个字节组织,发送帧数据时,前6个字节为帧头,后续的1016个字节为真正的数据
//紧跟的1个自己保留,最后一个字节为链路权限控制字节
#define FRAME_LEN 1016
#define FRAME_HEAD_OFFSIDE 6
#define TYPE_OFFSIDE 0
#define TOTAL_OFFSIDE 1
#define THIS_OFFSIDE 2
#define RESERVE_OFFSIDE 3
#define LEN_OFFSIDE 4
typedef struct frame_struct
{
#define DATA0_FRAME 0x01 //发送0号文件数据帧
#define ECHO0_FRAME 0x00 //应答1号文件数据帧
#define DATA1_FRAME 0x10 //发送1号同步小包数据
#define ECHO1_FRAME 0x11 //应答1号同步小包应答
#define DATA2_FRAME 0x20 //发送2号小包数据
#define ECHO2_FRAME 0x21 //应答2号小包数据
#define DATA3_FRAME 0x30 //发送3号小包数据
#define ECHO3_FRMAE 0x31 //应答3号小包数据
#define ERROR_FRAME 0xFF //错误帧,重新复位
unsigned char type; //协议类型
unsigned char total; //总帧数
unsigned char sending_pack; //目前帧号
unsigned char reserve; //保留
unsigned short len; //这一帧的长度,如果为第一帧,表示总的长度
char buff[FRAME_LEN]; //应用层数据
}__attribute__((packed)) frame_struct;
typedef struct send_state_struct{
#define SENDING_PACK 1
#define NO_SENDING 0
unsigned char sending ; //表示是否正在发送数据包
unsigned char total_pack; //总的帧个数。
unsigned short total_len; //数据包长度
unsigned long last_send_time; //这帧发送时间,用于超时控制
unsigned char sending_pack; //上一次发送的帧号,从1开始。
unsigned char resend_count; //重发次数;added 2007-01-17,只能重发1次
}__attribute__((packed)) send_state_struct;
typedef struct all_send_state_struct
{
#define MAX_PRIO 8
#define NO_PREEMPTED 0 //0号没有被打断
#define HAS_PREEMPTED 1 //0号被打断
#define WAIT_SENDING 4 //有高优先级数据包等待发送
unsigned char sending; //当前状态,只要有任何数据包在发送,就置为发送状态
unsigned char has_preempted; //0号优先级发送是否被打断
unsigned char waiting_send; //是否有高优先级包需要抢占
unsigned long last_send_time; //最近一帧发送时间,用于超时控制
send_state_struct send_state[MAX_PRIO]; //代表0-MAX_PRIO号优先级的发送状态
}__attribute__((packed)) all_send_state_struct;
typedef struct recv_state_struct{
#define NO_PACKET 0 //接受缓冲区没有数据包
#define HAS_PACKET 1 //接受缓冲区有完整数据包
#define RECVING_PACKET 2 //正在接受数据包
unsigned char has_pack; //表示当前是否正在接受
unsigned char recv_pack; //上一次收到的帧号,从1开始;
unsigned char total_pack; //总的帧个数;
unsigned short total_len; //数据包长度
unsigned long last_time; //这一帧接受时间,用于超时控制
}__attribute__((packed)) recv_state_struct;
typedef struct all_recv_state_struct{
#define NO_RECVING 0
unsigned char recving; //当前状态,只要有任何数据包在接受,就置为接受状态
unsigned char has_int; //0号优先级接受是否被打断
unsigned char need_preempted; //是否有高优先级包需要抢占
unsigned long last_time; //最近一帧接受时间,用于超时控制
recv_state_struct recv_state[MAX_PRIO]; //表示0-MAX-PRIO号优先级的接受状态
}__attribute__((packed)) all_recv_state_struct;
typedef struct link_state_struct{
unsigned char reserve;
}__attribute__((packed)) link_state_struct;
#define HSS_OK 1
#define HSS_ERROR 0
#define SNDBUFF_OVERFLOW -1
#define SER_SENDBUF_SIZE 0 //发送缓冲区大小,可设置、获取
#define SER_RECVBUF_SIZE 1 //接收缓冲区大小,可设置、获取
#define SER_FIONBIO 2 //阻塞或者非阻塞,0阻塞,1阻塞,可设置、获取
#define SER_SEND_TIMEOUT 3 //发送超时时间,以ms为单位,设置了阻塞模式后才可有效,0表示时间无限长,默认10s,可设置、获取
#define SER_RECV_TIMEOUT 4 //接收超时时间,以ms为单位,设置了阻塞模式后才可有效,0表示时间无限长,默认10s,可设置、获取
#define SER_SENDBUF_AVAIL 5 //当前可用的发送缓冲区大小,只可获取,应用层在发送一个数据包之前判断
#define SER_ERROR_STATUS 6 //获取错误状态
#define GET_TIME 7 //获取时间
#define SEND_PRIO_DATA 8 //发送诊断数据
#define RECV_PRIO_DATA 9 //发送诊断数据
#define ADJUST_TIME 0x0A //校时
#define DUAL_SYN_PORT 1 //同步
#define DUAL_DIAG_PORT 2 //诊断
#define SER_ERROR_OK 0 //无错误
#define SER_ERROR_SENDBUF_OVERFLOW 1 //发送缓冲区不够
#define SER_ERROR_RECVBUF_OVERFLOW 2 //接收缓冲区不够
#define SER_ERROR_NONBLOCK 3 //当前是非阻塞模式,不能操作超时时间
#define SER_ERROR_COM 4 //通讯链路错误
#define SER_ERROR_UNKNOWN 5 //未知类型的错误
#define SER_RESET 0x11 //重新初始化各种状态
#define TIMER_INTERVAL 10 //定时器间隔
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -