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
|
|
|
|
}
|