Project

General

Profile

/*
Bitmask example script
*/
var a = new_axis(get_next_serial(0)); // take first found axis
var gets = a.get_status(); // read status once and reuse it

var gpio = gets.GPIOFlags;
var left = STATE_LEFT_EDGE;
var right = STATE_RIGHT_EDGE;
var mask = left | right;
var result = gpio & mask;
log( to_binary(left) + " = left limit switch flag" );
log( to_binary(right) + " = right limit switch flag" );
log( to_binary(mask) + " = OR operation on flags gives the mask" );
log( to_binary(gpio) + " = gpio state" );
log( to_binary(result) + " = AND operation on state and mask gives result" );
if ( result ) {
log("At least one limit switch is on");
} else {
log("Both limit switches are off");
}

// Binary representation function
function to_binary(i) {
bits = 32;
x = i >>> 0; // coerce to unsigned in case we need to print negative ints
str = x.toString(2); // the binary representation string
return (repeat("0", bits) + str).slice (-bits); // pad with zeroes and return
}

// String repeat function
function repeat(str, times) {
var result="";
var pattern=str;
while (times > 0) {
if (times&1) {
result+=pattern;
}
times>>=1;
pattern+=pattern;
}
return result;
}