387 lines
12 KiB
C
Raw Normal View History

2024-11-25 17:15:44 +08:00
#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