]> rtime.felk.cvut.cz Git - pes-rpp/rpp-simulink.git/commitdiff
Add missing files from master
authorMichal Sojka <sojkam1@fel.cvut.cz>
Wed, 8 Jul 2015 22:53:46 +0000 (00:53 +0200)
committerMichal Sojka <sojkam1@fel.cvut.cz>
Wed, 8 Jul 2015 23:15:47 +0000 (01:15 +0200)
I (or maybe git :) forgot to include these files in the merge.

42 files changed:
doc/images/adc_dep_after.png [new file with mode: 0644]
doc/images/adc_dep_before.png [new file with mode: 0644]
doc/images/base_4.png [new file with mode: 0644]
doc/images/base_7.png [new file with mode: 0644]
doc/images/blocks.pdf [new symlink]
doc/images/board-photo.png [new file with mode: 0644]
doc/images/cvut.png [new file with mode: 0644]
doc/images/demo_analog_passthrough.png [new file with mode: 0644]
doc/images/demo_analog_sinewave.png [new file with mode: 0644]
doc/images/demo_board-connection_scheme.svg [new file with mode: 0644]
doc/images/demo_can_demo.png [new file with mode: 0644]
doc/images/demo_digital_passthrough.png [new file with mode: 0644]
doc/images/demo_hbridge_analog_control.png [new file with mode: 0644]
doc/images/demo_hbridge_digital_control.png [new file with mode: 0644]
doc/images/demo_hbridge_sinewave_control.png [new file with mode: 0644]
doc/images/demo_irc_input.png [new file with mode: 0644]
doc/images/demo_led_blink.png [new file with mode: 0644]
doc/images/demo_led_blink_all.png [new file with mode: 0644]
doc/images/demo_log_analog_input.png [new file with mode: 0644]
doc/images/demo_power_toggle.png [new file with mode: 0644]
doc/images/dev_wiring.png [new file with mode: 0644]
doc/images/dev_wiring.svg [new file with mode: 0644]
doc/images/external_mode_configuration.png [new file with mode: 0644]
doc/images/itcr.png [new file with mode: 0644]
doc/images/logos.png [new file with mode: 0644]
doc/images/logos.svg [new file with mode: 0644]
doc/images/pinout.pdf [new symlink]
doc/images/pinout.pdf.png [new file with mode: 0644]
doc/images/test_wiring.png [new file with mode: 0644]
refs/tms570.pdf [new file with mode: 0644]
rpp/blocks/sfunction_aout.c [new file with mode: 0644]
rpp/blocks/sfunction_din.c [new file with mode: 0644]
rpp/blocks/sfunction_dinc.c [new file with mode: 0644]
rpp/blocks/sfunction_frayconfig.c [new file with mode: 0644]
rpp/blocks/sfunction_frayreceive.c [new file with mode: 0644]
rpp/blocks/sfunction_fraysbc.c [new file with mode: 0644]
rpp/blocks/sfunction_fraytransmit.c [new file with mode: 0644]
rpp/blocks/sfunction_hbr.c [new file with mode: 0644]
rpp/blocks/sfunction_irc.c [new file with mode: 0644]
rpp/blocks/sfunction_lout.c [new file with mode: 0644]
rpp/blocks/sfunction_mout.c [new file with mode: 0644]
rpp/blocks/sfunction_sdrw.c [new file with mode: 0644]

