66 * wxTools is licensed according to the terms in the file LICENCE(GPL V3) in the root of the source
77 * code directory.
88 **************************************************************************************************/
9- #include " BLEScanner .h"
9+ #include " BLECenterManager .h"
1010
1111#include < wx/artprov.h>
1212#include < wx/bmpbuttn.h>
1919
2020#include " Common/wxTools.h"
2121
22- IMPLEMENT_ABSTRACT_CLASS (BLEScanner , wxPanel)
23- BEGIN_EVENT_TABLE(BLEScanner , wxPanel)
24- EVT_THREAD(wxtID_SCAN_START, BLEScanner ::onScanStart)
25- EVT_THREAD(wxtID_SCAN_FOUND, BLEScanner ::onScanFound)
26- EVT_THREAD(wxtID_SCAN_UPDATED, BLEScanner ::onScanUpdated)
27- EVT_THREAD(wxtID_SCAN_STOP, BLEScanner ::onScanStop)
22+ IMPLEMENT_ABSTRACT_CLASS (BLECenterManager , wxPanel)
23+ BEGIN_EVENT_TABLE(BLECenterManager , wxPanel)
24+ EVT_THREAD(wxtID_SCAN_START, BLECenterManager ::onScanStart)
25+ EVT_THREAD(wxtID_SCAN_FOUND, BLECenterManager ::onScanFound)
26+ EVT_THREAD(wxtID_SCAN_UPDATED, BLECenterManager ::onScanUpdated)
27+ EVT_THREAD(wxtID_SCAN_STOP, BLECenterManager ::onScanStop)
2828END_EVENT_TABLE()
2929
30- class BLEScannerThread : public wxThread
30+ class BLECenterManagerThread : public wxThread
3131{
3232public:
33- BLEScannerThread (wxPanel *panel)
33+ BLECenterManagerThread (wxPanel *panel)
3434 : wxThread (wxTHREAD_JOINABLE)
3535 , m_panel (panel)
3636 {}
@@ -70,7 +70,7 @@ class BLEScannerThread : public wxThread
7070protected:
7171 ExitCode Entry () override
7272 {
73- SimpleBLE::Adapter adapter = BLEScannerThread ::getAdapter ();
73+ SimpleBLE::Adapter adapter = BLECenterManagerThread ::getAdapter ();
7474 if (!adapter.initialized ()) {
7575 wxtWarning () << " No BLE adapter found, scanning thread will exit." ;
7676 return nullptr ;
@@ -183,23 +183,25 @@ class BLEScannerThread : public wxThread
183183 wxPanel *m_panel{nullptr };
184184};
185185
186- class BLEScannerPrivate
186+ class BLECenterManagerPrivate
187187{
188188public:
189- BLEScannerPrivate (BLEScanner *q_ptr)
189+ BLECenterManagerPrivate (BLECenterManager *q_ptr)
190190 : q(q_ptr)
191191 {}
192- ~BLEScannerPrivate () = default ;
192+ ~BLECenterManagerPrivate () = default ;
193193
194194public:
195195 wxComboBox *m_blePeripheralComboBox{nullptr };
196- wxBitmapButton *m_refreshButton{nullptr };
197- BLEScannerThread *m_thread{nullptr };
196+ wxComboBox *m_bleServiceComboBox{nullptr };
197+ wxComboBox *m_bleCharacteristicComboBox{nullptr };
198+ wxComboBox *m_bleDescriptorComboBox{nullptr };
199+ BLECenterManagerThread *m_thread{nullptr };
198200
199201public:
200202 void DoRefreshDevice ()
201203 {
202- SimpleBLE::Adapter adapter = BLEScannerThread ::getAdapter ();
204+ SimpleBLE::Adapter adapter = BLECenterManagerThread ::getAdapter ();
203205 if (!adapter.initialized ()) {
204206 // wxMessageBox(_("No BLE adapter found."), _("Error"), wxOK | wxICON_ERROR);
205207 return ;
@@ -211,59 +213,71 @@ class BLEScannerPrivate
211213 return ;
212214 }
213215
214- m_thread = new BLEScannerThread (q);
216+ m_thread = new BLECenterManagerThread (q);
215217 m_thread->Create ();
216218 m_thread->Run ();
217219 }
218220
221+ void DoAddComboBox (wxGridBagSizer *sizer, const wxString &label, wxComboBox *control)
222+ {
223+ auto text = new wxStaticText (q, wxID_ANY, label);
224+ sizer->Add (text,
225+ wxGBPosition (m_rowCount, 0 ),
226+ wxGBSpan (1 , 1 ),
227+ wxALIGN_CENTER_VERTICAL | wxALL,
228+ 0 );
229+ m_rowCount++;
230+ sizer->Add (control, wxGBPosition (m_rowCount, 0 ), wxGBSpan (1 , 1 ), wxEXPAND | wxALL, 0 );
231+ m_rowCount++;
232+ }
233+
219234private:
220- BLEScanner *q{nullptr };
235+ BLECenterManager *q{nullptr };
236+ int m_rowCount{0 };
221237};
222238
223- BLEScanner::BLEScanner (wxWindow *parent)
239+ #define BLEComboBox \
240+ wxComboBox (this , \
241+ wxID_ANY, \
242+ wxEmptyString, \
243+ wxDefaultPosition, \
244+ wxDefaultSize, \
245+ 0 , \
246+ nullptr , \
247+ wxCB_READONLY)
248+
249+ BLECenterManager::BLECenterManager(wxWindow *parent)
224250 : wxPanel(parent)
225251{
226252 wxGridBagSizer *sizer = new wxGridBagSizer (0 , 0 );
227253 SetSizer (sizer);
228254
229- d = new BLEScannerPrivate (this );
230- auto text = new wxStaticText (this , wxID_ANY, _ (" Peripheral" ));
231- sizer->Add (text, wxGBPosition (0 , 0 ), wxGBSpan (1 , 1 ), wxALIGN_CENTER_VERTICAL | wxALL, 0 );
232-
233- wxBitmapBundle refreshIcon = wxArtProvider::GetBitmapBundle (wxART_REFRESH, wxART_BUTTON);
234- d->m_refreshButton = new wxBitmapButton (this , wxID_ANY, refreshIcon);
235- d->m_refreshButton ->SetToolTip (_ (" Refresh BLE device list" ));
236- d->m_refreshButton ->Bind (wxEVT_BUTTON, [this ](wxCommandEvent &event) { d->DoRefreshDevice (); });
237- d->m_refreshButton ->Hide ();
238- auto refreshSizer = new wxBoxSizer (wxHORIZONTAL);
239- refreshSizer->AddStretchSpacer ();
240- refreshSizer->Add (d->m_refreshButton , 0 , wxALIGN_CENTER_VERTICAL | wxALL, 0 );
241- sizer->Add (refreshSizer, wxGBPosition (0 , 1 ), wxGBSpan (1 , 1 ), wxEXPAND | wxALL, 0 );
242-
243- d->m_blePeripheralComboBox = new wxComboBox (this ,
244- wxID_ANY,
245- wxEmptyString,
246- wxDefaultPosition,
247- wxDefaultSize,
248- 0 ,
249- nullptr ,
250- wxCB_READONLY);
251- sizer->Add (d->m_blePeripheralComboBox , wxGBPosition (1 , 0 ), wxGBSpan (1 , 2 ), wxEXPAND | wxALL, 0 );
252- sizer->AddGrowableCol (1 );
255+ d = new BLECenterManagerPrivate (this );
256+ d->m_blePeripheralComboBox = new BLEComboBox;
257+ d->m_bleServiceComboBox = new BLEComboBox;
258+ d->m_bleCharacteristicComboBox = new BLEComboBox;
259+ d->m_bleDescriptorComboBox = new BLEComboBox;
260+
261+ d->DoAddComboBox (sizer, _ (" Peripheral" ), d->m_blePeripheralComboBox );
262+ d->DoAddComboBox (sizer, _ (" Service" ), d->m_bleServiceComboBox );
263+ d->DoAddComboBox (sizer, _ (" Characteristic" ), d->m_bleCharacteristicComboBox );
264+ d->DoAddComboBox (sizer, _ (" Descriptor" ), d->m_bleDescriptorComboBox );
265+
266+ sizer->AddGrowableCol (0 );
253267 d->DoRefreshDevice ();
254268}
255269
256- BLEScanner ::~BLEScanner ()
270+ BLECenterManager ::~BLECenterManager ()
257271{
258272 // Nothing to do yet...
259273}
260274
261- void BLEScanner ::onScanStart (wxThreadEvent &e)
275+ void BLECenterManager ::onScanStart (wxThreadEvent &e)
262276{
263277 wxtInfo () << " Scan started." ;
264278}
265279
266- void BLEScanner ::onScanFound (wxThreadEvent &e)
280+ void BLECenterManager ::onScanFound (wxThreadEvent &e)
267281{
268282 wxtBlePeripheralItem item = e.GetPayload <wxtBlePeripheralItem>();
269283 if (item.identifier .IsEmpty ()) {
@@ -279,7 +293,7 @@ void BLEScanner::onScanFound(wxThreadEvent &e)
279293 }
280294}
281295
282- void BLEScanner ::onScanUpdated (wxThreadEvent &e)
296+ void BLECenterManager ::onScanUpdated (wxThreadEvent &e)
283297{
284298 // Update existing item
285299 wxtBlePeripheralItem item = e.GetPayload <wxtBlePeripheralItem>();
@@ -300,7 +314,7 @@ void BLEScanner::onScanUpdated(wxThreadEvent &e)
300314 onScanFound (e);
301315}
302316
303- void BLEScanner ::onScanStop (wxThreadEvent &e)
317+ void BLECenterManager ::onScanStop (wxThreadEvent &e)
304318{
305319 wxtInfo () << " Scan stopped." ;
306320}
0 commit comments