nixfilter-uartrfid
Version:
Filters for decoding the data sent by certain RFID readers connected via UART
52 lines (42 loc) • 1.4 kB
text/coffeescript
`#!/usr/bin/env node
'use strict'`
# Require the "nixfilter" module
nixfilter = require('nixfilter')
# Import/Require the local "utils" module
utils = require('./utils')
# Define the filter and register it on the module
nixfilter.filter module,
description: 'Parse and output the data sent by certain EM4100-125kHz-RFID-Readers connected via UART 9600 8N1 (e.g. RDM630, RDM6300)'
input_reader: nixfilter.reader.byte()
add_arguments: (argument_parser) ->
argument_parser.addArgument ['--format', '-f'],
choices: Object.keys(utils.formats)
defaultValue: '08H>10D'
help: 'The output format (default: "08H>10D")'
return
setup: ->
= 'read_start'
on_input: (input_byte) ->
switch
when 'read_start'
if (input_byte is 0x02)
= ''
= 'read_data'
when 'read_data'
input_character = String.fromCharCode(input_byte)
if (input_character in '0123456789ABCDEF')
+= input_character
if (.length is 12)
= 'read_stop'
else
= 'read_start'
when 'read_stop'
if (input_byte is 0x03)
checksum = 0
for index in [0...5]
checksum ^= utils.get_data_byte_at(, index)
if (checksum is utils.get_data_byte_at(, 5))
data = utils.parse_data()
= 'read_start'
return