mirror of
https://github.com/kavishdevar/librepods.git
synced 2026-01-28 22:01:50 +00:00
* Fix possible build error * [Linux] Read AirPods state from BLE broadcast when not connected * SImplify * Remove old code * Remove old code * Maintain charging state when state is unknown * Simplify * Remove unused var
88 lines
2.2 KiB
C++
88 lines
2.2 KiB
C++
#ifndef BLEMANAGER_H
|
|
#define BLEMANAGER_H
|
|
|
|
#include <QObject>
|
|
#include <QBluetoothDeviceDiscoveryAgent>
|
|
#include <QMap>
|
|
#include <QString>
|
|
#include <QDateTime>
|
|
#include "enums.h"
|
|
|
|
class QTimer;
|
|
|
|
class BleInfo
|
|
{
|
|
public:
|
|
QString name;
|
|
QString address;
|
|
int leftPodBattery = -1; // -1 indicates not available
|
|
int rightPodBattery = -1;
|
|
int caseBattery = -1;
|
|
bool leftCharging = false;
|
|
bool rightCharging = false;
|
|
bool caseCharging = false;
|
|
AirpodsTrayApp::Enums::AirPodsModel modelName = AirpodsTrayApp::Enums::AirPodsModel::Unknown;
|
|
quint8 lidOpenCounter = 0;
|
|
QString color = "Unknown"; // Default color
|
|
quint8 status = 0;
|
|
QByteArray rawData;
|
|
QByteArray encryptedPayload; // 16 bytes of encrypted payload
|
|
|
|
// Additional status flags from Kotlin version
|
|
bool isLeftPodInEar = false;
|
|
bool isRightPodInEar = false;
|
|
bool isPrimaryInEar = false;
|
|
bool isSecondaryInEar = false;
|
|
bool isLeftPodMicrophone = false;
|
|
bool isRightPodMicrophone = false;
|
|
bool isThisPodInTheCase = false;
|
|
bool isOnePodInCase = false;
|
|
bool areBothPodsInCase = false;
|
|
bool primaryLeft = true; // True if left pod is primary, false if right pod is primary
|
|
|
|
// Lid state enumeration
|
|
enum class LidState
|
|
{
|
|
OPEN = 0x0,
|
|
CLOSED = 0x1,
|
|
UNKNOWN,
|
|
} lidState = LidState::UNKNOWN;
|
|
|
|
// Connection state enumeration
|
|
enum class ConnectionState : uint8_t
|
|
{
|
|
DISCONNECTED = 0x00,
|
|
IDLE = 0x04,
|
|
MUSIC = 0x05,
|
|
CALL = 0x06,
|
|
RINGING = 0x07,
|
|
HANGING_UP = 0x09,
|
|
UNKNOWN = 0xFF // Using 0xFF for representing null in the original
|
|
} connectionState = ConnectionState::UNKNOWN;
|
|
|
|
QDateTime lastSeen; // Timestamp of last detection
|
|
};
|
|
|
|
class BleManager : public QObject
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
explicit BleManager(QObject *parent = nullptr);
|
|
~BleManager();
|
|
|
|
void startScan();
|
|
void stopScan();
|
|
|
|
private slots:
|
|
void onDeviceDiscovered(const QBluetoothDeviceInfo &info);
|
|
void onScanFinished();
|
|
void onErrorOccurred(QBluetoothDeviceDiscoveryAgent::Error error);
|
|
|
|
signals:
|
|
void deviceFound(const BleInfo &device);
|
|
|
|
private:
|
|
QBluetoothDeviceDiscoveryAgent *discoveryAgent;
|
|
};
|
|
|
|
#endif // BLEMANAGER_H
|