”2016-07-12”

This commit is contained in:
Martin Donnelly 2016-07-12 12:12:37 +01:00
parent 450cc64b0a
commit 5a99439cc4
11 changed files with 583 additions and 0 deletions

BIN
.DS_Store vendored

Binary file not shown.

View File

@ -0,0 +1,32 @@
; http://editorconfig.org
root = true
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
indent_style = space
indent_size = 2
[*.txt]
insert_final_newline = false
trim_trailing_whitespace = false
[*.py]
indent_size = 4
[*.m]
indent_size = 4
[Makefile]
indent_style = tab
indent_size = 8
[*.{js,json}]
indent_style = space
indent_size = 2
[*.md]
trim_trailing_whitespace = false

79
bluetest/bluetest/.gitignore vendored Normal file
View File

@ -0,0 +1,79 @@
# Created by .ignore support plugin (hsz.mobi)
### JetBrains template
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio
*.iml
/dist
## Directory-based project format:
.idea/
# if you remove the above rule, at least ignore the following:
# User-specific stuff:
# .idea/workspace.xml
# .idea/tasks.xml
# .idea/dictionaries
# Sensitive or high-churn files:
# .idea/dataSources.ids
# .idea/dataSources.xml
# .idea/sqlDataSources.xml
# .idea/dynamic.xml
# .idea/uiDesigner.xml
# Gradle:
# .idea/gradle.xml
# .idea/libraries
# Mongo Explorer plugin:
# .idea/mongoSettings.xml
## File-based project format:
*.ipr
*.iws
## Plugin-specific files:
# IntelliJ
/out/
# mpeltonen/sbt-idea plugin
.idea_modules/
# JIRA plugin
atlassian-ide-plugin.xml
# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
### Node template
# Logs
logs
*.log
npm-debug.log*
# Runtime data
pids
*.pid
*.seed
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# node-waf configuration
.lock-wscript
# Compiled binary addons (http://nodejs.org/api/addons.html)
build/Release
# Dependency directory
# https://docs.npmjs.com/misc/faq#should-i-check-my-node-modules-folder-into-git
node_modules

46
bluetest/bluetest/.jscsrc Normal file
View File

@ -0,0 +1,46 @@
{
"disallowKeywords": ["with"],
"disallowKeywordsOnNewLine": ["else"],
"disallowMixedSpacesAndTabs": true,
"disallowMultipleVarDecl": "exceptUndefined",
"disallowNewlineBeforeBlockStatements": true,
"disallowQuotedKeysInObjects": true,
"disallowSpaceAfterObjectKeys": true,
"disallowSpaceAfterPrefixUnaryOperators": true,
"disallowSpacesInFunction": {
"beforeOpeningRoundBrace": true
},
"disallowSpacesInsideParentheses": true,
"disallowTrailingWhitespace": true,
"maximumLineLength": 120,
"requireCamelCaseOrUpperCaseIdentifiers": false,
"requireCapitalizedComments": true,
"requireCapitalizedConstructors": true,
"requireCurlyBraces": true,
"requireSpaceAfterKeywords": [
"if",
"else",
"for",
"while",
"do",
"switch",
"case",
"return",
"try",
"catch",
"typeof"
],
"requireSpaceAfterLineComment": true,
"requireSpaceAfterBinaryOperators": true,
"requireSpaceBeforeBinaryOperators": true,
"requireSpaceBeforeBlockStatements": true,
"requireSpaceBeforeObjectValues": true,
"requireSpacesInFunction": {
"beforeOpeningCurlyBrace": true
},
"requireTrailingComma": false,
"requireEarlyReturn": false,
"validateIndentation": 2,
"validateLineBreaks": "LF",
"validateQuoteMarks": "'"
}

View File

@ -0,0 +1,41 @@
{
"predef": [
"Promise"
],
"node": true,
"browser": false,
"boss": true,
"curly": true,
"debug": false,
"devel": true,
"eqeqeq": true,
"evil": true,
"forin": false,
"immed": false,
"laxbreak": false,
"newcap": true,
"noarg": true,
"noempty": false,
"nonew": false,
"nomen": false,
"onevar": false,
"plusplus": false,
"regexp": false,
"undef": true,
"sub": true,
"strict": false,
"white": false,
"eqnull": true,
"esnext": true,
"unused": true,
"supernew": true,
"globals": {
"$": false,
"EJS": false,
"MicroEvent": false,
"express":false,
"http":false,
"request":false,
"cheerio":false
}
}

