Browse Source

test device

pull/4/head
zhangsan 4 years ago
parent
commit
c218c36ec9
  1. 13
      QCPShow.pro
  2. 124
      deviceservice.cpp
  3. 45
      deviceservice.h
  4. 8
      main.cpp
  5. 27
      setting.ini
  6. 9
      websocketservice.cpp

13
QCPShow.pro

@ -11,6 +11,13 @@ greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += C++11
win32{
# win32 libs
}else{
LIBS += -l wiringPi
}
TARGET = QCPShow
TEMPLATE = app
@ -37,7 +44,8 @@ SOURCES += main.cpp\
httpservice.cpp \
mainconfig.cpp \
websocketservice.cpp \
patientemergencyinfo.cpp
patientemergencyinfo.cpp \
deviceservice.cpp
HEADERS += mainwidget.h \
serial/serialport.h \
@ -49,7 +57,8 @@ HEADERS += mainwidget.h \
httpservice.h \
mainconfig.h \
websocketservice.h \
patientemergencyinfo.h
patientemergencyinfo.h \
deviceservice.h
FORMS += mainwidget.ui

124
deviceservice.cpp

@ -0,0 +1,124 @@
#include "deviceservice.h"
#ifdef Q_OS_LINUX
#include <wiringPi.h>
#else
#include <QtDebug>
#endif
#define WIRING_PIN_LED 4 //GPIO.4
#define WIRING_PIN_KEY 3 //GPIO.3
DeviceService::DeviceService(QObject *parent) : QObject(parent)
{
key.flag = None;
key.lastState = None;
m_ledStatus = 0;
m_keyStatus = 0;
#ifdef Q_OS_LINUX
wiringPiSetup();
pinMode(WIRING_PIN_LED,OUTPUT);//LED输出模式 可选值:INPUT、OUTPUT、PWM_OUTPUT,GPIO_CLOCK
pinMode(WIRING_PIN_KEY,INPUT); //KEY输入模式
pullUpDnControl(WIRING_PIN_KEY,PUD_UP); //KEY设置上拉
#else
qDebug() << "wiringPiSetup()";
qDebug() << "pinMode(WIRING_PIN_LED,OUTPUT)";
qDebug() << "pinMode(WIRING_PIN_BTN,INPUT)";
#endif
timer1.setInterval(1000);
timer1.start();
connect(&timer1,&QTimer::timeout,[=](){
m_ledStatus ^= 1;
ledSet(m_ledStatus);
});
timer2.setInterval(10);
timer2.start();
connect(&timer2,&QTimer::timeout,[=](){
quint8 keyStatus = keyReadOnce();
if(keyStatus != m_keyStatus){
m_keyStatus = keyStatus;
qDebug() << "m_keyStatus " << m_keyStatus;
}
});
}
void DeviceService::ledSet(int status)
{
#ifdef Q_OS_LINUX
digitalWrite(WIRING_PIN_LED,status == 1 ? LOW : HIGH);//'HIGH'代表高电平,’LOW‘则为低电平
#else
qDebug() << "LED set: " << status;
#endif
}
quint8 DeviceService::keyReadOnce()
{
#ifdef Q_OS_LINUX
return digitalRead(WIRING_PIN_KEY);
#else
qDebug() << "keyReadOnce()";
return 0;
#endif
}
//quint8 DeviceService::keyDetection()
//{
// key.flag = None; //清空按键标志
// if ((keyReadOnce() == KEY_Up) && (key.lastState == KEY_Down))
// {
// uint16_t i = Click_Overtime;
// uint16_t j = Press_Overtime;
// key.flag = Click; //先确定按键标志为单击
// key.lastState = KEY_Up;
// //判断是否为长按
// while ((tls_gpio_read(gpio_pin) == KEY_Up)&&(j--))
// {
// //printf("j = %d\r\n", j);
// if (j == 1)
// {
// KEY3.KEY_Flag = Press; //按键标志为长按
// KEY3.KEY_LastState = KEY_Up;
// break;
// }
// delay_ms(50);
// }
// //在确定标志已经为单击的前提下,判断是否为双击
// if (KEY3.KEY_Flag == Click)
// {
// while (i--)
// {
// if ((tls_gpio_read(gpio_pin) == KEY_Up))
// {
// KEY3.KEY_Flag = Dbl_Click;
// KEY3.KEY_LastState = KEY_Up;
// while (tls_gpio_read(gpio_pin) == KEY_Up);
// break;
// }
// delay_ms(50);
// }
// }
// //在确定标志为已经为双击的前提下,判断是否为三击
// if (KEY3.KEY_Flag == Dbl_Click)
// {
// while (i--)
// {
// if (tls_gpio_read(gpio_pin) == KEY_Up)
// {
// KEY3.KEY_Flag = Tri_Click;
// KEY3.KEY_LastState = KEY_Up;
// while (tls_gpio_read(gpio_pin) == KEY_Up);
// break;
// }
// delay_ms(50);
// }
// }
// }
// //将按键置为松开状态,以供下一次检测
// if (tls_gpio_read(gpio_pin) == KEY_Down)
// {
// KEY3.KEY_LastState = KEY_Down;
// }
// return KEY3.KEY_Flag;
//}

45
deviceservice.h

