async function scan_and_connect_to_discovered_device() { var discover_inactivity_counter = 0 var discovered_device = null var discover_fn = function (device) { discovered_device = device; MetaWear.stopDiscoverAll(discover_fn); } MetaWear.discoverAll(discover_fn) while(1) { if(discovered_device != null) { if(discovered_device._peripheral.rssi > -90) { try { console.log(chalk.green("Connecting to device: " + discovered_device.address)); var fail = null; var disconnect_fn = function () { fail = 'disconnect'; console.log(chalk.red('we got disconnected! :( ')); } discovered_device.on('disconnect', disconnect_fn); discovered_device.on('connect', error => { if(error) { console.log(chalk.red("Connected with error code: " + error)) } console.log(chalk.green("Connected succesfully!")) } ); discovered_device.connectAndSetUp(error => { if(error != null) { console.log(chalk.red("Connect and setup error code: " + error)); fail = 'error_code'; } }); connection_timeout = setTimeout(() => { fail = 'timeout'; console.log(chalk.red("Connection timeout!")); }, 4000); while(discovered_device.modelDescription == null) { await new Promise(resolve => setTimeout(resolve, 100)); if(fail != null) { clearTimeout(connection_timeout); discovered_device.removeListener('disconnect', disconnect_fn); if(fail == 'timeout') { await new Promise(resolve => discovered_device.disconnect(() => resolve())); } throw "Droping connection!"; } } clearTimeout(connection_timeout); discovered_device.removeListener('disconnect', disconnect_fn); console.log(chalk.green("Connected to device: " + discovered_device.address)); var handler = new DeviceHandler(discovered_device); console.log(chalk.green("Configuring " + discovered_device.address)); await handler.setup(); if(handler.get_status() == 'configured') { current_connected_devices.push(handler); } } catch (e) { discovered_device._peripheral.removeAllListeners(); console.log(chalk.red(e)); } discovered_device = null; MetaWear.discoverAll(discover_fn); discover_inactivity_counter = 0; } } discover_inactivity_counter++; if(discover_inactivity_counter > 10){ MetaWear.stopDiscoverAll(discover_fn); await new Promise(resolve => setTimeout(resolve, 500)); MetaWear.discoverAll(discover_fn); discover_inactivity_counter = 0; console.log(chalk.blue("Device discover reset occur")); } await new Promise(resolve => setTimeout(resolve, 5000)); } }