2024-11-25 17:15:44 +08:00

387 lines
12 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 DATAFORMATE_H
#define DATAFORMATE_H
#include <QWidget>
#define PAGENUM 8 //每页显示数量
#define MAXSHOWNUM 1000 //最大显示数量
#define PERCOUNT 8 //用户每页显示数量
//上位机发送使用
#define PACKHEAD 0xAB //帧头
#define PACKTAIL 0xCD //帧尾
//下位机发送使用
#define SLAVEPACKHEAD 0xBA
#define SLAVEPACKTAIL 0xDC
#define FRAME_HEAD 0xAA
#define FRAME_END 0x55
typedef enum
{
E_NEW_USER = 0,
E_EDIT_USER
}USER_ENUM;
typedef enum
{
ONLY_FES_E = 0,
BICYCLE_FES_E
}E_FES_PAGE;
typedef enum
{
Chinese_E,
English_E
}E_LANGUAGE;
//通信状态
typedef enum
{
UnconnectedState_E = 0,
HostLookupState_E,
ConnectingState_E,
ConnectedState_E,
BoundState_E,
ClosingState_E,
ListeningState_E
}E_DeviceState;
//页面切换
typedef enum
{
MainPage_E = 0, //主界面
TrainingPage_E, //训练界面
UserPage_E, //用户界面
SettingPage_E, //设置界面
BicycleParamSet_E, //踏车参数设置界面
FesParamSet_E, //fes设置界面
FesBicycleParamSet_E, //FesT踏车设置界面
BicycleToFes_E, //从踏车界面到FES界面
TrainingParamSetting_E, //从肢体训练界面,进入参数设置
BrainTraining, //脑电训练
visionTrain //视觉训练
//LoginPage_E //切换到登录页面
}E_PAGENAME;
//上位机发送指令
typedef enum
{
BICYCLE_PARAM_CMD = 0x01, //启动前参数
REALTIME_PARAM_CMD = 0x02, //实时调节参数
SEND_HEARTBEAT_CMD = 0X05, //发送心跳(启用)
GET_VERSION_CMD = 0X08 //获取版本号
}E_SENDCMDID;
//游戏训练状态
typedef enum
{
START = 0x01, //运行
PAUSE = 0x02, //暂停
STOP = 0x03 //停止
}E_TRAINSTATE;
//接收下位机指令
typedef enum
{
BRFORE_START_CMD = 0x00, //启动前
AFTER_START_CMD = 0x01, //启动后
RECE_HEARTBEAT_CMD = 0x02 //接收心跳(启用)
}E_RECECMDID;
//实时调节参数子指令
typedef enum
{
RESISTANCE_CMD = 0x01, //阻力
PASSIVE_SPEED = 0x02, //被动转速
SPASM_LEVEL = 0x03, //痉挛等级
SWITCH_DIRECTION = 0x04,//手动换向
EQUAL_SPEED = 0x08, //等速转速
SYNERGY_SPEED = 0x09, //协同限速
SPASM_CONFIRM = 0x10, //确认痉挛
TUIGAN_UPDOWN = 0x11, //推杆响应 1-up 2-down
YIJIAN_SHANGJI = 0x12 //一键上机
}E_REALTIMECMD;
typedef enum
{
CMD_PARAM_SET_E = 0x71, //单独电刺激参数设置
CMD_CHANNEL_CONTROL =0x72, //电刺激控制0-关闭 1-开启 2-暂停 3-继续
PreCurrentSet_E = 0x73, //预设电流设置
PreCurrentSwitch = 0x76, //预设电流控制开关
CMD_QUERY_STATE_E = 0x78, //查询各个电刺激模块状态
CMD_TURNOFF_E = 0x7A, //关机(断开)
CMD_SEARCH_DEVICE_E = 0x7B, //设备搜索
CMD_DEVICE_REPORT_E = 0x7C, //新设备上报
CMD_DEVICE_CONNECT_E = 0x7D, //连接设备
CMD_DEVICE_DISCONNECT_E = 0X7E, //设备断开,蓝牙断开(下->上)
RealTimeParam_E = 0x80, //实时参数
FESParamSet_E = 0x81, //fes参数
//CMD_BATTERY_LEVAL = 0x82 //接收显示电量
FES_PRE_FREQUENCY = 0x7F, //预设频率
FES_PRE_BINDWIDTH = 0x70 //预设脉宽
}E_FESCMD;
//串口配置
typedef struct ST_SerialPortConfig
{
QString portName; //端口名
int32_t baud; //波特率
int8_t dataBits; //数据位
int8_t parity; //奇偶校验
int8_t stopBit; //停止位
int8_t flowControl; //流控
ST_SerialPortConfig()
{
portName = "";
baud = 0;
dataBits = 0;
parity = 0;
stopBit = 0;
flowControl = 0;
}
}ST_SerialPortConfig;
//数据库配置
typedef struct ST_DataBaseConfig
{
QString IP;
int16_t port;
QString userName; //用户名
QString password; //密码
ST_DataBaseConfig()
{
IP = "";
port = 0;
userName = "";
password = "";
}
}ST_DataBaseConfig;
//FES参数中按钮显示
typedef struct
{
QString muscleName; //肌肉名
int muscleId; //肌肉下标(根据下标可判断左右)
bool connectState; //连接状态
int frequency; //频率
int plus; //脉宽
int minCurrent; //最小电流
int maxCurrent; //最小电流
}ST_MuscleParam;
//高级设置参数
typedef struct
{
//预热阶段
int preheatContinueTime; //预热期持续时间 0~60min step-1
int preheatAContinueTime; //加速持续时间 0~60min step-1
int preheatCompensate; //转速补偿 -30~30 step-1
bool isFesOn; //是否开启电刺激
int preheatMaxPower; //预热期最大电量 0~50% step-1%
int transitionalFesRise; //电刺激上升幅度 1~100% step-1%
//积极阶段
int positiveFChiXuTime; //向前持续时间0~120min step-1
int positiveFControlSpeed; //向前(控制速度) 5~60r/min step-1
int positiveBChiXuTime; //(向后)持续时间 0~120min step-1
int positiveBSpeedCompensate;//(向后)转速补偿 -30~30r/min step-1
int positiveBresistance; //(向后)阻力扭矩补偿 -20~20Nm step-1
int timeLimit; //时间阈值 0~240s step-1s
int speedLimit; //转速阈值 -1~-50r/min step-1
//消极阶段
bool isSkipPassive; //跳过此阶段
int negativeSpeedCompensate; //(向前)转速补偿 -30~30r/min step-1
int tiredContinueTime; //持续时间(疲劳侦测) 0~30min
int tiredSpeedCompensate; //转速补偿(疲劳侦测) -30~0 step-1
}ST_AdvancedParam;
/**********与下位机通信--start**********/
//踏车参数
#pragma pack(push) // 保存原来的字节对齐方式
#pragma pack(1)
//启动前参数
typedef struct
{
int8_t controlState;//状态控制 0-停止 1启动 2-暂停 3-继续
int8_t bodyPart; //训练部位 0-上肢 1-下肢 2-四肢 3-垂直上肢
int8_t trainMode; //训练模式 0-被动 1-主动 2-助力 3-等速 4-上下肢协同被动 7-四肢主被动 9-单独主动 10-被动可切主动(主被动)
int8_t spasmSwitch; //痉挛开关 0-关 1-开
int8_t spasmLevel; //痉挛等级1~3挡
int8_t configPower; //配置功率0~2 低中高
int8_t switchDirectonTime;//换向时间
int8_t phaseValue; //协同相位值
int8_t direction; //方向 0-逆向 1-正向
int8_t speed; //速度 2~60r/min
int8_t resistance; //阻力 Nm 0~20挡
int8_t spasmType; //痉挛后方向 1-正向 0-逆向,默认逆向,没有了
uint8_t trainTime; //训练时间 0~120min
}ST_BicycleParam;
//下位机上传参数
typedef struct
{
int8_t currentMode; //当前模式
int8_t direction; //方向 0-反向 1-正向
uint8_t downLimpSpeed; //下肢速度
uint8_t upLimpSpeed; //上肢速度
uint16_t leftHandPosition; //左手位置
uint16_t leftFootPosition; //左脚位置
uint16_t rightHandPosition; //右手位置
uint16_t rightFootPosition; //右脚位置
int8_t upBalance; //上肢平衡度
int8_t downBalance; //下肢平衡度
uint16_t upLimpCircle; //上肢圈数
uint16_t downLimpCircle; //下肢圈数
int8_t emergencyState; //急停 1-触发 0-未触发
int8_t spasmState; //痉挛 1-触发 0-未触发
int8_t error; //系统故障
int8_t oxygen; //血氧数据
int8_t overSpeedProtect; //过速保护 0-正常 1-触发
uint16_t upPower; //上肢功率
uint16_t downPower; //下肢功率
uint32_t energy; //能量
}ST_DeviceParam;
#pragma pack(pop) // 恢复字节对齐方式
/**********与下位机通信--end**********/
//脉搏血氧
typedef struct
{
int pulse;//脉搏
int oxygen;//血氧
}ST_PulseOxygen;
//游戏界面显示参数
typedef struct
{
int type; //0-上肢 1-下肢
int updown; //方向1-正向 0-逆向
int power; //阻力
int speed; //速度
}ST_SetBicycleParam;
#pragma pack(push) //保存对齐状态
#pragma pack(1)//设定为1字节对齐
//设置参数
typedef struct
{
uint8_t mode; //模式 1-采集 2-刺激 3-触发
uint8_t sampleRate; //采样率 1-4K 2-8K
uint8_t waveStyle; //波形 01-双向对称方波
uint16_t frequency; //频率
uint16_t pulseWidth; //脉宽
uint16_t startAngle; //开始角度(正)
uint16_t stopAgnle; //结束角度(正)
uint16_t startAngleReverse; //开始角度(反)
uint16_t stopAgnleReverse; //结束角度(反)
uint8_t minCurrent; //最小电流
uint16_t maxCurrent; //最大电流
uint8_t upDownLimp; // 1-上 2-下
uint8_t leftRightLimp;//1-左 2-右
}ST_FESSetParam;
typedef struct
{
uint8_t mode;//模式 1-采集 2-刺激 3-触发
uint8_t sampleRate; //采样率 1-4K 2-8K
uint8_t waveStyle; //波形 01-双向对称方波
uint16_t frequency; //频率
uint16_t pulseWidth;//脉宽
uint16_t waveRise; //波升
uint16_t keepTime; //保持
uint16_t waveFall; //波降
uint16_t sleepTime; //休息
}ST_OnlyFESParam;
//实时参数
typedef struct
{
uint8_t upSpeed; //1~60rmp/min
uint8_t downSpeed; //1~60rmp/min
uint16_t currentUpAngle;//实时角度0~360
uint16_t currentDownAngle;
uint8_t direction; //方向 0-逆 1-正
}ST_FESRealTimeParam;
typedef struct
{
int muscleId; //肌肉ID
QString muscleName; //肌肉名称
int startAngle; //起始角度
int stopAngle; //停止角度
}ST_RecipeParam;
//电刺激盒状态
typedef struct
{
uint8_t channle1State; //通道1状态 0-脱落 1-连接
uint8_t channle2State;
uint8_t power;
}ST_FESDeviceState;
#pragma pack(pop)//恢复对齐状态
//游戏相关参数
//更改游戏配置文件的参数(通信文件)
typedef struct ST_GameParam
{
int hardLevel; //难度等级 1-3(此处的难度等级对应范围大小)
int gameTime; //游戏运行时间 单位/s
int speed; //运行速度 1-5
int trainingMode; //训练类型
QString trainTrackFilePath; //路径文件
bool readPosTable; //是否去读轨迹
int angleValue; //分段运动角度
int trainType; //被动训练类型1-圆周 2-分段
int waitTime; //等待时间
int maxCircle; //最大圈数
ST_GameParam()
{
hardLevel = 1;
gameTime = 0;
speed = 3;
trainingMode = 0;
trainTrackFilePath = "";
readPosTable = false;
}
}ST_GameParam;
//该结构体用于读取游戏列表
typedef struct
{
int gameID; //游戏ID
QString gamePath; //游戏路径
QString iconPath; //游戏图标路径
QString gameName; //游戏可执行文件名
QString className; //窗口类名
QString windownName; //窗口名
}ST_GameMsg;
//游戏控制参数
typedef struct
{
int MsgId; //消息ID
int ID; //用户ID
QString userName;//用户名
float speed; //速度
int forceLeft; //左平衡
int forceRight; //右平衡
int angle; //角度
}ST_GameControlParam;
extern void Pressure_CheckCRC(uint8_t*buf,int len,uint8_t* CRC_H,uint8_t* CRC_L);
extern void Sleep(int msec);
#endif // DATAFORMATE_H