nixfilter-uartrfid
Version:
Filters for decoding the data sent by certain RFID readers connected via UART
44 lines (37 loc) • 2.08 kB
text/coffeescript
'use strict'
get_data_byte_at = (data_string, index) ->
parseInt(data_string.slice((index * 2), ((index * 2) + 2)), 0x10)
get_decimal = (data_string, start_index, stop_index, number_of_digits) ->
('0'.repeat(number_of_digits) + parseInt(data_string.slice(start_index, stop_index), 0x10)).slice(-number_of_digits)
# The various output formats
formats =
'8H': (data_string) -> data_string.slice(2, 10)
'10H>13D': (data_string) -> get_decimal(data_string, 0, 10, 13)
'10H>14D': (data_string) -> get_decimal(data_string, 0, 10, 14)
'10H>10D': (data_string) -> get_decimal(data_string, 0, 10, 10)
'08H>10D': (data_string) -> get_decimal(data_string, 2, 10, 10)
'08H>10D(int)': (data_string) -> parseInt(get_decimal(data_string, 2, 10, 10))
'08H>55D': (data_string) -> "#{get_decimal(data_string, 2, 6, 5)},#{get_decimal(data_string, 6, 10, 5)}"
'06H>08D': (data_string) -> get_decimal(data_string, 4, 10, 8)
'2.4H>3.5D(A)': (data_string) -> "#{get_decimal(data_string, 0, 2, 3)},#{get_decimal(data_string, 6, 10, 5)}"
'2.4H>3.5D(B)': (data_string) -> "#{get_decimal(data_string, 2, 4, 3)},#{get_decimal(data_string, 6, 10, 5)}"
'2.4H>3.5D(C)': (data_string) -> "#{get_decimal(data_string, 4, 6, 3)},#{get_decimal(data_string, 6, 10, 5)}"
'10H': (data_string) -> data_string.slice(0, 10)
'2-8H': (data_string) -> "#{data_string.slice(0, 2)}-#{data_string.slice(2, 10)}"
'Revision': (data_string) -> get_decimal(data_string, 0, 1, 2)
'Vendor': (data_string) -> 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 = (object, map_function) ->
mapped_object = {}
for key of object
mapped_object[key] = map_function(object[key], key)
mapped_object
# Parse a valid data string, returning an object with all available formats
parse_data = (data_string) ->
map_object formats, (format_function) ->
format_function(data_string)
# What this module exports
module.exports =
formats: formats
get_data_byte_at: get_data_byte_at
parse_data: parse_data