From cdff624d08a4360506ef4ebc2c5c68e10fe5004c Mon Sep 17 00:00:00 2001 From: Philippe Coval Date: Fri, 28 Sep 2018 09:47:05 +0200 Subject: [PATCH] adc: Add adc support based on sysfs Inpired by IoT.js API, tested on ARTIK710: ``` NODE_PATH=lib node example/adc-example.js 1745 ``` Change-Id: Ie9e006c667cbc39747c49251e41a7b25aa9d4607 Signed-off-by: Philippe Coval --- example/adc-example.js | 47 ++++++++++++++++++++++++++++++++++++++++++ lib/adc.js | 43 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 90 insertions(+) create mode 100644 example/adc-example.js create mode 100644 lib/adc.js diff --git a/example/adc-example.js b/example/adc-example.js new file mode 100644 index 0000000..ff6e8ef --- /dev/null +++ b/example/adc-example.js @@ -0,0 +1,47 @@ +// -*- mode: js; js-indent-level:2; -*- +// Copyright 2018-present Samsung Electronics France and other contributors +//{ +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +//} + +var adc = require('adc'); + +/// ADC0 on ARTIK710 interposer board +var DEFAULT_ADC_DEVICE = '/sys/bus/platform/devices/c0053000.adc/iio:device0/in_voltage0_raw'; + +var main = function(config) +{ + config = config || { + device: DEFAULT_ADC_DEVICE + } + var port = adc.open(config, function(err) { + if (err) { + throw err; + } + console.log(port.readSync()); + }); +} + +module.exports = main; + +if (!module.parent) { + var device = process.argv[2] ? Number(process.argv[2]) : DEFAULT_ADC_DEVICE; + main({device: device}); +} diff --git a/lib/adc.js b/lib/adc.js new file mode 100644 index 0000000..ca662db --- /dev/null +++ b/lib/adc.js @@ -0,0 +1,43 @@ +// -*- mode: js; js-indent-level:2; -*- +// Copyright 2018-present Samsung Electronics France and other contributors +//{ +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +//} + +const fs = require('fs'); + +function Adc() +{ + this.open = function(config, callback) { + this.config = config; + fs.access(config.device, fs.R_OK, callback); + return this; + } + + this.readSync = function(err) { + var contents = fs.readFileSync(this.config.device, 'ascii'); + return contents; + } + + this.closeSync = function() { + } +} + +module.exports = new Adc();