1D801Desktop/bluetooth1d801.cpp

200 lines
6.7 KiB
C++
Raw Normal View History

2024-02-01 14:27:06 +03:00
#include "bluetooth1d801.h"
using namespace Qt::StringLiterals;
Bluetooth1d801::Bluetooth1d801(QObject *parent):QObject(parent) {
if (localDevice.isValid()) { //при создании экземпляра класса он подключается к свистку
localDevice.powerOn();
localDeviceName = localDevice.name();
2024-02-05 10:21:28 +03:00
qDebug()<< "Итак, имя нашего бт адаптера " <<localDeviceName; // пишет "dongle"
2024-02-01 14:27:06 +03:00
localDevice.setHostMode(QBluetoothLocalDevice::HostDiscoverable);
QList<QBluetoothAddress> remotes;
remotes = localDevice.connectedDevices(); // если например наушники подключены и готовы выплевывает их адрес
// с другими, например сопряженными не работает
qDebug() <<"Подключенные устройства:"<<remotes;
2024-02-05 10:21:28 +03:00
qDebug() <<"если среди них есть 1D801, то что то пошло иначе, чем у разработчика. Попробуйте продолжить работы";
2024-02-01 14:27:06 +03:00
}
}
Bluetooth1d801::~Bluetooth1d801()
{
//отключится от устройства или почикать всё созданное
}
void Bluetooth1d801::startDiscovery()
{
discoveryAgent = new QBluetoothServiceDiscoveryAgent();
2024-02-05 10:21:28 +03:00
2024-02-01 14:27:06 +03:00
connect(discoveryAgent, &QBluetoothServiceDiscoveryAgent::serviceDiscovered,
this, &Bluetooth1d801::serviceDiscovered);
connect(discoveryAgent, &QBluetoothServiceDiscoveryAgent::finished,
this, &Bluetooth1d801::discoveryFinished);
connect(discoveryAgent, &QBluetoothServiceDiscoveryAgent::canceled,
2024-02-05 10:21:28 +03:00
this, &Bluetooth1d801::discoveryFinished); //коннект от статика слизал с чата
2024-02-01 14:27:06 +03:00
// начинаем поиск устройств
discoveryAgent->start();
if (discoveryAgent->isActive())
discoveryAgent->stop();
discoveredServices.clear();
// m_discoveryAgent->setUuidFilter(uuid); // можно отфильтровать конкретный сервис
discoveryAgent->start(QBluetoothServiceDiscoveryAgent::FullDiscovery);
qDebug()<<"Сейчас, я тебе что-нибудь найду";
}
void Bluetooth1d801::stopDiscovery()
{
if (discoveryAgent->isActive()) discoveryAgent->stop();
else {
qDebug()<<"Нечего останавливать";
}
}
2024-02-05 10:21:28 +03:00
void Bluetooth1d801::connectTo(QListWidgetItem *item)
2024-02-01 14:27:06 +03:00
{
2024-02-05 10:21:28 +03:00
// туду проверить, может уже подключен??
QBluetoothServiceInfo service = discoveredServices.value(item);
2024-02-01 14:27:06 +03:00
2024-02-05 10:21:28 +03:00
QBluetoothServiceInfo serviceToConnect = service;
qDebug() << "Connecting to service" << service.serviceName() //валим инфу в дебаг
<< "on" << service.device().name();
socket = new QBluetoothSocket(QBluetoothServiceInfo::RfcommProtocol); //создание сокета
qDebug() << "Create socket";
socket->connectToService(service);
connect(socket, &QBluetoothSocket::readyRead, this, &Bluetooth1d801::readSocket);
connect(socket, &QBluetoothSocket::connected, this, QOverload<>::of(&Bluetooth1d801::connected));
connect(socket, &QBluetoothSocket::disconnected, this, &Bluetooth1d801::disconnected);
connect(socket, &QBluetoothSocket::errorOccurred, this, &Bluetooth1d801::onSocketErrorOccurred);
qDebug() << "Мммм.. подключился... ))";
2024-02-01 14:27:06 +03:00
}
void Bluetooth1d801::GetParam()
{
2024-02-05 10:21:28 +03:00
if (!socket){
qDebug()<< "Ты не создал подходящий сокет!!! Я не буду работать!!!";
return;
}
QString message = "Get_Param";
QByteArray text = message.toUtf8() + '\r' + '\n';
socket->write(text);
// взвести коннект
2024-02-01 14:27:06 +03:00
}
void Bluetooth1d801::SetParam()
{
}
void Bluetooth1d801::GetMeas()
{
}
void Bluetooth1d801::GetWave()
{
}
void Bluetooth1d801::GetSpectrum()
{
}
void Bluetooth1d801::GetStatus()
{
}
void Bluetooth1d801::SetTime()
{
}
void Bluetooth1d801::GetSpectrumEnv()
{
}
void Bluetooth1d801::GetWaveEnv()
{
}
void Bluetooth1d801::serviceDiscovered(const QBluetoothServiceInfo &serviceInfo)
{
2024-02-05 10:21:28 +03:00
qDebug() << "Discovered service on"
<< serviceInfo.device().name() << serviceInfo.device().address().toString();
qDebug() << "\tService name:" << serviceInfo.serviceName();
qDebug() << "\tDescription:"
<< serviceInfo.attribute(QBluetoothServiceInfo::ServiceDescription).toString();
qDebug() << "\tProvider:"
<< serviceInfo.attribute(QBluetoothServiceInfo::ServiceProvider).toString();
qDebug() << "\tL2CAP protocol service multiplexer:"
<< serviceInfo.protocolServiceMultiplexer();
qDebug() << "\tRFCOMM server channel:" << serviceInfo.serverChannel();
const QBluetoothAddress address = serviceInfo.device().address();
/* // если находятся много сервисов в одной железке, то названия не дублируются
for (const QBluetoothServiceInfo &info : std::as_const(m_discoveredServices)) {
if (info.device().address() == address)
return; //
}
*/
//! [serviceDiscovered]
QString remoteName;
if (serviceInfo.device().name().isEmpty())
remoteName = address.toString();
else
remoteName = serviceInfo.device().name();
QListWidgetItem *item_p =new QListWidgetItem(QString::fromLatin1("%1 %2").arg(remoteName, serviceInfo.serviceName()));
discoveredServices.insert(item_p, serviceInfo);
2024-02-01 14:27:06 +03:00
2024-02-05 10:21:28 +03:00
emit discoveryResult(item_p);
//qDebug() << "вот это работает в процедуре addItem" << item_p; // хах, так я определял что должно прелететь в слот родительского класса, ахах
//ui->listWidgetDevice->addItem(item);
2024-02-01 14:27:06 +03:00
}
void Bluetooth1d801::readSocket()
{
2024-02-05 10:21:28 +03:00
// return; // удалить 7.02.2024 - до этого подумать откуда он взялся
while (socket->canReadLine()) {
QByteArray line = socket->readLine().trimmed();
qDebug() << line;
emit rawDataRecived(line);
}
2024-02-01 14:27:06 +03:00
}
2024-02-05 10:21:28 +03:00
2024-02-01 14:27:06 +03:00
void Bluetooth1d801::connected()
{
2024-02-05 10:21:28 +03:00
emit connected(socket->peerName());
2024-02-01 14:27:06 +03:00
}
void Bluetooth1d801::onSocketErrorOccurred(QBluetoothSocket::SocketError error)
{
2024-02-05 10:21:28 +03:00
if (error == QBluetoothSocket::SocketError::NoSocketError)
return;
QMetaEnum metaEnum = QMetaEnum::fromType<QBluetoothSocket::SocketError>();
QString errorString = socket->peerName()// + ' '_L1
+ metaEnum.valueToKey(static_cast<int>(error)) + " occurred"; //_L1;
2024-02-01 14:27:06 +03:00
2024-02-05 10:21:28 +03:00
emit socketErrorOccurred(errorString);
}
void Bluetooth1d801::discoveryFinished()
{
//emit discoveryFinishResult(discoveredServices);
2024-02-01 14:27:06 +03:00
}