@@ -211,62 +211,71 @@ Or more advanced usage with control of the connection
211
211
log ( 1 , "Disconnected (gattserverdisconnected)" ) ;
212
212
connection . close ( ) ;
213
213
} ) ;
214
- return device . gatt . connect ( ) ;
215
- } ) . then ( function ( server ) {
216
- log ( 1 , "Connected" ) ;
217
- btServer = server ;
218
- return server . getPrimaryService ( NORDIC_SERVICE ) ;
219
- } ) . then ( function ( service ) {
220
- log ( 2 , "Got service" ) ;
221
- btService = service ;
222
- return btService . getCharacteristic ( NORDIC_RX ) ;
223
- } ) . then ( function ( characteristic ) {
224
- rxCharacteristic = characteristic ;
225
- log ( 2 , "RX characteristic:" + JSON . stringify ( rxCharacteristic ) ) ;
226
- rxCharacteristic . addEventListener ( 'characteristicvaluechanged' , function ( event ) {
227
- var dataview = event . target . value ;
228
- var data = ab2str ( dataview . buffer ) ;
229
- if ( puck . flowControl ) {
230
- for ( var i = 0 ; i < data . length ; i ++ ) {
231
- var ch = data . charCodeAt ( i ) ;
232
- var remove = true ;
233
- if ( ch == 19 ) { // XOFF
234
- log ( 2 , "XOFF received => pause upload" ) ;
235
- flowControlXOFF = true ;
236
- } else if ( ch == 17 ) { // XON
237
- log ( 2 , "XON received => resume upload" ) ;
238
- flowControlXOFF = false ;
239
- } else
240
- remove = false ;
241
- if ( remove ) { // remove character
242
- data = data . substr ( 0 , i - 1 ) + data . substr ( i + 1 ) ;
243
- i -- ;
244
- }
245
- }
246
- }
247
- log ( 3 , "Received " + JSON . stringify ( data ) ) ;
248
- connection . emit ( 'data' , data ) ;
249
- } ) ;
250
- return rxCharacteristic . startNotifications ( ) ;
251
- } ) . then ( function ( ) {
252
- return btService . getCharacteristic ( NORDIC_TX ) ;
253
- } ) . then ( function ( characteristic ) {
254
- txCharacteristic = characteristic ;
255
- log ( 2 , "TX characteristic:" + JSON . stringify ( txCharacteristic ) ) ;
256
- } ) . then ( function ( ) {
257
- connection . txInProgress = false ;
258
- connection . isOpen = true ;
259
- connection . isOpening = false ;
260
- isBusy = false ;
261
- queue = [ ] ;
262
- callback ( connection ) ;
263
- connection . emit ( 'open' ) ;
264
- // if we had any writes queued, do them now
265
- connection . write ( ) ;
214
+ connection . device = device ;
215
+ connection . reconnect ( callback ) ;
266
216
} ) . catch ( function ( error ) {
267
217
log ( 1 , 'ERROR: ' + error ) ;
268
218
connection . close ( ) ;
269
219
} ) ;
220
+
221
+ connection . reconnect = function ( callback ) {
222
+ connection . device . gatt . connect ( ) . then ( function ( server ) {
223
+ log ( 1 , "Connected" ) ;
224
+ btServer = server ;
225
+ return server . getPrimaryService ( NORDIC_SERVICE ) ;
226
+ } ) . then ( function ( service ) {
227
+ log ( 2 , "Got service" ) ;
228
+ btService = service ;
229
+ return btService . getCharacteristic ( NORDIC_RX ) ;
230
+ } ) . then ( function ( characteristic ) {
231
+ rxCharacteristic = characteristic ;
232
+ log ( 2 , "RX characteristic:" + JSON . stringify ( rxCharacteristic ) ) ;
233
+ rxCharacteristic . addEventListener ( 'characteristicvaluechanged' , function ( event ) {
234
+ var dataview = event . target . value ;
235
+ var data = ab2str ( dataview . buffer ) ;
236
+ if ( puck . flowControl ) {
237
+ for ( var i = 0 ; i < data . length ; i ++ ) {
238
+ var ch = data . charCodeAt ( i ) ;
239
+ var remove = true ;
240
+ if ( ch == 19 ) { // XOFF
241
+ log ( 2 , "XOFF received => pause upload" ) ;
242
+ flowControlXOFF = true ;
243
+ } else if ( ch == 17 ) { // XON
244
+ log ( 2 , "XON received => resume upload" ) ;
245
+ flowControlXOFF = false ;
246
+ } else
247
+ remove = false ;
248
+ if ( remove ) { // remove character
249
+ data = data . substr ( 0 , i - 1 ) + data . substr ( i + 1 ) ;
250
+ i -- ;
251
+ }
252
+ }
253
+ }
254
+ log ( 3 , "Received " + JSON . stringify ( data ) ) ;
255
+ connection . emit ( 'data' , data ) ;
256
+ } ) ;
257
+ return rxCharacteristic . startNotifications ( ) ;
258
+ } ) . then ( function ( ) {
259
+ return btService . getCharacteristic ( NORDIC_TX ) ;
260
+ } ) . then ( function ( characteristic ) {
261
+ txCharacteristic = characteristic ;
262
+ log ( 2 , "TX characteristic:" + JSON . stringify ( txCharacteristic ) ) ;
263
+ } ) . then ( function ( ) {
264
+ connection . txInProgress = false ;
265
+ connection . isOpen = true ;
266
+ connection . isOpening = false ;
267
+ isBusy = false ;
268
+ queue = [ ] ;
269
+ callback ( connection ) ;
270
+ connection . emit ( 'open' ) ;
271
+ // if we had any writes queued, do them now
272
+ connection . write ( ) ;
273
+ } ) . catch ( function ( error ) {
274
+ log ( 1 , 'ERROR: ' + error ) ;
275
+ connection . close ( ) ;
276
+ } ) ;
277
+ } ;
278
+
270
279
return connection ;
271
280
} ;
272
281
0 commit comments