#include "bluetooth1d801.h" using namespace Qt::StringLiterals; Bluetooth1d801::Bluetooth1d801(QObject *parent):QObject(parent) { if (localDevice.isValid()) { //при создании экземпляра класса он подключается к свистку localDevice.powerOn(); localDeviceName = localDevice.name(); qDebug()<< "Итак, имя нашего бт адаптера " < remotes; remotes = localDevice.connectedDevices(); // если например наушники подключены и готовы выплевывает их адрес // с другими, например сопряженными не работает qDebug() <<"Подключенные устройства:"<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(); QString errorString = socket->peerName()// + ' '_L1 + metaEnum.valueToKey(static_cast(error)) + " occurred"; //_L1; emit socketErrorOccurred(errorString); } void Bluetooth1d801::discoveryFinished() { //emit discoveryFinishResult(discoveredServices); }