156 lines
4.3 KiB
C
Raw Normal View History

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