#include "mainwindow.h" #include "ui_mainwindow.h" #include #include MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); /* if (localDevice.isValid()) { //при создании экземпляра класса он подключается к сввистку localDevice.powerOn(); localDeviceName = localDevice.name(); qDebug() < remotes; remotes = localDevice.connectedDevices(); // если например наушники подключены и готовы выплевывает их адрес // с другими, например сопряженными не работает qDebug() <start(); if (discoveryAgent->isActive()) discoveryAgent->stop(); ui->listWidgetDevice->clear(); // m_discoveryAgent->setUuidFilter(uuid); // подумай? может стоит впиздячить его на релизе discoveryAgent->start(QBluetoothServiceDiscoveryAgent::FullDiscovery); ui->labelConnect->setText("Сейчас, я тебе что-нибудь найду"); } void MainWindow::stopDiscovery() {/* if (m_discoveryAgent){ m_discoveryAgent->stop(); } */ } void MainWindow::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 =new QListWidgetItem(QString::fromLatin1("%1 %2").arg(remoteName, serviceInfo.serviceName())); discoveredServices.insert(item, serviceInfo); ui->listWidgetDevice->addItem(item); //! [serviceDiscovered] } void MainWindow::discoveryFinished() { ui->labelConnect->setText("Я сделал всё, что мог"); } void MainWindow::deviceDiscovered(const QBluetoothDeviceInfo &device) { ui->listWidgetDevice->addItem(device.name()); qDebug() << "Found new device:" << device.name() << '(' << device.address().toString() << ')'; } void MainWindow::on_pushButton_2_clicked() { auto items = ui->listWidgetDevice->selectedItems(); if (items.size()) { QListWidgetItem *item = items[0]; QBluetoothServiceInfo service = discoveredServices.value(item); 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, &MainWindow::readSocket); connect(socket, &QBluetoothSocket::connected, this, QOverload<>::of(&MainWindow::connected)); connect(socket, &QBluetoothSocket::disconnected, this, &MainWindow::disconnected); connect(socket, &QBluetoothSocket::errorOccurred, this, &MainWindow::onSocketErrorOccurred); qDebug() << "ConnectToService done"; ui->labelConnect->setText("Похоже получилось подключится"); } } void MainWindow::readSocket() { if (!socket) return; while (socket->canReadLine()) { QByteArray line = socket->readLine().trimmed(); qDebug() << line; ui->listWidgetResponse->addItem(line.toHex()); emit messageReceived(socket->peerName(), QString::fromUtf8(line.constData(), line.length())); } } void MainWindow::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 MainWindow::connected() { emit connected(socket->peerName()); } void MainWindow::on_pushButtonGetParam_clicked() { if (!socket){ qDebug()<< "Ты не создал подходящий сокет!!! Я не буду работать!!!"; return; } QString message = "Get_Param"; QByteArray text = message.toUtf8() + '\r' + '\n'; socket->write(text); }