@ -0,0 +1,45 @@
#ifndef DEVICESERVICE_H
#define DEVICESERVICE_H
#include <QObject>
#include <QTimer.h>
typedef enum{
GPIO_PIN_RESET = 0u,
GPIO_PIN_SET
} GPIO_PinState;
typedef enum{
None = (uint8_t)0,
Click = (uint8_t)1,
Dbl_Click = (uint8_t)2,
Tri_Click = (uint8_t)3,
Press = (uint8_t)4,
}KeyFlag;
#define KEY_Up GPIO_PIN_SET
#define KEY_Down GPIO_PIN_RESET
typedef struct{
KeyFlag flag;
quint8 lastState;
}KeyType;
class DeviceService : public QObject
{
Q_OBJECT
public:
explicit DeviceService(QObject *parent = 0);
private:
KeyType key;
int m_ledStatus,m_keyStatus;
QTimer timer1,timer2;
signals:
public slots:
void ledSet(int status);
quint8 keyReadOnce();
//quint8 keyDetection();
};
#endif // DEVICESERVICE_H

8
main.cpp

@ -4,6 +4,7 @@
#include "httpservice.h"
#include "websocketservice.h"
#include "patientemergencyinfo.h"
#include "deviceservice.h"
int main(int argc, char *argv[])
{
@ -20,6 +21,9 @@ int main(int argc, char *argv[])
WebsocketService websocketService;
websocketService.connectToServer(MainConfig::wsUrl);
//初始化DeviceInfo,并自动初始化IO配置
DeviceService deviceService;
//创建主窗体
MainWidget w;
@ -33,8 +37,8 @@ int main(int argc, char *argv[])
QObject::connect(&w,&MainWidget::statusChanged,&httpService,&HttpService::updateStatus);
// w.show();
w.showFullScreen();
w.show();
// w.showFullScreen();
return a.exec();
}

27
setting.ini

@ -0,0 +1,27 @@
[MAIN]
;最大患者数量
maxPatientNum = 5
;切换病人时间(s)
switchPatientInterval = 5
[USER]
;登录用户名
username = shoufeichu
;登录密码
password = 123456
[HTTP]
;登录请求URL
loginUrl = http://test.tall.wiki/gateway/tall3/v3.0/users/signin
;发送身份证信息URL
sendUserInfoUrl = https://test.tall.wiki/gateway/qcp/v3.0/button/idCardDiscern
;一键启动URL
oneKeyStartUrl = https://test.tall.wiki/gateway/qcp/v3.0/button/buttonStart
;服务状态改变URL(rgb)
serviceStatusChangedUrl = https://test.tall.wiki/gateway/qcp/v3.0/button/updateStatus
[WEBSOCKET]
;Websocket URL
wsUrl = wss://test.tall.wiki/websocket/message/v4.0/ws
;Websocket心跳间隔(s)
wsHeartInterval = 10

9
websocketservice.cpp

@ -43,7 +43,7 @@ void WebsocketService::wsSendAuthMsg()
QString rawJson = "{\"toDomain\":\"Server\",\"data\":\"{\\\"type\\\":\\\"Auth\\\",\\\"data\\\":{\\\"token\\\":\\\"%1\\\"}}\"}";
QString json = rawJson.arg(MainConfig::token);
m_webSocket.sendTextMessage(json);
qDebug() << QDateTime::currentDateTime().toString("hh:mm:ss") << "wsSendAuthMsg: " << json;
//qDebug() << QDateTime::currentDateTime().toString("hh:mm:ss") << "wsSendAuthMsg: " << json;
}
void WebsocketService::wsSendPingMsg()
@ -56,7 +56,7 @@ void WebsocketService::wsSendPingMsg()
QString rawJson = "{\"toDomain\":\"Server\",\"data\":\"{\\\"type\\\":\\\"Ping\\\"}\"}";
QString json = rawJson;
m_webSocket.sendTextMessage(json);
qDebug() << QDateTime::currentDateTime().toString("hh:mm:ss") << "wsSendPingMsg: " << json;
//qDebug() << QDateTime::currentDateTime().toString("hh:mm:ss") << "wsSendPingMsg: " << json;
}
void WebsocketService::sendWsAckMessage(QString ackId)
@ -65,12 +65,13 @@ void WebsocketService::sendWsAckMessage(QString ackId)
QString rawJson = "{\"toDomain\":\"Server\",\"data\":\"{\\\"type\\\":\\\"Ack\\\",\\\"data\\\":{\\\"ackId\\\":\\\"%1\\\"}}\"}";
QString json = rawJson.arg(ackId);
m_webSocket.sendTextMessage(json);
//qDebug() << QDateTime::currentDateTime().toString("hh:mm:ss") << "sendWsAckMessage: " << json;
}
void WebsocketService::onTextMessageReceived(const QString &message)
{
qDebug() << QDateTime::currentDateTime().toString("hh:mm:ss") << "wsRecvMsg: " << message.toUtf8();
//qDebug() << QDateTime::currentDateTime().toString("hh:mm:ss") << "wsRecvMsg: " << message.toUtf8();
//解析响应中的data字段,data又是一个json字符串
QJsonParseError jerror;
QJsonDocument jdoc;
@ -109,7 +110,7 @@ void WebsocketService::onTextMessageReceived(const QString &message)
}else if(notifyType == "Pong"){
qDebug() << "Pong Message";
}else if(notifyType == "ChannelStatus"){
qDebug() << "Auth Message";
//qDebug() << "Auth Message";
}
}

Loading…
Cancel
Save