@@ -5,6 +5,8 @@ function sepiaFW_build_clexi(){
55 Clexi . socketURI = "" ; //default CLEXI server: wss://raspberrypi.local:8443
66 Clexi . doConnect = false ;
77
8+ Clexi . numOfSendRetries = 10 ;
9+
810 Clexi . setSocketURI = function ( newURI ) {
911 SepiaFW . data . set ( 'clexiSocketURI' , newURI ) ;
1012 Clexi . socketURI = newURI ;
@@ -48,27 +50,30 @@ function sepiaFW_build_clexi(){
4850
4951 //subscribe
5052 subscribeToBeaconScanner ( ) ;
51- subscribeToBroadcaster ( ) ;
53+ // subscribeToBroadcaster();
5254
5355 //request some states
54- Clexi . requestBleBeaconScannerState ( ) ;
56+ Clexi . requestBleBeaconScannerState ( ) ; //TODO: repeat from time to time or at least on error?
5557
5658 } , function ( e ) {
5759 //closed
58- removeBroadcasterSubscription ( ) ;
5960 removeBeaconScannerSubscription ( ) ;
61+ //removeBroadcasterSubscription();
6062
6163 } , function ( err ) {
6264 //error
63- removeBroadcasterSubscription ( ) ;
6465 removeBeaconScannerSubscription ( ) ;
66+ //removeBroadcasterSubscription();
6567 } ) ;
6668 }
6769 Clexi . close = function ( ) {
6870 ClexiJS . close ( ) ;
6971 }
7072
71- Clexi . send = ClexiJS . send ;
73+ Clexi . send = function ( extensionName , data , numOfRetries ) {
74+ if ( numOfRetries == undefined ) numOfRetries = Clexi . numOfSendRetries ;
75+ ClexiJS . send ( extensionName , data , numOfRetries ) ;
76+ }
7277
7378 Clexi . getXtensions = function ( ) {
7479 return ClexiJS . availableXtensions ;
@@ -80,9 +85,10 @@ function sepiaFW_build_clexi(){
8085 //CLEXI broadcaster:
8186
8287 Clexi . broadcastToAll = function ( data ) {
83- ClexiJS . send ( 'clexi-broadcaster' , data ) ;
88+ ClexiJS . send ( 'clexi-broadcaster' , data , Clexi . numOfSendRetries ) ;
8489 }
8590
91+ //TODO: do something useful with this ;-)
8692 function subscribeToBroadcaster ( ) {
8793 ClexiJS . subscribeTo ( 'clexi-broadcaster' , function ( e ) {
8894 console . log ( 'Broadcaster event: ' + JSON . stringify ( e ) ) ;
@@ -99,40 +105,70 @@ function sepiaFW_build_clexi(){
99105 //CLEXI ble beacon scanner
100106
101107 Clexi . bleBeaconScannerState = undefined ;
108+ var expectedBleBeaconScannerState = undefined ;
102109
103110 Clexi . startBleBeaconScanner = function ( ) {
104111 ClexiJS . send ( 'ble-beacon-scanner' , {
105112 ctrl : "start"
106- } ) ;
113+ } , Clexi . numOfSendRetries ) ;
114+ expectedBleBeaconScannerState = "on" ;
107115 }
108116 Clexi . stopBleBeaconScanner = function ( ) {
109117 ClexiJS . send ( 'ble-beacon-scanner' , {
110118 ctrl : "stop"
111- } ) ;
119+ } , Clexi . numOfSendRetries ) ;
120+ expectedBleBeaconScannerState = "off" ;
112121 }
113122 Clexi . requestBleBeaconScannerState = function ( ) {
114123 ClexiJS . send ( 'ble-beacon-scanner' , {
115124 ctrl : "state"
116- } ) ;
125+ } , Clexi . numOfSendRetries ) ;
126+ }
127+
128+ Clexi . addBleBeaconEventListener = function ( callback ) {
129+ document . addEventListener ( 'clexi-event-ble-beacon-scanner' , callback ) ;
130+ }
131+ Clexi . removeBleBeaconEventListener = function ( callback ) {
132+ document . removeEventListener ( 'clexi-event-ble-beacon-scanner' , callback ) ;
133+ }
134+ Clexi . addBleBeaconErrorListener = function ( callback ) {
135+ document . addEventListener ( 'clexi-error-ble-beacon-scanner' , callback ) ;
136+ }
137+ Clexi . removeBleBeaconErrorListener = function ( callback ) {
138+ document . removeEventListener ( 'clexi-error-ble-beacon-scanner' , callback ) ;
117139 }
118140
119141 function subscribeToBeaconScanner ( ) {
120142 ClexiJS . subscribeTo ( 'ble-beacon-scanner' , function ( e ) {
121- console . log ( 'BLE Beacon event: ' + JSON . stringify ( e ) ) ;
143+ // console.log('BLE Beacon event: ' + JSON.stringify(e));
122144 if ( e . ctrl ) {
123145 if ( e . ctrl == "started" ) {
124146 Clexi . bleBeaconScannerState = "on" ;
125147 } else if ( e . ctrl == "stopped" ) {
126148 Clexi . bleBeaconScannerState = "off" ;
127149 }
128150 }
151+ var event = new CustomEvent ( 'clexi-event-ble-beacon-scanner' , { detail : e } ) ;
152+ document . dispatchEvent ( event ) ;
153+
129154 } , function ( e ) {
130- console . log ( 'BLE Beacon response: ' + JSON . stringify ( e ) ) ;
155+ // console.log('BLE Beacon response: ' + JSON.stringify(e));
131156 if ( e . state ) {
132157 Clexi . bleBeaconScannerState = e . state ;
158+ //start
159+ if ( Clexi . bleBeaconScannerState != expectedBleBeaconScannerState && expectedBleBeaconScannerState == "on" ) {
160+ //auto-restart scanner
161+ Clexi . startBleBeaconScanner ( ) ;
162+ }
133163 }
164+ var event = new CustomEvent ( 'clexi-response-ble-beacon-scanner' , { detail : e } ) ;
165+ document . dispatchEvent ( event ) ;
166+
134167 } , function ( e ) {
135- console . log ( 'BLE Beacon error: ' + JSON . stringify ( e ) ) ;
168+ //console.log('BLE Beacon error: ' + JSON.stringify(e));
169+ var event = new CustomEvent ( 'clexi-error-ble-beacon-scanner' , { detail : e } ) ;
170+ document . dispatchEvent ( event ) ;
171+ //Clexi.requestBleBeaconScannerState(); //TODO: do this here?
136172 } ) ;
137173 }
138174 function removeBeaconScannerSubscription ( ) {
0 commit comments