View File

@ -0,0 +1,12 @@
#!/usr/bin/env node
/*
var isEs2015;
try {
isEs2015 = new Function('() => {}');
} catch (e) {
isEs2015 = false;
}
isEs2015 ? require('../lib/cli') : require('../lib-es5/cli');*/
require('../lib/cli')

View File

@ -0,0 +1,4 @@
var spawn = require('child_process').spawn;
var EventEmitter = require('events').EventEmitter;
var util = require('util');

View File

@ -0,0 +1,29 @@
#!/usr/bin/env node
'use strict';
const meow = require('meow');
const bluetest = require('./index');
const cli = meow({
help: `
Usage
$ bluetest <MAC>
Mac
Mac address of bluetooth device.
`},
{
default: {
mac: process.cwd()
}
});
const options = {
mac:cli.input[0]
};
bluetest(options);

View File

@ -0,0 +1,159 @@
/**
*
* User: Martin Donnelly
* Date: 2016-07-06
* Time: 13:37
*
*/
var cp = require('child_process');
var spawn = cp.spawn;
var EventEmitter = require('events');
var busEmitter = new EventEmitter();
var util = require('util');
var logger = require('log4js').getLogger();
var bluetest;
bluetest = module.exports = function(options) {
'use strict';
var core = {
mac: '', gatt: null
};
core.processLuxData = function(data) {
console.log('+ processLuxData');
var m, e, lux;
var p = data.indexOf(10);
var _data = data.toString('ascii',0, p - 1);
// Var _data = data.toString('ascii');
// logger.debug('buffer:', data);
// logger.warn('ascii:', _data);
logger.debug('>--',_data);
var wH = _data.slice(-5).split(' ');
var wB = [];
wB[0] = parseInt(wH[0], 16);
wB[1] = parseInt(wH[1], 16);
logger.debug(wH);
logger.debug(wB);
var word = (wB[0] << 16) + wB[1];
var raw = new Uint16Array(1);
raw[0] = word;
logger.debug(word);
m = raw & 0x0FFF;
e = (raw & 0xF000) >> 12;
lux = m * (0.01 * Math.pow(2.0, e));
logger.info('Lux: ', lux);
console.log('- processLuxData');
};
core.enableLuxNotification = function() {
logger.info('Enable Luxomity Notifications...');
core.gatt.stdin.write('char-write-req 0x0042 0100\n');
core.gatt.stdin.write('char-write-req 0x0044 01\n');
};
core.gattConnected = function() {
logger.debug('Gatt connected!!!!!');
core.enableLuxNotification();
// Core.gatt.stdin.write('primary\n');
};
core.connectGatt = function() {
logger.info('trying to connect using gatttool');
core.gatt = spawn('gatttool', ['-b', core.mac, '-I']);
var cStr;
core.gatt.on('error', function(err) {
logger.error(err);
});
core.gatt.on('exit', function(code) {
logger.debug('gatt exit code', code);
});
core.gatt.on('message', function(m) {
logger.info('message:', m);
});
core.gatt.stdout.on('data', (data) => {
// Logger.info(`stdout: ${data}`);
if (data.indexOf('Connection successful') > -1) {
busEmitter.emit('connected');
}
if (data.indexOf('Notification handle = 0x0041') > -1) {
busEmitter.emit('processLux', data);
}
});
core.gatt.stderr.on('data', (data) => {
logger.info(`stderr: ${data}`);
});
core.gatt.on('close', (code) => {
logger.warn(`child process exited with code ${code}`);
});
logger.info('Trying to connect to ', core.mac);
cStr = 'connect\n';
core.gatt.stdin.write(cStr);
};
core.init = function(options) {
var tool_path = '';
var hcidev = 'hvi0';
if (typeof options.mac !== 'undefined') {
core.mac = options.mac;
} else {
console.log('You need to pass a mac address.');
process.exit(1);
}
logger.info('Working with:', options);
var hciconfig = spawn(tool_path + 'hciconfig', [hcidev, 'up']);
hciconfig.on('exit', function(code) {
logger.debug('code', code);
if (code !== 0) {
// Could not get the device UP, maybe due to permissions, should run with sudo.
busEmitter.emit('error',
'hciconfig: failed to bring up device ' + hcidev + '. Try running with sudo.');
return;
} else {
core.connectGatt();
}
});
};
busEmitter.on('connected', core.gattConnected);
busEmitter.on('processLux', core.processLuxData);
core.init(options);
};
util.inherits(bluetest, EventEmitter);

