aboutsummaryrefslogtreecommitdiff
path: root/tests/test-a101-pins.js
blob: 969f2649e5ca77bf497a9fc4a70eadba49347900 (plain)
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
// Copyright (c) 2016, Intel Corporation.

// Test Arduino101Pins API

var pins = require('arduino101_pins');
var gpio = require('gpio');
var pwm = require('pwm');
var aio = require('aio');

var total = 0;
var passed = 0;

function assert(actual, description) {
    total += 1;

    var label = "\033[1m\033[31mFAIL\033[0m";
    if (actual === true) {
        passed += 1;
        label = "\033[1m\033[32mPASS\033[0m";
    }

    console.log(label + " - " + description);
}

function expectThrow(description, func) {
    var threw = false;
    try {
        func();
    }
    catch (err) {
        threw = true;
    }
    assert(threw, description);
}

// Check pins defined and typeof Number
function checkDefined(name) {
    assert(name in pins && typeof pins[name] == "number",
          "Arduino101Pins: " + name + " defined");
}

// GPIO Pins
var GPIOPins = ["IO2", "IO3", "IO4", "IO5",
                "IO6", "IO7", "IO8", "IO9",
                "IO10", "IO11", "IO12", "IO13"];
for(var i = 0; i < GPIOPins.length; i++) {
    var pinName = GPIOPins[i];

    checkDefined(pinName);

    // IO6 and IO9 are defined but unusable as GPIOs currently
    if (pinName == "IO6" || pinName == "IO9") continue;

    var pin = gpio.open({ pin: pins[pinName] });
    var pinValue = pin.read();
    assert(typeof pinValue == "boolean",
           "Arduino101Pins: " + pinName + " input");

    pin.write(!pinValue);
    if (pinName == "IO3" || pinName == "IO5") {
        // IO3 and IO5 can be used as GPIO inputs but not outputs currently
        assert(pin.read() == pinValue,
              "Arduino101Pins: " + pinName + " output");
    } else {
        assert(pin.read() != pinValue,
              "Arduino101Pins: " + pinName + " output");
    }
}

// LEDs
var LEDs = [["LED0", false],
            ["LED1", true ],
            ["LED2", true ]];
for(var i = 0; i < LEDs.length; i++) {
    var pinName = LEDs[i][0];

    checkDefined(pinName);

    // activeLow
    var lowFlag = LEDs[i][1];
    var pin = gpio.open({ pin: pins[pinName], activeLow: lowFlag });
    var pinValue = pin.read();
    var lowStr = lowFlag ? "high" : "low";
    assert(pinValue,
          "Arduino101Pins: " + pinName + " active " + lowStr);

    pin.write(!pinValue)
    assert(pin.read() != pinValue,
          "Arduino101Pins: " + pinName + " output");

    if (pinName == "LED0") {
        pinValue = pin.read();
        var io13 = gpio.open({ pin: pins.IO13, activeLow: lowFlag });
        io13.write(!pinValue);
        assert(pin.read() != pinValue,
            "Arduino101Pins: " + pinName + " displays current state of IO13");
    }
}

// PWM Pins
var PWMPins = ["PWM0", "PWM1", "PWM2", "PWM3"];
for(var i = 0; i < PWMPins.length; i++) {
    var pinName = PWMPins[i];

    checkDefined(pinName);

    var pin = pwm.open({channel: pins[pinName]});
    assert(pin != null && typeof pin == "object",
           "Arduino101Pins: " + pinName + " open");
}

// AIO Pins
var AIOPins = ["A0", "A1", "A2", "A3", "A4", "A5"];
for(var i = 0; i < AIOPins.length; i++) {
    var pinName = AIOPins[i];

    checkDefined(pinName);

    var pin = aio.open({ device: 0, pin: pins[pinName] });
    var pinValue = pin.read();
    assert(pinValue >= 0 && pinValue <= 4095,
           "Arduino101Pins: " + pinName + " digital value");
}

console.log("TOTAL: " + passed + " of " + total + " passed");