200 lines
6.7 KiB
C++
200 lines
6.7 KiB
C++
#include "bluetooth1d801.h"
|
||
|
||
using namespace Qt::StringLiterals;
|
||
|
||
Bluetooth1d801::Bluetooth1d801(QObject *parent):QObject(parent) {
|
||
|
||
|
||
if (localDevice.isValid()) { //при создании экземпляра класса он подключается к свистку
|
||
localDevice.powerOn();
|
||
localDeviceName = localDevice.name();
|
||
qDebug()<< "Итак, имя нашего бт адаптера " <<localDeviceName; // пишет "dongle"
|
||
localDevice.setHostMode(QBluetoothLocalDevice::HostDiscoverable);
|
||
QList<QBluetoothAddress> remotes;
|
||
remotes = localDevice.connectedDevices(); // если например наушники подключены и готовы выплевывает их адрес
|
||
// с другими, например сопряженными не работает
|
||
qDebug() <<"Подключенные устройства:"<<remotes;
|
||
qDebug() <<"если среди них есть 1D801, то что то пошло иначе, чем у разработчика. Попробуйте продолжить работы";
|
||
}
|
||
|
||
|
||
}
|
||
|
||
Bluetooth1d801::~Bluetooth1d801()
|
||
{
|
||
//отключится от устройства или почикать всё созданное
|
||
}
|
||
|
||
void Bluetooth1d801::startDiscovery()
|
||
{
|
||
discoveryAgent = new QBluetoothServiceDiscoveryAgent();
|
||
|
||
|
||
connect(discoveryAgent, &QBluetoothServiceDiscoveryAgent::serviceDiscovered,
|
||
this, &Bluetooth1d801::serviceDiscovered);
|
||
connect(discoveryAgent, &QBluetoothServiceDiscoveryAgent::finished,
|
||
this, &Bluetooth1d801::discoveryFinished);
|
||
connect(discoveryAgent, &QBluetoothServiceDiscoveryAgent::canceled,
|
||
this, &Bluetooth1d801::discoveryFinished); //коннект от статика слизал с чата
|
||
// начинаем поиск устройств
|
||
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()<<"Нечего останавливать";
|
||
}
|
||
|
||
}
|
||
|
||
void Bluetooth1d801::connectTo(QListWidgetItem *item)
|
||
{
|
||
// туду проверить, может уже подключен??
|
||
|
||
|
||
QBluetoothServiceInfo service = discoveredServices.value(item);
|
||
|
||
|
||
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() << "Мммм.. подключился... ))";
|
||
}
|
||
|
||
|
||
void Bluetooth1d801::GetParam()
|
||
{
|
||
if (!socket){
|
||
qDebug()<< "Ты не создал подходящий сокет!!! Я не буду работать!!!";
|
||
return;
|
||
}
|
||
QString message = "Get_Param";
|
||
QByteArray text = message.toUtf8() + '\r' + '\n';
|
||
socket->write(text);
|
||
// взвести коннект
|
||
|
||
}
|
||
|
||
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)
|
||
{
|
||
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);
|
||
|
||
emit discoveryResult(item_p);
|
||
//qDebug() << "вот это работает в процедуре addItem" << item_p; // хах, так я определял что должно прелететь в слот родительского класса, ахах
|
||
//ui->listWidgetDevice->addItem(item);
|
||
}
|
||
|
||
void Bluetooth1d801::readSocket()
|
||
{
|
||
// return; // удалить 7.02.2024 - до этого подумать откуда он взялся
|
||
while (socket->canReadLine()) {
|
||
QByteArray line = socket->readLine().trimmed();
|
||
qDebug() << line;
|
||
emit rawDataRecived(line);
|
||
}
|
||
}
|
||
|
||
|
||
void Bluetooth1d801::connected()
|
||
{
|
||
emit connected(socket->peerName());
|
||
}
|
||
|
||
void Bluetooth1d801::onSocketErrorOccurred(QBluetoothSocket::SocketError error)
|
||
{
|
||
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;
|
||
|
||
emit socketErrorOccurred(errorString);
|
||
}
|
||
|
||
void Bluetooth1d801::discoveryFinished()
|
||
{
|
||
//emit discoveryFinishResult(discoveredServices);
|
||
}
|