remote-serial-port-client
Advanced tools
Comparing version 0.2.0 to 0.4.0
@@ -1,2 +0,2 @@ | ||
/*! RemoteSerialPort v0.2.0 | https://github.com/papnkukn/remote-serial-port-client | MIT license */ | ||
!function(e){function t(e){var t=this;t.events={};var n={verbose:!1,url:null,userAgent:null};if(t.options=Object.assign({},n,e||{}),!e.url)throw new Error("Missing required 'url' parameter!");if(!e.userAgent&&"function"==typeof require){var r=require("../package.json");e.userAgent="RemoteSerialPort/"+r.version}"function"==typeof o.defaults&&o.defaults({headers:{Accept:"application/json","User-Agent":e.userAgent}}),t.emit=function(e,o){var n=t.events[e];"function"==typeof n&&n(o)},t.request=function(e,n){try{o({method:e.method||"GET",url:t.options.url+e.route,headers:e.headers,body:e.body},function(e,t,o){if(n)try{if(e)throw e;var r;try{r=JSON.parse(o)}catch(e){r=o}if(t&&t.statusCode>=400)throw new Error(r.error||"HTTP Status Code "+t.statusCode);n(null,r)}catch(e){n(e)}})}catch(e){n&&n(e)}}}var o,n;if("object"==typeof exports||"function"==typeof define&&define.amd)o=require("request"),n=function(e){var t=require("ws"),o=new t(e);return o._onevent={},o._delayed=[],o._emit=function(e,t){var n=o._onevent[e];n?t?n(t):n():o._delayed.push({name:e,data:t})},o.on("open",function(){o._emit("open")}),o.on("close",function(){o._emit("close")}),o.on("message",function(e,t){o._emit("read",e)}),o.on("error",function(e){o._emit("error",event)}),o._on=o.on,o.on=function(e,t){if(!o._onevent[e])for(var n=0;o._delayed[n++];){var r=o._delayed[n];r.name==e&&(r.data?t(r.data):t()),o._delayed.splice(n,1),n--}o._onevent[e]=t},o.write=function(e){o.send(e),o._emit("write",e)},o},"node";else{if("undefined"==typeof jQuery)return console.error("RemoteSerialPort not available in this environment! Hint: try with Node.js or jQuery.");o=function(e,t){var o={cache:!1,type:e.method||"GET",url:e.url||"#",data:e.body,dataType:"json",error:function(e,o,n){t&&t(e.responseJSON,{statusCode:o},null)},success:function(e,o,n){t&&t(null,{statusCode:o},e)}};e.headers&&(o.headers=e.headers),e.headers&&e.headers["Content-Type"]&&(o.contentType=e.headers["Content-Type"]),console.log(o),jQuery.ajax(o)},n=function(t){if(!e.WebSocket)throw new Error("Browser does not support WebSocket!");var o=new e.WebSocket(t);return o.binaryType="arraybuffer",o._onevent={},o._delayed=[],o._emit=function(e,t){var n=o._onevent[e];n?t?n(t):n():o._delayed.push({name:e,data:t})},o.onopen=function(e){o._emit("open")},o.onclose=function(e){o._emit("close")},o.onmessage=function(e){o._emit("read",new Uint8Array(e.data))},o.onerror=function(e){o._emit("error",e)},o._on=o.on,o.on=function(e,t){if(!o._onevent[e])for(var n=0;o._delayed[n++];){var r=o._delayed[n];r.name==e&&(r.data?t(r.data):t()),o._delayed.splice(n,1),n--}o._onevent[e]=t},o.write=function(e){o.send(e),o._emit("write",e)},o},"jquery"}t.prototype.list=function(e){this.request({method:"GET",route:"api/v1/port"},e)},t.prototype.status=function(e,t){this.request({method:"GET",route:"api/v1/port/"+e},t)},t.prototype.open=function(e,t,o){this.request({method:"POST",route:"api/v1/port/"+e+"/open",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(t||{})},o)},t.prototype.close=function(e,t){this.request({method:"POST",route:"api/v1/port/"+e+"/close",headers:{Accept:"application/json"}},t)},t.prototype.write=function(e,t,o){this.request({method:"POST",route:"api/v1/port/"+e+"/write",headers:{Accept:"application/json","Content-Type":"application/octet-stream"},body:t},o)},t.prototype.read=function(e,t){this.request({method:"GET",route:"api/v1/port/"+e+"/read",headers:{Accept:"application/json"}},t)},t.prototype.clearReadBuffer=function(e,t){this.request({method:"DELETE",route:"api/v1/port/"+e+"/read",headers:{Accept:"application/json"}},t)},t.prototype.available=function(e,t){this.request({method:"GET",route:"api/v1/port/"+e+"/available",headers:{Accept:"application/json"}},t)},t.prototype.bind=function(e,t){if(!t)throw new Error("Missing serial port name!");if("data"!=e&&"control"!=e)throw new Error("Only 'data' and 'control' line allowed!");var o=n("ws://localhost:5147/api/v1/port/"+t+"/"+e);return"control"==e&&(o.open=function(e){var t={event:"open",data:e};o.send(JSON.stringify(t)),o._emit("write",e)}),o},t.prototype.on=function(e,t){this.events[e]=t},"object"==typeof exports?module.exports=t:"function"==typeof define&&define.amd?define(function(){return t}):e.RemoteSerialPort=t}(this); | ||
/*! RemoteSerialPort v0.4.0 | https://github.com/papnkukn/remote-serial-port-client | MIT license */ | ||
!function(e){function t(e){function t(e,t,o,n){throw new Error("Not available in this mode!")}var n=this;n.events={};var i={verbose:!1,mode:"http",url:null,userAgent:null};switch(n.options=Object.assign({},i,e||{}),n.options.mode){case"http":if(!n.options.url)throw new Error("Missing required 'url' parameter!");if(!n.options.userAgent&&"function"==typeof require){var a=require("../package.json");n.options.userAgent="RemoteSerialPort/"+a.version}"function"==typeof o.defaults&&o.defaults({headers:{Accept:"application/json","User-Agent":n.options.userAgent}});break;case"udp":case"tcp":if("node"!=r)throw new Error("TCP and UDP sockets are available only in Node.js");var s=new(require("./RemoteSerialPortSocket.js"))(n.options);n.socket=s,n.options=s.options,n.events=s.events,n.emit=s.emit,n.buffer=s.buffer,n.list=t,n.status=t,n.open=function(e,t,o){var n=this;e&&n.options.verbose&&console.warn("Warning: Serial port name is ignored when using a socket!"),t&&n.options.verbose&&console.warn("Warning: Serial port options are ignored when using a socket!"),n.socket.open(o)},n.close=function(e,t){n.socket.close(t)},n.write=function(e,t,o){n.socket.write(t,o)},n.read=function(e,t){n.socket.read(t)},n.clearReadBuffer=function(e,t){n.socket.clearReadBuffer(t)},n.available=function(e,t){n.socket.available(t)},n.bind=t,n.on=s.on;break;default:throw new Error("Unknown mode: "+n.options.mode)}n.emit=function(e,t){var o=n.events[e];"function"==typeof o&&o(t)},n.request=function(e,t){try{o({method:e.method||"GET",url:n.options.url+e.route,headers:e.headers,body:e.body},function(e,o,n){if(t)try{if(e)throw e;var r;try{r=JSON.parse(n)}catch(e){r=n}if(o&&o.statusCode>=400)throw new Error(r.error||"HTTP Status Code "+o.statusCode);t(null,r)}catch(e){t(e)}})}catch(e){t&&t(e)}}}var o,n,r="unknown";if("object"==typeof exports||"function"==typeof define&&define.amd)o=require("request"),n=function(e){var t=new(require("ws"))(e);return t._onevent={},t._delayed=[],t._emit=function(e,o){var n=t._onevent[e];n?o?n(o):n():t._delayed.push({name:e,data:o})},t.on("open",function(){t._emit("open")}),t.on("close",function(){t._emit("close")}),t.on("message",function(e,o){t._emit("read",e)}),t.on("error",function(e){t._emit("error",event)}),t._on=t.on,t.on=function(e,o){if(!t._onevent[e])for(var n=0;t._delayed[n++];){var r=t._delayed[n];r.name==e&&(r.data?o(r.data):o()),t._delayed.splice(n,1),n--}t._onevent[e]=o},t.write=function(e){t.send(e),t._emit("write",e)},t},r="node";else{if("undefined"==typeof jQuery)return console.error("RemoteSerialPort not available in this environment! Hint: try with Node.js or jQuery.");o=function(e,t){var o={cache:!1,type:e.method||"GET",url:e.url||"#",data:e.body,dataType:"json",error:function(e,o,n){t&&t(e.responseJSON,{statusCode:o},null)},success:function(e,o,n){t&&t(null,{statusCode:o},e)}};e.headers&&(o.headers=e.headers),e.headers&&e.headers["Content-Type"]&&(o.contentType=e.headers["Content-Type"]),console.log(o),jQuery.ajax(o)},n=function(t){if(!e.WebSocket)throw new Error("Browser does not support WebSocket!");var o=new e.WebSocket(t);return o.binaryType="arraybuffer",o._onevent={},o._delayed=[],o._emit=function(e,t){var n=o._onevent[e];n?t?n(t):n():o._delayed.push({name:e,data:t})},o.onopen=function(e){o._emit("open")},o.onclose=function(e){o._emit("close")},o.onmessage=function(e){o._emit("read",new Uint8Array(e.data))},o.onerror=function(e){o._emit("error",e)},o._on=o.on,o.on=function(e,t){if(!o._onevent[e])for(var n=0;o._delayed[n++];){var r=o._delayed[n];r.name==e&&(r.data?t(r.data):t()),o._delayed.splice(n,1),n--}o._onevent[e]=t},o.write=function(e){o.send(e),o._emit("write",e)},o},r="jquery"}t.prototype.list=function(e){this.request({method:"GET",route:"api/v1/port"},e)},t.prototype.status=function(e,t){this.request({method:"GET",route:"api/v1/port/"+e},t)},t.prototype.open=function(e,t,o){this.request({method:"POST",route:"api/v1/port/"+e+"/open",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(t||{})},o)},t.prototype.close=function(e,t){this.request({method:"POST",route:"api/v1/port/"+e+"/close",headers:{Accept:"application/json"}},t)},t.prototype.write=function(e,t,o){this.request({method:"POST",route:"api/v1/port/"+e+"/write",headers:{Accept:"application/json","Content-Type":"application/octet-stream"},body:t},o)},t.prototype.read=function(e,t){this.request({method:"GET",route:"api/v1/port/"+e+"/read",headers:{Accept:"application/json"}},t)},t.prototype.clearReadBuffer=function(e,t){this.request({method:"DELETE",route:"api/v1/port/"+e+"/read",headers:{Accept:"application/json"}},t)},t.prototype.available=function(e,t){this.request({method:"GET",route:"api/v1/port/"+e+"/available",headers:{Accept:"application/json"}},t)},t.prototype.bind=function(e,t){if(!t)throw new Error("Missing serial port name!");if("data"!=e&&"control"!=e)throw new Error("Only 'data' and 'control' line allowed!");var o=n("ws://localhost:5147/api/v1/port/"+t+"/"+e);return"control"==e&&(o.open=function(e){var t={event:"open",data:e};o.send(JSON.stringify(t)),o._emit("write",e)}),o},t.prototype.on=function(e,t){this.events[e]=t},"object"==typeof exports?module.exports=t:"function"==typeof define&&define.amd?define(function(){return t}):e.RemoteSerialPort=t}(this); |
@@ -191,2 +191,3 @@ ;(function(global) { | ||
verbose: false, | ||
mode: "http", | ||
url: null, | ||
@@ -199,19 +200,105 @@ userAgent: null | ||
if (!options.url) { | ||
throw new Error("Missing required 'url' parameter!"); | ||
} | ||
if (!options.userAgent && typeof require === 'function') { | ||
var pkg = require('../package.json'); | ||
options.userAgent = "RemoteSerialPort/" + pkg.version; | ||
} | ||
if (typeof request.defaults === 'function') { | ||
request.defaults({ | ||
headers: { | ||
"Accept": "application/json", | ||
"User-Agent": options.userAgent | ||
//Mode-dependent procedure | ||
switch (self.options.mode) { | ||
case "http": | ||
if (!self.options.url) { | ||
throw new Error("Missing required 'url' parameter!"); | ||
} | ||
}); | ||
} | ||
if (!self.options.userAgent && typeof require === 'function') { | ||
var pkg = require('../package.json'); | ||
self.options.userAgent = "RemoteSerialPort/" + pkg.version; | ||
} | ||
if (typeof request.defaults === 'function') { | ||
request.defaults({ | ||
headers: { | ||
"Accept": "application/json", | ||
"User-Agent": self.options.userAgent | ||
} | ||
}); | ||
} | ||
break; | ||
case "udp": | ||
case "tcp": | ||
if (env != "node") { | ||
throw new Error("TCP and UDP sockets are available only in Node.js"); | ||
} | ||
//Feature not available when using TCP or UDP socket | ||
function unavailable(a, b, c, d) { | ||
throw new Error("Not available in this mode!"); | ||
} | ||
//Initialize the socket mode | ||
var RemoteSerialPortSocket = require('./RemoteSerialPortSocket.js'); | ||
var socket = new RemoteSerialPortSocket(self.options); | ||
self.socket = socket; | ||
self.options = socket.options; | ||
self.events = socket.events; | ||
self.emit = socket.emit; | ||
self.buffer = socket.buffer; | ||
//Remap to make functions compatible | ||
self.list = unavailable; | ||
self.status = unavailable; | ||
self.open = function(port, options, callback) { | ||
var self = this; | ||
if (port && self.options.verbose) { | ||
console.warn("Warning: Serial port name is ignored when using a socket!"); | ||
} | ||
if (options && self.options.verbose) { | ||
console.warn("Warning: Serial port options are ignored when using a socket!"); | ||
} | ||
if (typeof port == 'function' && !options) { | ||
options = port; //Shift argument | ||
} | ||
if (typeof options == 'function' && !callback) { | ||
callback = options; //Shift argument | ||
} | ||
self.socket.open(callback); | ||
}; | ||
self.close = function(port, callback) { | ||
if (typeof port == 'function' && !callback) { | ||
callback = port; //Shift argument | ||
} | ||
self.socket.close(callback); | ||
}; | ||
self.write = function(port, data, callback) { | ||
//Shift arguments | ||
if (port && !data && !callback) { | ||
data = port; | ||
} | ||
if (typeof data == 'function' && !callback) { | ||
data = port; | ||
callback = data; | ||
} | ||
self.socket.write(data, callback); | ||
}; | ||
self.read = function(port, callback) { | ||
if (typeof port == 'function' && !callback) { | ||
callback = port; //Shift argument | ||
} | ||
self.socket.read(callback); | ||
}; | ||
self.clearReadBuffer = function(port, callback) { | ||
if (typeof port == 'function' && !callback) { | ||
callback = port; //Shift argument | ||
} | ||
self.socket.clearReadBuffer(callback); | ||
}; | ||
self.available = function(port, callback) { | ||
if (typeof port == 'function' && !callback) { | ||
callback = port; //Shift argument | ||
} | ||
self.socket.available(callback); | ||
}; | ||
self.bind = unavailable; | ||
self.on = socket.on; | ||
break; | ||
default: | ||
throw new Error("Unknown mode: " + self.options.mode); | ||
} | ||
@@ -245,3 +332,3 @@ //Private event emitter | ||
} | ||
catch (error) { | ||
catch (err) { | ||
data = body; | ||
@@ -256,4 +343,4 @@ } | ||
} | ||
catch (error) { | ||
callback(error); | ||
catch (err) { | ||
callback(err); | ||
} | ||
@@ -260,0 +347,0 @@ } |
{ | ||
"name": "remote-serial-port-client", | ||
"description": "Serial port over Ethernet", | ||
"version": "0.2.0", | ||
"main": "lib/RemoteSerialPort.js", | ||
"description": "Serial port over Ethernet using REST API, WebSocket, TCP or UDP socket", | ||
"version": "0.4.0", | ||
"author": "Papn Kukn", | ||
"license": "MIT", | ||
"main": "index.js", | ||
"scripts": { | ||
@@ -11,8 +13,14 @@ "test": "echo \"Error: no test specified\" && exit 1", | ||
}, | ||
"author": "Papn Kukn", | ||
"license": "MIT", | ||
"dependencies": { | ||
"request": "^2.81.0", | ||
"semaphore": "^1.0.5", | ||
"ws": "^2.3.1" | ||
}, | ||
"repository": { | ||
"type": "git", | ||
"url": "https://github.com/papnkukn/remote-serial-port-client" | ||
}, | ||
"bugs": { | ||
"url": "https://github.com/papnkukn/remote-serial-port-client/issues" | ||
} | ||
} |
@@ -22,2 +22,3 @@ ## Introduction | ||
```javascript | ||
var RemoteSerialPort = require('remote-serial-port-client').RemoteSerialPort; | ||
var serialport = new RemoteSerialPort({ url: "http://localhost:5147/" }); | ||
@@ -33,3 +34,3 @@ serialport.list(function(error, ports) { | ||
```javascript | ||
var RemoteSerialPort = require("remote-serial-port-client"); | ||
var RemoteSerialPort = require('remote-serial-port-client').RemoteSerialPort; | ||
var serialport = new RemoteSerialPort({ url: "http://localhost:5147/" }); | ||
@@ -39,2 +40,19 @@ ... | ||
Using a TCP socket | ||
```javascript | ||
var RemoteSerialPort = require('remote-serial-port-client').RemoteSerialPort; | ||
var tcp = new RemoteSerialPort({ mode: "tcp", host: "127.0.0.1", port: 5147 }); | ||
tcp.open(function(error, result) { | ||
console.log("Connected"); | ||
setTimeout(function() { | ||
tcp.write("AT;\n"); | ||
}, 3000); | ||
}); | ||
tcp.on("read", function(result) { | ||
console.log("read", result.data.toString('ascii')); | ||
}); | ||
``` | ||
Similar for UDP, just change the `mode` to `udp`. | ||
## Use in browser | ||
@@ -55,8 +73,16 @@ | ||
### Constructor | ||
### new RemoteSerialPort(options) | ||
``` | ||
new RemoteSerialPort(options) | ||
``` | ||
Creates a new instance. | ||
Propreties of `options` argument: | ||
Argument name | Type | Description | ||
----------------- | --------- | --------------------------------------------------------------------------------- | ||
verbose | boolean | A value indicating whether to print details to console | ||
mode | string | Mode: http, tcp, udp; default: http | ||
url | string | URL to the the HTTP of the serial port server, mode 'http' only | ||
host | string | Host name or IP address of the serial port server, TCP and UDP only | ||
port | number | Port number of the serial port server, TCP and UDP only | ||
### list(callback) | ||
@@ -63,0 +89,0 @@ |
Network access
Supply chain riskThis module accesses the network.
Found 2 instances in 1 package
No bug tracker
MaintenancePackage does not have a linked bug tracker in package.json.
Found 1 instance in 1 package
No repository
Supply chain riskPackage does not have a linked source code repository. Without this field, a package will have no reference to the location of the source code use to generate the package.
Found 1 instance in 1 package
43605
12
933
1
155
1
3
2
+ Addedsemaphore@^1.0.5
+ Addedsemaphore@1.1.0(transitive)