API §

NoomioJS Version: 0.3.0 (2020-01-31)

Duktape Version: 2.4.0 (2020-01-31)

Baseline TX3.0 (2020-01-31)

Document scope §

The NoomioJS consist of an integrated ECMAScript engine and an API that is fun to use, documented and fairly quickly to realise a simple application.

What has been implemented §

To get the ECMAScript engine running on a module a number of tasks were required to be taken and a number of code to be implemented. The initial step was to compile the ECMAScript engine with the minimal options as the targets have limited resources (See Compile for further details).

Function Description
Dynamic Allocation malloc,calloc,realloc,free
Serial Output retarget for serial output
Minimal printf printf (without %f suppport)
Event Loop The event loop to allow event based programming
Peripherals A number of peripherals have been integrated using Duktape C API (See API).

What's not implemented §

Whatever is available from Qualcomm QAPI and ThreadX in C programming but isn't exposed on the API page (See API).

Module Loading §

Module loading with require() is not part of the standard JavaScript API and used by NodeJS for module loading (See NodeJS Modules).

To load your module, place the file in /datatx and use require().

app.js §

var pig = require('pig');
print(pig.who);

pig.js §

module.exports = { who: 'pig me!' };

Event Loop §

The ECMAScript specification aka JavaScript only describes the language standard and not how to handle events. For example all web browsers implement the event loop using native code; this is also done with NoomioJS using ThreadX and QAPI.

Function Number
Concurent Timers 6

Compilation §

This section summarises some of the options set when compiling Duktape. These options will limit Javascript functionality and most non important options have been disabled. Try and consult the low_memory.yaml file for all the options enabled/disabled.

Duktape Configuration §

Duktape has been compiled with the folowing options set below.

python.exe tools/configure.py 
--platform Linux
--compiler clang
--architecture arm32
--option-file ./tmp/output/low_memory.yaml
--rom-support

Low Memory Options §

Please see low_memory.yaml for low memory options used when building the ECMAScript engine.

API calls by tag §

0.1.0 §

DigitalIn §

DigitalInOut §

DigitalOut §

InterruptIn §

at §

clearInterval §

i2c §

print §

setInterval §

setTimeout §

.DigitalIn() 0.1.0 DigitalIn §

Prototype §

Object DigitalIn(pin, mode);
Object DigitalIn(pin);

Properties §

PIN4
PIN5
PIN6
PIN7
PIN18
PIN19
PIN22
PIN23
PIN26
PIN27
PIN28
PIN40
PIN41
PIN64
PullUp
PullDown
PullNone
OpenDrain

Functions §

boolean read();
release();

Summary §

Digital input initialisation

When a mode isn't specified then the keeper mode is used (previously set mode).

Example §

var pin4  = DigitalIn(PIN4, PullUp);
var state = pin4.read();

.DigitalInOut() 0.1.0 DigitalInOut §

Prototype §

Object DigitalInOut(pin, mode);
Object DigitalInOut(pin);

Properties §

PIN4
PIN5
PIN6
PIN7
PIN18
PIN19
PIN22
PIN23
PIN26
PIN27
PIN28
PIN40
PIN41
PIN64
PullUp
PullDown
PullNone
OpenDrain

Functions §

boolean read();
write(value);
number output();
number input();
release();

Summary §

Digital input output initialisation

When a mode isn't specified then the keeper mode is used (previously set mode).

Use when you want to switch from an input to output or vice versa

Example §

var pin4  = DigitalInOut(PIN4, PullUp);
pin4.output();
pin4.write(true);
pin4.input();
var state = pin4.read();

.DigitalOut() 0.1.0 DigitalOut §

Prototype §

Object DigitalOut(pin, mode);
Object DigitalOut(pin);

Properties §

PIN4
PIN5
PIN6
PIN7
PIN18
PIN19
PIN22
PIN23
PIN26
PIN27
PIN28
PIN40
PIN41
PIN64
PullUp
PullDown
PullNone
OpenDrain

Functions §

write(value);
release();

