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();