From 1b9993d576687b0bc9477dfc9945e137391155a1 Mon Sep 17 00:00:00 2001 From: Will Bradley Date: Sat, 6 Jul 2019 19:01:48 -0700 Subject: [PATCH] expand on api structure --- api.rb | 163 ++++++-- block diagram.svg | 931 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 1054 insertions(+), 40 deletions(-) create mode 100644 block diagram.svg diff --git a/api.rb b/api.rb index fa95f5c..382f036 100644 --- a/api.rb +++ b/api.rb @@ -1,61 +1,140 @@ require 'rubyserial' +# +# User Configs +# + # 9600 baud, 8 data bits, and no parity -serial = Serial.new '/dev/ttyUSB0', 9600, 8, :none +device = '/dev/ttyUSB0' +baud = 9600 +bits = 8 +parity = :none +@serial_line_ending = "\r" + +# +# Setup +# + +@serial = Serial.new device, baud, bits, parity @buffer = Queue.new -def console_in(serial) +# +# Convenience function +# + +def serial_writeln(str) + @serial.write(str+@serial_line_ending) +end + +# +# Board interface functions +# + +def b_date() + serial_writeln("d") +end +def b_show(num) + serial_writeln("s #{num}") +end +def b_modify(num, mask, tag) + serial_writeln("m #{num} #{mask} #{tag}") +end +def b_all() + serial_writeln("a") +end +def b_remove(num) + serial_writeln("r #{num}") +end +def b_open(num) + serial_writeln("o #{num}") +end +def b_unlock() + serial_writeln("u") +end +def b_lock() + serial_writeln("l") +end +def b_1() + serial_writeln("1") +end +def b_2() + serial_writeln("2") +end +def b_3() + serial_writeln("3") +end +def b_9() + serial_writeln("9") +end +def b_time(sec,min,hr,day,date,mon,yr) + serial_writeln("t #{sec} #{min} #{hr} #{day} #{date} #{mon} #{yr}") +end +def b_enable(num) + serial_writeln("e #{num}") +end +def b_hardware(num) + serial_writeln("h #{num}") +end +def b_help() + serial_writeln("?") +end + +# +# Thread functions +# + +def console_in() run = true while run # Get console input cline = gets unless cline.nil? case cline - when /^d/ - serial.write("d\r") - when /^s (\d+)/ - serial.write("s #{$1}\r") - when /^m (\d+) ([\dA-F]+) (\d+)/ - serial.write("m #{$1} #{$2} #{$3}\r") - when /^a/ - serial.write("a\r") - when /^r (\d+)/ - serial.write("r #{$1}\r") - when /^o (\d+)/ - serial.write("o #{$1}\r") - when /^u/ - serial.write("u\r") - when /^l/ - serial.write("l\r") - when /^1/ - serial.write("1\r") - when /^2/ - serial.write("2\r") - when /^3/ - serial.write("3\r") - when /^9/ - serial.write("9\r") - when /^t (\d+) (\d+) (\d+) (\d+) (\d+) (\d+) (\d+)/ - serial.write("t #{$1} #{$2} #{$3} #{$4} #{$5} #{$6} #{$7}\r") - when /^e (\d+)/ - serial.write("e #{$1}\r") - when /^h (\d+)/ - serial.write("h #{$1}\r") - when /^?/ - serial.write("?\r") + when /^d/ + b_date() + when /^s (\d+)/ + b_show($1) + when /^m (\d+) (\d+) (\d+)/ + b_modify($1,$2,$3) + when /^a/ + b_all() + when /^r (\d+)/ + b_remove($1) + when /^o (\d+)/ + b_open($1) + when /^u/ + b_unlock() + when /^l/ + b_lock() + when /^1/ + b_1() + when /^2/ + b_2() + when /^3/ + b_3() + when /^9/ + b_9() + when /^t (\d+) (\d+) (\d+) (\d+) (\d+) (\d+) (\d+)/ + b_time($1,$2,$3,$4,$5,$6,$7) + when /^e (\d+)/ + b_enable($1) + when /^h (\d+)/ + b_hardware($1) + when /^?/ + b_help() end end end end -def serial_in(serial) +def serial_in() run = true readbuffer = "" while run # begin # Get serial input char by char - sdata = serial.read(1) + sdata = @serial.read(1) # If we have data unless sdata == "" # Look for newlines @@ -75,7 +154,7 @@ def serial_in(serial) end end -def parse_in +def parse_in() run = true while run @@ -203,10 +282,14 @@ def parse_in end end +# +# Runtime +# + puts "> Started threads at #{Time.now}" -t1 = Thread.new{console_in(serial)} -t2 = Thread.new{serial_in(serial)} -t3 = Thread.new{parse_in} +t1 = Thread.new{console_in()} +t2 = Thread.new{serial_in()} +t3 = Thread.new{parse_in()} t1.join t2.join t3.join diff --git a/block diagram.svg b/block diagram.svg new file mode 100644 index 0000000..3a73cfb --- /dev/null +++ b/block diagram.svg @@ -0,0 +1,931 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + Serial IO + + + Cobot + + + Download card list + + + Upload accesses + + + Download available time passes + + + Generic sync interface + + + Cobot API Client + + + Upload/savelogs + + + Visitor + Staff GUI + + + Apply time passes to board accesses + + + Display access messages + logs + + + Apply card listto board + + + Cache time passes + + + Cache card list + + + Cache accesses and logs + + + Collect accesses and logs from board + + + + + + + + + + + + + + + + + + + + + ACCX Board + + +