#ifndef FESCONTROLDIALOG_H #define FESCONTROLDIALOG_H #include "dataformate.h" #include #include #include class BLEItem; namespace Ui { class FesControlDialog; } class FesControlDialog : public QDialog { Q_OBJECT public: static FesControlDialog *getInstance(); ~FesControlDialog(); //预设电流控制开关 void setPreCurrentState(int device,int channel,bool state); //预设电流控制大小 void setPreCurrent(int device,int channel,uint8_t current); //预设置频率大小 void setPreFrequency(int device,int channel,int16_t current); //预设值脉宽大小 void setPrePulseWidth(int device,int channel,int16_t current); //设置参数(FES踏车) void setFesParam(int device,int channel,ST_FESSetParam st_fesParam); //实时参数 void setRealTimeParam(int device,ST_FESRealTimeParam); //通道电刺激控制 void switchDeviceChannel(int device,int channel,bool on); //单独电刺激 void setOnlyFesParam(int device,int channel,ST_OnlyFESParam); //保存Fes页面设置的参数,便于发送 //void saveOnlyFesParam(ST_OnlyFESParam); //保存Fes页面设置的参数 //void saveBicycleFesParam(ST_FESSetParam); bool getDeviceStateByNo(uint8_t deviceNo); //获取电量 //int getBatteryValue(uint8_t deviceNo); //获取设备是否选择了肌肉 bool getMuscleDeviceStateByNo(uint8_t deviceNo); //设置设备的肌肉连接 void setMuscleDeviceStateByNo(uint8_t deviceNo,bool flag); //启动电刺激 bool openFESDevice(); //查询状态 void queryDeviceState(uint8_t deviceNo); /****** * 说明:关闭电刺激模块 *@deviceNo 要关闭的设备号1~8 *@type 00-关闭某个设备 01-关闭所有设备 * ********/ void turnoffDevice(uint8_t deviceNo = 1,uint8_t type = 1); private slots: void on_openSerial_Btn_clicked(); void on_scanDevice_Btn_clicked(); void receiveDataInterface(); void displayError(QSerialPort::SerialPortError error); void slotConnectDevice(bool connect,uint8_t device); //查看界面列表 void on_listWidgetClicked(QListWidgetItem *item); void on_queryDevice_Btn_clicked(); void on_flushSerial_Btn_clicked(); void slotConnectFes(); //设备状态发生变化 void deviceStateChanged(uint8_t deviceNo,bool state); void on_close_Btn_clicked(); signals: void signalDeviceStateChanged(QList); void signalGetBattery(int deviceNo,int batteryValue); protected: virtual void showEvent(QShowEvent *event); void paintEvent(QPaintEvent *event); virtual void changeEvent(QEvent* event); private: FesControlDialog(QWidget *parent = nullptr); char getSum(QByteArray srcArray, int startIndex, int endIndex); QByteArray createFrame(QByteArray dataBuffer); bool initSerialPort(); //串口操作 void openSerialPort(); bool openSeriaport(ST_SerialPortConfig); /***电刺激操作****/ //搜索设备 void searchDevice(); //链接设备 bool connectDevice(QByteArray mac,uint8_t deviceNum); void analysisData(QByteArray array); void updateDeviceList(); //数据转换 QByteArray str2QByteArray(QString str); void sendData(QByteArray array); private: Ui::FesControlDialog *ui; static FesControlDialog* instance; QSerialPort *m_serialPort; QByteArray receiveArray; QList deviceList; QList addedDeviceList; uint8_t deviceConCount; QByteArray currentMacDevice; QMap connectDevieMap; //数据库保存的设备列表 QMap deviceObjectMap; //配置界面 uint8_t deviceDtateArray[4]; //设备状态 //已经选择肌肉的设备 uint8_t checkedMuscle_DeviceArray[4]; //通道改变时,单独FES待发送的数据,便于滑块发送频率和脉宽 ST_OnlyFESParam m_st_OnlyFESParam; //通道改变时,FES待发送的数据 ST_FESSetParam m_st_fesParam; //从哪个页面发送来的参数 E_FES_PAGE E_fromFesType; //uint8_t m_batteryValue[4]; //电池电量 //自动控制 设备号,设备Mac,连接状态 QMap AutoFESDeviceMap; QMap AutoFESDeviceControlStateMap; QTimer *connectTimer; }; #endif // FESCONTROLDIALOG_H