Summary §

Digital output initialisation

When a mode isn't specified then the keeper mode is used (previously set mode).

Example §

var pin4  = DigitalOut(PIN4, PullUp);
pin4.write(true);

.InterruptIn() 0.1.0 InterruptIn §

Prototype §

Object InterruptIn(pin, mode);
Object InterruptIn(pin);

Properties §

PIN4
PIN5
PIN6
PIN7
PIN18
PIN19
PIN22
PIN23
PIN26
PIN27
PIN28
PIN40
PIN41
PIN64
PullUp
PullDown
PullNone
OpenDrain

Functions §

on(event,callback);
trigger();
enable();
disable();
deactivate();

Events §

fall
rise
high
low
dual

Summary §

Interrupt initialisation

When a mode isn't specified then the keeper mode is used (previously set mode).

Example §

var sw1 = InterruptIn(PIN4); 

sw1.on("rise",function(){ 
  print('rise!');  
});  

sw1.trigger(); 

.at() 0.1.0 at §

Prototype §

at(stream);

Properties §

PIPE0
PIPE1

Functions §

on(event,callback);
write(string);

Events §

open
close
data
error

Summary §

Write to the AT port directly.

Example §

var intervalId; 
const port = at(PIPE0); 

port.on('open',function(){
  intervalId = setInterval(function () { 
    port.write('ATE0\\r\\n');
  }, 1000); 
}); 

port.on('data',function(data){ 
  print(data); 
});

.clearInterval() 0.1.0 clearInterval §

Prototype §

clearInterval(id);

Summary §

Stop a periodic timer created with setInterval.

Example §

var id;

id = setInterval(function () {
  clearInterval(id);
}, 1000);

See also §

.i2c() 0.1.0 i2c §

Prototype §

i2c(channel);

Properties §

I2C1
I2C2

Functions §

on(event,callback);
start();
stop();
frequency(khz);  
transfer(address,transmit,receive);

Function Details §

on(event,callback);
  Parameters:
    {string} event
      See available events listed at Events
    {function} callback
      Function callback attached to specific event

frequency(khz);  
  Parameters:
    {number} khz
      Clock frequency in kHz

transfer(address,transmit,receive);
  Parameters:
    {number} address
      Slave address
    {Uint8Array} transmit
      Transmit data array
    Uint8Array receive
      Receive data array. Allocate the expected receive size from the slave

Events §

open
close
data
error

Summary §

I2C communication.

Example §

var intervalId; 
var reg = Uint8Array.allocPlain(1); 
var recvd = Uint8Array.allocPlain(2); 

const sensor = i2c(I2C1);

reg[0] = 0x06; 

sensor.frequency(150);

sensor.on('open',function(){ 
  
  intervalId = setInterval(function () { 
    sensor.transfer(0x18,reg,recvd); 
  }, 1000); 

  sensor.on('data',function(data){ 
    print(data[0]); 
    print(data[1]); 
  }); 

}); 

.print() 0.1.0 print §

Prototype §

print(arg1, arg1, ...)

Summary §

Write to stdout on serial port #2

Example §

print("Hello from Javascript!");

.setInterval() 0.1.0 setInterval §

Prototype §

setInterval(callback,timeout);

Function Details §

{function} callback
      Function callback attached to specific event
{number} timeout
      Timeout in milliseconds

Summary §

Periodic timer

Example §

var count = 0;
var intervalId;

dout = DigitalOut(PIN4); 
var val = false;

intervalId = setInterval(function () {

    print('interval', ++count);
    
    val = !val;
    dout.write(val);

    if (count >= 25) {
      clearInterval(intervalId);
    }

}, 1000);

.setTimeout() 0.1.0 setTimeout §

Prototype §

setTimeout(callback,timeout);

Function Details §

{function} callback
      Function callback attached to specific event
{number} timeout
      Timeout in milliseconds

Summary §

One shot timer

Example §

setTimeout(function cb() {
   print('one shot timer, called after 10 seconds');
}, 10000);

See also §