UNPKG

serialport-v5

Version:

fork with electron support of Node.js package to access serial ports. Linux, OSX and Windows. Welcome your robotic JavaScript overlords. Better yet, program them!

55 lines (48 loc) 1.52 kB
'use strict'; const fs = require('fs'); const debug = require('debug'); const logger = debug('serialport:unixRead'); module.exports = function unixRead(buffer, offset, length) { logger('Starting read'); if (!this.isOpen) { return Promise.reject(new Error('Port is not open')); } return new Promise((resolve, reject) => { fs.read(this.fd, buffer, offset, length, null, (err, bytesRead) => { if (err && ( err.code === 'EAGAIN' || err.code === 'EWOULDBLOCK' || err.code === 'EINTR' )) { if (!this.isOpen) { return reject(new Error('Port is not open')); } logger('waiting for readable because of code:', err.code); this.poller.once('readable', (err) => { if (err) { return reject(err) } resolve(this.read(buffer, offset, length)); }); return; } const disconnectError = err && ( err.code === 'EBADF' || // Bad file number means we got closed err.code === 'ENXIO' || // No such device or address probably usb disconnect err.code === 'UNKNOWN' || err.errno === -1 // generic error ); if (disconnectError) { err.disconnect = true; logger('disconnecting', err); } if (err) { return reject(err); } if (bytesRead === 0) { resolve(this.read(buffer, offset, length)); return; } logger('Finished read', bytesRead, 'bytes'); resolve(bytesRead); }); }); };