View File

@ -0,0 +1,163 @@
/**
*
* User: Martin Donnelly
* Date: 2016-07-06
* Time: 13:37
*
*/
var cp = require('child_process');
var spawn = cp.spawn;
var fork = cp.fork;
var spawnP = require('child-process-promise').spawn;
var EventEmitter = require('events');
var busEmitter = new EventEmitter();
var util = require('util');
var logger = require('log4js').getLogger();
var bluetest;
bluetest = module.exports = function(options) {
'use strict';
var core = {
mac: '', gatt: null
};
core.processLuxData = function(data) {
console.log('+ processLuxData');
var m, e, lux;
var p = data.indexOf(10);
var l = data.length - (p + 1);
var _data = data.toString('ascii',0, p-1);
//var _data = data.toString('ascii');
//logger.debug('buffer:', data);
//logger.warn('ascii:', _data);
logger.debug('>--',_data);
var wH = _data.slice(-5).split(' ');
var wB = [];
wB[0] = parseInt(wH[0], 16);
wB[1] = parseInt(wH[1], 16);
logger.debug(wH);
logger.debug(wB);
var word = (wB[0] << 16) + wB[1];
var raw = new Uint16Array(1);
raw[0] = word;
logger.debug(word);
m = raw & 0x0FFF;
e = (raw & 0xF000) >> 12;
lux = m * (0.01 * Math.pow(2.0, e));
logger.info('Lux: ', lux);
console.log('- processLuxData');
};
core.enableLuxNotification = function() {
logger.info('Enable Luxomity Notifications...');
core.gatt.stdin.write('char-write-req 0x0042 0100\n');
core.gatt.stdin.write('char-write-req 0x0044 01\n');
};
core.gattConnected = function() {
logger.debug('Gatt connected!!!!!');
core.enableLuxNotification();
// Core.gatt.stdin.write('primary\n');
};
core.connectGatt = function() {
logger.info('trying to connect using gatttool');
core.gatt = spawn('gatttool', ['-I']);
var cStr;
core.gatt.on('error', function(err) {
logger.error(err);
});
core.gatt.on('exit', function(code) {
logger.debug('gatt exit code', code);
});
core.gatt.on('message', function(m) {
logger.info('message:', m);
});
core.gatt.stdout.on('data', (data) => {
//logger.info(`stdout: ${data}`);
if (data.indexOf('Connection successful') > -1) {
busEmitter.emit('connected');
}
if (data.indexOf('Notification handle = 0x0041') > -1) {
busEmitter.emit('processLux', data);
}
});
core.gatt.stderr.on('data', (data) => {
logger.info(`stderr: ${data}`);
});
core.gatt.on('close', (code) => {
logger.warn(`child process exited with code ${code}`);
});
logger.info('Trying to connect to ', core.mac);
cStr = 'connect ' + core.mac + '\n';
core.gatt.stdin.write(cStr);
};
core.init = function(options) {
var tool_path = '';
var hcidev = 'hvi0';
if (typeof options.mac !== 'undefined') {
core.mac = options.mac;
} else {
console.log('You need to pass a mac address.');
process.exit(1);
}
logger.info('Working with:', options);
var hciconfig = spawn(tool_path + 'hciconfig', [hcidev, 'up']);
hciconfig.on('exit', function(code) {
logger.debug('code', code);
if (code !== 0) {
// Could not get the device UP, maybe due to permissions, should run with sudo.
busEmitter.emit('error',
'hciconfig: failed to bring up device ' + hcidev + '. Try running with sudo.');
return;
} else {
core.connectGatt();
}
});
};
busEmitter.on('connected', core.gattConnected);
busEmitter.on('processLux', core.processLuxData);
core.init(options);
};
util.inherits(bluetest, EventEmitter);

View File

@ -0,0 +1,18 @@
{
"name": "bluetest",
"version": "1.0.0",
"description": "",
"main": "lib",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "Martin Donnelly <martind2000@gmail.com>",
"license": "ISC",
"devDependencies": {
"log4js": "^0.6.37",
"meow": "^3.7.0"
},
"bin": {
"bluetest": "bin/cli.js"
}
}