forked from openaps/openaps-menu
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
100 lines (83 loc) · 2.4 KB
/
index.js
File metadata and controls
100 lines (83 loc) · 2.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
// oaps-hid/index.js
/*jslint node: true */
/*jslint esversion: 6 */
'use strict';
const i2c = require('i2c-bus');
const path = require('path');
const pngparse = require('pngparse');
const extend = require('extend');
var i2cBus = i2c.openSync(1);
// setup the display
var displayConfig = require('./config/display.json');
displayConfig.i2cBus = i2cBus;
var display = require('./lib/display/ssd1306')(displayConfig);
// display the logo
pngparse.parseFile('./static/unicorn.png', function(err, image) {
if(err)
throw err
display.clear();
display.oled.drawBitmap(image.data);
});
// setup battery voltage monitor
var voltageConfig = require('./config/voltage.json')
voltageConfig.i2cBus = i2cBus
var voltage = require('./lib/voltage/voltage')(voltageConfig)
// setup socket server for external commands
var batteryConfig = require('./config/battery.json')
var socketServer = require('./lib/socket-server/socket-server')({
voltage: voltage,
battery: batteryConfig
})
socketServer
.on('error', (err) => {
console.log('socket-server error: ', err.reason)
})
.on('warning', (warn) => {
console.log('socket-server warning: ', warn.reason)
})
// setup the menus
var buttonsConfig = require('./config/buttons.json');
var menuConfig = {
menuFile: process.cwd() + path.sep + './config/menus/menu.json', // file path for the menu definition
onChange: showMenu, // method to call when menu changes
menuSettings: {
displayLines: displayConfig.displayLines - 1, // one line is used for menu title
moreUpLabel: " ^ ^ ^",
moreDownLabel: " v v v"
}
};
var hidMenu = require('./lib/hid-menu/hid-menu')(buttonsConfig, menuConfig);
// configure menu events
hidMenu
.on('nothing', function () {
})
.on('showvoltage', function () {
voltage()
.then(function (v) {
display.clear();
display.write('Voltage: ' + v);
})
.catch(function (e) {
console.log(e.toString());
});
})
.on('menu_changed', function () {
showMenu(hidMenu);
})
.on('showoutput', function (err, stdout, stderr) {
display.clear();
display.write(stdout);
});
// display the current menu on the display
function showMenu(menu) {
display.clear();
var text = '';
var p = menu.getParentSelect();
text += p ? '[' + p.label + ']\n' : '';
var c = menu.getCurrentSelect();
menu.getActiveMenu().forEach(function (m) {
text += (m.selected ? '>' : ' ') + m.label + '\n';
});
// console.log(text);
display.write(text);
}