expand on api structure

This commit is contained in:
Will Bradley 2019-07-06 19:01:48 -07:00
parent e74970e44f
commit 1b9993d576
2 changed files with 1054 additions and 40 deletions

163
api.rb
View File

@ -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

931
block diagram.svg Normal file
View File

@ -0,0 +1,931 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="210mm"
height="297mm"
viewBox="0 0 210 297"
version="1.1"
id="svg8"
inkscape:version="0.92.3 (2405546, 2018-03-11)"
sodipodi:docname="block diagram.svg">
<defs
id="defs2">
<marker
inkscape:isstock="true"
style="overflow:visible;"
id="marker3152"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="Arrow2Lend">
<path
transform="scale(1.1) rotate(180) translate(1,0)"
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
id="path3150" />
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible"
id="marker2992"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="Arrow2Lstart">
<path
transform="scale(1.1) translate(1,0)"
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
id="path2990" />
</marker>
<marker
inkscape:stockid="Arrow2Lstart"
orient="auto"
refY="0.0"
refX="0.0"
id="marker11919"
style="overflow:visible"
inkscape:isstock="true">
<path
id="path11917"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
transform="scale(1.1) translate(1,0)" />
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible"
id="marker11631"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="Arrow2Lstart"
inkscape:collect="always">
<path
transform="scale(1.1) translate(1,0)"
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
id="path11629" />
</marker>
<marker
inkscape:stockid="Arrow2Lstart"
orient="auto"
refY="0.0"
refX="0.0"
id="marker11283"
style="overflow:visible"
inkscape:isstock="true">
<path
id="path11281"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
transform="scale(1.1) translate(1,0)" />
</marker>
<marker
inkscape:stockid="Arrow2Lstart"
orient="auto"
refY="0.0"
refX="0.0"
id="marker10815"
style="overflow:visible"
inkscape:isstock="true">
<path
id="path10813"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
transform="scale(1.1) translate(1,0)" />
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible"
id="marker10503"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="Arrow2Lstart"
inkscape:collect="always">
<path
transform="scale(1.1) translate(1,0)"
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
id="path10501" />
</marker>
<marker
inkscape:stockid="Arrow2Lstart"
orient="auto"
refY="0.0"
refX="0.0"
id="marker9879"
style="overflow:visible"
inkscape:isstock="true"
inkscape:collect="always">
<path
id="path9877"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
transform="scale(1.1) translate(1,0)" />
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible"
id="marker9501"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="Arrow2Lstart">
<path
transform="scale(1.1) translate(1,0)"
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
id="path9499" />
</marker>
<marker
inkscape:stockid="Arrow2Lstart"
orient="auto"
refY="0.0"
refX="0.0"
id="marker9165"
style="overflow:visible"
inkscape:isstock="true"
inkscape:collect="always">
<path
id="path9163"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
transform="scale(1.1) translate(1,0)" />
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible"
id="marker8829"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="Arrow2Lstart"
inkscape:collect="always">
<path
transform="scale(1.1) translate(1,0)"
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
id="path8827" />
</marker>
<marker
inkscape:stockid="Arrow2Lstart"
orient="auto"
refY="0.0"
refX="0.0"
id="marker8463"
style="overflow:visible"
inkscape:isstock="true">
<path
id="path8461"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
transform="scale(1.1) translate(1,0)" />
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible"
id="marker8151"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="Arrow2Lstart"
inkscape:collect="always">
<path
transform="scale(1.1) translate(1,0)"
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
id="path8149" />
</marker>
<marker
inkscape:stockid="Arrow2Lstart"
orient="auto"
refY="0.0"
refX="0.0"
id="marker7737"
style="overflow:visible"
inkscape:isstock="true"
inkscape:collect="always">
<path
id="path7735"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
transform="scale(1.1) translate(1,0)" />
</marker>
<marker
inkscape:stockid="Arrow2Lend"
orient="auto"
refY="0.0"
refX="0.0"
id="marker7679"
style="overflow:visible;"
inkscape:isstock="true"
inkscape:collect="always">
<path
id="path7677"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
transform="scale(1.1) rotate(180) translate(1,0)" />
</marker>
<marker
inkscape:stockid="Arrow2Lstart"
orient="auto"
refY="0.0"
refX="0.0"
id="marker6727"
style="overflow:visible"
inkscape:isstock="true"
inkscape:collect="always">
<path
id="path6725"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
transform="scale(1.1) translate(1,0)" />
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible"
id="marker6343"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="Arrow2Lstart">
<path
transform="scale(1.1) translate(1,0)"
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
id="path6341" />
</marker>
<marker
inkscape:stockid="Arrow2Lstart"
orient="auto"
refY="0.0"
refX="0.0"
id="marker5953"
style="overflow:visible"
inkscape:isstock="true"
inkscape:collect="always">
<path
id="path5951"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
transform="scale(1.1) translate(1,0)" />
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible"
id="marker5395"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="Arrow2Lstart"
inkscape:collect="always">
<path
transform="scale(1.1) translate(1,0)"
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
id="path5393" />
</marker>
<marker
inkscape:stockid="Arrow2Lstart"
orient="auto"
refY="0.0"
refX="0.0"
id="marker5089"
style="overflow:visible"
inkscape:isstock="true"
inkscape:collect="always">
<path
id="path5087"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
transform="scale(1.1) translate(1,0)" />
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible;"
id="marker4455"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="Arrow2Lend">
<path
transform="scale(1.1) rotate(180) translate(1,0)"
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
id="path4453" />
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible"
id="marker3907"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="Arrow2Lstart"
inkscape:collect="always">
<path
transform="scale(1.1) translate(1,0)"
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
id="path3905" />
</marker>
<marker
inkscape:stockid="Arrow2Lend"
orient="auto"
refY="0.0"
refX="0.0"
id="Arrow2Lend"
style="overflow:visible;"
inkscape:isstock="true"
inkscape:collect="always">
<path
id="path1166"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
transform="scale(1.1) rotate(180) translate(1,0)" />
</marker>
<marker
inkscape:stockid="Arrow2Lstart"
orient="auto"
refY="0.0"
refX="0.0"
id="marker1485"
style="overflow:visible"
inkscape:isstock="true">
<path
id="path1483"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
transform="scale(1.1) translate(1,0)" />
</marker>
<marker
inkscape:stockid="Arrow2Lstart"
orient="auto"
refY="0.0"
refX="0.0"
id="Arrow2Lstart"
style="overflow:visible"
inkscape:isstock="true"
inkscape:collect="always">
<path
id="path1163"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
transform="scale(1.1) translate(1,0)" />
</marker>
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0.0"
refX="0.0"
id="Arrow1Lend"
style="overflow:visible;"
inkscape:isstock="true">
<path
id="path1148"
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
transform="scale(0.8) rotate(180) translate(12.5,0)" />
</marker>
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 148.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="210 : 148.5 : 1"
inkscape:persp3d-origin="105 : 99 : 1"
id="perspective831" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.98994949"
inkscape:cx="280.33536"
inkscape:cy="523.26379"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1920"
inkscape:window-height="1052"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<g
id="g862"
transform="translate(-61.012078,153.28468)">
<rect
y="57.045635"
x="66.206352"
height="18.017221"
width="147.66766"
id="rect847"
style="fill:#a5f3f1;fill-opacity:1;stroke:#969696;stroke-width:0.47380474;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<flowRoot
transform="matrix(0.26458333,0,0,0.26458333,62.366071,-2.7454135)"
style="font-style:normal;font-weight:normal;font-size:16px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
id="flowRoot849"
xml:space="preserve"><flowRegion
id="flowRegion851"><rect
y="253.94826"
x="261.42856"
height="58.57143"
width="142.85715"
id="rect853" /></flowRegion><flowPara
id="flowPara855">Serial IO</flowPara></flowRoot> </g>
<g
id="g886"
transform="translate(-137.74124,-7.6591078)">
<rect
y="53.69976"
x="141.88884"
height="20.902479"
width="149.38306"
id="rect876"
style="fill:#a5f3f1;fill-opacity:1;stroke:#969696;stroke-width:0.51328945;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<flowRoot
transform="matrix(0.26458333,0,0,0.26458333,128.88987,-6.4367223)"
style="font-style:normal;font-weight:normal;font-size:16px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
id="flowRoot884"
xml:space="preserve"><flowRegion
id="flowRegion880"><rect
y="253.94826"
x="261.42856"
height="58.57143"
width="142.85715"
id="rect878" /></flowRegion><flowPara
style="text-align:center;text-anchor:middle"
id="flowPara882">Cobot</flowPara></flowRoot> </g>
<g
id="g930"
transform="translate(-27.372198,70.721444)">
<rect
y="56.377613"
x="31.709459"
height="26.539413"
width="32.965008"
id="rect888"
style="fill:#a5f3f1;fill-opacity:1;stroke:#969696;stroke-width:0.27169713;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<flowRoot
transform="matrix(0.26458333,0,0,0.26458333,-39.687502,-2.2678577)"
style="font-style:normal;font-weight:normal;font-size:16px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
id="flowRoot896"
xml:space="preserve"><flowRegion
id="flowRegion892"><rect
y="253.94826"
x="261.42856"
height="58.57143"
width="142.85715"
id="rect890" /></flowRegion><flowPara
style="text-align:center;text-anchor:middle"
id="flowPara894">Download card list</flowPara></flowRoot> </g>
<g
transform="translate(49.356975,70.721444)"
id="g942">
<rect
style="fill:#a5f3f1;fill-opacity:1;stroke:#969696;stroke-width:0.29146406;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect932"
width="38.236908"
height="26.33066"
x="31.719343"
y="56.387497" />
<flowRoot
xml:space="preserve"
id="flowRoot940"
style="font-style:normal;font-weight:normal;font-size:16px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
transform="matrix(0.26458333,0,0,0.26458333,-37.041669,-0.37797673)"><flowRegion
id="flowRegion936"><rect
id="rect934"
width="142.85715"
height="58.57143"
x="261.42856"
y="253.94826" /></flowRegion><flowPara
id="flowPara938"
style="text-align:center;text-anchor:middle">Upload accesses</flowPara></flowRoot> </g>
<g
transform="translate(12.439439,70.635294)"
id="g954">
<rect
style="fill:#a5f3f1;fill-opacity:1;stroke:#969696;stroke-width:0.27998537;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect944"
width="35.243076"
height="26.361568"
x="28.6766"
y="56.376453" />
<flowRoot
xml:space="preserve"
id="flowRoot952"
style="font-style:normal;font-weight:normal;font-size:16px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
transform="matrix(0.26458333,0,0,0.26458333,-42.157778,-5.7826545)"><flowRegion
id="flowRegion948"><rect
id="rect946"
width="142.85715"
height="58.57143"
x="261.42856"
y="253.94826" /></flowRegion><flowPara
id="flowPara950"
style="text-align:center;text-anchor:middle">Download available time passes</flowPara></flowRoot> </g>
<g
transform="translate(44.065306,119.6448)"
id="g966">
<rect
style="fill:#a5f3f1;fill-opacity:1;stroke:#969696;stroke-width:0.5197494;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect956"
width="149.38306"
height="21.431921"
x="-39.53973"
y="-20.53504" />
<flowRoot
xml:space="preserve"
id="flowRoot964"
style="font-style:normal;font-weight:normal;font-size:16px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
transform="matrix(0.26458333,0,0,0.26458333,-52.538702,-82.012966)"><flowRegion
id="flowRegion960"><rect
id="rect958"
width="142.85715"
height="58.57143"
x="261.42856"
y="253.94826" /></flowRegion><flowPara
id="flowPara962"
style="text-align:center;text-anchor:middle">Generic sync interface</flowPara></flowRoot> </g>
<g
id="g978"
transform="translate(44.065306,92.278574)">
<rect
y="-20.191383"
x="-39.53973"
height="21.088264"
width="149.38306"
id="rect968"
style="fill:#a5f3f1;fill-opacity:1;stroke:#969696;stroke-width:0.51556557;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<flowRoot
transform="matrix(0.26458333,0,0,0.26458333,-52.538702,-79.60754)"
style="font-style:normal;font-weight:normal;font-size:16px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
id="flowRoot976"
xml:space="preserve"><flowRegion
id="flowRegion972"><rect
y="253.94826"
x="261.42856"
height="58.57143"
width="142.85715"
id="rect970" /></flowRegion><flowPara
style="text-align:center;text-anchor:middle"
id="flowPara974">Cobot API Client</flowPara></flowRoot> </g>
<g
id="g1004"
transform="translate(83.563818,70.343464)">
<rect
y="56.390766"
x="40.659348"
height="26.702101"
width="29.293636"
id="rect994"
style="fill:#a5f3f1;fill-opacity:1;stroke:#969696;stroke-width:0.25690475;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<flowRoot
transform="matrix(0.26458333,0,0,0.26458333,-32.88393,-2.2678577)"
style="font-style:normal;font-weight:normal;font-size:16px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
id="flowRoot1002"
xml:space="preserve"><flowRegion
id="flowRegion998"><rect
y="253.94826"
x="261.42856"
height="58.57143"
width="142.85715"
id="rect996" /></flowRegion><flowPara
style="text-align:center;text-anchor:middle"
id="flowPara1000">Upload/save</flowPara><flowPara
style="text-align:center;text-anchor:middle"
id="flowPara1006">logs</flowPara></flowRoot> </g>
<g
id="g1037"
transform="translate(100.1919,119.6448)">
<rect
y="-20.584595"
x="59.317844"
height="21.493011"
width="44.489399"
id="rect1027"
style="fill:#a5f3f1;fill-opacity:1;stroke:#969696;stroke-width:0.28404668;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<flowRoot
transform="matrix(0.26458333,0,0,0.26458333,-6.306637,-82.91205)"
style="font-style:normal;font-weight:normal;font-size:16px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
id="flowRoot1035"
xml:space="preserve"><flowRegion
id="flowRegion1031"><rect
y="253.94826"
x="261.42856"
height="58.57143"
width="142.85715"
id="rect1029" /></flowRegion><flowPara
style="text-align:center;text-anchor:middle"
id="flowPara1033">Visitor + Staff GUI</flowPara></flowRoot> </g>
<g
id="g1049"
transform="translate(12.439439,127.81975)">
<rect
y="56.357227"
x="28.652889"
height="19.596451"
width="35.286011"
id="rect1039"
style="fill:#a5f3f1;fill-opacity:1;stroke:#969696;stroke-width:0.24154764;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<flowRoot
transform="matrix(0.26458333,0,0,0.26458333,-41.890508,-9.1844402)"
style="font-style:normal;font-weight:normal;font-size:16px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
id="flowRoot1047"
xml:space="preserve"><flowRegion
id="flowRegion1043"><rect
y="253.94826"
x="261.42856"
height="58.57143"
width="142.85715"
id="rect1041" /></flowRegion><flowPara
style="text-align:center;text-anchor:middle"
id="flowPara1045">Apply time passes to board accesses</flowPara></flowRoot> </g>
<g
id="g1061"
transform="translate(134.59061,70.721444)">
<rect
y="56.386978"
x="25.189375"
height="26.14271"
width="44.767395"
id="rect1051"
style="fill:#a5f3f1;fill-opacity:1;stroke:#969696;stroke-width:0.31424543;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<flowRoot
transform="matrix(0.26458333,0,0,0.26458333,-39.309526,-3.0238101)"
style="font-style:normal;font-weight:normal;font-size:16px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
id="flowRoot1059"
xml:space="preserve"><flowRegion
id="flowRegion1055"><rect
y="253.94826"
x="261.42856"
height="58.57143"
width="142.85715"
id="rect1053" /></flowRegion><flowPara
style="text-align:center;text-anchor:middle"
id="flowPara1057">Display access messages + logs</flowPara></flowRoot> </g>
<g
transform="translate(-27.372198,113.85102)"
id="g1075">
<rect
style="fill:#a5f3f1;fill-opacity:1;stroke:#969696;stroke-width:0.23656587;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect1065"
width="32.930759"
height="20.140806"
x="31.726583"
y="69.940643" />
<flowRoot
xml:space="preserve"
id="flowRoot1073"
style="font-style:normal;font-weight:normal;font-size:16px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
transform="matrix(0.26458333,0,0,0.26458333,-39.687502,6.992559)"><flowRegion
id="flowRegion1069"><rect
id="rect1067"
width="142.85715"
height="58.57143"
x="261.42856"
y="253.94826" /></flowRegion><flowPara
id="flowPara1071"
style="text-align:center;text-anchor:middle">Apply card list</flowPara><flowPara
style="text-align:center;text-anchor:middle"
id="flowPara1077">to board</flowPara></flowRoot> </g>
<g
transform="translate(12.439439,102.02565)"
id="g1101">
<rect
style="fill:#a5f3f1;fill-opacity:1;stroke:#969696;stroke-width:0.24154764;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect1091"
width="35.286011"
height="19.596451"
x="28.652889"
y="56.357227" />
<flowRoot
xml:space="preserve"
id="flowRoot1099"
style="font-style:normal;font-weight:normal;font-size:16px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
transform="matrix(0.26458333,0,0,0.26458333,-41.890508,-6.727595)"><flowRegion
id="flowRegion1095"><rect
id="rect1093"
width="142.85715"
height="58.57143"
x="261.42856"
y="253.94826" /></flowRegion><flowPara
id="flowPara1097"
style="text-align:center;text-anchor:middle">Cache time passes</flowPara></flowRoot> </g>
<g
id="g1115"
transform="translate(-27.372198,88.245914)">
<rect
y="69.940643"
x="31.726583"
height="20.140806"
width="32.930759"
id="rect1103"
style="fill:#a5f3f1;fill-opacity:1;stroke:#969696;stroke-width:0.23656587;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<flowRoot
transform="matrix(0.26458333,0,0,0.26458333,-39.687502,9.8273804)"
style="font-style:normal;font-weight:normal;font-size:16px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
id="flowRoot1113"
xml:space="preserve"><flowRegion
id="flowRegion1107"><rect
y="253.94826"
x="261.42856"
height="58.57143"
width="142.85715"
id="rect1105" /></flowRegion><flowPara
id="flowPara1111"
style="text-align:center;text-anchor:middle">Cache card list</flowPara></flowRoot> </g>
<g
id="g1129"
transform="translate(53.07188,102.02565)">
<rect
y="56.460369"
x="28.756031"
height="19.390165"
width="122.58121"
id="rect1119"
style="fill:#a5f3f1;fill-opacity:1;stroke:#969696;stroke-width:0.44783244;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<flowRoot
transform="matrix(0.26458333,0,0,0.26458333,1.0097901,-6.727595)"
style="font-style:normal;font-weight:normal;font-size:16px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
id="flowRoot1127"
xml:space="preserve"><flowRegion
id="flowRegion1123"><rect
y="253.94826"
x="261.42856"
height="58.57143"
width="142.85715"
id="rect1121" /></flowRegion><flowPara
style="text-align:center;text-anchor:middle"
id="flowPara1125">Cache accesses and logs</flowPara></flowRoot> </g>
<g
transform="translate(53.449856,127.81975)"
id="g1141">
<rect
style="fill:#a5f3f1;fill-opacity:1;stroke:#969696;stroke-width:0.33972436;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect1131"
width="70.150635"
height="19.498274"
x="28.701977"
y="56.406315" />
<flowRoot
xml:space="preserve"
id="flowRoot1139"
style="font-style:normal;font-weight:normal;font-size:16px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
transform="matrix(0.26458333,0,0,0.26458333,-22.991698,-9.1844402)"><flowRegion
id="flowRegion1135"><rect
id="rect1133"
width="142.85715"
height="58.57143"
x="261.42856"
y="253.94826" /></flowRegion><flowPara
id="flowPara1137"
style="text-align:center;text-anchor:middle">Collect accesses and logs from board</flowPara></flowRoot> </g>
<path
style="fill:none;stroke:#000000;stroke-width:0.22949952px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow2Lstart);marker-end:url(#Arrow2Lend)"
d="M 79.503333,63.379505 V 75.042654"
id="path1143"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
id="path3903"
d="m 99.548547,117.47275 v 12.86077"
style="fill:none;stroke:#000000;stroke-width:0.24099459px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker3907)" />
<path
style="fill:none;stroke:#000000;stroke-width:0.24099459px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker5089)"
d="m 138.83717,117.47275 v 12.86077"
id="path5085"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
id="path5391"
d="M 20.694714,129.93064 V 117.06988"
style="fill:none;stroke:#000000;stroke-width:0.24099459px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker5395)" />
<path
style="fill:none;stroke:#000000;stroke-width:0.24099459px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker5953)"
d="M 57.577909,129.93064 V 117.06988"
id="path5949"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
id="path6339"
d="m 182.93664,117.47275 v 12.86077"
style="fill:none;stroke:#000000;stroke-width:0.24099459px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6343)" />
<path
style="fill:none;stroke:#000000;stroke-width:0.24272452px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6727);marker-end:url(#marker7679)"
d="M 79.503333,89.681624 V 102.72768"
id="path6723"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:0.22742696px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker7737)"
d="M 20.648338,160.8875 V 149.44057"
id="path7733"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
id="path8147"
d="M 20.694714,186.94468 V 174.80535"
style="fill:none;stroke:#000000;stroke-width:0.23413768px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker8151)" />
<path
style="fill:none;stroke:#000000;stroke-width:0.25192469px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker8463)"
d="m 20.694714,214.10593 v -14.0538"
id="path8459"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
id="path8825"
d="M 57.55255,160.88749 V 149.44057"
style="fill:none;stroke:#000000;stroke-width:0.22742696px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker8829)" />
<path
style="fill:none;stroke:#000000;stroke-width:0.23413768px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker9165)"
d="M 57.577909,186.94468 V 174.80535"
id="path9161"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
id="path9497"
d="m 57.577909,214.10593 v -14.0538"
style="fill:none;stroke:#000000;stroke-width:0.25192469px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker9501)" />
<path
style="fill:none;stroke:#000000;stroke-width:0.25192469px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker9879)"
d="m 117.72288,200.45312 v 14.0538"
id="path9875"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
id="path10499"
d="m 117.72288,175.19676 v 12.13933"
style="fill:none;stroke:#000000;stroke-width:0.23413768px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker10503)" />
<path
style="fill:none;stroke:#000000;stroke-width:0.22742696px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker11283)"
d="m 99.547103,149.82076 v 11.44693"
id="path11279"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
id="path11627"
d="m 138.85811,149.82076 v 11.44693"
style="fill:none;stroke:#000000;stroke-width:0.22742696px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker11631)" />
<path
style="fill:none;stroke:#000000;stroke-width:0.22742696px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker11919)"
d="m 183.51756,149.82076 v 11.44693"
id="path11915"
inkscape:connector-curvature="0" />
<g
transform="translate(-61.012078,176.8044)"
id="g2974">
<rect
style="fill:#a5f3f1;fill-opacity:1;stroke:#969696;stroke-width:0.47380474;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect2964"
width="147.66766"
height="18.017221"
x="66.206352"
y="57.045635" />
<flowRoot
xml:space="preserve"
id="flowRoot2972"
style="font-style:normal;font-weight:normal;font-size:16px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
transform="matrix(0.26458333,0,0,0.26458333,60.762454,-3.5472221)"><flowRegion
id="flowRegion2968"><rect
id="rect2966"
width="142.85715"
height="58.57143"
x="261.42856"
y="253.94826" /></flowRegion><flowPara
id="flowPara2970">ACCX Board</flowPara></flowRoot> </g>
<path
inkscape:connector-curvature="0"
id="path2988"
d="m 79.503333,224.38546 v 13.04606"
style="fill:none;stroke:#000000;stroke-width:0.24272452px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker2992);marker-end:url(#marker3152)" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 40 KiB