#ifndef DATAFORMATE_H #define DATAFORMATE_H #include #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