nixfilter-uartrfid
Version:
Filters for decoding the data sent by certain RFID readers connected via UART
86 lines (78 loc) • 2.72 kB
JavaScript
;
var formats, get_data_byte_at, get_decimal, map_object, parse_data;
get_data_byte_at = function(data_string, index) {
return parseInt(data_string.slice(index * 2, (index * 2) + 2), 0x10);
};
get_decimal = function(data_string, start_index, stop_index, number_of_digits) {
return ('0'.repeat(number_of_digits) + parseInt(data_string.slice(start_index, stop_index), 0x10)).slice(-number_of_digits);
};
// The various output formats
formats = {
'8H': function(data_string) {
return data_string.slice(2, 10);
},
'10H>13D': function(data_string) {
return get_decimal(data_string, 0, 10, 13);
},
'10H>14D': function(data_string) {
return get_decimal(data_string, 0, 10, 14);
},
'10H>10D': function(data_string) {
return get_decimal(data_string, 0, 10, 10);
},
'08H>10D': function(data_string) {
return get_decimal(data_string, 2, 10, 10);
},
'08H>10D(int)': function(data_string) {
return parseInt(get_decimal(data_string, 2, 10, 10));
},
'08H>55D': function(data_string) {
return `${get_decimal(data_string, 2, 6, 5)},${get_decimal(data_string, 6, 10, 5)}`;
},
'06H>08D': function(data_string) {
return get_decimal(data_string, 4, 10, 8);
},
'2.4H>3.5D(A)': function(data_string) {
return `${get_decimal(data_string, 0, 2, 3)},${get_decimal(data_string, 6, 10, 5)}`;
},
'2.4H>3.5D(B)': function(data_string) {
return `${get_decimal(data_string, 2, 4, 3)},${get_decimal(data_string, 6, 10, 5)}`;
},
'2.4H>3.5D(C)': function(data_string) {
return `${get_decimal(data_string, 4, 6, 3)},${get_decimal(data_string, 6, 10, 5)}`;
},
'10H': function(data_string) {
return data_string.slice(0, 10);
},
'2-8H': function(data_string) {
return `${data_string.slice(0, 2)}-${data_string.slice(2, 10)}`;
},
'Revision': function(data_string) {
return get_decimal(data_string, 0, 1, 2);
},
'Vendor': function(data_string) {
return get_decimal(data_string, 1, 2, 2);
}
};
// Map the object <object> according to map function <map_function> that will be called with (<value_to_map>, <key>) arguments
map_object = function(object, map_function) {
var key, mapped_object;
mapped_object = {};
for (key in object) {
mapped_object[key] = map_function(object[key], key);
}
return mapped_object;
};
// Parse a valid data string, returning an object with all available formats
parse_data = function(data_string) {
return map_object(formats, function(format_function) {
return format_function(data_string);
});
};
// What this module exports
module.exports = {
formats: formats,
get_data_byte_at: get_data_byte_at,
parse_data: parse_data
};
//# sourceMappingURL=utils.js.map