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

156 lines
4.3 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 FESCONTROLDIALOG_H
#define FESCONTROLDIALOG_H
#include "dataformate.h"
#include <QDialog>
#include <QSerialPort>
#include <QListWidgetItem>
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<uint8_t>);
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<QByteArray> deviceList;
QList<QByteArray> addedDeviceList;
uint8_t deviceConCount;
QByteArray currentMacDevice;
QMap<QByteArray,int> connectDevieMap; //数据库保存的设备列表
QMap<uint8_t,BLEItem *> 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<int,QByteArray> AutoFESDeviceMap;
QMap<int,bool> AutoFESDeviceControlStateMap;
QTimer *connectTimer;
};
#endif // FESCONTROLDIALOG_H