xref: /OK3568_Linux_fs/app/qsetting/qtbt.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun #ifndef QTBT_H
2*4882a593Smuzhiyun #define QTBT_H
3*4882a593Smuzhiyun 
4*4882a593Smuzhiyun #include <QDebug>
5*4882a593Smuzhiyun #include <QLabel>
6*4882a593Smuzhiyun #include <QListWidget>
7*4882a593Smuzhiyun #include <QMutex>
8*4882a593Smuzhiyun #include <QPushButton>
9*4882a593Smuzhiyun #include <QProcess>
10*4882a593Smuzhiyun #include <QTextStream>
11*4882a593Smuzhiyun #include <QThread>
12*4882a593Smuzhiyun #include <QTimer>
13*4882a593Smuzhiyun #include <QWidget>
14*4882a593Smuzhiyun #ifdef RKWIFIBTAPP
15*4882a593Smuzhiyun #include <RkBtSource.h>
16*4882a593Smuzhiyun #include <RkBtBase.h>
17*4882a593Smuzhiyun #else
18*4882a593Smuzhiyun 
19*4882a593Smuzhiyun typedef enum {
20*4882a593Smuzhiyun         RK_BT_STATE_OFF,
21*4882a593Smuzhiyun         RK_BT_STATE_ON,
22*4882a593Smuzhiyun         RK_BT_STATE_TURNING_ON,
23*4882a593Smuzhiyun         RK_BT_STATE_TURNING_OFF,
24*4882a593Smuzhiyun } RK_BT_STATE;
25*4882a593Smuzhiyun 
26*4882a593Smuzhiyun typedef enum {
27*4882a593Smuzhiyun         RK_BT_BOND_STATE_NONE,
28*4882a593Smuzhiyun         RK_BT_BOND_STATE_BONDING,
29*4882a593Smuzhiyun         RK_BT_BOND_STATE_BONDED,
30*4882a593Smuzhiyun } RK_BT_BOND_STATE;
31*4882a593Smuzhiyun 
32*4882a593Smuzhiyun typedef enum {
33*4882a593Smuzhiyun         RK_BT_DISC_STARTED,
34*4882a593Smuzhiyun         RK_BT_DISC_STOPPED_AUTO,
35*4882a593Smuzhiyun         RK_BT_DISC_START_FAILED,
36*4882a593Smuzhiyun         RK_BT_DISC_STOPPED_BY_USER,
37*4882a593Smuzhiyun } RK_BT_DISCOVERY_STATE;
38*4882a593Smuzhiyun 
39*4882a593Smuzhiyun typedef enum {
40*4882a593Smuzhiyun         BT_SOURCE_EVENT_CONNECT_FAILED,
41*4882a593Smuzhiyun         BT_SOURCE_EVENT_CONNECTED,
42*4882a593Smuzhiyun         BT_SOURCE_EVENT_DISCONNECTED,
43*4882a593Smuzhiyun         BT_SOURCE_EVENT_RC_PLAY,    /* remote control command */
44*4882a593Smuzhiyun         BT_SOURCE_EVENT_RC_STOP,
45*4882a593Smuzhiyun         BT_SOURCE_EVENT_RC_PAUSE,
46*4882a593Smuzhiyun         BT_SOURCE_EVENT_RC_FORWARD,
47*4882a593Smuzhiyun         BT_SOURCE_EVENT_RC_BACKWARD,
48*4882a593Smuzhiyun         BT_SOURCE_EVENT_RC_VOL_UP,
49*4882a593Smuzhiyun         BT_SOURCE_EVENT_RC_VOL_DOWN,
50*4882a593Smuzhiyun } RK_BT_SOURCE_EVENT;
51*4882a593Smuzhiyun #endif
52*4882a593Smuzhiyun 
53*4882a593Smuzhiyun class qtBT : public QListWidget
54*4882a593Smuzhiyun {
55*4882a593Smuzhiyun     Q_OBJECT
56*4882a593Smuzhiyun     struct bt_dev_info{
57*4882a593Smuzhiyun         const char *address;
58*4882a593Smuzhiyun         const char *name;
59*4882a593Smuzhiyun         unsigned int bt_class;
60*4882a593Smuzhiyun         int rssi;
61*4882a593Smuzhiyun     };
62*4882a593Smuzhiyun public:
63*4882a593Smuzhiyun     qtBT(QWidget *parent = nullptr, QLabel *label = nullptr, QPushButton *btn = nullptr, bool on = false);
64*4882a593Smuzhiyun     ~qtBT();
65*4882a593Smuzhiyun     static qtBT* getInstance(QWidget *parent = nullptr, QLabel *label = nullptr, QPushButton *btn = nullptr, bool on = false)
66*4882a593Smuzhiyun     {
67*4882a593Smuzhiyun         if (!_instance) {
68*4882a593Smuzhiyun             _instance = new qtBT(parent, label, btn, on);
69*4882a593Smuzhiyun         }
70*4882a593Smuzhiyun         return _instance;
71*4882a593Smuzhiyun     }
72*4882a593Smuzhiyun     static void state_cb(RK_BT_STATE state);
73*4882a593Smuzhiyun     static void bond_cb(const char *bd_addr, const char *name, RK_BT_BOND_STATE state);
74*4882a593Smuzhiyun     static void scan_status_cb(RK_BT_DISCOVERY_STATE status);
75*4882a593Smuzhiyun     static void source_connect_cb(void *userdata, const char *bd_addr, const char *name, const RK_BT_SOURCE_EVENT enEvent);
76*4882a593Smuzhiyun     static void scan_cb(const char *address,const char *name, unsigned int bt_class, int rssi, int change);
77*4882a593Smuzhiyun     void open();
78*4882a593Smuzhiyun     void close();
79*4882a593Smuzhiyun     bool isOn();
80*4882a593Smuzhiyun     void turnOn();
81*4882a593Smuzhiyun     void turnOff();
82*4882a593Smuzhiyun 
83*4882a593Smuzhiyun public slots:
84*4882a593Smuzhiyun     void on_btnClicked();
85*4882a593Smuzhiyun     void on_itemClicked(QListWidgetItem *item);
86*4882a593Smuzhiyun private:
87*4882a593Smuzhiyun #ifdef RKWIFIBTAPP
88*4882a593Smuzhiyun     RkBtContent bt_content;
89*4882a593Smuzhiyun #endif
90*4882a593Smuzhiyun     QList<struct bt_dev_info*> dev_list;
91*4882a593Smuzhiyun     QMutex btmutex;
92*4882a593Smuzhiyun     static class qtBT* _instance;
93*4882a593Smuzhiyun     QLabel *text;
94*4882a593Smuzhiyun     QPushButton *switchBtn;
95*4882a593Smuzhiyun };
96*4882a593Smuzhiyun 
97*4882a593Smuzhiyun #endif // QTBT_H
98