diff --git a/doc/images/adc_dep_after.png b/doc/images/adc_dep_after.png
new file mode 100644 (file)
index 0000000..5181479
Binary files /dev/null and b/doc/images/adc_dep_after.png differ
diff --git a/doc/images/adc_dep_before.png b/doc/images/adc_dep_before.png
new file mode 100644 (file)
index 0000000..7af5724
Binary files /dev/null and b/doc/images/adc_dep_before.png differ
diff --git a/doc/images/base_4.png b/doc/images/base_4.png
new file mode 100644 (file)
index 0000000..9e2415a
Binary files /dev/null and b/doc/images/base_4.png differ
diff --git a/doc/images/base_7.png b/doc/images/base_7.png
new file mode 100644 (file)
index 0000000..ac88b01
Binary files /dev/null and b/doc/images/base_7.png differ
diff --git a/doc/images/blocks.pdf b/doc/images/blocks.pdf
new file mode 120000 (symlink)
index 0000000..f8717c7
--- /dev/null
@@ -0,0 +1 @@
+../../rpp/lib/rpp/doc/blocks.pdf
\ No newline at end of file
diff --git a/doc/images/board-photo.png b/doc/images/board-photo.png
new file mode 100644 (file)
index 0000000..42edd67
Binary files /dev/null and b/doc/images/board-photo.png differ
diff --git a/doc/images/cvut.png b/doc/images/cvut.png
new file mode 100644 (file)
index 0000000..3b4e0df
Binary files /dev/null and b/doc/images/cvut.png differ
diff --git a/doc/images/demo_analog_passthrough.png b/doc/images/demo_analog_passthrough.png
new file mode 100644 (file)
index 0000000..19f0eac
Binary files /dev/null and b/doc/images/demo_analog_passthrough.png differ
diff --git a/doc/images/demo_analog_sinewave.png b/doc/images/demo_analog_sinewave.png
new file mode 100644 (file)
index 0000000..fdcc1e8
Binary files /dev/null and b/doc/images/demo_analog_sinewave.png differ
diff --git a/doc/images/demo_board-connection_scheme.svg b/doc/images/demo_board-connection_scheme.svg
new file mode 100644 (file)
index 0000000..69428a5
--- /dev/null
@@ -0,0 +1,1025 @@
+<?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="478.35718"
+   height="280.76486"
+   id="svg2"
+   inkscape:label="Pozadí"
+   version="1.1"
+   inkscape:version="0.48.5 r10040"
+   sodipodi:docname="demo_board-connection_scheme.svg"
+   inkscape:export-filename="/home/cynerd/rpp/rpp-simulink/doc/images/demo_board-connection_scheme.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90">
+  <defs
+     id="defs3">
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM"
+       style="overflow:visible">
+      <path
+         id="path4358"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DotS"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotS"
+       style="overflow:visible">
+      <path
+         id="path4361"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         transform="matrix(0.2,0,0,0.2,1.48,0.2)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Sstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Sstart"
+       style="overflow:visible">
+      <path
+         id="path4306"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         transform="matrix(0.2,0,0,0.2,1.2,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DotL"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotL"
+       style="overflow:visible">
+      <path
+         id="path4355"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         transform="matrix(0.8,0,0,0.8,5.92,0.8)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mstart"
+       style="overflow:visible">
+      <path
+         id="path4300"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend"
+       style="overflow:visible">
+      <path
+         id="path4303"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend-3"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4303-5"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend-9"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4303-9"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend-5"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4303-8"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend-4"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4303-4"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend-56"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4303-0"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend-1"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4303-99"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mstart-2"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4300-1"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mstart-4"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4300-3"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mstart-7"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4300-5"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mstart-78"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4300-56"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend-42"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4303-6"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend-2"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4303-2"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.4"
+     inkscape:cx="258.15083"
+     inkscape:cy="7.4169141"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:snap-bbox="true"
+     inkscape:bbox-nodes="false"
+     inkscape:bbox-paths="false"
+     inkscape:snap-bbox-edge-midpoints="false"
+     inkscape:snap-bbox-midpoints="false"
+     inkscape:object-paths="false"
+     inkscape:snap-intersection-paths="false"
+     inkscape:object-nodes="false"
+     inkscape:snap-smooth-nodes="false"
+     inkscape:snap-midpoints="false"
+     inkscape:snap-object-midpoints="false"
+     inkscape:snap-center="false"
+     inkscape:snap-page="true"
+     inkscape:snap-nodes="true"
+     inkscape:window-width="1920"
+     inkscape:window-height="1014"
+     inkscape:window-x="0"
+     inkscape:window-y="27"
+     inkscape:window-maximized="1"
+     inkscape:snap-grids="true"
+     inkscape:snap-to-guides="true"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     showguides="false">
+    <inkscape:grid
+       type="xygrid"
+       id="grid3008"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true"
+       originx="-112.35713px"
+       originy="-721.87796px" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata6">
+    <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 />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Vrstva 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-112.35713,-49.719323)">
+    <text
+       xml:space="preserve"
+       style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans;font-stretch:normal;font-variant:normal;text-anchor:start;text-align:start;writing-mode:lr"
+       x="507.20422"
+       y="68.430275"
+       id="text3004"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3006"
+         x="507.20422"
+         y="68.430275"
+         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr;text-anchor:start;fill:#000000;fill-opacity:1;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans">Demo board</tspan></text>
+    <rect
+       style="fill:none;stroke:#000000;stroke-width:1.18484294000000001;stroke-opacity:1"
+       id="rect3010"
+       width="316.34134"
+       height="279.58002"
+       x="112.94955"
+       y="50.311745" />
+    <rect
+       style="fill:none;stroke:#000000;stroke-width:0.66765295999999996;stroke-opacity:1"
+       id="rect3010-6"
+       width="100.42607"
+       height="279.6377"
+       x="489.95441"
+       y="50.512672" />
+    <text
+       xml:space="preserve"
+       style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="250.50624"
+       y="65.821075"
+       id="text3798"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3800"
+         x="250.50624"
+         y="65.821075"
+         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr;text-anchor:start;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans">RPP</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans;font-stretch:normal;font-variant:normal;text-anchor:start;text-align:start;writing-mode:lr"
+       x="500.78357"
+       y="92.325157"
+       id="text3802"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3804"
+         x="500.78357"
+         y="92.325157"
+         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr;text-anchor:start;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans">Potentiometer 1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans;font-stretch:normal;font-variant:normal;text-anchor:start;text-align:start;writing-mode:lr"
+       x="500.78357"
+       y="109.5714"
+       id="text3802-7"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3804-4"
+         x="500.78357"
+         y="109.5714"
+         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr;text-anchor:start;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans">Potentiometer 2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans;font-stretch:normal;font-variant:normal;text-anchor:start;text-align:start;writing-mode:lr"
+       x="500.82663"
+       y="126.89484"
+       id="text3802-7-2"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3804-4-7"
+         x="500.82663"
+         y="126.89484"
+         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr;text-anchor:start;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans">Button 1 (black)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans;font-stretch:normal;font-variant:normal;text-anchor:start;text-align:start;writing-mode:lr"
+       x="500.82663"
+       y="146.43509"
+       id="text3802-7-2-3"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3804-4-7-5"
+         x="500.82663"
+         y="146.43509"
+         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr;text-anchor:start;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans">Button 2 (green)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans;font-stretch:normal;font-variant:normal;text-anchor:start;text-align:start;writing-mode:lr"
+       x="500.82663"
+       y="164.81577"
+       id="text3802-7-2-9"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3804-4-7-1"
+         x="500.82663"
+         y="164.81577"
+         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr;text-anchor:start;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans">Button 3 (red)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans;font-stretch:normal;font-variant:normal;text-anchor:start;text-align:start;writing-mode:lr"
+       x="500.82663"
+       y="183.19644"
+       id="text3802-7-2-2"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         x="500.82663"
+         y="183.19644"
+         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr;text-anchor:start;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+         id="tspan3917">Button 4 (blue)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans;font-stretch:normal;font-variant:normal;text-anchor:start;text-align:start;writing-mode:lr"
+       x="500.82663"
+       y="206.06998"
+       id="text3802-7-2-2-3"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         x="500.82663"
+         y="206.06998"
+         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr;text-anchor:start;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+         id="tspan3917-5">Bargraphs 1-3</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans;font-stretch:normal;font-variant:normal;text-anchor:start;text-align:start;writing-mode:lr"
+       x="501.10666"
+       y="224.45065"
+       id="text3802-7-2-2-3-8"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         x="501.10666"
+         y="224.45065"
+         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr;text-anchor:start;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+         id="tspan3917-5-8">Motor 1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans;font-stretch:normal;font-variant:normal;text-anchor:start;text-align:start;writing-mode:lr"
+       x="501.10666"
+       y="242.83133"
+       id="text3802-7-2-2-3-2"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         x="501.10666"
+         y="242.83133"
+         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr;text-anchor:start;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+         id="tspan3917-5-1">Motor IRC 1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans;font-stretch:normal;font-variant:normal;text-anchor:start;text-align:start;writing-mode:lr"
+       x="500.82663"
+       y="261.21201"
+       id="text3802-7-2-2-3-5"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         x="500.82663"
+         y="261.21201"
+         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr;text-anchor:start;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+         id="tspan3917-5-3">Motor 2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans;font-stretch:normal;font-variant:normal;text-anchor:start;text-align:start;writing-mode:lr"
+       x="500.82663"
+       y="279.59268"
+       id="text3802-7-2-2-3-3"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         x="500.82663"
+         y="279.59268"
+         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr;text-anchor:start;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+         id="tspan3917-5-5">Motor IRC 2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans;font-stretch:normal;font-variant:normal;text-anchor:start;text-align:start;writing-mode:lr"
+       x="501.10666"
+       y="297.97336"
+       id="text3802-7-2-2-3-4"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         x="501.10666"
+         y="297.97336"
+         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr;text-anchor:start;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+         id="tspan3917-5-18">Leds 1-4</tspan></text>
+    <rect
+       style="fill:none;stroke:#000000;stroke-width:1.23245965999999996;stroke-opacity:1"
+       id="rect3999"
+       width="206.51584"
+       height="27.446758"
+       x="121.65756"
+       y="86.448219" />
+    <rect
+       style="fill:none;stroke:#000000;stroke-width:1.23314524000000003;stroke-opacity:1"
+       id="rect3999-6"
+       width="206.75078"
+       height="27.446072"
+       x="121.42227"
+       y="123.20993" />
+    <rect
+       style="fill:none;stroke:#000000;stroke-width:1.23314524000000003;stroke-opacity:1"
+       id="rect3999-4"
+       width="206.75078"
+       height="27.446072"
+       x="121.42227"
+       y="159.97128" />
+    <rect
+       style="fill:none;stroke:#000000;stroke-width:1.23314524000000003;stroke-opacity:1"
+       id="rect3999-8"
+       width="206.75078"
+       height="27.446072"
+       x="121.42227"
+       y="196.73264" />
+    <rect
+       style="fill:none;stroke:#000000;stroke-width:1.23314524000000003;stroke-opacity:1"
+       id="rect3999-0"
+       width="206.75078"
+       height="27.446072"
+       x="121.42227"
+       y="233.494" />
+    <rect
+       style="fill:none;stroke:#000000;stroke-width:1.23314524000000003;stroke-opacity:1"
+       id="rect3999-86"
+       width="206.75078"
+       height="27.446072"
+       x="121.42227"
+       y="270.25534" />
+    <text
+       xml:space="preserve"
+       style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:end;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="423.5242"
+       y="92.874008"
+       id="text3802-8"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3804-5"
+         x="423.5242"
+         y="92.874008"
+         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:end;line-height:125%;writing-mode:lr-tb;text-anchor:end;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans">ADC 1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:end;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="423.60233"
+       y="112.41605"
+       id="text3802-8-1"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3804-5-3"
+         x="423.60233"
+         y="112.41605"
+         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:end;line-height:125%;writing-mode:lr-tb;text-anchor:end;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans">ADC 2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:end;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="423.26541"
+       y="129.53307"
+       id="text3802-8-1-7"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3804-5-3-8"
+         x="423.26541"
+         y="129.53307"
+         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:end;line-height:125%;writing-mode:lr-tb;text-anchor:end;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans">DIN 0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:end;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="423.5242"
+       y="147.91373"
+       id="text3802-8-1-7-7"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3804-5-3-8-4"
+         x="423.5242"
+         y="147.91373"
+         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:end;line-height:125%;writing-mode:lr-tb;text-anchor:end;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans">DIN 1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:end;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="423.60233"
+       y="166.29442"
+       id="text3802-8-1-7-70"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3804-5-3-8-6"
+         x="423.60233"
+         y="166.29442"
+         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:end;line-height:125%;writing-mode:lr-tb;text-anchor:end;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans">DIN 2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:end;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="423.40213"
+       y="184.67509"
+       id="text3802-8-1-7-4"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3804-5-3-8-43"
+         x="423.40213"
+         y="184.67509"
+         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:end;line-height:125%;writing-mode:lr-tb;text-anchor:end;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans">DIN 3</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:end;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="423.40213"
+       y="207.75325"
+       id="text3802-8-1-7-5"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3804-5-3-8-46"
+         x="423.40213"
+         y="207.75325"
+         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:end;line-height:125%;writing-mode:lr-tb;text-anchor:end;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans">DAC 1-3</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:end;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="422.88943"
+       y="225.99931"
+       id="text3802-8-1-7-6"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3804-5-3-8-1"
+         x="422.88943"
+         y="225.99931"
+         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:end;line-height:125%;writing-mode:lr-tb;text-anchor:end;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans">HBR</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:end;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="423.60233"
+       y="262.90067"
+       id="text3802-8-1-7-1"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3804-5-3-8-2"
+         x="423.60233"
+         y="262.90067"
+         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:end;line-height:125%;writing-mode:lr-tb;text-anchor:end;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans">MOUT 1,2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:end;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="423.5242"
+       y="244.41229"
+       id="text3802-8-1-7-8"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3804-5-3-8-5"
+         x="423.5242"
+         y="244.41229"
+         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:end;line-height:125%;writing-mode:lr-tb;text-anchor:end;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans">DIN 10,11</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:end;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="423.47537"
+       y="281.17365"
+       id="text3802-8-1-7-57"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3804-5-3-8-3"
+         x="423.47537"
+         y="281.17365"
+         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:end;line-height:125%;writing-mode:lr-tb;text-anchor:end;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans">DIN 14,15</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:end;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="423.16287"
+       y="299.66202"
+       id="text3802-8-1-7-17"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3804-5-3-8-62"
+         x="423.16287"
+         y="299.66202"
+         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:end;line-height:125%;writing-mode:lr-tb;text-anchor:end;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans">LOUT 1-4</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="180.75684"
+       y="104.9598"
+       id="text3802-8-1-7-54"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3804-5-3-8-7"
+         x="180.75684"
+         y="104.9598"
+         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans">Motor speed control</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans;font-stretch:normal;font-variant:normal;text-anchor:start;text-align:start;writing-mode:lr"
+       x="201.69908"
+       y="140.92088"
+       id="text3802-8-1-7-69"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3804-5-3-8-64"
+         x="201.69908"
+         y="140.92088"
+         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr;text-anchor:start;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans">Color music</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans;font-stretch:normal;font-variant:normal;text-anchor:start;text-align:start;writing-mode:lr"
+       x="187.28174"
+       y="177.54761"
+       id="text3802-8-1-7-80"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3804-5-3-8-49"
+         x="187.28174"
+         y="177.54761"
+         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr;text-anchor:start;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans">Buttons and leds</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans;font-stretch:normal;font-variant:normal;text-anchor:start;text-align:start;writing-mode:lr"
+       x="198.55786"
+       y="214.44359"
+       id="text3802-8-1-7-805"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3804-5-3-8-35"
+         x="198.55786"
+         y="214.44359"
+         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr;text-anchor:start;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans">IRC to CAN</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans;font-stretch:normal;font-variant:normal;text-anchor:start;text-align:start;writing-mode:lr"
+       x="135.74583"
+       y="250.17462"
+       id="text3802-8-1-7-19"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3804-5-3-8-42"
+         x="135.74583"
+         y="250.17462"
+         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr;text-anchor:start;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans">CAN receive - Button press emulation</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans;font-stretch:normal;font-variant:normal;text-anchor:start;text-align:start;writing-mode:lr"
+       x="143.64378"
+       y="287.96631"
+       id="text3802-8-1-7-805-2"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3804-5-3-8-35-8"
+         x="143.64378"
+         y="287.96631"
+         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr;text-anchor:start;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans">Configuration and error handling</tspan></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.91903389000000002px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
+       d="m 490.1129,88.827498 -60.47572,0"
+       id="path4288"
+       inkscape:connector-curvature="0" />
+    <text
+       xml:space="preserve"
+       style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:end;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="423.60233"
+       y="322.63248"
+       id="text3802-8-1-7-17-1"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3804-5-3-8-62-9"
+         x="423.60233"
+         y="322.63248"
+         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:end;line-height:125%;writing-mode:lr-tb;text-anchor:end;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans">CAN 2</tspan></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.91903389000000002px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
+       d="m 490.08007,105.55063 -60.47572,0"
+       id="path4288-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.91903389000000002px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
+       d="m 490.08007,123.01227 -60.47572,0"
+       id="path4288-9-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.91903389000000002px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
+       d="m 490.08007,141.85247 -60.47572,0"
+       id="path4288-9-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.91903389000000002px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
+       d="m 490.08007,160.23315 -60.47572,0"
+       id="path4288-9-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.91903389000000002px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
+       d="m 490.08007,178.61382 -60.47572,0"
+       id="path4288-9-46"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.91903389000000002px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow1Mstart);marker-end:none"
+       d="m 490.08007,202.04919 -60.47572,0"
+       id="path4288-9-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.91903389000000002px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow1Mstart);marker-end:none"
+       d="m 489.3908,219.97035 -60.47572,0"
+       id="path4288-9-8-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.91903389000000002px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow1Mstart);marker-end:none"
+       d="m 489.89956,256.73171 -60.47573,0"
+       id="path4288-9-8-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.91903389000000002px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow1Mstart);marker-end:none"
+       d="m 490.30983,293.95258 -60.47572,0"
+       id="path4288-9-8-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.91903389000000002px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
+       d="m 490.08007,237.89151 -60.47572,0"
+       id="path4288-9-46-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.91903389000000002px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
+       d="m 490.08007,275.5719 -60.47572,0"
+       id="path4288-9-46-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.91903389000000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1.83806779999999992, 0.91903389999999996, 0.45951694999999998, 0.91903389999999996;stroke-dashoffset:0;marker-start:url(#Arrow1Mstart-78)"
+       d="m 429.4391,321.7252 46.65031,0 0,-46.41822 0,-187.053877"
+       id="path8024"
+       inkscape:connector-curvature="0" />
+    <path
+       sodipodi:type="arc"
+       style="fill:#000000;fill-opacity:1;stroke:none"
+       id="path8234"
+       sodipodi:cx="475.29019"
+       sodipodi:cy="302.60773"
+       sodipodi:rx="1.2276785"
+       sodipodi:ry="1.1830357"
+       d="m 476.51787,302.60773 c 0,0.65337 -0.54965,1.18303 -1.22768,1.18303 -0.67803,0 -1.22768,-0.52966 -1.22768,-1.18303 0,-0.65338 0.54965,-1.18304 1.22768,-1.18304 0.67803,0 1.22768,0.52966 1.22768,1.18304 z"
+       transform="matrix(1.2993608,0,0,1.2993608,-141.49794,-117.7881)" />
+    <path
+       sodipodi:type="arc"
+       style="fill:#000000;fill-opacity:1;stroke:none"
+       id="path8234-6"
+       sodipodi:cx="475.29019"
+       sodipodi:cy="302.60773"
+       sodipodi:rx="1.2276785"
+       sodipodi:ry="1.1830357"
+       d="m 476.51787,302.60773 c 0,0.65337 -0.54965,1.18303 -1.22768,1.18303 -0.67803,0 -1.22768,-0.52966 -1.22768,-1.18303 0,-0.65338 0.54965,-1.18304 1.22768,-1.18304 0.67803,0 1.22768,0.52966 1.22768,1.18304 z"
+       transform="matrix(1.2993608,0,0,1.2993608,-141.48405,-287.66429)" />
+    <path
+       sodipodi:type="arc"
+       style="fill:#000000;fill-opacity:1;stroke:none"
+       id="path8234-1"
+       sodipodi:cx="475.29019"
+       sodipodi:cy="302.60773"
+       sodipodi:rx="1.2276785"
+       sodipodi:ry="1.1830357"
+       d="m 476.51787,302.60773 c 0,0.65337 -0.54965,1.18303 -1.22768,1.18303 -0.67803,0 -1.22768,-0.52966 -1.22768,-1.18303 0,-0.65338 0.54965,-1.18304 1.22768,-1.18304 0.67803,0 1.22768,0.52966 1.22768,1.18304 z"
+       transform="matrix(1.2993608,0,0,1.2993608,-141.42602,-304.43287)" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.91903389000000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1.83806779999999992, 0.91903389999999996, 0.45951694999999998, 0.91903389999999996;stroke-dashoffset:0"
+       d="m 429.22689,312.43172 28.5557,0 0,-189.71485"
+       id="path8297"
+       inkscape:connector-curvature="0" />
+    <path
+       sodipodi:type="arc"
+       style="fill:#000000;fill-opacity:1;stroke:none"
+       id="path8234-6-3"
+       sodipodi:cx="475.29019"
+       sodipodi:cy="302.60773"
+       sodipodi:rx="1.2276785"
+       sodipodi:ry="1.1830357"
+       d="m 476.51787,302.60773 c 0,0.65337 -0.54965,1.18303 -1.22768,1.18303 -0.67803,0 -1.22768,-0.52966 -1.22768,-1.18303 0,-0.65338 0.54965,-1.18304 1.22768,-1.18304 0.67803,0 1.22768,0.52966 1.22768,1.18304 z"
+       transform="matrix(1.2993608,0,0,1.2993608,-159.95498,-270.31564)" />
+    <path
+       sodipodi:type="arc"
+       style="fill:#000000;fill-opacity:1;stroke:none"
+       id="path8234-6-2"
+       sodipodi:cx="475.29019"
+       sodipodi:cy="302.60773"
+       sodipodi:rx="1.2276785"
+       sodipodi:ry="1.1830357"
+       d="m 476.51787,302.60773 c 0,0.65337 -0.54965,1.18303 -1.22768,1.18303 -0.67803,0 -1.22768,-0.52966 -1.22768,-1.18303 0,-0.65338 0.54965,-1.18304 1.22768,-1.18304 0.67803,0 1.22768,0.52966 1.22768,1.18304 z"
+       transform="matrix(1.2993608,0,0,1.2993608,-159.79086,-251.27851)" />
+    <path
+       sodipodi:type="arc"
+       style="fill:#000000;fill-opacity:1;stroke:none"
+       id="path8234-6-24"
+       sodipodi:cx="475.29019"
+       sodipodi:cy="302.60773"
+       sodipodi:rx="1.2276785"
+       sodipodi:ry="1.1830357"
+       d="m 476.51787,302.60773 c 0,0.65337 -0.54965,1.18303 -1.22768,1.18303 -0.67803,0 -1.22768,-0.52966 -1.22768,-1.18303 0,-0.65338 0.54965,-1.18304 1.22768,-1.18304 0.67803,0 1.22768,0.52966 1.22768,1.18304 z"
+       transform="matrix(1.2993608,0,0,1.2993608,-159.79085,-233.06195)" />
+    <path
+       sodipodi:type="arc"
+       style="fill:#000000;fill-opacity:1;stroke:none"
+       id="path8234-6-1"
+       sodipodi:cx="475.29019"
+       sodipodi:cy="302.60773"
+       sodipodi:rx="1.2276785"
+       sodipodi:ry="1.1830357"
+       d="m 476.51787,302.60773 c 0,0.65337 -0.54965,1.18303 -1.22768,1.18303 -0.67803,0 -1.22768,-0.52966 -1.22768,-1.18303 0,-0.65338 0.54965,-1.18304 1.22768,-1.18304 0.67803,0 1.22768,0.52966 1.22768,1.18304 z"
+       transform="matrix(1.2993608,0,0,1.2993608,-159.62674,-214.68127)" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.91903389000000002px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#DotM)"
+       d="m 361.4364,101.00656 0,119.759 28.7793,0"
+       id="path8762"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.91713780000000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#DotS)"
+       d="m 361.33974,100.7257 -32.79724,0"
+       id="path9404"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.91903389000000002px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#DotM)"
+       d="m 381.22379,87.022253 -19.8577,0 0,13.949617"
+       id="path9620"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.91903389000000002px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#DotS);marker-end:url(#DotM)"
+       d="m 342.2967,123.63543 46.06227,0"
+       id="path10486"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.91903389000000002px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#DotM)"
+       d="m 328.78962,137.48706 13.45729,0 0,-30.85328 42.3412,0"
+       id="path13308"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.91903389000000002px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#DotS);marker-end:url(#DotM)"
+       d="m 342.17284,137.48066 0,134.60686 25.53003,0"
+       id="path13526"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.91903389000000002px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#DotS);marker-end:url(#DotM)"
+       d="m 342.0828,201.98354 32.74058,0"
+       id="path13960"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.91903389px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#DotM)"
+       d="m 328,284.36215 5,0 0,37 50,0"
+       id="path14394"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.91903389000000002px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#DotM)"
+       d="m 328.01528,248.15231 8.18029,0 -0.12308,68.17678 47.02091,-0.11605"
+       id="path14614"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.91903389000000002px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#DotM)"
+       d="m 328.13317,211.50211 19.36535,0 0,99.94835 35.61257,0"
+       id="path14834"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.91903389000000002px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#DotS);marker-end:url(#DotM)"
+       d="m 347.51094,276.46744 20.19192,0"
+       id="path15052"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.91903389000000002px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#DotS)"
+       d="m 327.47672,174.24841 51.53154,0"
+       id="path15486"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.91903389000000002px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#DotS);marker-end:url(#DotM)"
+       d="m 354.39128,174.24841 0,119.80263 14.90444,0"
+       id="path15704"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.91903389000000002px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#DotM)"
+       d="m 379.13335,174.2313 0,4.08321 9.92531,0"
+       id="path16138"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.91903389000000002px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#DotM)"
+       d="m 379.01731,174.17327 0,-14.56372 10.09596,0"
+       id="path16356"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.91903389000000002px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#DotS);marker-end:url(#DotM)"
+       d="m 379.01731,159.60955 0,-17.75496 10.21201,0"
+       id="path16574"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
diff --git a/doc/images/demo_can_demo.png b/doc/images/demo_can_demo.png
new file mode 100644 (file)
index 0000000..81f8d29
Binary files /dev/null and b/doc/images/demo_can_demo.png differ
diff --git a/doc/images/demo_digital_passthrough.png b/doc/images/demo_digital_passthrough.png
new file mode 100644 (file)
index 0000000..d450ea1
Binary files /dev/null and b/doc/images/demo_digital_passthrough.png differ
diff --git a/doc/images/demo_hbridge_analog_control.png b/doc/images/demo_hbridge_analog_control.png
new file mode 100644 (file)
index 0000000..7d74f82
Binary files /dev/null and b/doc/images/demo_hbridge_analog_control.png differ
diff --git a/doc/images/demo_hbridge_digital_control.png b/doc/images/demo_hbridge_digital_control.png
new file mode 100644 (file)
index 0000000..9398287
Binary files /dev/null and b/doc/images/demo_hbridge_digital_control.png differ
diff --git a/doc/images/demo_hbridge_sinewave_control.png b/doc/images/demo_hbridge_sinewave_control.png
new file mode 100644 (file)
index 0000000..5833578
Binary files /dev/null and b/doc/images/demo_hbridge_sinewave_control.png differ
diff --git a/doc/images/demo_irc_input.png b/doc/images/demo_irc_input.png
new file mode 100644 (file)
index 0000000..bb550fa
Binary files /dev/null and b/doc/images/demo_irc_input.png differ
diff --git a/doc/images/demo_led_blink.png b/doc/images/demo_led_blink.png
new file mode 100644 (file)
index 0000000..47ec6be
Binary files /dev/null and b/doc/images/demo_led_blink.png differ
diff --git a/doc/images/demo_led_blink_all.png b/doc/images/demo_led_blink_all.png
new file mode 100644 (file)
index 0000000..3752946
Binary files /dev/null and b/doc/images/demo_led_blink_all.png differ
diff --git a/doc/images/demo_log_analog_input.png b/doc/images/demo_log_analog_input.png
new file mode 100644 (file)
index 0000000..be1644e
Binary files /dev/null and b/doc/images/demo_log_analog_input.png differ
diff --git a/doc/images/demo_power_toggle.png b/doc/images/demo_power_toggle.png
new file mode 100644 (file)
index 0000000..9aecc71
Binary files /dev/null and b/doc/images/demo_power_toggle.png differ
diff --git a/doc/images/dev_wiring.png b/doc/images/dev_wiring.png
new file mode 100644 (file)
index 0000000..071e447
Binary files /dev/null and b/doc/images/dev_wiring.png differ
diff --git a/doc/images/dev_wiring.svg b/doc/images/dev_wiring.svg
new file mode 100644 (file)
index 0000000..13bd314
--- /dev/null
@@ -0,0 +1,908 @@
+<?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:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="763.31927"
+   height="709.83832"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="dev_wiring.svg"
+   inkscape:export-filename="dev_wiring.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90">
+  <title
+     id="title4706">RPP Wiring for Development</title>
+  <defs
+     id="defs4">
+    <marker
+       inkscape:stockid="Arrow1Send"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Send"
+       style="overflow:visible">
+      <path
+         id="path3789"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         transform="matrix(-0.2,0,0,-0.2,-1.2,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend"
+       style="overflow:visible">
+      <path
+         id="path3783"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend-4"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3783-6"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.7367875"
+     inkscape:cx="381.65964"
+     inkscape:cy="354.91916"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     borderlayer="true"
+     inkscape:showpageshadow="false"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:window-width="1366"
+     inkscape:window-height="712"
+     inkscape:window-x="0"
+     inkscape:window-y="27"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata7">
+    <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>RPP Wiring for Development</dc:title>
+        <dc:creator>
+          <cc:Agent>
+            <dc:title>Carlos Jenkins</dc:title>
+          </cc:Agent>
+        </dc:creator>
+        <dc:rights>
+          <cc:Agent>
+            <dc:title>2013 Czech Technical University in Prague</dc:title>
+          </cc:Agent>
+        </dc:rights>
+        <dc:date>Jun 24 2012</dc:date>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-44.499989,-136.21933)">
+    <image
+       y="136.21933"
+       x="44.499989"
+       id="image4682"
+       xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0a
+HBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIy
+MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAG2AdcDASIA
+AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA
+AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3
+ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm
+p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA
+AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx
+BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK
+U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3
+uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDqfsUI
+7D8qQ2sWMj16EVYJ70zO1G561wo62kV2tYs/d5rB8TatZaDp5kcBrhziKIfxGrHiLxLbaBYebKd0
+78RRA8ufevItT1S4u7w3V45kvJPuRjpGPQCmoKT1JsR317M0klxcPuuZOpz90dgK6rwL4S3SrqF7
+Edzcxq3b3qPwz4QbdHqGqKWkI3Rwnt7n3r07TbcRRbsc+lVLayC92TJYwquGXt6VBcafbyoyMuQw
+wfpWh2qNxt5rPlKaPKtU04+HZLqzlVn0+4U+UwHKn0q/4EuVudKns3ILRMQFPUA12mp2UN7btHPG
+HjPUEV5hFO3hHxbICrNbt98dyhPUfStIpPclo5m7i8nVbyNeiSMB7c1b8OSrHrRglAMVyhQg0mrL
+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
+g5zRRW8/gMI/GdLoRzYReyCiiisEaM//2Q==
+"
+       height="709.83832"
+       width="763.31927" />
+    <g
+       id="g4713">
+      <text
+         sodipodi:linespacing="125%"
+         id="text2996"
+         y="222.3622"
+         x="191.42859"
+         style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:#000000;font-family:Sans"
+         xml:space="preserve"><tspan
+           style="font-size:30px;font-weight:bold;fill:#ff0000;stroke:#000000;-inkscape-font-specification:Sans Bold"
+           y="222.3622"
+           x="191.42859"
+           id="tspan2998"
+           sodipodi:role="line">Power input</tspan></text>
+      <path
+         inkscape:connector-curvature="0"
+         id="path3000"
+         d="m 473.84375,206.09375 4,4 -72.125,0 0,8 72.125,0 -4,4 14,-4 3.59375,0 0,-1.03125 10.40625,-2.96875 -10.40625,-2.96875 0,-1.03125 -3.59375,0 -14,-4 z"
+         style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#ff0000;fill-opacity:1;stroke:#000000;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" />
+    </g>
+    <g
+       id="g4718">
+      <text
+         sodipodi:linespacing="125%"
+         id="text2996-6"
+         y="540.63855"
+         x="303.08734"
+         style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#00ff00;fill-opacity:1;stroke:#000000;font-family:Sans"
+         xml:space="preserve"><tspan
+           style="font-size:30px;font-weight:bold;fill:#00ff00;stroke:#000000;-inkscape-font-specification:Sans Bold"
+           y="540.63855"
+           x="303.08734"
+           id="tspan2998-2"
+           sodipodi:role="line">JTAG</tspan></text>
+      <path
+         inkscape:connector-curvature="0"
+         id="path3000-9"
+         d="m 459.78125,524.5 4,4 -72.125,0 0,8 72.125,0 -4,4 14,-4 3.59375,0 0,-1.03125 10.40625,-2.96875 -10.40625,-2.96875 0,-1.03125 -3.59375,0 -14,-4 z"
+         style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" />
+    </g>
+    <g
+       id="g4723">
+      <text
+         xml:space="preserve"
+         style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:#000000;font-family:Sans"
+         x="278.80164"
+         y="577.78143"
+         id="text4618"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4620"
+           x="278.80164"
+           y="577.78143"
+           style="font-size:30px;font-weight:bold;fill:#0000ff;stroke:#000000;-inkscape-font-specification:Sans Bold">RS232</tspan></text>
+      <path
+         inkscape:connector-curvature="0"
+         id="path4622"
+         d="m 459.78125,558.875 4,4 -72.125,0 0,8 72.125,0 -4,4 14,-4 3.59375,0 0,-1.03125 10.40625,-2.96875 -10.40625,-2.96875 0,-1.03125 -3.59375,0 -14,-4 z"
+         style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#000080;fill-opacity:1;stroke:#000000;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" />
+    </g>
+    <g
+       id="g4708">
+      <text
+         sodipodi:linespacing="125%"
+         id="text4624"
+         y="323.79074"
+         x="317.14288"
+         style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:#000000;font-family:Sans"
+         xml:space="preserve"><tspan
+           style="font-size:22px;font-weight:bold;fill:#ffffff;stroke:#000000;-inkscape-font-specification:Sans Bold"
+           y="323.79074"
+           x="317.14288"
+           id="tspan4626"
+           sodipodi:role="line">XDS100v2 JTAG Emulator</tspan></text>
+      <path
+         inkscape:connector-curvature="0"
+         id="path4628"
+         d="m 704.0625,309.625 4,4 -72.125,0 0,8 72.125,0 -4,4 14,-4 3.59375,0 0,-1.03125 10.40625,-2.96875 -10.40625,-2.96875 0,-1.03125 -3.59375,0 -14,-4 z"
+         style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" />
+    </g>
+  </g>
+</svg>
diff --git a/doc/images/external_mode_configuration.png b/doc/images/external_mode_configuration.png
new file mode 100644 (file)
index 0000000..a3a7a4d
Binary files /dev/null and b/doc/images/external_mode_configuration.png differ
diff --git a/doc/images/itcr.png b/doc/images/itcr.png
new file mode 100644 (file)
index 0000000..46b5890
Binary files /dev/null and b/doc/images/itcr.png differ
diff --git a/doc/images/logos.png b/doc/images/logos.png
new file mode 100644 (file)
index 0000000..4da03d4
Binary files /dev/null and b/doc/images/logos.png differ
diff --git a/doc/images/logos.svg b/doc/images/logos.svg
new file mode 100644 (file)
index 0000000..3fb0638
--- /dev/null
@@ -0,0 +1,113 @@
+<?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:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="724.28577"
+   height="357"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="logos.svg"
+   inkscape:export-filename="logos.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90">
+  <defs
+     id="defs4" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="1"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1.745098"
+     inkscape:cx="362.14288"
+     inkscape:cy="178.5"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1600"
+     inkscape:window-height="844"
+     inkscape:window-x="0"
+     inkscape:window-y="27"
+     inkscape:window-maximized="1"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     borderlayer="true"
+     inkscape:showpageshadow="false"
+     fit-margin-left="5"
+     fit-margin-top="5"
+     fit-margin-bottom="5"
+     fit-margin-right="5" />
+  <metadata
+     id="metadata7">
+    <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 />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-9.6428223,-428.14789)">
+    <image
+       y="433.14789"
+       x="373.92856"
+       id="image3023"
+       xlink:href="file:///home/carlos/rpp-simulink/doc/reports/report/images/itcr.png"
+       height="347"
+       width="355" />
+    <g
+       id="g3089"
+       transform="translate(0,12)">
+      <image
+         width="326"
+         height="247.66556"
+         xlink:href="file:///home/carlos/rpp-simulink/doc/reports/report/images/cvut.png"
+         id="image3034"
+         x="14.642822"
+         y="433.36218" />
+      <text
+         sodipodi:linespacing="125%"
+         id="text3048"
+         y="724.11914"
+         x="177.5217"
+         style="font-size:10.63101578000000025px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#1576c3;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans;text-anchor:middle;text-align:center"
+         xml:space="preserve"><tspan
+           style="font-size:24.80570412000000147px;font-weight:bold;fill:#1576c3;fill-opacity:1;-inkscape-font-specification:DejaVu Sans Bold;text-anchor:middle;text-align:center"
+           y="724.11914"
+           x="25.501986"
+           id="tspan3050"
+           sodipodi:role="line">ČESKÉ VYSOKÉ UČENÍ </tspan><tspan
+           style="font-size:24.80570412000000147px;font-weight:bold;fill:#1576c3;fill-opacity:1;-inkscape-font-specification:DejaVu Sans Bold;text-anchor:middle;text-align:center"
+           id="tspan3052"
+           y="755.12628"
+           x="25.501986"
+           sodipodi:role="line">TECHNICKÉ V PRAZE</tspan></text>
+    </g>
+    <flowRoot
+       xml:space="preserve"
+       id="flowRoot3054"
+       style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"><flowRegion
+         id="flowRegion3056"><rect
+           id="rect3058"
+           width="98"
+           height="27"
+           x="66"
+           y="746.36218" /></flowRegion><flowPara
+         id="flowPara3060" /></flowRoot>  </g>
+</svg>
diff --git a/doc/images/pinout.pdf b/doc/images/pinout.pdf
new file mode 120000 (symlink)
index 0000000..7d451a0
--- /dev/null
@@ -0,0 +1 @@
+../../rpp/lib/rpp/doc/board.pdf
\ No newline at end of file
diff --git a/doc/images/pinout.pdf.png b/doc/images/pinout.pdf.png
new file mode 100644 (file)
index 0000000..8c12db0
Binary files /dev/null and b/doc/images/pinout.pdf.png differ
diff --git a/doc/images/test_wiring.png b/doc/images/test_wiring.png
new file mode 100644 (file)
index 0000000..6c81b41
Binary files /dev/null and b/doc/images/test_wiring.png differ
diff --git a/refs/tms570.pdf b/refs/tms570.pdf
new file mode 100644 (file)
index 0000000..042d96e
Binary files /dev/null and b/refs/tms570.pdf differ
diff --git a/rpp/blocks/sfunction_aout.c b/rpp/blocks/sfunction_aout.c
new file mode 100644 (file)
index 0000000..7aba23c
--- /dev/null
@@ -0,0 +1,163 @@
+/* Copyright (C) 2013, 2014 Czech Technical University in Prague
+ *
+ * Authors:
+ *     - Carlos Jenkins <carlos@jenkins.co.cr>
+ *
+ * This document contains proprietary information belonging to Czech
+ * Technical University in Prague. Passing on and copying of this
+ * document, and communication of its contents is not permitted
+ * without prior written authorization.
+ *
+ * File : sfunction_aout.c
+ * Abstract:
+ *     C-MEX S-function block for RPP analog output.
+ *
+ * References:
+ *     header.c
+ *     trailer.c
+ *
+ * Compile with:
+ *     <matlabroot>/bin/mex sfunction_aout.c
+ */
+
+/*
+%YAML 1.2
+---
+Name: Analog Output
+Category: IO blocks
+Header: rpp/adc.h
+Mnemonic: DAC
+
+Inputs:
+  - { name: "Analog Output", type: "uint16" }
+
+Outputs:
+  - { name: "ErrFlag", type: "bool" }
+
+Parameters:
+  - { name: "Pin number [1-4]", type: "uint8" }
+  - { name: "Input in millivolts", type: "bool"  }
+
+# Description and Help is in Markdown mark-up
+Description: |
+
+  Sets the analog value of the specified analog output pin on the RPP
+  board.
+
+  If 'input is voltage' is set the value must be an unsigned 16 bit
+  integer between 0-12000 (millivolts to set the analog output). If
+  'input is voltage' is NOT set the value must be and unsigned 16 bit
+  integer between 0-4095 (DAC is 12 bit).
+
+  If an error is detected while setting the value, the ErrFlag is set
+  high.
+
+Help: |
+
+  Sets the analog value of the specified analog output pin on the RPP board. If an error is detected 
+  while setting the value, the ErrFlag is set high.  
+
+  This block allows to write to the analog outputs on the RPP board. The UseVoltage flag allows the 
+  user to configure if block inputs should be interpreted as raw DAC value or millivolts. The ErrFlag 
+  should raise it `rpp_dac_update()` or `rpp_dac_set()` (or `rpp_dac_set_voltage()` 
+  depending on block configuration) returns error. Because the ErrFlag should never set, once set the 
+  following steps will never clear it back.
+
+  `rpp_dac_update()` is called on each block but the implementation provides this to be efficient.
+
+  There is a know bug on the RPP Library, check `rpp_dac_update()` on the RPP API for details. 
+  Because of this, the outputs of the DACs are initialized on the first step of the model and not on 
+  the model initialization.
+
+Status: Stable
+
+RPP API functions used:
+    - rpp_dac_setup()
+    - rpp_dac_set()
+    - rpp_dac_set_voltage()
+    - rpp_dac_update()
+
+Relevant demos:
+    - analog_passthrough
+    - analog_sinewave
+...
+*/
+
+
+#define S_FUNCTION_NAME sfunction_aout
+#include "header.c"
+
+
+static void mdlInitializeSizes(SimStruct *S)
+{
+    /*
+     * Configure parameters: 1
+     *  - Pin number: [1-4]
+     *  - Use voltage.
+     */
+    if (!rppSetNumParams(S, 2)) {
+        return;
+    }
+
+    /*
+     * Configure input ports: 1
+     *  - Analog output.
+     */
+    if (!ssSetNumInputPorts(S, 1)) {
+        return;
+    }
+    rppAddInputPort(S, 0, SS_UINT16);
+
+    /*
+     * Configure output ports: 1
+     *  - Error flag.
+     */
+    if (!ssSetNumOutputPorts(S, 1)) {
+        return;
+    }
+    rppAddOutputPort(S, 0, SS_BOOLEAN);
+
+    /* Set standard options for this block */
+    rppSetStandardOptions(S);
+}
+
+
+#ifdef MATLAB_MEX_FILE
+#define MDL_CHECK_PARAMETERS
+static void mdlCheckParameters(SimStruct *S)
+{
+    /* Check the parameter 1 */
+    if (!rppValidParamRange(S, 0, 1, 4)) {
+        return;
+    }
+
+    /* Check the parameter 2 */
+    if (!rppValidParamBoolean(S, 1)) {
+        return;
+    }
+}
+#endif
+
+
+#ifdef MATLAB_MEX_FILE
+#define MDL_SET_WORK_WIDTHS
+static void mdlSetWorkWidths(SimStruct *S)
+{
+    /* Set number of run-time parameters */
+    if (!ssSetNumRunTimeParams(S, 2)) {
+        return;
+    }
+
+    /* Register the run-time parameter 1 */
+    ssRegDlgParamAsRunTimeParam(S, 0, 0, "p1", SS_UINT8);
+
+    /* Register the run-time parameter 2 */
+    ssRegDlgParamAsRunTimeParam(S, 1, 1, "p2", SS_BOOLEAN);
+}
+#endif
+
+
+#define COMMON_MDLINITIALIZESAMPLETIMES_INHERIT
+#define UNUSED_MDLOUTPUTS
+#define UNUSED_MDLTERMINATE
+#include "trailer.c"
diff --git a/rpp/blocks/sfunction_din.c b/rpp/blocks/sfunction_din.c
new file mode 100644 (file)
index 0000000..8a0a90c
--- /dev/null
@@ -0,0 +1,172 @@
+/* Copyright (C) 2013, 2014 Czech Technical University in Prague
+ *
+ * Authors:
+ *     - Carlos Jenkins <carlos@jenkins.co.cr>
+ *
+ * This document contains proprietary information belonging to Czech
+ * Technical University in Prague. Passing on and copying of this
+ * document, and communication of its contents is not permitted
+ * without prior written authorization.
+ *
+ * File : sfunction_din.c
+ * Abstract:
+ *     C-MEX S-function block for RPP digital input.
+ *
+ * References:
+ *     header.c
+ *     trailer.c
+ *
+ * Compile with:
+ *     <matlabroot>/bin/mex sfunction_din.c
+ */
+
+/*
+%YAML 1.2
+---
+Name: Digital Input
+Category: IO blocks
+Header: rpp/din.h
+Mnemonic: DIN
+
+Inputs:
+
+Outputs:
+  - { name: "Digital Input", type: "bool" }
+  - { name: "ErrFlag",       type: "bool" }
+
+Parameters:
+  - { name: "Pin number",             type: "uint8", range: "[0-15]"           }
+  - { name: "Use variable threshold", type: "bool"                             }
+  - { name: "Pull",                   type: "Choice from Pull-down or Pull-up" }
+  - { name: "Active",                 type: "Choice from Active or Tri-stated" }
+
+# Description and Help is in Markdown mark-up
+Description: |
+
+  Gets the digital value of the specified digital input pin on the RPP board.
+
+  If pin is high the output is 1, 0 if the pin is low.
+
+  If an error is detected while getting the pin, the ErrFlag is set high.
+
+Help: |
+
+  This block allows to read the digital inputs on the RPP board. For pins number 0-7 is not
+  relevant and not visible parameter 'Use variable threshold' and only one block for each pin
+  can be in model. And oppositely for other pins (8-15) are not relevant and visible parameters
+  of names 'Pull' and 'Active'. The variable threshold check change the read mode of the pin. For
+  setting it see Digital Input Configure block.
+
+  The ErrFlag should raise if `rpp_din_update()` or `rpp_din_get()` returns error. `rpp_din_update()`
+  is called just by the first DIN block in the model and thus only the first block could raise the
+  flag because of this. In case an errors occurs the return value will always be LOW (0). Because the
+  ErrFlag should never set, once set the following steps will never clear it back.
+
+Status: Stable
+
+RPP API functions used:
+    - rpp_din_setup()
+    - rpp_din_update()
+    - rpp_din_get()
+
+Relevant demos:
+    - digital_passthrough
+    - hbridge_digital_control
+...
+*/
+
+#define S_FUNCTION_NAME sfunction_din
+#include "header.c"
+
+
+static void mdlInitializeSizes(SimStruct *S)
+{
+    /*
+     * Configure parameters: 1
+     *  - Pin number: [1-16]
+     *  - Use variable threshold: [true|false]
+     *  - Pull: [Pull-up|Pull-down]
+     *  - Active: [Active|Tristate]
+     */
+    if (!rppSetNumParams(S, 4)) {
+        return;
+    }
+
+    /*
+     * Configure input ports: 0
+     */
+    if (!ssSetNumInputPorts(S, 0)) {
+        return;
+    }
+
+    /*
+     * Configure output ports: 2
+     *  - Digital input.
+     *  - Error flag.
+     */
+    if (!ssSetNumOutputPorts(S, 2)) {
+        return;
+    }
+    rppAddOutputPort(S, 0, SS_BOOLEAN);
+    rppAddOutputPort(S, 1, SS_BOOLEAN);
+
+    /* Set standard options for this block */
+    rppSetStandardOptions(S);
+}
+
+
+#ifdef MATLAB_MEX_FILE
+#define MDL_CHECK_PARAMETERS
+static void mdlCheckParameters(SimStruct *S)
+{
+    /* Check the parameter 1 */
+    if (!rppValidParamRange(S, 0, 0, 15)) {
+        return;
+    }
+
+    /* Check the parameter 2 */
+    if (!rppValidParamBoolean(S, 1)) {
+        return;
+    }
+
+    /* Check the parameter 3 */
+    if (!rppValidParamRange(S, 2, 0, 2)) {
+        return;
+    }
+
+    /* Check the parameter 4 */
+    if (!rppValidParamRange(S, 3, 0, 2)) {
+        return;
+    }
+}
+#endif
+
+
+#ifdef MATLAB_MEX_FILE
+#define MDL_SET_WORK_WIDTHS
+static void mdlSetWorkWidths(SimStruct *S)
+{
+    /* Set number of run-time parameters */
+    if (!ssSetNumRunTimeParams(S, 4)) {
+        return;
+    }
+
+    /* Register the run-time parameter 1 */
+    ssRegDlgParamAsRunTimeParam(S, 0, 0, "p1", SS_INT8);
+
+    /* Register the run-time parameter 2 */
+    ssRegDlgParamAsRunTimeParam(S, 1, 1, "p2", SS_BOOLEAN);
+
+    /* Register the run-time parameter 3 */
+    ssRegDlgParamAsRunTimeParam(S, 2, 2, "p3", SS_UINT8);
+
+    /* Register the run-time parameter 4 */
+    ssRegDlgParamAsRunTimeParam(S, 3, 3, "p4", SS_UINT8);
+}
+#endif
+
+
+#define COMMON_MDLINITIALIZESAMPLETIMES_INHERIT
+#define UNUSED_MDLOUTPUTS
+#define UNUSED_MDLTERMINATE
+#include "trailer.c"
diff --git a/rpp/blocks/sfunction_dinc.c b/rpp/blocks/sfunction_dinc.c
new file mode 100644 (file)
index 0000000..0e0da1f
--- /dev/null
@@ -0,0 +1,126 @@
+/* Copyright (C) 2013-2014 Czech Technical University in Prague
+ *
+ * Authors:
+ *     - Karel Kočí
+ *
+ * This document contains proprietary information belonging to Czech
+ * Technical University in Prague. Passing on and copying of this
+ * document, and communication of its contents is not permitted
+ * without prior written authorization.
+ *
+ * File : sfunction_dinc.c
+ * Abstract:
+ *     C-MEX S-function block for RPP digital input configuration.
+ *
+ * References:
+ *     header.c
+ *     trailer.c
+ *
+ * Compile with:
+ *     <matlabroot>/bin/mex sfunction_dinc.c
+ */
+
+/*
+%YAML 1.2
+---
+Name: Digital Input Configure
+Category: IO blocks
+Header: rpp/din.h
+Mnemonic: DINC
+
+Inputs:
+
+Outputs:
+
+Parameters:
+  - { name: "Reference voltage for pins 8-11",  type: "uint16", range: "[0-4095]" }
+  - { name: "Reference voltage for pins 12-15", type: "uint16", range: "[0-4095]" }
+
+# Description and Help is in Markdown mark-up
+Description: &desc |
+
+  This block allows one to set reference voltage (threshold) for DIN pins. The block have two parameters,
+  one for pins 8 - 11 and the other for pins 12 - 15.
+
+Help: *desc
+
+Status: Stable
+
+RPP API functions used:
+    - rpp_din_ref()
+
+Relevant demos:
+...
+*/
+
+#define S_FUNCTION_NAME sfunction_dinc
+#include "header.c"
+
+
+static void mdlInitializeSizes(SimStruct *S)
+{
+    /*
+     * Configure parameters: 2
+     *  - Reference voltage for pins 8-11:  [0-4095]
+     *  - Reference voltage for pins 12-15: [0-4095]
+     */
+    if (!rppSetNumParams(S, 2)) {
+        return;
+    }
+
+    /*
+     * Configure input ports: 0
+     */
+    if (!ssSetNumInputPorts(S, 0)) {
+        return;
+    }
+
+    /*
+     * Configure output ports: 0
+     */
+    if (!ssSetNumOutputPorts(S, 0)) {
+        return;
+    }
+    
+    /* Set standard options for this block */
+    rppSetStandardOptions(S);
+}
+
+
+#ifdef MATLAB_MEX_FILE
+#define MDL_CHECK_PARAMETERS
+static void mdlCheckParameters(SimStruct *S)
+{
+    /* Check the parameter 1 */
+    if (!rppValidParamRange(S, 0, 0, 4095)) {
+        return;
+    }
+    
+    /* Check the parameter 2 */
+    if (!rppValidParamRange(S, 1, 0, 4095)) {
+        return;
+    }
+}
+#endif
+
+
+#ifdef MATLAB_MEX_FILE
+#define MDL_SET_WORK_WIDTHS
+static void mdlSetWorkWidths(SimStruct *S)
+{
+    /* Set number of run-time parameters */
+    if (!ssSetNumRunTimeParams(S, 2)) {
+        return;
+    }
+
+    /* Register the run-time parameter 1 */
+    ssRegDlgParamAsRunTimeParam(S, 0, 0, "p1", SS_UINT16);
+    ssRegDlgParamAsRunTimeParam(S, 1, 1, "p2", SS_UINT16);
+}
+#endif
+
+
+#define COMMON_MDLINITIALIZESAMPLETIMES_INHERIT
+#define UNUSED_MDLOUTPUTS
+#define UNUSED_MDLTERMINATE
+#include "trailer.c"
diff --git a/rpp/blocks/sfunction_frayconfig.c b/rpp/blocks/sfunction_frayconfig.c
new file mode 100644 (file)
index 0000000..43ac04b
--- /dev/null
@@ -0,0 +1,277 @@
+/* Copyright (C) 2013, 2014 Czech Technical University in Prague
+ *
+ * Authors:
+ *     - Michal Horn <hornimch@fel.cvut.cz>
+ *
+ * This document contains proprietary information belonging to Czech
+ * Technical University in Prague. Passing on and copying of this
+ * document, and communication of its contents is not permitted
+ * without prior written authorization.
+ *
+ * File : sfunction_frayc.c
+ * Abstract:
+ *     C-MEX S-function block for RPP FlexRay cluster configuration.
+ *
+ * References:
+ *     header.c
+ *     trailer.c
+ *
+ * Compile with:
+ *     <matlabroot>/bin/mex sfunction_frayconfig.c
+ */
+
+/*
+%YAML 1.2
+---
+Name: Configure FlexRay node
+Category: FlexRay
+Header: rpp/fr.h
+Mnemonic: FRC
+
+Inputs:
+
+Outputs:
+  - { name: "ErrFlag", type: "bool" }
+
+Parameters:
+  - { name: "gColdStartAttempts",                type: "uint8"  }
+  - { name: "gListenNoise",                      type: "uint8"  }
+  - { name: "gMacroPerCycle",                    type: "uint16" }
+  - { name: "gMaxWithoutClockCorrectionFatal",   type: "uint8"  }
+  - { name: "gMaxWithoutClockCorrectionPassive", type: "uint8"  }
+  - { name: "gNetworkManagementVectorLength",    type: "uint8"  }
+  - { name: "gNumberOfMinislots",                type: "uint16" }
+  - { name: "gNumberOfStaticSlots",              type: "uint16" }
+  - { name: "gOffsetCorrectionStart",            type: "uint16" }
+  - { name: "gPayloadLengthStatic",              type: "uint8"  }
+  - { name: "gSyncNodeMax",                      type: "uint8"  }
+  - { name: "gdActionPointOffset",               type: "uint8"  }
+  - { name: "gdCASRxLowMax",                     type: "uint8"  }
+  - { name: "gdDynamicSlotIdlePhase",            type: "uint8"  }
+  - { name: "gdMinislot",                        type: "uint8"  }
+  - { name: "gdMinislotActionPointOffset",       type: "uint8"  }
+  - { name: "gdNIT",                             type: "uint16" }
+  - { name: "gdSampleClockPeriod",               type: "uint8"  }
+  - { name: "gdStaticSlot",                      type: "uint16" }
+  - { name: "gdTSSTransmitter",                  type: "uint8"  }
+  - { name: "gdWakeupSymbolRxIdle",              type: "uint8"  }
+  - { name: "gdWakeupSymbolRxLow",               type: "uint8"  }
+  - { name: "gdWakeupSymbolRxWindow",            type: "uint16" }
+  - { name: "gdWakeupSymbolTxIdle",              type: "uint8"  }
+  - { name: "gdWakeupSymbolTxLow",               type: "uint8"  }
+  - { name: "pAllowHaltDueToClock",              type: "bool"   }
+  - { name: "pAllowPassiveToActive",             type: "uint8"  }
+  - { name: "pChannels",                         type: "uint8"  }
+  - { name: "pClusterDriftDamping",              type: "uint8"  }
+  - { name: "pDelayCompensationA",               type: "uint16" }
+  - { name: "pDelayCompensationB",               type: "uint16" }
+  - { name: "pExternOffsetCorrection",           type: "uint8"  }
+  - { name: "pExternRateCorrection",             type: "uint8"  }
+  - { name: "pKeySlotUsedForStartup",            type: "bool"   }
+  - { name: "pKeySlotUsedForSync",               type: "bool"   }
+  - { name: "pLatestTx",                         type: "uint16" }
+  - { name: "pMacroInitialOffsetA",              type: "uint8"  }
+  - { name: "pMacroInitialOffsetB",              type: "uint8"  }
+  - { name: "pMicroInitialOffsetA",              type: "uint8"  }
+  - { name: "pMicroInitialOffsetB",              type: "uint8"  }
+  - { name: "pMicroPerCycle",                    type: "uint32" }
+  - { name: "pRateCorrectionOut",                type: "uint16" }
+  - { name: "pOffsetCorrectionOut",              type: "uint16" }
+  - { name: "pSamplesPerMicrotick",              type: "uint8"  }
+  - { name: "pSingleSlotEnabled",                type: "uint8"  }
+  - { name: "pWakeupChannel",                    type: "uint8"  }
+  - { name: "pWakeupPattern",                    type: "uint8"  }
+  - { name: "pdAcceptedStartupRange",            type: "uint16" }
+  - { name: "pdListenTimeout",                   type: "uint32" }
+  - { name: "pdMaxDrift",                        type: "uint16" }
+  - { name: "pDecodingCorrection",               type: "uint8"  }
+  - { name: "syncFramePayloadMultiplexEnabled",  type: "bool"   }
+  - { name: "secureBuffers",                     type: "uint8"  }
+
+# Description and Help is in Markdown mark-up
+Description: &desc |
+
+  This block ...
+
+Help: *desc
+
+Status: Beta
+
+RPP API functions used:
+
+Relevant demos:
+...
+*/
+
+#define S_FUNCTION_NAME sfunction_frayconfig
+#include "header.c"
+#include <stdio.h>
+
+enum params {
+       gColdStartAttempts_IDX                 = 0,
+       gListenNoise_IDX                                   = 1,
+       gMacroPerCycle_IDX                                 = 2,
+       gMaxWithoutClockCorrectionFatal_IDX    = 3,
+       gMaxWithoutClockCorrectionPassive_IDX  = 4,
+       gNetworkManagementVectorLength_IDX     = 5,
+       gNumberOfMinislots_IDX                 = 6,
+       gNumberOfStaticSlots_IDX                   = 7,
+       gOffsetCorrectionStart_IDX                 = 8,
+       gPayloadLengthStatic_IDX                   = 9,
+       gSyncNodeMax_IDX                                   = 10,
+       gdActionPointOffset_IDX                    = 11,
+       gdCASRxLowMax_IDX                                  = 12,
+       gdDynamicSlotIdlePhase_IDX                 = 13,
+       gdMinislot_IDX                             = 14,
+       gdMinislotActionPointOffset_IDX        = 15,
+       gdNIT_IDX                                                  = 16,
+       gdSampleClockPeriod_IDX                    = 17,
+       gdStaticSlot_IDX                                   = 18,
+       gdTSSTransmitter_IDX                       = 19,
+       gdWakeupSymbolRxIdle_IDX                   = 20,
+       gdWakeupSymbolRxLow_IDX                    = 21,
+       gdWakeupSymbolRxWindow_IDX                 = 22,
+       gdWakeupSymbolTxIdle_IDX                   = 23,
+       gdWakeupSymbolTxLow_IDX                    = 24,
+
+       pAllowHaltDueToClock_IDX                   = 25,
+       pAllowPassiveToActive_IDX                  = 26,
+       pChannels_IDX                                      = 27,
+       pClusterDriftDamping_IDX                   = 28,
+       pDelayCompensationA_IDX                    = 29,
+       pDelayCompensationB_IDX                    = 30,
+       pExternOffsetCorrection_IDX            = 31,
+       pExternRateCorrection_IDX                  = 32,
+       pKeySlotUsedForStartup_IDX                 = 33,
+       pKeySlotUsedForSync_IDX                    = 34,
+       pLatestTx_IDX                                      = 35,
+       pMacroInitialOffsetA_IDX                   = 36,
+       pMacroInitialOffsetB_IDX                   = 37,
+       pMicroInitialOffsetA_IDX                   = 38,
+       pMicroInitialOffsetB_IDX                   = 39,
+       pMicroPerCycle_IDX                                 = 40,
+       pRateCorrectionOut_IDX                 = 41,
+       pOffsetCorrectionOut_IDX                   = 42,
+       pSamplesPerMicrotick_IDX                   = 43,
+       pSingleSlotEnabled_IDX                 = 44,
+       pWakeupChannel_IDX                                 = 45,
+       pWakeupPattern_IDX                                 = 46,
+       pdAcceptedStartupRange_IDX                 = 47,
+       pdListenTimeout_IDX                        = 48,
+       pdMaxDrift_IDX                             = 49,
+       pDecodingCorrection_IDX                    = 50,
+       syncFramePayloadMultiplexEnabled_IDX   = 51,
+       secureBuffers_IDX                                  = 52,
+       PARAM_COUNT
+};
+
+
+static void mdlInitializeSizes(SimStruct *S)
+{
+
+    if (!rppSetNumParams(S, PARAM_COUNT)) {
+        return;
+    }
+
+    /*
+     * Configure input ports: 0
+     */
+    if (!ssSetNumInputPorts(S, 0)) {
+        return;
+    }
+
+    /*
+     * Configure output ports: 1
+     *  - Error flag.
+     */
+    if (!ssSetNumOutputPorts(S, 1)) {
+        return;
+    }
+    rppAddOutputPort(S, 0, SS_BOOLEAN);
+
+    /* Set standard options for this block */
+    rppSetStandardOptions(S);
+}
+
+
+#ifdef MATLAB_MEX_FILE
+#define MDL_CHECK_PARAMETERS
+static void mdlCheckParameters(SimStruct *S)
+{
+
+}
+#endif
+
+
+#ifdef MATLAB_MEX_FILE
+#define MDL_SET_WORK_WIDTHS
+static void mdlSetWorkWidths(SimStruct *S)
+{
+    /* Set number of run-time parameters */
+    if (!ssSetNumRunTimeParams(S, PARAM_COUNT)) {
+        return;
+    }
+
+    /* Register the run-time parameter 1 */
+       ssRegDlgParamAsRunTimeParam(S, gColdStartAttempts_IDX, gColdStartAttempts_IDX, "gColdStartAttempts", SS_UINT8);
+       ssRegDlgParamAsRunTimeParam(S, gListenNoise_IDX, gListenNoise_IDX, "gListenNoise", SS_UINT8);
+       ssRegDlgParamAsRunTimeParam(S, gMacroPerCycle_IDX, gMacroPerCycle_IDX, "gMacroPerCycle", SS_UINT16);
+       ssRegDlgParamAsRunTimeParam(S, gMaxWithoutClockCorrectionFatal_IDX, gMaxWithoutClockCorrectionFatal_IDX, "gMaxWithoutClockCorrectionFatal", SS_UINT8);
+       ssRegDlgParamAsRunTimeParam(S, gMaxWithoutClockCorrectionPassive_IDX, gMaxWithoutClockCorrectionPassive_IDX, "gMaxWithoutClockCorrectionPassive", SS_UINT8);
+       ssRegDlgParamAsRunTimeParam(S, gNetworkManagementVectorLength_IDX, gNetworkManagementVectorLength_IDX, "gNetworkManagementVectorLength", SS_UINT8);
+       ssRegDlgParamAsRunTimeParam(S, gNumberOfMinislots_IDX, gNumberOfMinislots_IDX, "gNumberOfMinislots", SS_UINT16);
+       ssRegDlgParamAsRunTimeParam(S, gNumberOfStaticSlots_IDX, gNumberOfStaticSlots_IDX, "gNumberOfStaticSlots", SS_UINT16);
+       ssRegDlgParamAsRunTimeParam(S, gOffsetCorrectionStart_IDX, gOffsetCorrectionStart_IDX, "gOffsetCorrectionStart", SS_UINT16);
+       ssRegDlgParamAsRunTimeParam(S, gPayloadLengthStatic_IDX, gPayloadLengthStatic_IDX, "gPayloadLengthStatic", SS_UINT8);
+       ssRegDlgParamAsRunTimeParam(S, gSyncNodeMax_IDX, gSyncNodeMax_IDX, "gSyncNodeMax", SS_UINT8);
+       ssRegDlgParamAsRunTimeParam(S, gdActionPointOffset_IDX, gdActionPointOffset_IDX, "gdActionPointOffset", SS_UINT8);
+       ssRegDlgParamAsRunTimeParam(S, gdCASRxLowMax_IDX, gdCASRxLowMax_IDX, "gdCASRxLowMax", SS_UINT8);
+       ssRegDlgParamAsRunTimeParam(S, gdDynamicSlotIdlePhase_IDX, gdDynamicSlotIdlePhase_IDX, "gdDynamicSlotIdlePhase", SS_UINT8);
+       ssRegDlgParamAsRunTimeParam(S, gdMinislot_IDX, gdMinislot_IDX, "gdMinislot", SS_UINT8);
+       ssRegDlgParamAsRunTimeParam(S, gdMinislotActionPointOffset_IDX, gdMinislotActionPointOffset_IDX, "gdMinislotActionPointOffset", SS_UINT8);
+       ssRegDlgParamAsRunTimeParam(S, gdNIT_IDX, gdNIT_IDX, "gdNIT", SS_UINT16);
+       ssRegDlgParamAsRunTimeParam(S, gdSampleClockPeriod_IDX, gdSampleClockPeriod_IDX, "gdSampleClockPeriod", SS_UINT8);
+       ssRegDlgParamAsRunTimeParam(S, gdStaticSlot_IDX, gdStaticSlot_IDX, "gdStaticSlot", SS_UINT16);
+       ssRegDlgParamAsRunTimeParam(S, gdTSSTransmitter_IDX, gdTSSTransmitter_IDX, "gdTSSTransmitter", SS_UINT8);
+       ssRegDlgParamAsRunTimeParam(S, gdWakeupSymbolRxIdle_IDX, gdWakeupSymbolRxIdle_IDX, "gdWakeupSymbolRxIdle", SS_UINT8);
+       ssRegDlgParamAsRunTimeParam(S, gdWakeupSymbolRxLow_IDX, gdWakeupSymbolRxLow_IDX, "gdWakeupSymbolRxLow", SS_UINT8);
+       ssRegDlgParamAsRunTimeParam(S, gdWakeupSymbolRxWindow_IDX, gdWakeupSymbolRxWindow_IDX, "gdWakeupSymbolRxWindow", SS_UINT16);
+       ssRegDlgParamAsRunTimeParam(S, gdWakeupSymbolTxIdle_IDX, gdWakeupSymbolTxIdle_IDX, "gdWakeupSymbolTxIdle", SS_UINT8);
+       ssRegDlgParamAsRunTimeParam(S, gdWakeupSymbolTxLow_IDX, gdWakeupSymbolTxLow_IDX, "gdWakeupSymbolTxLow", SS_UINT8);
+
+       ssRegDlgParamAsRunTimeParam(S, pAllowHaltDueToClock_IDX, pAllowHaltDueToClock_IDX, "pAllowHaltDueToClock", SS_BOOLEAN);
+       ssRegDlgParamAsRunTimeParam(S, pAllowPassiveToActive_IDX, pAllowPassiveToActive_IDX, "pAllowPassiveToActive", SS_UINT8);
+       ssRegDlgParamAsRunTimeParam(S, pChannels_IDX, pChannels_IDX, "pChannels", SS_UINT8);
+       ssRegDlgParamAsRunTimeParam(S, pClusterDriftDamping_IDX, pClusterDriftDamping_IDX, "pClusterDriftDamping", SS_UINT8);
+       ssRegDlgParamAsRunTimeParam(S, pDelayCompensationA_IDX, pDelayCompensationA_IDX, "pDelayCompensationA", SS_UINT16);
+       ssRegDlgParamAsRunTimeParam(S, pDelayCompensationB_IDX, pDelayCompensationB_IDX, "pDelayCompensationB", SS_UINT16);
+       ssRegDlgParamAsRunTimeParam(S, pExternOffsetCorrection_IDX, pExternOffsetCorrection_IDX, "pExternOffsetCorrection", SS_UINT8);
+       ssRegDlgParamAsRunTimeParam(S, pExternRateCorrection_IDX, pExternRateCorrection_IDX, "pExternRateCorrection", SS_UINT8);
+       ssRegDlgParamAsRunTimeParam(S, pKeySlotUsedForStartup_IDX, pKeySlotUsedForStartup_IDX, "pKeySlotUsedForStartup", SS_BOOLEAN);
+       ssRegDlgParamAsRunTimeParam(S, pKeySlotUsedForSync_IDX, pKeySlotUsedForSync_IDX, "pKeySlotUsedForSync", SS_BOOLEAN);
+       ssRegDlgParamAsRunTimeParam(S, pLatestTx_IDX, pLatestTx_IDX, "pLatestTx", SS_UINT16);
+       ssRegDlgParamAsRunTimeParam(S, pMacroInitialOffsetA_IDX, pMacroInitialOffsetA_IDX, "pMacroInitialOffsetA", SS_UINT8);
+       ssRegDlgParamAsRunTimeParam(S, pMacroInitialOffsetB_IDX, pMacroInitialOffsetB_IDX, "pMacroInitialOffsetB", SS_UINT8);
+       ssRegDlgParamAsRunTimeParam(S, pMicroInitialOffsetA_IDX, pMicroInitialOffsetA_IDX, "pMicroInitialOffsetA", SS_UINT8);
+       ssRegDlgParamAsRunTimeParam(S, pMicroInitialOffsetB_IDX, pMicroInitialOffsetB_IDX, "pMicroInitialOffsetB", SS_UINT8);
+       ssRegDlgParamAsRunTimeParam(S, pMicroPerCycle_IDX, pMicroPerCycle_IDX, "pMicroPerCycle", SS_UINT32);
+       ssRegDlgParamAsRunTimeParam(S, pRateCorrectionOut_IDX, pRateCorrectionOut_IDX, "pRateCorrectionOut", SS_UINT16);
+       ssRegDlgParamAsRunTimeParam(S, pOffsetCorrectionOut_IDX, pOffsetCorrectionOut_IDX, "pOffsetCorrectionOut", SS_UINT16);
+       ssRegDlgParamAsRunTimeParam(S, pSamplesPerMicrotick_IDX, pSamplesPerMicrotick_IDX, "pSamplesPerMicrotick", SS_UINT8);
+       ssRegDlgParamAsRunTimeParam(S, pSingleSlotEnabled_IDX, pSingleSlotEnabled_IDX, "pSingleSlotEnabled", SS_UINT8);
+       ssRegDlgParamAsRunTimeParam(S, pWakeupChannel_IDX, pWakeupChannel_IDX, "pWakeupChannel", SS_UINT8);
+       ssRegDlgParamAsRunTimeParam(S, pWakeupPattern_IDX, pWakeupPattern_IDX, "pWakeupPattern", SS_UINT8);
+       ssRegDlgParamAsRunTimeParam(S, pdAcceptedStartupRange_IDX, pdAcceptedStartupRange_IDX, "pdAcceptedStartupRange", SS_UINT16);
+       ssRegDlgParamAsRunTimeParam(S, pdListenTimeout_IDX, pdListenTimeout_IDX, "pdListenTimeout", SS_UINT32);
+       ssRegDlgParamAsRunTimeParam(S, pdMaxDrift_IDX, pdMaxDrift_IDX, "pdMaxDrift", SS_UINT16);
+       ssRegDlgParamAsRunTimeParam(S, pDecodingCorrection_IDX, pDecodingCorrection_IDX, "pDecodingCorrection", SS_UINT8);
+       ssRegDlgParamAsRunTimeParam(S, syncFramePayloadMultiplexEnabled_IDX, syncFramePayloadMultiplexEnabled_IDX, "syncFramePayloadMultiplexEnabled", SS_BOOLEAN);
+       ssRegDlgParamAsRunTimeParam(S, secureBuffers_IDX, secureBuffers_IDX, "secureBuffers", SS_UINT8);
+}
+#endif
+
+
+#define COMMON_MDLINITIALIZESAMPLETIMES_INHERIT
+#define UNUSED_MDLOUTPUTS
+#define UNUSED_MDLTERMINATE
+#include "trailer.c"
diff --git a/rpp/blocks/sfunction_frayreceive.c b/rpp/blocks/sfunction_frayreceive.c
new file mode 100644 (file)
index 0000000..81d7f4b
--- /dev/null
@@ -0,0 +1,154 @@
+/* Copyright (C) 2013, 2014 Czech Technical University in Prague
+ *
+ * Authors:
+ *     - Michal Horn <hornimch@fel.cvut.cz>
+ *
+ * This document contains proprietary information belonging to Czech
+ * Technical University in Prague. Passing on and copying of this
+ * document, and communication of its contents is not permitted
+ * without prior written authorization.
+ *
+ * File : sfunction_frayreceive.c
+ * Abstract:
+ *     C-MEX S-function block for RPP FlexRay RX buffer configuration and message receiving.
+ *
+ * References:
+ *     header.c
+ *     trailer.c
+ *
+ * Compile with:
+ *     <matlabroot>/bin/mex sfunction_frayreceive.c
+ */
+
+/*
+%YAML 1.2
+---
+Name: Configure RX buffer
+Category: FlexRayin
+Header: rpp/fr.h
+Mnemonic: FRC
+
+Inputs:
+
+Outputs:
+  - { name: "ErrFlag", type: "bool" }
+  - { name: "Receive", type: "uint8 vector" }
+  - { name: "Length", type: "uint8" }
+  - { name: "Trigger", type: "bool" }
+
+Parameters:
+  - { name: "channel", type: "uint8" }
+  - { name: "cycleCounterFiltering", type: "uint8" }
+  - { name: "maxPayload", type: "uint8", range: "(in half-words)" }
+  - { name: "msgBufferInterrupt", type: "bool" }
+  - { name: "payloadPreambleIndicatorTr", type: "bool" }
+  - { name: "singleTransmit", type: "bool" }
+  - { name: "slotId", type: "uint32" }
+
+# Description and Help is in Markdown mark-up
+Description: &desc |
+
+  This block ...
+
+Help: *desc
+
+Status: Beta
+
+RPP API functions used:
+
+Relevant demos:
+...
+*/
+
+#define S_FUNCTION_NAME sfunction_frayreceive
+#include "header.c"
+#include <stdio.h>
+
+enum params {
+       channel_IDX                                             = 0,
+       cycleCounterFiltering_IDX               = 1,
+       maxPayload_IDX                                  = 2,
+       msgBufferInterrupt_IDX                  = 3,
+       payloadPreambleIndicatorTr_IDX  = 4,
+       singleTransmit_IDX                              = 5,
+       slotId_IDX                                              = 6,
+       PARAM_COUNT
+};
+
+enum outputs {
+       OUTPUT_ERROR_FLAG,
+       OUTPUT_MESSAGE,
+       OUTPUT_LENGTH,
+       OUTPUT_TRIGGER,
+       OUTPUT_COUNT,
+};
+
+
+static void mdlInitializeSizes(SimStruct *S)
+{
+    if (!rppSetNumParams(S, PARAM_COUNT)) {
+        return;
+    }
+
+    /*
+     * Configure input ports: 0
+     */
+    if (!ssSetNumInputPorts(S, 0)) {
+        return;
+    }
+
+
+    /*
+     * Configure output ports: 4
+     *  - Error flag.
+        *  - Message
+        *  - Length (number of received bytes)
+        *  - Trigger
+     */
+    if (!ssSetNumOutputPorts(S, OUTPUT_COUNT)) {
+        return;
+    }
+       rppAddOutputPort(S, OUTPUT_ERROR_FLAG, SS_BOOLEAN);
+       rppAddOutputVectorPort(S, OUTPUT_MESSAGE, SS_UINT8, 2*(int_T)mxGetPr(ssGetSFcnParam(S, 2))[0]);
+       rppAddOutputPort(S, OUTPUT_LENGTH, SS_UINT8);
+       rppAddOutputPort(S, OUTPUT_TRIGGER, SS_BOOLEAN);
+
+    /* Set standard options for this block */
+    rppSetStandardOptions(S);
+}
+
+
+#ifdef MATLAB_MEX_FILE
+#define MDL_CHECK_PARAMETERS
+static void mdlCheckParameters(SimStruct *S)
+{
+
+}
+#endif
+
+
+#ifdef MATLAB_MEX_FILE
+#define MDL_SET_WORK_WIDTHS
+static void mdlSetWorkWidths(SimStruct *S)
+{
+    /* Set number of run-time parameters */
+    if (!ssSetNumRunTimeParams(S, PARAM_COUNT)) {
+        return;
+    }
+
+    /* Register the run-time parameter 1 */
+    ssRegDlgParamAsRunTimeParam(S, channel_IDX, channel_IDX, "channel", SS_UINT8);
+    ssRegDlgParamAsRunTimeParam(S, cycleCounterFiltering_IDX, cycleCounterFiltering_IDX, "cycleCounterFiltering", SS_UINT8);
+    ssRegDlgParamAsRunTimeParam(S, maxPayload_IDX, maxPayload_IDX, "maxPayload", SS_UINT8);
+    ssRegDlgParamAsRunTimeParam(S, msgBufferInterrupt_IDX, msgBufferInterrupt_IDX, "msgBufferInterrupt", SS_BOOLEAN);
+    ssRegDlgParamAsRunTimeParam(S, payloadPreambleIndicatorTr_IDX, payloadPreambleIndicatorTr_IDX, "payloadPreambleIndicatorTr", SS_BOOLEAN);
+    ssRegDlgParamAsRunTimeParam(S, singleTransmit_IDX, singleTransmit_IDX, "singleTransmit", SS_BOOLEAN);
+    ssRegDlgParamAsRunTimeParam(S, slotId_IDX, slotId_IDX, "slotId", SS_UINT32);
+}
+#endif
+
+
+#define COMMON_MDLINITIALIZESAMPLETIMES_INHERIT
+#define UNUSED_MDLOUTPUTS
+#define UNUSED_MDLTERMINATE
+#include "trailer.c"
diff --git a/rpp/blocks/sfunction_fraysbc.c b/rpp/blocks/sfunction_fraysbc.c
new file mode 100644 (file)
index 0000000..2dd0d83
--- /dev/null
@@ -0,0 +1,136 @@
+/* Copyright (C) 2013, 2014 Czech Technical University in Prague
+ *
+ * Authors:
+ *     - Michal Horn <hornimch@fel.cvut.cz>
+ *
+ * This document contains proprietary information belonging to Czech
+ * Technical University in Prague. Passing on and copying of this
+ * document, and communication of its contents is not permitted
+ * without prior written authorization.
+ *
+ * File : sfunction_fraysbc.c
+ * Abstract:
+ *     C-MEX S-function block for RPP FlexRay static buffer configuration.
+ *
+ * References:
+ *     header.c
+ *     trailer.c
+ *
+ * Compile with:
+ *     <matlabroot>/bin/mex sfunction_fraysbc.c
+ */
+
+/*
+%YAML 1.2
+---
+Name: FlexRay static buffer configuration
+Category: FlexRay
+Header: rpp/fr.h
+Mnemonic: FRC
+
+Inputs:
+
+Outputs:
+
+Parameters:
+
+# Description and Help is in Markdown mark-up
+Description: &desc |
+
+  This block ...
+
+Help: *desc
+
+Status: Beta
+
+RPP API functions used:
+
+Relevant demos:
+...
+*/
+
+#define S_FUNCTION_NAME sfunction_fraysbc
+#include "header.c"
+#include <stdio.h>
+
+#define channel_IDX                                            0
+#define cycleCounterFiltering_IDX              1
+#define isTx_IDX                                               2
+#define maxPayload_IDX                                 3
+#define msgBufferInterrupt_IDX                 4
+#define payloadPreambleIndicatorTr_IDX 5
+#define singleTransmit_IDX                             6
+#define slotId_IDX                                             7
+
+
+static void mdlInitializeSizes(SimStruct *S)
+{
+    /*
+     * Configure parameters: 25
+        * channel (0 - A, 1 - B, 2 - AB)
+        * cycleCounterFiltering
+        * isTx
+        * maxPayload
+        * msgBufferInterrupt
+        * payloadPreambleIndicatorTr
+        * singleTransmit
+        * slotId
+     */
+    if (!rppSetNumParams(S, 8)) {
+        return;
+    }
+
+    /*
+     * Configure input ports: 0
+     */
+    if (!ssSetNumInputPorts(S, 0)) {
+        return;
+    }
+
+    /*
+     * Configure output ports: 0
+     */
+    if (!ssSetNumOutputPorts(S, 0)) {
+        return;
+    }
+
+    /* Set standard options for this block */
+    rppSetStandardOptions(S);
+}
+
+
+#ifdef MATLAB_MEX_FILE
+#define MDL_CHECK_PARAMETERS
+static void mdlCheckParameters(SimStruct *S)
+{
+
+}
+#endif
+
+
+#ifdef MATLAB_MEX_FILE
+#define MDL_SET_WORK_WIDTHS
+static void mdlSetWorkWidths(SimStruct *S)
+{
+    /* Set number of run-time parameters */
+    if (!ssSetNumRunTimeParams(S, 8)) {
+        return;
+    }
+
+    /* Register the run-time parameter 1 */
+       ssRegDlgParamAsRunTimeParam(S, channel_IDX, channel_IDX, "channel", SS_UINT8);
+       ssRegDlgParamAsRunTimeParam(S, cycleCounterFiltering_IDX, cycleCounterFiltering_IDX, "cycleCounterFiltering", SS_UINT8);
+       ssRegDlgParamAsRunTimeParam(S, isTx_IDX, isTx_IDX, "isTx", SS_BOOLEAN);
+       ssRegDlgParamAsRunTimeParam(S, maxPayload_IDX, maxPayload_IDX, "maxPayload", SS_UINT8);
+       ssRegDlgParamAsRunTimeParam(S, msgBufferInterrupt_IDX, msgBufferInterrupt_IDX, "msgBufferInterrupt", SS_BOOLEAN);
+       ssRegDlgParamAsRunTimeParam(S, payloadPreambleIndicatorTr_IDX, payloadPreambleIndicatorTr_IDX, "payloadPreambleIndicatorTr", SS_BOOLEAN);
+       ssRegDlgParamAsRunTimeParam(S, singleTransmit_IDX, singleTransmit_IDX, "singleTransmit", SS_BOOLEAN);
+       ssRegDlgParamAsRunTimeParam(S, slotId_IDX, slotId_IDX, "slotId", SS_UINT32);
+}
+#endif
+
+
+#define COMMON_MDLINITIALIZESAMPLETIMES_INHERIT
+#define UNUSED_MDLOUTPUTS
+#define UNUSED_MDLTERMINATE
+#include "trailer.c"
diff --git a/rpp/blocks/sfunction_fraytransmit.c b/rpp/blocks/sfunction_fraytransmit.c
new file mode 100644 (file)
index 0000000..b752533
--- /dev/null
@@ -0,0 +1,137 @@
+/* Copyright (C) 2014 Czech Technical University in Prague
+ *
+ * Authors:
+ *     - Michal Horn <hornimch@fel.cvut.cz>
+ *
+ * This document contains proprietary information belonging to Czech
+ * Technical University in Prague. Passing on and copying of this
+ * document, and communication of its contents is not permitted
+ * without prior written authorization.
+ *
+ * File : sfunction_fraytransmit.c
+ * Abstract:
+ *     C-MEX S-function block for RPP FlexRay TX buffer configuration and message transmittion.
+ *
+ * References:
+ *     header.c
+ *     trailer.c
+ *
+ * Compile with:
+ *             <matlabroot>/bin/mex -I<matlabroot>/toolbox/shared/can/src/scanutil -I<matlabroot>/toolbox/rtw/targets/common/can/datatypes sfunction_cantransmit.c <matlabroot>/toolbox/rtw/targets/common/can/datatypes/sfun_can_util.c <matlabroot>/toolbox/rtw/targets/common/can/datatypes/can_msg.c
+ */
+
+/*
+%YAML 1.2
+---
+Name: Configure TX buffer
+Category: FlexRay
+Header: rpp/fr.h
+Mnemonic: FRC
+
+Inputs:
+  - { name: "Send", type: "uint8 vector" }
+
+Outputs:
+  - { name: "ErrFlag", type: "bool" }
+
+Parameters:
+  - { name: "channel", type: "uint8" }
+  - { name: "cycleCounterFiltering", type: "uint8" }
+  - { name: "maxPayload", type: "uint8", range: "(in half-words)"  }
+  - { name: "msgBufferInterrupt", type: "bool" }
+  - { name: "payloadPreambleIndicatorTr", type: "bool" }
+  - { name: "singleTransmit", type: "bool" }
+  - { name: "slotId", type: "uint32" }
+
+# Description and Help is in Markdown mark-up
+Description: &desc |
+
+  This block ...
+
+Help: *desc
+
+Status: Beta
+
+RPP API functions used:
+
+Relevant demos:
+...
+*/
+
+#define S_FUNCTION_NAME sfunction_fraytransmit
+#include "header.c"
+#include <stdio.h>
+
+enum params {
+       channel_IDX                                             = 0,
+       cycleCounterFiltering_IDX               = 1,
+       maxPayload_IDX                                  = 2,
+       msgBufferInterrupt_IDX                  = 3,
+       payloadPreambleIndicatorTr_IDX  = 4,
+       singleTransmit_IDX                              = 5,
+       slotId_IDX                                              = 6,
+       PARAM_COUNT
+};
+
+static void mdlInitializeSizes(SimStruct *S)
+{
+    if (!rppSetNumParams(S, PARAM_COUNT)) {
+        return;
+    }
+
+    /*
+     * Configure input ports: 1
+     */
+    if (!ssSetNumInputPorts(S, 1)) {
+        return;
+    }
+       rppAddInputVectorPort(S, 0, SS_UINT8, 2*(int_T)mxGetPr(ssGetSFcnParam(S, 2))[0]);
+
+    /*
+     * Configure output ports: 1
+     *  - Error flag.
+     */
+    if (!ssSetNumOutputPorts(S, 1)) {
+        return;
+    }
+    rppAddOutputPort(S, 0, SS_BOOLEAN);
+
+    /* Set standard options for this block */
+    rppSetStandardOptions(S);
+}
+
+
+#ifdef MATLAB_MEX_FILE
+#define MDL_CHECK_PARAMETERS
+static void mdlCheckParameters(SimStruct *S)
+{
+
+}
+#endif
+
+
+#ifdef MATLAB_MEX_FILE
+#define MDL_SET_WORK_WIDTHS
+static void mdlSetWorkWidths(SimStruct *S)
+{
+    /* Set number of run-time parameters */
+    if (!ssSetNumRunTimeParams(S, PARAM_COUNT)) {
+        return;
+    }
+
+    /* Register the run-time parameter 1 */
+       ssRegDlgParamAsRunTimeParam(S, channel_IDX, channel_IDX, "channel", SS_UINT8);
+       ssRegDlgParamAsRunTimeParam(S, cycleCounterFiltering_IDX, cycleCounterFiltering_IDX, "cycleCounterFiltering", SS_UINT8);
+       ssRegDlgParamAsRunTimeParam(S, maxPayload_IDX, maxPayload_IDX, "maxPayload", SS_UINT8);
+       ssRegDlgParamAsRunTimeParam(S, msgBufferInterrupt_IDX, msgBufferInterrupt_IDX, "msgBufferInterrupt", SS_BOOLEAN);
+       ssRegDlgParamAsRunTimeParam(S, payloadPreambleIndicatorTr_IDX, payloadPreambleIndicatorTr_IDX, "payloadPreambleIndicatorTr", SS_BOOLEAN);
+       ssRegDlgParamAsRunTimeParam(S, singleTransmit_IDX, singleTransmit_IDX, "singleTransmit", SS_BOOLEAN);
+       ssRegDlgParamAsRunTimeParam(S, slotId_IDX, slotId_IDX, "slotId", SS_UINT32);
+}
+#endif
+
+
+#define COMMON_MDLINITIALIZESAMPLETIMES_INHERIT
+#define UNUSED_MDLOUTPUTS
+#define UNUSED_MDLTERMINATE
+#include "trailer.c"
diff --git a/rpp/blocks/sfunction_hbr.c b/rpp/blocks/sfunction_hbr.c
new file mode 100644 (file)
index 0000000..e19889e
--- /dev/null
@@ -0,0 +1,109 @@
+/* Copyright (C) 2013, 2014 Czech Technical University in Prague
+ *
+ * Authors:
+ *     - Carlos Jenkins <carlos@jenkins.co.cr>
+ *
+ * This document contains proprietary information belonging to Czech
+ * Technical University in Prague. Passing on and copying of this
+ * document, and communication of its contents is not permitted
+ * without prior written authorization.
+ *
+ * File : sfunction_hbr.c
+ * Abstract:
+ *     C-MEX S-function block for RPP H-Bridge output.
+ *
+ * References:
+ *     header.c
+ *     trailer.c
+ *
+ * Compile with:
+ *     <matlabroot>/bin/mex sfunction_hbr.c
+ */
+
+/*
+%YAML 1.2
+---
+Name: H-Bridge Control
+Category: Power output blocks
+Header: rpp/hbr.h
+Mnemonic: HBR
+
+Inputs:
+  - { name: "Enable",  type: "bool"   }
+  - { name: "Control", type: "double" }
+
+Outputs:
+  - { name: "ErrFlag", type: "bool" }
+
+Parameters:
+
+# Description and Help is in Markdown mark-up
+Description: |
+
+  Control H-Bridge (10A, PWM) at default frequency.
+
+  This block expects input in range [-1.0, 1.0].
+
+Help: |
+
+  This block allows to control the H-Bridge on the RPP board. The ErrFlag should raise only if
+  `rpp_hbr_control()` returns error. The H-Bridge is initialized with the default frequency 
+  (~18kHz). A future improvement could include a parameter to set the frequency. Because the ErrFlag 
+  should never set, once set the following steps will never clear it back.
+
+Status: Stable
+
+RPP API functions used:
+    - rpp_hbr_enable()
+    - rpp_hbr_control()
+
+Relevant demos:
+   - hbridge_analog_control
+   - hbridge_digital_control
+   - hbridge_sinewave_control
+...
+*/
+
+#define S_FUNCTION_NAME sfunction_hbr
+#include "header.c"
+
+
+static void mdlInitializeSizes(SimStruct *S)
+{
+    /*
+     * Configure parameters: 0
+     */
+    if (!rppSetNumParams(S, 0)) {
+        return;
+    }
+
+    /*
+     * Configure input ports: 1
+     *  - Enable
+     *  - Control power.
+     */
+    if (!ssSetNumInputPorts(S, 2)) {
+        return;
+    }
+    rppAddInputPort(S, 0, SS_BOOLEAN);
+    rppAddInputPort(S, 1, SS_DOUBLE);
+
+    /*
+     * Configure output ports: 1
+     *  - Error flag.
+     */
+    if (!ssSetNumOutputPorts(S, 1)) {
+        return;
+    }
+    rppAddOutputPort(S, 0, SS_BOOLEAN);
+
+    /* Set standard options for this block */
+    rppSetStandardOptions(S);
+}
+
+
+#define COMMON_MDLINITIALIZESAMPLETIMES_INHERIT
+#define UNUSED_MDLCHECKPARAMETERS
+#define UNUSED_MDLOUTPUTS
+#define UNUSED_MDLTERMINATE
+#include "trailer.c"
diff --git a/rpp/blocks/sfunction_irc.c b/rpp/blocks/sfunction_irc.c
new file mode 100644 (file)
index 0000000..3b305ed
--- /dev/null
@@ -0,0 +1,129 @@
+/* Copyright (C) 2013, 2014 Czech Technical University in Prague
+ *
+ * Authors:
+ *     - Karel Kočí
+ *
+ * This document contains proprietary information belonging to Czech
+ * Technical University in Prague. Passing on and copying of this
+ * document, and communication of its contents is not permitted
+ * without prior written authorization.
+ *
+ * File : sfunction_irc.c
+ * Abstract:
+ *     C-MEX S-function block for RPP IRC input.
+ *
+ * References:
+ *     header.c
+ *     trailer.c
+ *
+ * Compile with:
+ *     <matlabroot>/bin/mex sfunction_irc.c
+ */
+
+/*
+%YAML 1.2
+---
+Name: IRC Input
+Category: IO blocks
+Header: rpp/irc.h
+Mnemonic: IRC
+
+Inputs:
+
+Outputs:
+  - { name: "IRC value", type: "int32" }
+  - { name: "ErrFlag", type: "bool" }
+
+Parameters:
+  - { name: "IRC number [1-2]", type: "uint8" }
+
+# Description and Help is in Markdown mark-up
+Description: &desc |
+
+  This block allows to read a value of an IRC sensors. Two
+  configurations are supported: IRC is connected to pins DIN10 and DIN11
+  and/or pins DIN14 and DIN15. The ErrFlag output raises if an error is
+  detected, which should normally not happen.
+
+Help: *desc
+
+Status: Stable
+
+RPP API functions used:
+    - rpp_irc_enable()
+    - rpp_irc_status()
+    - rpp_irc_get()
+
+Relevant demos:
+    - irc_input
+...
+*/
+
+#define S_FUNCTION_NAME sfunction_irc
+#include "header.c"
+
+
+static void mdlInitializeSizes(SimStruct *S)
+{
+    /*
+     * Configure parameters: 1
+     *  - IRC number: [1-2]
+     */
+    if (!rppSetNumParams(S, 1)) {
+        return;
+    }
+
+    /*
+     * Configure input ports: 0
+     */
+    if (!ssSetNumInputPorts(S, 0)) {
+        return;
+    }
+
+    /*
+     * Configure output ports: 2
+     *  - IRC input.
+     *  - Error flag.
+     */
+    if (!ssSetNumOutputPorts(S, 2)) {
+        return;
+    }
+    rppAddOutputPort(S, 0, SS_INT32);
+    rppAddOutputPort(S, 1, SS_BOOLEAN);
+
+    /* Set standard options for this block */
+    rppSetStandardOptions(S);
+}
+
+
+#ifdef MATLAB_MEX_FILE
+#define MDL_CHECK_PARAMETERS
+static void mdlCheckParameters(SimStruct *S)
+{
+    /* Check the parameter 1 */
+    if (!rppValidParamRange(S, 0, 1, 2)) {
+        return;
+    }
+}
+#endif
+
+
+#ifdef MATLAB_MEX_FILE
+#define MDL_SET_WORK_WIDTHS
+static void mdlSetWorkWidths(SimStruct *S)
+{
+    /* Set number of run-time parameters */
+    if (!ssSetNumRunTimeParams(S, 1)) {
+        return;
+    }
+
+    /* Register the run-time parameter 1 */
+    ssRegDlgParamAsRunTimeParam(S, 0, 0, "p1", SS_UINT8);
+}
+#endif
+
+
+#define COMMON_MDLINITIALIZESAMPLETIMES_INHERIT
+#define UNUSED_MDLOUTPUTS
+#define UNUSED_MDLTERMINATE
+#include "trailer.c"
diff --git a/rpp/blocks/sfunction_lout.c b/rpp/blocks/sfunction_lout.c
new file mode 100644 (file)
index 0000000..ef5bf7a
--- /dev/null
@@ -0,0 +1,138 @@
+/* Copyright (C) 2013, 2014 Czech Technical University in Prague
+ *
+ * Authors:
+ *     - Carlos Jenkins <carlos@jenkins.co.cr>
+ *
+ * This document contains proprietary information belonging to Czech
+ * Technical University in Prague. Passing on and copying of this
+ * document, and communication of its contents is not permitted
+ * without prior written authorization.
+ *
+ * File : sfunction_lout.c
+ * Abstract:
+ *     C-MEX S-function block for RPP digital output.
+ *
+ * References:
+ *     header.c
+ *     trailer.c
+ *
+ * Compile with:
+ *     <matlabroot>/bin/mex sfunction_lout.c
+ */
+
+/*
+%YAML 1.2
+---
+Name: Digital Output
+Category: IO blocks
+Header: rpp/lout.h
+Mnemonic: LOUT
+
+Inputs:
+  - { name: "Digital Output",   type: "bool"  }
+
+Outputs:
+  - { name: "ErrFlag",          type: "bool"  }
+
+Parameters:
+  - { name: "Pin number", type: "uint8", range: "[1-8]" }
+
+# Description and Help is in Markdown mark-up
+Description: |
+
+  Sends the digital value to the specified logic output pin on the RPP
+  board.
+
+  An input of 1 sets the pin high and 0 sets the pin low.
+
+  If an error is detected while setting the pin, the ErrFlag is set
+  high.
+
+Help: |
+
+  This block allows to write to the digital outputs on the RPP board. The ErrFlag should raise if 
+  `rpp_lout_set()` or `rpp_lout_update()` returns error. Because the ErrFlag should never set, 
+  once set the following steps will never clear it back. `rpp_lout_update()` is called on each 
+  block, which is not the most efficient but guaranties consistent behavior.
+
+Status: Stable
+
+RPP API functions used:
+    - rpp_lout_set()
+    - rpp_lout_update()
+
+Relevant demos:
+    - digital_passthrough
+    - led_blink_all
+    - led_blink
+...
+*/
+
+#define S_FUNCTION_NAME sfunction_lout
+#include "header.c"
+
+
+static void mdlInitializeSizes(SimStruct *S)
+{
+    /*
+     * Configure parameters: 1
+     *  - Pin number: [1-8]
+     */
+    if (!rppSetNumParams(S, 1)) {
+        return;
+    }
+
+    /*
+     * Configure input ports: 1
+     *  - Digital output.
+     */
+    if (!ssSetNumInputPorts(S, 1)) {
+        return;
+    }
+    rppAddInputPort(S, 0, SS_BOOLEAN);
+
+    /*
+     * Configure output ports: 1
+     *  - Error flag.
+     */
+    if (!ssSetNumOutputPorts(S, 1)) {
+        return;
+    }
+    rppAddOutputPort(S, 0, SS_BOOLEAN);
+
+    /* Set standard options for this block */
+    rppSetStandardOptions(S);
+}
+
+
+#ifdef MATLAB_MEX_FILE
+#define MDL_CHECK_PARAMETERS
+static void mdlCheckParameters(SimStruct *S)
+{
+    /* Check the parameter 1 */
+    if (!rppValidParamRange(S, 0, 1, 8)) {
+        return;
+    }
+}
+#endif
+
+
+#ifdef MATLAB_MEX_FILE
+#define MDL_SET_WORK_WIDTHS
+static void mdlSetWorkWidths(SimStruct *S)
+{
+    /* Set number of run-time parameters */
+    if (!ssSetNumRunTimeParams(S, 1)) {
+        return;
+    }
+
+    /* Register the run-time parameter 1 */
+    ssRegDlgParamAsRunTimeParam(S, 0, 0, "p1", SS_UINT8);
+}
+#endif
+
+
+#define COMMON_MDLINITIALIZESAMPLETIMES_INHERIT
+#define UNUSED_MDLOUTPUTS
+#define UNUSED_MDLTERMINATE
+#include "trailer.c"
diff --git a/rpp/blocks/sfunction_mout.c b/rpp/blocks/sfunction_mout.c
new file mode 100644 (file)
index 0000000..8ffbbbb
--- /dev/null
@@ -0,0 +1,129 @@
+/* Copyright (C) 2013, 2014 Czech Technical University in Prague
+ *
+ * Authors:
+ *     - Carlos Jenkins <carlos@jenkins.co.cr>
+ *
+ * This document contains proprietary information belonging to Czech
+ * Technical University in Prague. Passing on and copying of this
+ * document, and communication of its contents is not permitted
+ * without prior written authorization.
+ *
+ * File : sfunction_mout.c
+ * Abstract:
+ *     C-MEX S-function block for RPP power output.
+ *
+ * References:
+ *     header.c
+ *     trailer.c
+ *
+ * Compile with:
+ *     <matlabroot>/bin/mex sfunction_mout.c
+ */
+
+/*
+%YAML 1.2
+---
+Name: Power Output
+Category: Power output blocks
+Header: rpp/mout.h
+Mnemonic: MOUT
+
+Inputs:
+  - { name: "Power Output", type: "bool" }
+
+Outputs:
+  - { name: "ErrFlag", type: "bool" }
+
+Parameters:
+  - { name: "Pin number [1-6]", type: "uint8" }
+
+# Description and Help is in Markdown mark-up
+Description: &desc |
+
+  This block allows to write the power outputs (2A) on the RPP board. The ErrFlag should raise only 
+  if `rpp_mout_set()` returns error. Note that `rpp_mout_set()` returns error only if some bad 
+  parameter or in case it could detect a faulty condition on the pin in a very very short period of 
+  time after setting the value, see the function API for details. If the faulty condition persist on 
+  the next step the call will successfully detect the faulty condition and ErrFlag should set. 
+  Because the ErrFlag should never set, once set the following steps will never clear it back.
+
+Help: *desc
+
+Status: Stable
+
+RPP API functions used:
+    - rpp_mout_set()
+
+Relevant demos:
+    - power_toggle
+...
+*/
+
+#define S_FUNCTION_NAME sfunction_mout
+#include "header.c"
+
+
+static void mdlInitializeSizes(SimStruct *S)
+{
+    /*
+     * Configure parameters: 1
+     *  - Pin number: [1-6]
+     */
+    if (!rppSetNumParams(S, 1)) {
+        return;
+    }
+
+    /*
+     * Configure input ports: 1
+     *  - Power output.
+     */
+    if (!ssSetNumInputPorts(S, 1)) {
+        return;
+    }
+    rppAddInputPort(S, 0, SS_BOOLEAN);
+
+    /*
+     * Configure output ports: 1
+     *  - Error flag.
+     */
+    if (!ssSetNumOutputPorts(S, 1)) {
+        return;
+    }
+    rppAddOutputPort(S, 0, SS_BOOLEAN);
+
+    /* Set standard options for this block */
+    rppSetStandardOptions(S);
+}
+
+
+#ifdef MATLAB_MEX_FILE
+#define MDL_CHECK_PARAMETERS
+static void mdlCheckParameters(SimStruct *S)
+{
+    /* Check the parameter 1 */
+    if (!rppValidParamRange(S, 0, 1, 6)) {
+        return;
+    }
+}
+#endif
+
+
+#ifdef MATLAB_MEX_FILE
+#define MDL_SET_WORK_WIDTHS
+static void mdlSetWorkWidths(SimStruct *S)
+{
+    /* Set number of run-time parameters */
+    if (!ssSetNumRunTimeParams(S, 1)) {
+        return;
+    }
+
+    /* Register the run-time parameter 1 */
+    ssRegDlgParamAsRunTimeParam(S, 0, 0, "p1", SS_UINT8);
+}
+#endif
+
+
+#define COMMON_MDLINITIALIZESAMPLETIMES_INHERIT
+#define UNUSED_MDLOUTPUTS
+#define UNUSED_MDLTERMINATE
+#include "trailer.c"
diff --git a/rpp/blocks/sfunction_sdrw.c b/rpp/blocks/sfunction_sdrw.c
new file mode 100644 (file)
index 0000000..7ac5fc2
--- /dev/null
@@ -0,0 +1,153 @@
+/* Copyright (C) 2013, 2014 Czech Technical University in Prague
+ *
+ * Authors:
+ *     - Carlos Jenkins <carlos@jenkins.co.cr>
+ *
+ * This document contains proprietary information belonging to Czech
+ * Technical University in Prague. Passing on and copying of this
+ * document, and communication of its contents is not permitted
+ * without prior written authorization.
+ *
+ * File : sfunction_sdrw.c
+ * Abstract:
+ *     C-MEX S-function block for RPP SD-RAM log write.
+ *
+ * References:
+ *     header.c
+ *     trailer.c
+ *
+ * Compile with:
+ *     <matlabroot>/bin/mex sfunction_sdrw.c
+ */
+
+/*
+%YAML 1.2
+---
+Name: SD-RAM Log Data
+Category: Logging
+Header: rpp/sdc.h
+Mnemonic: SDRW
+
+Inputs:
+  - { name: "Data", type: "double" }
+
+Outputs:
+  - { name: "ErrFlag", type: "bool" }
+
+Parameters:
+  - { name: "Block ID",              type: "uint8", range: "[0-255]" }
+  - { name: "Printf format for logging", type: "string", range: "(include specifiers)" }
+
+# Description and Help is in Markdown mark-up
+Description: &desc |
+
+  This block allows to log a double value to the SD-RAM. User needs to provide a valid PrintFormat 
+  string to format and register the double value on the log. The PrintFormat string should include 
+  two specifiers:  
+    1. For the block ID. Any valid integer specifier.  
+    2. For the value to log. Any valid double specifier.  
+
+  Note that the value of PrintFormat is inserted raw between quotes on code generation and thus there 
+  is no validation on it. Error to provide a valid PrintFormat could generate compilation errors or 
+  even run-time errors (normally this generates a warning on compile time). Note that the function 
+  for logging used is `rpp_sdr_printf()`, which is a blocking call, and can potentially overrun the 
+  step. The ErrFlag will set if `rpp_sdr_printf()` returns an error (for example out of memory), 
+  but will clear back if the next step the call to this function is successful.
+
+Help: *desc
+
+Status: Beta
+
+RPP API functions used:
+    - rpp_sdr_printf()
+
+Relevant demos:
+    - log_analog_input
+...
+*/
+
+#define S_FUNCTION_NAME sfunction_sdrw
+#include "header.c"
+
+
+static void mdlInitializeSizes(SimStruct *S)
+{
+    /*
+     * Configure parameters: 2
+     *  - Block ID.
+     *  - Printf format [setting].
+     */
+    if (!rppSetNumParams(S, 2)) {
+        return;
+    }
+
+    /*
+     * Configure input ports: 1
+     *  - Data.
+     */
+    if (!ssSetNumInputPorts(S, 1)) {
+        return;
+    }
+    rppAddInputPort(S, 0, SS_DOUBLE);
+
+    /*
+     * Configure output ports: 1
+     *  - Error flag.
+     */
+    if (!ssSetNumOutputPorts(S, 1)) {
+        return;
+    }
+    rppAddOutputPort(S, 0, SS_BOOLEAN);
+
+    /* Set standard options for this block */
+    rppSetStandardOptions(S);
+}
+
+
+#ifdef MATLAB_MEX_FILE
+#define MDL_CHECK_PARAMETERS
+static void mdlCheckParameters(SimStruct *S)
+{
+    /* Check the parameter 1 */
+    if (!rppValidParamRange(S, 0, 0, 255)) {
+        return;
+    }
+}
+#endif
+
+
+#ifdef MATLAB_MEX_FILE
+#define MDL_SET_WORK_WIDTHS
+static void mdlSetWorkWidths(SimStruct *S)
+{
+    /* Set number of run-time parameters */
+    if (!ssSetNumRunTimeParams(S, 1)) {
+        return;
+    }
+
+    /* Register the run-time parameter 1 */
+    ssRegDlgParamAsRunTimeParam(S, 0, 0, "p1", SS_UINT8);
+}
+#endif
+
+
+#ifdef MATLAB_MEX_FILE
+#define MDL_RTW
+static void mdlRTW(SimStruct* S)
+{
+    /* Register parameter 2 as a parameter setting */
+    static char_T str[128];
+    mxGetString(ssGetSFcnParam(S, 1), (char*)&str, sizeof(str)); /* Get string */
+    if (!ssWriteRTWParamSettings(S, 1,
+            SSWRITE_VALUE_QSTR, "PrintfFormat", (const char_T*)&str)) {
+        /* An error ocurred */
+        return;
+    }
+}
+#endif
+
+
+#define COMMON_MDLINITIALIZESAMPLETIMES_INHERIT
+#define UNUSED_MDLOUTPUTS
+#define UNUSED_MDLTERMINATE
+#include "trailer.c"