tarina

git clone https://git.tarina.org/tarina
Log | Files | Refs | README | LICENSE

commit c3413c5e508fa50b4a9cdad4ce54602ff5841413
parent 680893f1f79881666387ffeb7a515f6357378255
Author: rbckman <rob@tarina.org>
Date:   Fri, 21 Jul 2023 07:37:26 +0100

splitter port

Diffstat:
A3d/button-symbols.stl | 0
M3d/tarina-body.png | 0
M3d/tarina-body.stl | 0
M3d/tarina-button-plate-bottom.png | 0
M3d/tarina-button-plate-bottom.stl | 0
M3d/tarina-button-plate-upper.png | 0
M3d/tarina-button-plate-upper.stl | 0
M3d/tarina-dev.blend | 0
D3d/tarina-dev.blend1 | 0
M3d/tarina-hdmi-cap.png | 0
M3d/tarina-hdmi-cap.stl | 0
M3d/tarina-left-side-cap.png | 0
M3d/tarina-left-side-cap.stl | 0
M3d/tarina-left-side.png | 0
A3d/tarina-modifyer-body-logo.stl | 0
A3d/tarina-modifyer-button-icons.stl | 0
M3d/tarina-picamera-hq-body-lid.png | 0
M3d/tarina-picamera-hq-body.png | 0
M3d/tarina-picamera-hq-body.stl | 0
M3d/tarina-picamera-screwhandle.png | 0
M3d/tarina-picamera-screwhandle.stl | 0
M3d/tarina-right-side.png | 0
M3d/tarina-right-side.stl | 0
M3d/tarina-screen-lid-hyperpixel.png | 0
M3d/tarina-screen-lid-hyperpixel.stl | 0
A3d/tarina-screen-lid-ugeek.png | 0
M3d/tarina-screen-lid-ugeek.stl | 0
A3d/tarina-viewfinder-eyepiece.stl | 0
A3d/tarina-viewfinder-hyperpixel.png | 0
M3d/tarina-viewfinder-hyperpixel.stl | 0
A3d/viewfinder-clip-bridge.stl | 0
A3d/viewfinder-clip-bridge2.stl | 0
A3d/viewfinder-clip-bridge3.stl | 0
MREADME.md | 16+++++++++-------
MVERSION | 4++--
Mdocs/buttons.png | 0
Mdocs/buttons.svg | 254+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------
Mdocs/tarina-manual.pdf | 0
Mdocs/wiring.png | 0
Mdocs/wiring.svg | 188++++++++++++++++++++++++++++++++++++++-----------------------------------------
Aextras/buttons.png | 0
Aextras/buttons.xcf | 0
Mextras/tarina.conf | 7+++----
Msrv/templates/index.html | 5+++--
Mtarina.py | 418++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------
45 files changed, 579 insertions(+), 313 deletions(-)

diff --git a/3d/button-symbols.stl b/3d/button-symbols.stl Binary files differ. diff --git a/3d/tarina-body.png b/3d/tarina-body.png Binary files differ. diff --git a/3d/tarina-body.stl b/3d/tarina-body.stl Binary files differ. diff --git a/3d/tarina-button-plate-bottom.png b/3d/tarina-button-plate-bottom.png Binary files differ. diff --git a/3d/tarina-button-plate-bottom.stl b/3d/tarina-button-plate-bottom.stl Binary files differ. diff --git a/3d/tarina-button-plate-upper.png b/3d/tarina-button-plate-upper.png Binary files differ. diff --git a/3d/tarina-button-plate-upper.stl b/3d/tarina-button-plate-upper.stl Binary files differ. diff --git a/3d/tarina-dev.blend b/3d/tarina-dev.blend Binary files differ. diff --git a/3d/tarina-dev.blend1 b/3d/tarina-dev.blend1 Binary files differ. diff --git a/3d/tarina-hdmi-cap.png b/3d/tarina-hdmi-cap.png Binary files differ. diff --git a/3d/tarina-hdmi-cap.stl b/3d/tarina-hdmi-cap.stl Binary files differ. diff --git a/3d/tarina-left-side-cap.png b/3d/tarina-left-side-cap.png Binary files differ. diff --git a/3d/tarina-left-side-cap.stl b/3d/tarina-left-side-cap.stl Binary files differ. diff --git a/3d/tarina-left-side.png b/3d/tarina-left-side.png Binary files differ. diff --git a/3d/tarina-modifyer-body-logo.stl b/3d/tarina-modifyer-body-logo.stl Binary files differ. diff --git a/3d/tarina-modifyer-button-icons.stl b/3d/tarina-modifyer-button-icons.stl Binary files differ. diff --git a/3d/tarina-picamera-hq-body-lid.png b/3d/tarina-picamera-hq-body-lid.png Binary files differ. diff --git a/3d/tarina-picamera-hq-body.png b/3d/tarina-picamera-hq-body.png Binary files differ. diff --git a/3d/tarina-picamera-hq-body.stl b/3d/tarina-picamera-hq-body.stl Binary files differ. diff --git a/3d/tarina-picamera-screwhandle.png b/3d/tarina-picamera-screwhandle.png Binary files differ. diff --git a/3d/tarina-picamera-screwhandle.stl b/3d/tarina-picamera-screwhandle.stl Binary files differ. diff --git a/3d/tarina-right-side.png b/3d/tarina-right-side.png Binary files differ. diff --git a/3d/tarina-right-side.stl b/3d/tarina-right-side.stl Binary files differ. diff --git a/3d/tarina-screen-lid-hyperpixel.png b/3d/tarina-screen-lid-hyperpixel.png Binary files differ. diff --git a/3d/tarina-screen-lid-hyperpixel.stl b/3d/tarina-screen-lid-hyperpixel.stl Binary files differ. diff --git a/3d/tarina-screen-lid-ugeek.png b/3d/tarina-screen-lid-ugeek.png Binary files differ. diff --git a/3d/tarina-screen-lid-ugeek.stl b/3d/tarina-screen-lid-ugeek.stl Binary files differ. diff --git a/3d/tarina-viewfinder-eyepiece.stl b/3d/tarina-viewfinder-eyepiece.stl Binary files differ. diff --git a/3d/tarina-viewfinder-hyperpixel.png b/3d/tarina-viewfinder-hyperpixel.png Binary files differ. diff --git a/3d/tarina-viewfinder-hyperpixel.stl b/3d/tarina-viewfinder-hyperpixel.stl Binary files differ. diff --git a/3d/viewfinder-clip-bridge.stl b/3d/viewfinder-clip-bridge.stl Binary files differ. diff --git a/3d/viewfinder-clip-bridge2.stl b/3d/viewfinder-clip-bridge2.stl Binary files differ. diff --git a/3d/viewfinder-clip-bridge3.stl b/3d/viewfinder-clip-bridge3.stl Binary files differ. diff --git a/README.md b/README.md @@ -3,11 +3,15 @@ Tarina ![Two buddies](docs/tarina-promo.jpg) -A film camera by filmmakers for filmmakers. +The Muse of Filmmaking -Experience filmmaking flow +Montage flow ------------------------------ -Retake your [montage](https://en.wikipedia.org/wiki/Montage_(filmmaking)) on the spot so it flows. Once you get it there’s no need for editing later. Designed with a "hackers/makers philosophy", easy to take apart and to mod. It's built using the Raspberry pi, running on a Gnu/Linux Raspbian distribution and with a python coded interface. +Retake your [montage](https://en.wikipedia.org/wiki/Montage_(filmmaking)) on the spot so it flows. Once you get it there’s no need for editing later. The camera is designed with a "hackers/makers philosophy", easy to take apart and to mod. It's built using the Raspberry Pi, running on a Gnu/Linux Raspbian distribution and with a python coded interface. + +Software +-------- +A video camera that have all tools to make a film within the camera. That means alot of features. Key features is to glue the selected clips together and/or cutting them. Making timelapses, voiceover and or music track recording, slo-mo recording, fast-forward recording, cut and copy and move clips around, backup to usb harddrive or your own server. Upload or stream to youtube or where not? Auto correction can easily be switched on or off for shutter, iso and colors so *operator* is in full control also for audio levels and so on. Use the silent physical buttons or connect through usb-keyboard, https, ssh, ports, you choose. It's all there. Turn them all ON if so you desire. Hardware -------- @@ -26,10 +30,6 @@ Check [MANUAL](docs/tarina-manual.md) for complete part list & build instruction [Ready to print 3d designs](https://github.com/rbckman/tarina/tree/master/3d) -Software --------- -A filmmaking dedicated video camera that focus on all tools to make a film from start to finnish, just with and within the camera. That means alot of features. Key features is to glue the selected clips together, making timelapses, voiceover and or music track recording, slo-mo recording, fast-forward recording, cut and copy and move clips around, backup to usb harddrive or your own server. Upload or stream to youtube or where ever. Auto correction is only kept as a minimal guide so *operator* is in full control of shutter, iso, colors, audio levels and so on. Connect with silent physical buttons, keyboard, http, ssh, ports, you choose. It's all there. Turn them all ON if so you desire. - Installing ---------- Download [Raspbian buster (not the latest!)](https://www.raspberrypi.org/downloads/raspbian/) and follow [install instructions | a simple install script should take care of it all!](https://www.raspberrypi.org/documentation/installation/installing-images/README.md). @@ -87,6 +87,8 @@ This whole project has only been possible because of the people behind the free Some films made with Tarina ---------------------- +### [Aakenustunturi Hiihtoretki 2023](https://youtu.be/VB7R2Eiw13k) + ### [Mancherok](https://youtu.be/jmy0W6rA10Q) ### [Robins Trägård](https://youtu.be/IOZAHCIN6U0) diff --git a/VERSION b/VERSION @@ -1,2 +1,2 @@ -1.27 -KatanaCam +1.28 +Tarantino diff --git a/docs/buttons.png b/docs/buttons.png Binary files differ. diff --git a/docs/buttons.svg b/docs/buttons.svg @@ -1,6 +1,4 @@ <?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#" @@ -9,12 +7,12 @@ 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="63.169353mm" - height="59.145855mm" - viewBox="0 0 63.169353 59.145855" + width="169.67053mm" + height="87.263496mm" + viewBox="0 0 169.67053 87.263496" version="1.1" id="svg4697" - inkscape:version="0.92.4 (5da689c313, 2019-01-14)" + inkscape:version="1.0.2 (e86c870879, 2021-01-15)" sodipodi:docname="buttons.svg" inkscape:export-filename="/home/rbckman/tarina/docs/buttons.png" inkscape:export-xdpi="300" @@ -28,9 +26,9 @@ borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" - inkscape:zoom="1.979899" - inkscape:cx="79.719724" - inkscape:cy="1.8828399" + inkscape:zoom="0.9899495" + inkscape:cx="319.42654" + inkscape:cy="172.43414" inkscape:document-units="mm" inkscape:current-layer="layer1" showgrid="false" @@ -38,11 +36,12 @@ fit-margin-left="0" fit-margin-right="0" fit-margin-bottom="0" - inkscape:window-width="1920" - inkscape:window-height="1143" + inkscape:window-width="960" + inkscape:window-height="1136" inkscape:window-x="0" - inkscape:window-y="31" - inkscape:window-maximized="1" /> + inkscape:window-y="27" + inkscape:window-maximized="0" + inkscape:document-rotation="0" /> <metadata id="metadata4694"> <rdf:RDF> @@ -51,7 +50,7 @@ <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title /> + <dc:title></dc:title> </cc:Work> </rdf:RDF> </metadata> @@ -59,16 +58,32 @@ inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" - transform="translate(-77.055948,-88.136392)"> + transform="translate(-75.853233,-87.146606)"> + <text + id="text1146-4" + y="95.140152" + x="188.0594" + style="font-style:normal;font-weight:normal;font-size:9.35383px;line-height:1.87175px;font-family:Sans;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0519657px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve"><tspan + id="tspan1144-8" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.3258px;line-height:1.87175px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';text-align:center;text-anchor:middle;stroke-width:0.0519657px" + y="95.140152" + x="188.0594" + sodipodi:role="line">SCREEN</tspan><tspan + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.3258px;line-height:1.87175px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';text-align:center;text-anchor:middle;stroke-width:0.0519657px" + y="98.517136" + x="188.0594" + sodipodi:role="line" + id="tspan1192-1">OFF</tspan></text> <rect - style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:0.94174757;fill-rule:nonzero;stroke:none;stroke-width:0.24363048;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:0.941748;fill-rule:nonzero;stroke:none;stroke-width:0.24363;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" id="rect3587" width="65.347397" height="87.263496" x="75.853233" y="87.146606" /> <circle - style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#220000;stroke-width:0.40142012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ececec;fill-opacity:1;fill-rule:nonzero;stroke:#220000;stroke-width:0.40142;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" id="path4732" cx="95.121918" cy="-133.32652" @@ -76,17 +91,17 @@ transform="rotate(90)" /> <text xml:space="preserve" - style="font-style:normal;font-weight:normal;font-size:14.08373737px;line-height:2.81822658px;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.07824298px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + style="font-style:normal;font-weight:normal;font-size:14.0837px;line-height:2.81823px;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.078243px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" x="129.46039" y="96.459679" id="text4702-2-3"><tspan sodipodi:role="line" x="129.46039" y="96.459679" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.00755167px;line-height:2.81822658px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.07824298px" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.00755px;line-height:2.81823px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.078243px" id="tspan4730-4">REC</tspan></text> <circle - style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#220000;stroke-width:0.40142012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ececec;fill-opacity:1;fill-rule:nonzero;stroke:#220000;stroke-width:0.40142;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" id="path4732-5" cx="95.035172" cy="-108.80765" @@ -97,21 +112,21 @@ cy="-83.954727" cx="95.035172" id="circle4862" - style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#220000;stroke-width:0.40142012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ececec;fill-opacity:1;fill-rule:nonzero;stroke:#220000;stroke-width:0.40142;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" transform="rotate(90)" /> <text id="text4876" y="95.902229" x="79.23674" - style="font-style:normal;font-weight:normal;font-size:12.03948212px;line-height:2.40916061px;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.06688602px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + style="font-style:normal;font-weight:normal;font-size:12.0395px;line-height:2.40916px;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.066886px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" xml:space="preserve"><tspan id="tspan4874" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.28070498px;line-height:2.40916061px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.06688602px" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.2807px;line-height:2.40916px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.066886px" y="95.902229" x="79.23674" sodipodi:role="line">VIEW</tspan></text> <circle - style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#220000;stroke-width:0.40142012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ececec;fill-opacity:1;fill-rule:nonzero;stroke:#220000;stroke-width:0.40142;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" id="circle4884" cx="117.73363" cy="-83.954727" @@ -122,10 +137,10 @@ cy="-108.59523" cx="117.73363" id="circle4906" - style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#220000;stroke-width:0.40142012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ececec;fill-opacity:1;fill-rule:nonzero;stroke:#220000;stroke-width:0.40142;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" transform="rotate(90)" /> <circle - style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#220000;stroke-width:0.40142012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ececec;fill-opacity:1;fill-rule:nonzero;stroke:#220000;stroke-width:0.40142;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" id="circle4928" cx="117.73363" cy="-132.8109" @@ -136,21 +151,21 @@ cy="-132.8109" cx="140.38347" id="circle4950" - style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#220000;stroke-width:0.40142012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ececec;fill-opacity:1;fill-rule:nonzero;stroke:#220000;stroke-width:0.40142;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" transform="rotate(90)" /> <text id="text4964" y="141.48233" x="126.39008" - style="font-style:normal;font-weight:normal;font-size:11.10875607px;line-height:2.2229178px;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.06171531px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + style="font-style:normal;font-weight:normal;font-size:11.1088px;line-height:2.22292px;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0617153px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" xml:space="preserve"><tspan id="tspan4962" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.94978046px;line-height:2.2229178px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.06171531px" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.94978px;line-height:2.22292px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.0617153px" y="141.48233" x="126.39008" sodipodi:role="line">RETAKE</tspan></text> <circle - style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#220000;stroke-width:0.40142012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ececec;fill-opacity:1;fill-rule:nonzero;stroke:#220000;stroke-width:0.40142;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" id="circle4972" cx="140.38347" cy="-107.95798" @@ -161,89 +176,214 @@ cy="-84.167168" cx="140.38347" id="circle4994" - style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#220000;stroke-width:0.40142012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ececec;fill-opacity:1;fill-rule:nonzero;stroke:#220000;stroke-width:0.40142;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" transform="rotate(90)" /> <text id="text5008" y="141.02481" x="80.749115" - style="font-style:normal;font-weight:normal;font-size:11.10875607px;line-height:2.2229178px;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.06171531px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + style="font-style:normal;font-weight:normal;font-size:11.1088px;line-height:2.22292px;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0617153px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" xml:space="preserve"><tspan id="tspan5006" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.94978046px;line-height:2.2229178px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.06171531px" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.94978px;line-height:2.22292px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.0617153px" y="141.02481" x="80.749115" sodipodi:role="line">DEL</tspan></text> <text xml:space="preserve" - style="font-style:normal;font-weight:normal;font-size:11.52228165px;line-height:2.30566573px;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0640127px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + style="font-style:normal;font-weight:normal;font-size:11.5223px;line-height:2.30567px;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0640127px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" x="103.22637" y="118.82362" id="text4702-2-3-3"><tspan sodipodi:role="line" x="103.22637" y="118.82362" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.09681082px;line-height:2.30566573px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.0640127px" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.09681px;line-height:2.30567px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.0640127px" id="tspan4730-4-87">ENTER</tspan></text> <path - style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + style="fill:#ff00ff;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" d="m 107.32422,99.040099 h 3.00678 v -3.942226 h 2.80633 l -4.20949,-6.013564 -4.47676,5.946747 h 2.87314 z" id="path5796" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccccc" /> <path - style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + style="fill:#ff00ff;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" d="m 127.75734,116.15089 v 3.00678 h 3.94223 v 2.80633 l 6.01356,-4.20949 -5.94675,-4.47676 v 2.87314 z" id="path5796-0" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccccc" /> <path - style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + style="fill:#ff00ff;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" d="m 88.227461,119.34704 v -3.00678 h -3.94223 v -2.80633 l -6.01356,4.20949 5.94675,4.47676 v -2.87314 z" id="path5796-0-8" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccccc" /> <path - style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + style="fill:#ff00ff;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" d="m 109.39001,135.84348 h -3.00678 v 3.94223 h -2.80633 l 4.20949,6.01356 4.47676,-5.94675 h -2.87314 z" id="path5796-0-8-5" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccccc" /> <circle r="6.6980696" - cy="-84.004951" + cy="-116.87031" cx="164.38751" id="circle4994-5" - style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#220000;stroke-width:0.40142012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ececec;fill-opacity:1;fill-rule:nonzero;stroke:#220000;stroke-width:0.40142;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" transform="rotate(90)" /> <text id="text5008-5" y="165.29613" - x="79.785088" - style="font-style:normal;font-weight:normal;font-size:11.10875607px;line-height:2.2229178px;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.06171531px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="112.65044" + style="font-style:normal;font-weight:normal;font-size:11.1088px;line-height:2.22292px;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0617153px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" xml:space="preserve"><tspan id="tspan5006-0" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.9497807px;line-height:2.2229178px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.06171531px" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.94978px;line-height:2.22292px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.0617153px" y="165.29613" - x="79.785088" + x="112.65044" sodipodi:role="line">FUNC</tspan></text> + <rect + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:0.941748;fill-rule:nonzero;stroke:none;stroke-width:0.24363;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + id="rect1132" + width="65.347397" + height="87.263496" + x="180.17636" + y="87.146606" /> + <circle + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ececec;fill-opacity:1;fill-rule:nonzero;stroke:#220000;stroke-width:0.40142;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + id="circle1134" + cx="95.121918" + cy="-237.64964" + r="6.6980696" + transform="rotate(90)" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:14.0837px;line-height:2.81823px;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.078243px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="232.54649" + y="96.420921" + id="text1138"><tspan + sodipodi:role="line" + x="232.54649" + y="96.420921" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.00755px;line-height:2.81823px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.078243px" + id="tspan1136">MENU</tspan></text> + <circle + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ececec;fill-opacity:1;fill-rule:nonzero;stroke:#220000;stroke-width:0.40142;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + id="circle1140" + cx="95.035172" + cy="-213.13077" + r="6.6980696" + transform="rotate(90)" /> + <circle + r="6.6980696" + cy="-188.27785" + cx="95.035172" + id="circle1142" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ececec;fill-opacity:1;fill-rule:nonzero;stroke:#220000;stroke-width:0.40142;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + transform="rotate(90)" /> + <circle + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ececec;fill-opacity:1;fill-rule:nonzero;stroke:#220000;stroke-width:0.40142;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + id="circle1148" + cx="117.73363" + cy="-188.27785" + r="6.6980696" + transform="rotate(90)" /> + <circle + r="6.6980696" + cy="-212.91835" + cx="117.73363" + id="circle1150" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ececec;fill-opacity:1;fill-rule:nonzero;stroke:#220000;stroke-width:0.40142;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + transform="rotate(90)" /> + <circle + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ececec;fill-opacity:1;fill-rule:nonzero;stroke:#220000;stroke-width:0.40142;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + id="circle1152" + cx="117.73363" + cy="-237.13402" + r="6.6980696" + transform="rotate(90)" /> + <circle + r="6.6980696" + cy="-237.13402" + cx="140.38347" + id="circle1154" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ececec;fill-opacity:1;fill-rule:nonzero;stroke:#220000;stroke-width:0.40142;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + transform="rotate(90)" /> + <text + id="text1158" + y="141.55249" + x="232.90192" + style="font-style:normal;font-weight:normal;font-size:11.1088px;line-height:2.22292px;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0617153px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve"><tspan + id="tspan1156" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.94978px;line-height:2.22292px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.0617153px" + y="141.55249" + x="232.90192" + sodipodi:role="line">MOVE</tspan></text> + <circle + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ececec;fill-opacity:1;fill-rule:nonzero;stroke:#220000;stroke-width:0.40142;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + id="circle1160" + cx="140.38347" + cy="-212.2811" + r="6.6980696" + transform="rotate(90)" /> <circle r="6.6980696" - cy="-119.41817" + cy="-188.4903" + cx="140.38347" + id="circle1162" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ececec;fill-opacity:1;fill-rule:nonzero;stroke:#220000;stroke-width:0.40142;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + transform="rotate(90)" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.5223px;line-height:2.30567px;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0640127px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="207.5495" + y="118.82362" + id="text1170"><tspan + sodipodi:role="line" + x="207.5495" + y="118.82362" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.09681px;line-height:2.30567px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.0640127px" + id="tspan1168">PASTE</tspan></text> + <circle + r="6.6980696" + cy="-221.19344" cx="164.38751" - id="circle4994-5-8" - style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#220000;stroke-width:0.40142012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + id="circle1180" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#00ff00;fill-opacity:1;fill-rule:nonzero;stroke:#220000;stroke-width:0.40142;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" transform="rotate(90)" /> <text - id="text5008-5-2" - y="165.5634" - x="115.73283" - style="font-style:normal;font-weight:normal;font-size:11.10875607px;line-height:2.2229178px;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.06171531px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + id="text1184" + y="165.29613" + x="216.97357" + style="font-style:normal;font-weight:normal;font-size:11.1088px;line-height:2.22292px;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0617153px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" xml:space="preserve"><tspan - id="tspan5006-0-3" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.94978094px;line-height:2.2229178px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.06171531px" - y="165.5634" - x="115.73283" - sodipodi:role="line">HELP</tspan></text> + id="tspan1182" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.94978px;line-height:2.22292px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.0617153px" + y="165.29613" + x="216.97357" + sodipodi:role="line">FUNC</tspan></text> + <text + id="text1226" + y="96.417107" + x="212.7975" + style="font-style:normal;font-weight:normal;font-size:13.8631px;line-height:2.77408px;font-family:Sans;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0770174px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve"><tspan + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.9291px;line-height:2.77408px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';text-align:center;text-anchor:middle;stroke-width:0.0770174px" + y="96.417107" + x="212.7975" + sodipodi:role="line" + id="tspan1224">PEAK</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.5223px;line-height:2.30567px;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0640127px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="207.81424" + y="141.77229" + id="text1232"><tspan + sodipodi:role="line" + x="207.81424" + y="141.77229" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.09681px;line-height:2.30567px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.0640127px" + id="tspan1230">COPY</tspan></text> </g> </svg> diff --git a/docs/tarina-manual.pdf b/docs/tarina-manual.pdf Binary files differ. diff --git a/docs/wiring.png b/docs/wiring.png Binary files differ. diff --git a/docs/wiring.svg b/docs/wiring.svg @@ -1,6 +1,4 @@ <?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#" @@ -15,7 +13,7 @@ viewBox="0 0 210 297" version="1.1" id="svg8" - inkscape:version="0.92.4 (5da689c313, 2019-01-14)" + inkscape:version="1.0.2 (e86c870879, 2021-01-15)" sodipodi:docname="wiring.svg" inkscape:export-filename="/home/rbckman/tarina/docs/wiring.png" inkscape:export-xdpi="300" @@ -29,19 +27,20 @@ borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" - inkscape:zoom="0.80613815" - inkscape:cx="356.82342" - inkscape:cy="537.86875" + inkscape:zoom="2.280103" + inkscape:cx="249.68793" + inkscape:cy="926.03436" inkscape:document-units="mm" inkscape:current-layer="layer1" showgrid="false" showborder="true" inkscape:window-width="1920" - inkscape:window-height="1143" + inkscape:window-height="1016" inkscape:window-x="0" - inkscape:window-y="31" + inkscape:window-y="0" inkscape:window-maximized="1" - showguides="true" /> + showguides="true" + inkscape:document-rotation="0" /> <metadata id="metadata5"> <rdf:RDF> @@ -107,7 +106,7 @@ sodipodi:nodetypes="cccc" /> <text xml:space="preserve" - style="font-style:normal;font-weight:normal;font-size:13.15678215px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.07309321px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + style="font-style:normal;font-weight:normal;font-size:13.1568px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0730932px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" x="-143.02679" y="202.92966" id="text4702" @@ -116,7 +115,7 @@ id="tspan4700" x="-143.02679" y="202.92966" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.67796612px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.07309321px">SCREEN</tspan></text> + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.67797px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.0730932px">SCREEN</tspan></text> <path style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.27625787;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="m 207.2024,164.22529 -19.91466,0 v -57.90776 l 19.20501,0" @@ -125,7 +124,7 @@ sodipodi:nodetypes="cccc" /> <text xml:space="preserve" - style="font-style:normal;font-weight:normal;font-size:13.15678215px;line-height:2.63273716px;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.07309321px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + style="font-style:normal;font-weight:normal;font-size:13.1568px;line-height:2.63274px;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0730932px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" x="188.13419" y="123.54318" id="text4702-2"><tspan @@ -133,21 +132,21 @@ id="tspan4700-7" x="188.13419" y="123.54318" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.67796612px;line-height:2.63273716px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.07309321px">GND</tspan><tspan + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.67797px;line-height:2.63274px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.0730932px">GND</tspan><tspan sodipodi:role="line" x="188.13419" y="128.29312" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.67796612px;line-height:2.63273716px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.07309321px" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.67797px;line-height:2.63274px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.0730932px" id="tspan4726">3v3</tspan><tspan sodipodi:role="line" x="188.13419" y="133.04306" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.67796612px;line-height:2.63273716px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.07309321px" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.67797px;line-height:2.63274px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.0730932px" id="tspan4728">SCL</tspan><tspan sodipodi:role="line" x="188.13419" y="137.79301" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.67796612px;line-height:2.63273716px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.07309321px" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.67797px;line-height:2.63274px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.0730932px" id="tspan4730">SDA</tspan></text> <circle style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#220000;stroke-width:0.27625787;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" @@ -175,7 +174,7 @@ inkscape:connector-curvature="0" /> <text xml:space="preserve" - style="font-style:normal;font-weight:normal;font-size:9.69244766px;line-height:1.93950737px;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.05384693px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + style="font-style:normal;font-weight:normal;font-size:9.69245px;line-height:1.93951px;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0538469px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" x="-29.304314" y="104.99036" id="text4702-2-3" @@ -183,7 +182,7 @@ sodipodi:role="line" x="-29.304314" y="104.99036" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.44620371px;line-height:1.93950737px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.05384693px" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.4462px;line-height:1.93951px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.0538469px" id="tspan4730-4">REC</tspan></text> <path style="fill:#4d4d4d;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.27625787;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" @@ -229,7 +228,7 @@ inkscape:connector-curvature="0" /> <text xml:space="preserve" - style="font-style:normal;font-weight:normal;font-size:9.63118362px;line-height:1.92724764px;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.05350659px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + style="font-style:normal;font-weight:normal;font-size:9.63118px;line-height:1.92725px;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0535066px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" x="-45.152287" y="104.70853" id="text4702-2-3-4" @@ -237,7 +236,7 @@ sodipodi:role="line" x="-45.152287" y="104.70853" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.4244206px;line-height:1.92724764px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.05350659px" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.42442px;line-height:1.92725px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.0535066px" id="tspan4730-4-8">UP</tspan></text> <path style="fill:#4d4d4d;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.27625787;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" @@ -285,11 +284,11 @@ id="text4876" y="104.60672" x="-63.868309" - style="font-style:normal;font-weight:normal;font-size:8.28558826px;line-height:1.65798771px;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.04603105px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + style="font-style:normal;font-weight:normal;font-size:8.28559px;line-height:1.65799px;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0460311px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" xml:space="preserve" transform="rotate(-90)"><tspan id="tspan4874" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.94598699px;line-height:1.65798771px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.04603105px" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.94599px;line-height:1.65799px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.0460311px" y="104.60672" x="-63.868309" sodipodi:role="line">VIEW</tspan></text> @@ -343,7 +342,7 @@ inkscape:connector-curvature="0" /> <text xml:space="preserve" - style="font-style:normal;font-weight:normal;font-size:9.34999752px;line-height:1.87098074px;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.05194442px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + style="font-style:normal;font-weight:normal;font-size:9.35px;line-height:1.87098px;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0519444px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" x="-63.922272" y="120.56949" id="text4898" @@ -351,7 +350,7 @@ sodipodi:role="line" x="-63.922272" y="120.56949" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.3244431px;line-height:1.87098074px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.05194442px" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.32444px;line-height:1.87098px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.0519444px" id="tspan4896">LEFT</tspan></text> <path style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.27625787;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" @@ -405,13 +404,8 @@ id="text4920" y="-88.944405" x="9.8050089" - style="font-style:normal;font-weight:normal;font-size:47.625px;line-height:9.52999973px;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - xml:space="preserve"><tspan - id="tspan4918" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.93333244px;line-height:9.52999973px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.26458332px" - y="-71.808067" - x="9.8050089" - sodipodi:role="line" /></text> + style="font-style:normal;font-weight:normal;font-size:47.625px;line-height:9.53px;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve" /> <path sodipodi:nodetypes="ccc" inkscape:connector-curvature="0" @@ -462,7 +456,7 @@ inkscape:connector-curvature="0" /> <text xml:space="preserve" - style="font-style:normal;font-weight:normal;font-size:7.64506149px;line-height:1.52981508px;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.04247256px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + style="font-style:normal;font-weight:normal;font-size:7.64506px;line-height:1.52982px;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0424726px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" x="-30.016899" y="120.44619" id="text4942" @@ -470,7 +464,7 @@ sodipodi:role="line" x="-30.016899" y="120.44619" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.71824431px;line-height:1.52981508px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.04247256px" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.71824px;line-height:1.52982px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.0424726px" id="tspan4940">RIGHT</tspan></text> <path style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.27625787;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" @@ -518,11 +512,11 @@ id="text4964" y="135.97502" x="-31.417301" - style="font-style:normal;font-weight:normal;font-size:7.64506149px;line-height:1.52981508px;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.04247256px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + style="font-style:normal;font-weight:normal;font-size:7.64506px;line-height:1.52982px;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0424726px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" xml:space="preserve" transform="rotate(-90)"><tspan id="tspan4962" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.71824431px;line-height:1.52981508px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.04247256px" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.71824px;line-height:1.52982px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.0424726px" y="135.97502" x="-31.417301" sodipodi:role="line">RETAKE</tspan></text> @@ -570,7 +564,7 @@ inkscape:connector-curvature="0" /> <text xml:space="preserve" - style="font-style:normal;font-weight:normal;font-size:7.64506149px;line-height:1.52981508px;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.04247256px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + style="font-style:normal;font-weight:normal;font-size:7.64506px;line-height:1.52982px;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0424726px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" x="-47.082092" y="135.80034" id="text4986" @@ -578,7 +572,7 @@ sodipodi:role="line" x="-47.082092" y="135.80034" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.71824431px;line-height:1.52981508px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.04247256px" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.71824px;line-height:1.52982px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.0424726px" id="tspan4984">DOWN</tspan></text> <path style="fill:#4d4d4d;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.27625787;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" @@ -626,11 +620,11 @@ id="text5008" y="135.66016" x="-62.827492" - style="font-style:normal;font-weight:normal;font-size:7.64506149px;line-height:1.52981508px;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.04247256px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + style="font-style:normal;font-weight:normal;font-size:7.64506px;line-height:1.52982px;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0424726px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" xml:space="preserve" transform="rotate(-90)"><tspan id="tspan5006" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.71824431px;line-height:1.52981508px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.04247256px" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.71824px;line-height:1.52982px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.0424726px" y="135.66016" x="-62.827492" sodipodi:role="line">DEL</tspan></text> @@ -654,7 +648,7 @@ style="fill:#fbac00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.27625787;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> <text xml:space="preserve" - style="font-style:normal;font-weight:normal;font-size:7.92964983px;line-height:1.58676231px;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.04405363px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + style="font-style:normal;font-weight:normal;font-size:7.92965px;line-height:1.58676px;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0440536px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" x="-47.358608" y="120.38124" id="text4702-2-3-3" @@ -662,7 +656,7 @@ sodipodi:role="line" x="-47.358608" y="120.38124" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.81943083px;line-height:1.58676231px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.04405363px" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.81943px;line-height:1.58676px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.0440536px" id="tspan4730-4-87">ENTER</tspan></text> <path style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:0.82877356;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" @@ -738,7 +732,7 @@ r="1.891539" /> <text xml:space="preserve" - style="font-style:normal;font-weight:normal;font-size:9.63118362px;line-height:1.92724764px;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.05350659px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + style="font-style:normal;font-weight:normal;font-size:9.63118px;line-height:1.92725px;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0535066px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" x="-121.15865" y="30.398636" id="text4702-2-3-4-9" @@ -746,7 +740,7 @@ sodipodi:role="line" x="-121.15865" y="30.398636" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.4244206px;line-height:1.92724764px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.05350659px" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.42442px;line-height:1.92725px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.0535066px" id="tspan4730-4-8-2">PIEZZO</tspan></text> <image y="8.5656462" @@ -786,7 +780,7 @@ y="219.99669" /> <text xml:space="preserve" - style="font-style:normal;font-weight:normal;font-size:3.70403504px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.02057797px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + style="font-style:normal;font-weight:normal;font-size:3.70404px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.020578px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" x="-245.60664" y="103.73751" id="text4633" @@ -795,11 +789,11 @@ id="tspan4631" x="-245.60664" y="103.73751" - style="stroke-width:0.02057797px">power</tspan><tspan + style="stroke-width:0.020578px">power</tspan><tspan sodipodi:role="line" x="-245.60664" y="108.36755" - style="stroke-width:0.02057797px" + style="stroke-width:0.020578px" id="tspan4635">button</tspan></text> <path style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.82877356;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" @@ -822,14 +816,14 @@ y="223.52585" /> <text xml:space="preserve" - style="font-style:normal;font-weight:normal;font-size:4.79972792px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.02666515px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + style="font-style:normal;font-weight:normal;font-size:4.79973px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0266651px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" x="123.56652" y="229.38275" id="text4649"><tspan sodipodi:role="line" x="123.56652" y="229.38275" - style="stroke-width:0.02666515px" + style="stroke-width:0.0266651px" id="tspan4655">gnd +</tspan></text> <path style="fill:none;fill-rule:evenodd;stroke:#002e00;stroke-width:0.82877356;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" @@ -851,7 +845,7 @@ sodipodi:nodetypes="ccccc" /> <text xml:space="preserve" - style="font-style:normal;font-weight:normal;font-size:4.32605982px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.02403366px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + style="font-style:normal;font-weight:normal;font-size:4.32606px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.0240337px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" x="70.170502" y="162.40079" id="text4665"><tspan @@ -859,10 +853,10 @@ id="tspan4663" x="70.170502" y="162.40079" - style="fill:#ff0000;fill-opacity:1;stroke-width:0.02403366px">PP1</tspan></text> + style="fill:#ff0000;fill-opacity:1;stroke-width:0.0240337px">PP1</tspan></text> <text xml:space="preserve" - style="font-style:normal;font-weight:normal;font-size:4.56867647px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#090000;fill-opacity:1;stroke:none;stroke-width:0.02538154px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + style="font-style:normal;font-weight:normal;font-size:4.56868px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#090000;fill-opacity:1;stroke:none;stroke-width:0.0253815px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" x="-197.62897" y="84.658401" id="text4669" @@ -870,11 +864,11 @@ sodipodi:role="line" x="-197.62897" y="84.658401" - style="fill:#090000;fill-opacity:1;stroke-width:0.02538154px" + style="fill:#090000;fill-opacity:1;stroke-width:0.0253815px" id="tspan4671">PP3</tspan></text> <text xml:space="preserve" - style="font-style:normal;font-weight:normal;font-size:16.25736809px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.09031868px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + style="font-style:normal;font-weight:normal;font-size:16.2574px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0903187px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" x="-276.61667" y="170.04671" id="text4677" @@ -882,11 +876,11 @@ sodipodi:role="line" x="-276.61667" y="170.04671" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Latin Modern Mono Caps';-inkscape-font-specification:'Latin Modern Mono Caps';stroke-width:0.09031868px" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Latin Modern Mono Caps';-inkscape-font-specification:'Latin Modern Mono Caps';stroke-width:0.0903187px" id="tspan4679">TARINA WIRING</tspan></text> <text xml:space="preserve" - style="font-style:normal;font-weight:normal;font-size:3.70403504px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.02057797px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + style="font-style:normal;font-weight:normal;font-size:3.70404px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.020578px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" x="-246.12863" y="130.80939" id="text4633-9" @@ -894,7 +888,7 @@ sodipodi:role="line" x="-246.12863" y="130.80939" - style="stroke-width:0.02057797px" + style="stroke-width:0.020578px" id="tspan4635-9">battery</tspan></text> <image y="-279.90359" @@ -906,25 +900,29 @@ width="60.842419" transform="scale(-1)" /> <path - style="fill:none;fill-rule:evenodd;stroke:#c40000;stroke-width:0.97872257;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="m 48.921114,257.5022 v 19.27364 H 83.13183 v -14.93707 h 17.18567" + style="fill:none;fill-rule:evenodd;stroke:#c40000;stroke-width:0.978723;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 17.709959,254.13432 v 22.64152 l 65.421871,0 v -14.93707 h 17.18567" id="path5069" - inkscape:connector-curvature="0" /> + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccccc" /> <path - style="fill:none;fill-rule:evenodd;stroke:#0000ff;stroke-width:0.97872257;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="m 45.789147,257.26129 v 22.64652 H 85.1395 v -14.85677 h 14.696161" + style="fill:none;fill-rule:evenodd;stroke:#0000ff;stroke-width:0.978723;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 20.908522,254.2855 v 25.62231 l 64.230978,0 v -14.85677 h 14.696161" id="path5071" - inkscape:connector-curvature="0" /> + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccccc" /> <path - style="fill:none;fill-rule:evenodd;stroke:#00bb00;stroke-width:0.97872257;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="m 43.219327,257.34159 v 25.53759 H 87.4684 v -15.178 h 12.367261" + style="fill:none;fill-rule:evenodd;stroke:#00bb00;stroke-width:0.978723;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 23.278565,254.23797 v 28.64121 l 64.189835,0 v -15.178 h 12.367261" id="path5073" - inkscape:connector-curvature="0" /> + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccccc" /> <path - style="fill:none;fill-rule:evenodd;stroke:#bb00ff;stroke-width:0.97872257;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="m 39.926746,257.26129 v 28.50893 H 89.95792 v -15.57955 h 10.038351" + style="fill:none;fill-rule:evenodd;stroke:#bb00ff;stroke-width:0.978723;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 26.601628,254.08832 0,31.72496 63.356292,-0.0431 v -15.57955 h 10.038351" id="path5075" - inkscape:connector-curvature="0" /> + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccccc" /> <image y="-52.708424" x="8.6060266" @@ -941,91 +939,85 @@ inkscape:connector-curvature="0" /> <text xml:space="preserve" - style="font-style:normal;font-weight:normal;font-size:9.69244766px;line-height:1.93950737px;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.05384693px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + style="font-style:normal;font-weight:normal;font-size:9.69245px;line-height:1.93951px;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0538469px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" x="46.688305" y="66.52356" id="text4702-2-3-0"><tspan sodipodi:role="line" x="46.688305" y="66.52356" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.44620395px;line-height:1.93950737px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.05384693px" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.4462px;line-height:1.93951px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.0538469px" id="tspan4730-4-7">BAT(-) -&gt; BUTTON</tspan></text> <text xml:space="preserve" - style="font-style:normal;font-weight:normal;font-size:9.69244766px;line-height:1.93950737px;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.05384693px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + style="font-style:normal;font-weight:normal;font-size:9.69245px;line-height:1.93951px;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0538469px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" x="46.162003" y="71.950424" id="text4702-2-3-0-2"><tspan sodipodi:role="line" x="46.162003" y="71.950424" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.44620395px;line-height:1.93950737px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.05384693px" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.4462px;line-height:1.93951px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.0538469px" id="tspan5241">MINIPLUG LEFT</tspan><tspan sodipodi:role="line" x="46.162003" y="75.449654" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.44620395px;line-height:1.93950737px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.05384693px" id="tspan5249" /><tspan sodipodi:role="line" x="46.162003" y="77.38916" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.44620395px;line-height:1.93950737px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.05384693px" id="tspan5251" /><tspan sodipodi:role="line" x="46.162003" y="79.328667" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.44620395px;line-height:1.93950737px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.05384693px" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.4462px;line-height:1.93951px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.0538469px" id="tspan5253"> MINIPLUG GND</tspan><tspan sodipodi:role="line" x="46.162003" y="82.827896" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.44620395px;line-height:1.93950737px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.05384693px" id="tspan5255" /><tspan sodipodi:role="line" x="46.162003" y="84.767403" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.44620395px;line-height:1.93950737px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.05384693px" id="tspan5257" /><tspan sodipodi:role="line" x="46.162003" y="86.706909" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.44620395px;line-height:1.93950737px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.05384693px" id="tspan5259" /><tspan sodipodi:role="line" x="46.162003" y="88.646416" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.44620395px;line-height:1.93950737px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.05384693px" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.4462px;line-height:1.93951px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.0538469px" id="tspan5167">MINIPLUG RIGHT</tspan></text> <text xml:space="preserve" - style="font-style:normal;font-weight:normal;font-size:9.69244766px;line-height:1.93950737px;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.05384693px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + style="font-style:normal;font-weight:normal;font-size:9.69245px;line-height:1.93951px;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0538469px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" x="45.737896" y="26.86887" id="text4702-2-3-0-1"><tspan sodipodi:role="line" x="45.737896" y="26.86887" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.44620395px;line-height:1.93950737px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.05384693px" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.4462px;line-height:1.93951px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.0538469px" id="tspan4730-4-7-0">GND -&gt; BUTTON</tspan><tspan sodipodi:role="line" x="45.737896" y="30.368097" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.44620395px;line-height:1.93950737px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.05384693px" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.4462px;line-height:1.93951px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.0538469px" id="tspan5203">GND -&gt; MINIPLUG GND</tspan><tspan sodipodi:role="line" x="45.737896" y="33.867325" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.44620395px;line-height:1.93950737px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.05384693px" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.4462px;line-height:1.93951px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.0538469px" id="tspan5193">VCC -&gt; BAT(+)</tspan><tspan sodipodi:role="line" x="45.737896" y="37.36655" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.44620395px;line-height:1.93950737px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.05384693px" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.4462px;line-height:1.93951px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.0538469px" id="tspan5199">OUT -&gt; LEFT RIGHT</tspan><tspan sodipodi:role="line" x="45.737896" y="40.86578" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.44620395px;line-height:1.93950737px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.05384693px" id="tspan5195" /></text> <path style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" @@ -1056,19 +1048,19 @@ inkscape:connector-curvature="0" /> <text xml:space="preserve" - style="font-style:normal;font-weight:normal;font-size:9.69244766px;line-height:1.93950737px;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.05384693px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + style="font-style:normal;font-weight:normal;font-size:9.69245px;line-height:1.93951px;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0538469px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" x="49.778915" y="47.957821" id="text4702-2-3-0-0"><tspan sodipodi:role="line" x="49.778915" y="47.957821" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.44620395px;line-height:1.93950737px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.05384693px" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.4462px;line-height:1.93951px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.0538469px" id="tspan4730-4-7-08">BUTTON is under</tspan><tspan sodipodi:role="line" x="49.778915" y="51.457047" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.44620395px;line-height:1.93950737px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.05384693px" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.4462px;line-height:1.93951px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.0538469px" id="tspan5235">mic board</tspan></text> <path style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" @@ -1118,11 +1110,11 @@ id="text4964-9" y="159.18045" x="-59.732586" - style="font-style:normal;font-weight:normal;font-size:7.64506149px;line-height:1.52981508px;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.04247256px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + style="font-style:normal;font-weight:normal;font-size:7.64506px;line-height:1.52982px;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0424726px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" xml:space="preserve" transform="rotate(-90)"><tspan id="tspan4962-6" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.71824431px;line-height:1.52981508px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.04247256px" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.71824px;line-height:1.52982px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.0424726px" y="159.18045" x="-59.732586" sodipodi:role="line">FUNC</tspan></text> @@ -1172,11 +1164,11 @@ id="text4964-9-2" y="159.01634" x="-40.039932" - style="font-style:normal;font-weight:normal;font-size:7.64506149px;line-height:1.52981508px;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.04247256px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + style="font-style:normal;font-weight:normal;font-size:7.64506px;line-height:1.52982px;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0424726px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" xml:space="preserve" transform="rotate(-90)"><tspan id="tspan4962-6-2" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.71824431px;line-height:1.52981508px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.04247256px" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.71824px;line-height:1.52982px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono';stroke-width:0.0424726px" y="159.01634" x="-40.039932" sodipodi:role="line">HELP</tspan></text> @@ -1219,7 +1211,7 @@ y="168.30754" /> <text xml:space="preserve" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.67783356px;line-height:125%;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.07309321px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.67783px;line-height:125%;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0730932px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" x="-186.44258" y="130.1996" id="text4702-7" @@ -1227,21 +1219,21 @@ sodipodi:role="line" x="-186.44258" y="130.1996" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.67783356px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.07309321px" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.67783px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.0730932px" id="tspan2825">POWER</tspan><tspan sodipodi:role="line" x="-186.44258" y="136.04689" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.67783356px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.07309321px" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.67783px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.0730932px" id="tspan2829">CHARGER</tspan><tspan sodipodi:role="line" x="-186.44258" y="141.89418" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.67783356px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.07309321px" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.67783px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.0730932px" id="tspan2831">BOOSTER</tspan></text> <text xml:space="preserve" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.17499995px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.02666515px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.175px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0266651px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" x="133.66492" y="199.57402" id="text4649-4"><tspan @@ -1255,7 +1247,7 @@ y="203.54277">- +</tspan></text> <text xml:space="preserve" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.46944451px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.02666515px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.46944px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0266651px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" x="135.14595" y="171.8268" id="text4649-4-8"><tspan diff --git a/extras/buttons.png b/extras/buttons.png Binary files differ. diff --git a/extras/buttons.xcf b/extras/buttons.xcf Binary files differ. diff --git a/extras/tarina.conf b/extras/tarina.conf @@ -1,15 +1,14 @@ <VirtualHost *:80> ServerAdmin info@tarina.org - #DocumentRoot /srv/www/reikaleipa.fi/public_html - WSGIScriptAlias / /var/www/srv/tarinaserver.py + WSGIScriptAlias / /home/pi/tarina/srv/tarinaserver.py WSGIPassAuthorization On AddType text/html .py - Alias /static /var/www/srv/static + Alias /static /home/pi/tarina/srv/static <Directory /> Options FollowSymLinks AllowOverride None </Directory> - <Directory /var/www/srv> + <Directory /home/pi/srv> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny diff --git a/srv/templates/index.html b/srv/templates/index.html @@ -28,9 +28,10 @@ $for m in menu[3:]: <br> </div> $if thumb != '': - $ picture="static/Videos/" + name + "/scene" + str(scene).zfill(3) + "/shot" + str(shot).zfill(3) + "/take" + str(take).zfill(3) + ".jpeg" -$else: $ picture="static/Videos/" + name + "/scene" + str(scene).zfill(3) + "/shot" + str(shot).zfill(3) + "/picture" + str(take).zfill(3) + ".jpeg" +$else: + $ picture="static/Videos/" + name + "/scene" + str(scene).zfill(3) + "/shot" + str(shot).zfill(3) + "/take" + str(take).zfill(3) + ".jpeg" + $ take_link="static/Videos/" + name + "/scene" + str(scene).zfill(3) + "/shot" + str(shot).zfill(3) + "/take" + str(take).zfill(3) + ".mp4" $ scene_link="static/Videos/" + name + "/scene" + str(scene).zfill(3) + "/scene.mp4" diff --git a/tarina.py b/tarina.py @@ -94,7 +94,7 @@ else: #MAIN def main(): - global headphoneslevel, miclevel, tarinafolder, screen, loadfilmsettings, plughw, channels, filmfolder, scene, showmenu, quality, profilelevel, i2cbuttons, menudone, soundrate, soundformat, process, serverstate, que, port, recording, onlysound, camera_model, fps_selection, fps_selected, fps, db, selected + global headphoneslevel, miclevel, tarinafolder, screen, loadfilmsettings, plughw, channels, filmfolder, scene, showmenu, rendermenu, quality, profilelevel, i2cbuttons, menudone, soundrate, soundformat, process, serverstate, que, port, recording, onlysound, camera_model, fps_selection, fps_selected, fps, db, selected, cammode # Get path of the current dir, then use it as working directory: rundir = os.path.dirname(__file__) if rundir != '': @@ -106,7 +106,7 @@ def main(): tarinafolder = os.getcwd() #MENUS - menu = 'FILM:', 'SCENE:', 'SHOT:', 'TAKE:', '', 'SHUTTER:', 'ISO:', 'RED:', 'BLUE:', 'FPS:', 'Q:', 'BRIGHT:', 'CONT:', 'SAT:', 'FLIP:', 'BEEP:', 'LENGTH:', 'HW:', 'CH:', 'MIC:', 'PHONES:', 'COMP:', 'TIMELAPSE', 'LENS:', 'DSK:', 'SHUTDOWN', 'SRV:', 'WIFI:', 'UPDATE', 'UPLOAD', 'BACKUP', 'LOAD', 'NEW', 'TITLE', 'LIVE:' + menu = 'FILM:', 'SCENE:', 'SHOT:', 'TAKE:', '', 'SHUTTER:', 'ISO:', 'RED:', 'BLUE:', 'FPS:', 'Q:', 'BRIGHT:', 'CONT:', 'SAT:', 'FLIP:', 'BEEP:', 'LENGTH:', 'HW:', 'CH:', 'MIC:', 'PHONES:', 'COMP:', 'TIMELAPSE', 'MODE:', 'DSK:', 'SHUTDOWN', 'SRV:', 'WIFI:', 'UPDATE', 'UPLOAD', 'BACKUP', 'LOAD', 'NEW', 'TITLE', 'LIVE:' #STANDARD VALUES (some of these may not be needed, should do some clean up) abc = '_','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','1','2','3','4','5','6','7','8','9','0' keydelay = 0.0555 @@ -115,6 +115,7 @@ def main(): awb = 'auto', 'sunlight', 'cloudy', 'shade', 'tungsten', 'fluorescent', 'incandescent', 'flash', 'horizon' awbx = 0 awb_lock = 'no' + cammode = 'film' camera_model='' fps = 25 fps_selected=2 @@ -122,7 +123,7 @@ def main(): profilelevel='4.2' headphoneslevel = 40 miclevel = 50 - soundformat = 'S32_LE' + soundformat = 'S16_LE' soundrate = '48000' recording = False retake = False @@ -159,7 +160,7 @@ def main(): updatethumb = False loadfilmsettings = True oldsettings = '' - comp = 1 + comp = 0 yankedscene = '' cuttedscene = '' cuttedshot = '' @@ -228,6 +229,8 @@ def main(): serverstate_old='off' wifistate_old='off' + camera_model, camera_revision = getconfig(camera) + #--------------MAIN LOOP---------------# while True: pressed, buttonpressed, buttontime, holdbutton, event, keydelay = getbutton(pressed, buttonpressed, buttontime, holdbutton) @@ -252,14 +255,26 @@ def main(): writemessage('Hold on shutting down...') time.sleep(1) run_command('sudo shutdown -h now') + #MODE + elif pressed == 'changemode': + if cammode == 'film': + cammode = 'picture' + vumetermessage('changing to picture mode') + elif cammode == 'picture': + cammode = 'film' + vumetermessage('changing to film mode') + camera.stop_preview() + camera.close() + camera = startcamera(lens,fps) + loadfilmsettings = True #PICTURE elif pressed == 'picture': if os.path.isdir(foldername) == False: os.makedirs(foldername) picture = foldername +'picture' + str(take).zfill(3) + '.jpeg' + run_command('touch ' + foldername + '.placeholder') print('taking picture') - camera.capture(picture,format="jpeg",use_video_port=True) - #INSERT SCENE + camera.capture(picture,format="jpeg",use_video_port=True) #PEAKING elif pressed == 'peak' and recordable == True: if shot > 1: @@ -271,6 +286,16 @@ def main(): pressed, buttonpressed, buttontime, holdbutton, event, keydelay = getbutton(pressed, buttonpressed, buttontime, holdbutton) writemessage('peaking ' + str(peakshot)) overlay = removeimage(camera, overlay) + #SHOWHELP + elif pressed == 'showhelp': + vumetermessage('Button layout') + overlay = removeimage(camera, overlay) + overlay = displayimage(camera, tarinafolder+'/extras/buttons.png', overlay, 4) + while holdbutton == 'showhelp': + pressed, buttonpressed, buttontime, holdbutton, event, keydelay = getbutton(pressed, buttonpressed, buttontime, holdbutton) + vumetermessage('Button layout') + overlay = removeimage(camera, overlay) + updatethumb = True #TIMELAPSE elif pressed == 'middle' and menu[selected] == 'TIMELAPSE': overlay = removeimage(camera, overlay) @@ -280,7 +305,7 @@ def main(): take = 1 foldername = filmfolder + filmname + '/' + 'scene' + str(scene).zfill(3) +'/shot' + str(shot).zfill(3) + '/' filename = 'take' + str(take).zfill(3) - renderedfilename, between, duration = timelapse(beeps,camera,foldername,filename,between,duration) + renderedfilename, between, duration = timelapse(beeps,camera,filmname,foldername,filename,between,duration,backlight) if renderedfilename != '': #render thumbnail #writemessage('creating thumbnail') @@ -288,39 +313,49 @@ def main(): updatethumb = True #VIEW SCENE elif pressed == 'view' and menu[selected] == 'SCENE:': + organize(filmfolder, filmname) filmfiles = shotfiles(filmfolder, filmname, scene) - writemessage('Loading scene...') if len(filmfiles) > 0: + writemessage('Loading scene...') #Check if rendered video exist camera.stop_preview() #renderfilename, newaudiomix = renderscene(filmfolder, filmname, scene) renderfilename = renderfilm(filmfolder, filmname, comp, scene, False) remove_shots = playdub(filmname,renderfilename, 'scene') - try: - if remove_shots != []: - for i in remove_shots: - remove(filmfolder, filmname, scene, i, take, 'shot') - organize(filmfolder, filmname) - scenes, shots, takes = browse(filmname,filmfolder,scene,shot,take) - updatethumb = True - time.sleep(0.5) - except: + if remove_shots != []: + for i in remove_shots: + remove(filmfolder, filmname, scene, i, take, 'shot') + organize(filmfolder, filmname) + updatethumb = True + #loadfilmsettings = True + time.sleep(0.5) + else: print('nothing to remove') camera.start_preview() + else: + vumetermessage("There's absolutely nothing in this scene! hit rec!") #VIEW FILM elif pressed == 'view' and menu[selected] == 'FILM:': + organize(filmfolder, filmname) filmfiles = viewfilm(filmfolder, filmname) - writemessage('Loading film...') if len(filmfiles) > 0: + writemessage('Loading film...') camera.stop_preview() + #removeimage(camera, overlay) renderfilename = renderfilm(filmfolder, filmname, comp, 0, True) - playdub(filmname,renderfilename, 'film') + if renderfilename != '': + remove_shots = playdub(filmname,renderfilename, 'film') + #overlay = displayimage(camera, imagename, overlay, 3) camera.start_preview() + else: + vumetermessage('wow, shoot first! there is zero, nada, zip footage to watch now... just hit rec!') + rendermenu = True #VIEW SHOT OR TAKE elif pressed == 'view': + organize(filmfolder, filmname) takes = counttakes(filmname, filmfolder, scene, shot) - writemessage('Loading clip...') if takes > 0: + writemessage('Loading clip...') removeimage(camera, overlay) camera.stop_preview() foldername = filmfolder + filmname + '/scene' + str(scene).zfill(3) +'/shot' + str(shot).zfill(3) + '/' @@ -334,6 +369,8 @@ def main(): imagename = foldername + filename + '.jpeg' overlay = displayimage(camera, imagename, overlay, 3) camera.start_preview() + else: + vumetermessage('nothing here! hit rec!') #DUB SHOT elif pressed == 'middle' and menu[selected] == 'SHOT, not so fast:': newdub = clipsettings(filmfolder, filmname, scene, shot, plughw) @@ -431,7 +468,7 @@ def main(): with open(filmfolder + filmname + '/.filmhash', 'w') as f: f.write(filmhash) updatethumb = True - updatemenu = True + rendermenu = True scene = 1 shot = 1 take = 1 @@ -597,9 +634,11 @@ def main(): # requires wiringpi installed run_command('gpio -g pwm 19 1023') backlight = True + camera.start_preview() elif backlight == True: run_command('gpio -g pwm 19 0') backlight = False + camera.stop_preview() elif pressed == 'showmenu': if showmenu == 1: # requires wiringpi installed @@ -614,16 +653,20 @@ def main(): remove(filmfolder, filmname, scene, shot, take, 'take') organize(filmfolder, filmname) scenes, shots, takes = browse(filmname,filmfolder,scene,shot,take) + take = counttakes(filmname, filmfolder, scene, shot) updatethumb = True - loadfilmsettings = True + rendermenu = True + #loadfilmsettings = True time.sleep(0.5) #shot elif pressed == 'remove' and menu[selected] == 'SHOT:': remove(filmfolder, filmname, scene, shot, take, 'shot') organize(filmfolder, filmname) scenes, shots, takes = browse(filmname,filmfolder,scene,shot,take) + take = counttakes(filmname, filmfolder, scene, shot) updatethumb = True - loadfilmsettings = True + rendermenu = True + #loadfilmsettings = True time.sleep(0.5) #scene elif pressed == 'remove' and menu[selected] == 'SCENE:': @@ -631,8 +674,10 @@ def main(): organize(filmfolder, filmname) scenes, shots, takes = browse(filmname,filmfolder,scene,shot,take) shot = countshots(filmname, filmfolder, scene) + take = counttakes(filmname, filmfolder, scene, shot) updatethumb = True - loadfilmsettings = True + rendermenu = True + #loadfilmsettings = True time.sleep(0.5) #film elif pressed == 'remove' and menu[selected] == 'FILM:': @@ -644,6 +689,7 @@ def main(): scene, shot, take = countlast(filmname, filmfolder) loadfilmsettings = True updatethumb = True + rendermenu = True time.sleep(0.5) #RECORD AND PAUSE @@ -666,11 +712,7 @@ def main(): if pressed == 'record' or pressed == 'retake' or reclenght != 0 and t > reclenght: overlay = removeimage(camera, overlay) if recording == False and recordable == True: - scenes, shots, takes = browse(filmname,filmfolder,scene,shot,take) - videos_totalt = db.query("SELECT COUNT(*) AS videos FROM videos")[0] - tot = int(videos_totalt.videos) - video_origins=datetime.datetime.now().strftime('%Y%d%m')+str(tot).zfill(5) - db.insert('videos', tid=datetime.datetime.now(), filename=filmfolder+'.videos/'+video_origins+'.mp4', foldername=foldername, filmname=filmname, scene=scene, shot=shot, take=take, audiolenght=0, videolenght=0) + scenes, shots, takes = browse(filmname,filmfolder,scene,shot,take) if pressed == "record": #shot = shots+1 take = takes+1 @@ -683,13 +725,32 @@ def main(): beeping = False if os.path.isdir(foldername) == False: os.makedirs(foldername) - os.system(tarinafolder + '/alsa-utils-1.1.3/aplay/arecord -D plughw:' + str(plughw) + ' -f '+soundformat+' -c ' + str(channels) + ' -r '+soundrate+' -vv '+ foldername + filename + '.wav &') - sound_start = time.time() - if onlysound != True: - camera.start_recording(filmfolder+ '.videos/'+video_origins+'.h264', format='h264', quality=quality, level=profilelevel) - starttime = time.time() - recording = True - showmenu = 0 + if cammode == 'film': + videos_totalt = db.query("SELECT COUNT(*) AS videos FROM videos")[0] + tot = int(videos_totalt.videos) + video_origins=datetime.datetime.now().strftime('%Y%d%m')+str(tot).zfill(5) + db.insert('videos', tid=datetime.datetime.now(), filename=filmfolder+'.videos/'+video_origins+'.mp4', foldername=foldername, filmname=filmname, scene=scene, shot=shot, take=take, audiolenght=0, videolenght=0) + os.system(tarinafolder + '/alsa-utils-1.1.3/aplay/arecord -D plughw:' + str(plughw) + ' -f '+soundformat+' -c ' + str(channels) + ' -r '+soundrate+' -vv '+ foldername + filename + '.wav &') + sound_start = time.time() + if onlysound != True: + camera.start_recording(filmfolder+ '.videos/'+video_origins+'.h264', format='h264', quality=quality, level=profilelevel) + starttime = time.time() + recording = True + showmenu = 0 + if cammode == 'picture': + #picdate=datetime.datetime.now().strftime('%Y%d%m') + picture = foldername +'picture' + str(take).zfill(3) + '.jpeg' + print('taking picture') + camera.capture(picture,format="jpeg",use_video_port=True) + run_command('touch ' + foldername + 'take' + str(take).zfill(3) + '.mp4') + basewidth = 800 + img = Image.open(picture) + wpercent = (basewidth/float(img.size[0])) + hsize = int((float(img.size[1])*float(wpercent))) + img = img.resize((basewidth,hsize), Image.ANTIALIAS) + img.save(foldername+'take'+str(take).zfill(3) + '.jpeg') + vumetermessage('Great Pic taken!!') + updatethumb = True elif beepcountdown > 0 and beeping == True: beeping = False beepcountdown = 0 @@ -767,6 +828,8 @@ def main(): camera.awb_mode = 'auto' elif pressed == 'middle' and menu[selected] == 'BEEP:': beeps = 0 + elif pressed == 'middle' and menu[selected] == 'LENGTH:': + reclenght = 0 elif pressed == 'middle' and menu[selected] == 'LIVE:': if stream == '': stream = startstream(camera, stream, plughw, channels) @@ -783,6 +846,10 @@ def main(): camera.contrast = 0 elif pressed == 'middle' and menu[selected] == 'SAT:': camera.saturation = 0 + elif pressed == 'middle' and menu[selected] == 'MIC:': + miclevel = 70 + elif pressed == 'middle' and menu[selected] == 'PHONES:': + headphoneslevel = 70 #UP elif pressed == 'up': @@ -832,8 +899,8 @@ def main(): run_command('amixer -c 0 sset Speaker ' + str(headphoneslevel) + '%') elif menu[selected] == 'SCENE:' and recording == False: if scene <= scenes: - shot = 1 scene += 1 + shot = countshots(filmname, filmfolder, scene) take = counttakes(filmname, filmfolder, scene, shot) #scene, shots, takes = browse2(filmname, filmfolder, scene, shot, take, 0, 1) #shot = 1 @@ -874,6 +941,17 @@ def main(): elif wifistate == 'off': run_command('sudo iwconfig wlan0 txpower auto') wifistate = 'on' + elif menu[selected] == 'MODE:': + if cammode == 'film': + cammode = 'picture' + vumetermessage('changing to picture mode') + elif cammode == 'picture': + cammode = 'film' + vumetermessage('changing to film mode') + camera.stop_preview() + camera.close() + camera = startcamera(lens,fps) + loadfilmsettings = True elif menu[selected] == 'LENS:': s = 0 for a in lenses: @@ -901,7 +979,7 @@ def main(): if camera_model == 'imx477': if fps_selected < len(fps_selection)-1: fps_selected+=1 - fps_selection=[8,15,24.985,35,49] + fps_selection=[5,8,10,11,12,13,14,15,24.985,35,49] fps=fps_selection[fps_selected] camera.framerate = fps elif menu[selected] == 'Q:': @@ -973,7 +1051,7 @@ def main(): elif menu[selected] == 'SCENE:' and recording == False: if scene > 1: scene -= 1 - shot = 1 + shot = countshots(filmname, filmfolder, scene) take = counttakes(filmname, filmfolder, scene, shot) #scene, shots, take = browse2(filmname, filmfolder, scene, shot, take, 0, -1) #takes = take @@ -1013,6 +1091,17 @@ def main(): elif wifistate == 'off': run_command('sudo iwconfig wlan0 txpower auto') wifistate = 'on' + elif menu[selected] == 'MODE:': + if cammode == 'film': + cammode = 'picture' + vumetermessage('changing to picture mode') + elif cammode == 'picture': + cammode = 'film' + vumetermessage('changing to film mode') + camera.stop_preview() + camera.close() + camera = startcamera(lens,fps) + loadfilmsettings = True elif menu[selected] == 'LENS:': s = 0 for a in lenses: @@ -1045,7 +1134,7 @@ def main(): if camera_model == 'imx477': if fps_selected > 0: fps_selected-=1 - fps_selection=[5,15,24.985,35,49] + fps_selection=[5,8,10,11,12,13,14,15,24.985,35,49] fps=fps_selection[fps_selected] camera.framerate = fps elif menu[selected] == 'Q:': @@ -1090,6 +1179,7 @@ def main(): serverstate=filmsettings[20] plughw=filmsettings[21] channels=filmsettings[22] + cammode=filmsettings[23] logger.info('film settings loaded & applied') time.sleep(0.2) except: @@ -1116,11 +1206,8 @@ def main(): time.sleep(5) except: print('not exist') - organize(filmfolder,'onthefloor') - scenes, shots, takes = browse(filmname,filmfolder,scene,shot,take) - scene = scenes - shot = shots+1 - take = takes+1 + #organize(filmfolder,'onthefloor') + scene, shot, take = countlast(filmname, filmfolder) loadfilmsettings = False rendermenu = True updatethumb = True @@ -1184,7 +1271,7 @@ def main(): #Check if menu is changed and save settings / sec if buttonpressed == True or recording == True or rendermenu == True: lastmenu = menu[selected] - settings = filmname, str(scene) + '/' + str(scenes), str(shot) + '/' + str(shots), str(take) + '/' + str(takes), rectime, camerashutter, cameraiso, camerared, camerablue, str(round(camera.framerate)), str(quality), str(camera.brightness), str(camera.contrast), str(camera.saturation), str(flip), str(beeps), str(reclenght), str(plughw), str(channels), str(miclevel), str(headphoneslevel), str(comp), '', lens, diskleft, '', serverstate, wifistate, '', '', '', '', '', '', live + settings = filmname, str(scene) + '/' + str(scenes), str(shot) + '/' + str(shots), str(take) + '/' + str(takes), rectime, camerashutter, cameraiso, camerared, camerablue, str(round(camera.framerate)), str(quality), str(camera.brightness), str(camera.contrast), str(camera.saturation), str(flip), str(beeps), str(reclenght), str(plughw), str(channels), str(miclevel), str(headphoneslevel), str(comp), '', cammode, diskleft, '', serverstate, wifistate, '', '', '', '', '', '', live #Rerender menu if picamera settings change #if settings != oldsettings or selected != oldselected: writemenu(menu,settings,selected,'',showmenu) @@ -1310,7 +1397,7 @@ def listenforclients(host, port, q): #--------------Write the menu layer to dispmanx-------------- def writemenu(menu,settings,selected,header,showmenu): - global menudone + global menudone, rendermenu oldmenu=menudone menudone = '' menudoneprint = '' @@ -1327,7 +1414,7 @@ def writemenu(menu,settings,selected,header,showmenu): n += 1 spaces = len(menudone) - 500 menudone += spaces * ' ' - if oldmenu != menudone: + if oldmenu != menudone or rendermenu == True: print(term.clear+term.home) if showmenu == 0: print(term.red+menudoneprint) @@ -1465,7 +1552,7 @@ def run_command(command_line): #command_line_args = shlex.split(command_line) logger.info('Running: "' + command_line + '"') try: - process = subprocess.Popen(command_line, shell=True).wait() + p = subprocess.Popen(command_line, shell=True).wait() # process_output is now a string, not a file, # you may want to do: except (OSError, CalledProcessError) as exception: @@ -1809,17 +1896,17 @@ def nameyourfilm(filmfolder, filmname, abc, newfilm): #------------Timelapse-------------------------- -def timelapse(beeps,camera,foldername,filename,between,duration): +def timelapse(beeps,camera,filmname,foldername,filename,between,duration,backlight): pressed = '' buttonpressed = '' buttontime = time.time() holdbutton = '' sound = False selected = 0 - header = 'Adjust delay in seconds between images' - menu = 'DELAY:', 'DURATION:', 'START', 'BACK' + header = 'Adjust delay in seconds between videos' + menu = 'DELAY:', 'DURATION:', 'SOUND:', 'START', 'BACK' while True: - settings = str(round(between,2)), str(round(duration,2)), '', '' + settings = str(round(between,2)), str(round(duration,2)), str(sound), '', '' writemenu(menu,settings,selected,header,showmenu) seconds = (3600 / between) * duration vumetermessage('1 h timelapse filming equals ' + str(round(seconds,2)) + ' second clip ') @@ -1829,6 +1916,10 @@ def timelapse(beeps,camera,foldername,filename,between,duration): elif pressed == 'down' and menu[selected] == 'DELAY:': if between > 1: between = between - 1 + if pressed == 'up' and menu[selected] == 'SOUND:': + sound = True + elif pressed == 'down' and menu[selected] == 'SOUND:': + sound = False elif pressed == 'up' and menu[selected] == 'DURATION:': duration = duration + 0.1 elif pressed == 'down' and menu[selected] == 'DURATION:': @@ -1866,7 +1957,7 @@ def timelapse(beeps,camera,foldername,filename,between,duration): #camera.start_recording(foldername + 'timelapse/' + filename + '_' + str(n).zfill(3) + '.h264', format='h264', quality=26, bitrate=5000000) camera.start_recording(foldername + 'timelapse/' + filename + '_' + str(n).zfill(3) + '.h264', format='h264', quality=quality, level=profilelevel) if sound == True: - os.system(tarinafolder + '/alsa-utils-1.1.3/aplay/arecord -D hw:'+str(plughw)+' -f '+soundformat+' -c '+str(channels)+' -r '+soundrate+' -vv '+foldername + filename + '_' + str(n).zfill(3) + '.wav &') + os.system(tarinafolder+'/alsa-utils-1.1.3/aplay/arecord -D hw:'+str(plughw)+' -f '+soundformat+' -c '+str(channels)+' -r '+soundrate+' -vv '+foldername+'timelapse/'+filename+'_'+str(n).zfill(3)+'.wav &') files.append(foldername + 'timelapse/' + filename + '_' + str(n).zfill(3)) starttime = time.time() recording = True @@ -1883,7 +1974,15 @@ def timelapse(beeps,camera,foldername,filename,between,duration): recording = False starttime = time.time() t = 0 - if pressed == 'middle' and n > 1: + if pressed == 'screen': + if backlight == False: + # requires wiringpi installed + run_command('gpio -g pwm 19 1023') + backlight = True + elif backlight == True: + run_command('gpio -g pwm 19 0') + backlight = False + elif pressed == 'middle' and n > 1: if recording == True: os.system('pkill arecord') camera.stop_recording() @@ -1902,7 +2001,9 @@ def timelapse(beeps,camera,foldername,filename,between,duration): for f in files: if sound == True: compileshot(f,filmfolder,filmname) - audiotrim(foldername + 'timelapse/', filename + '_' + str(n).zfill(3), 'end') + audiotrim(foldername + 'timelapse/' + filename + '_' + str(n).zfill(3), 'end') + videomerge.append('-cat') + videomerge.append(f + '.mp4') else: videomerge.append('-cat') videomerge.append(f + '.h264') @@ -1947,6 +2048,12 @@ def remove(filmfolder, filmname, scene, shot, take, sceneshotortake): menu = '', '' settings = 'NO', 'YES' selected = 0 + otf_scene = countscenes(filmfolder, 'onthefloor') + otf_scene += 1 + otf_shot = countshots('onthefloor', filmfolder, otf_scene) + otf_shot += 1 + otf_take = counttakes('onthefloor', filmfolder, otf_scene, otf_shot) + otf_take += 1 while True: writemenu(menu,settings,selected,header,showmenu) pressed, buttonpressed, buttontime, holdbutton, event, keydelay = getbutton(pressed, buttonpressed, buttontime, holdbutton) @@ -1979,9 +2086,9 @@ def remove(filmfolder, filmname, scene, shot, take, sceneshotortake): return else: if sceneshotortake == 'take': - writemessage('Throwing take on the floor' + str(shot)) - onthefloor = filmfolder + 'onthefloor/' + 'scene' + str(1).zfill(3) + '/shot' + str(999).zfill(3) + '/take' + str(999).zfill(3) - onthefloor_folder = filmfolder + 'onthefloor/' + 'scene' + str(1).zfill(3) + '/shot' + str(99).zfill(3) + '/' + writemessage('Throwing take on the floor' + str(take)) + onthefloor = filmfolder + 'onthefloor/' + 'scene' + str(otf_scene).zfill(3) + '/shot' + str(otf_shot).zfill(3) + '/take' + str(otf_take).zfill(3) + onthefloor_folder = filmfolder + 'onthefloor/' + 'scene' + str(otf_scene).zfill(3) + '/shot' + str(otf_shot).zfill(3) + '/' if os.path.isdir(onthefloor_folder) == False: os.makedirs(onthefloor) os.system('mv ' + foldername + filename + '.h264 ' + onthefloor + '.h264') @@ -1993,13 +2100,13 @@ def remove(filmfolder, filmname, scene, shot, take, sceneshotortake): take = 1 elif sceneshotortake == 'shot' and shot > 0: writemessage('Throwing shot on the floor' + str(shot)) - onthefloor = filmfolder + 'onthefloor/' + 'scene' + str(1).zfill(3) + '/shot' + str(999).zfill(3)+'/' + onthefloor = filmfolder + 'onthefloor/' + 'scene' + str(otf_scene).zfill(3) + '/shot' + str(otf_shot).zfill(3)+'/' os.makedirs(onthefloor) os.system('cp -r '+foldername+'* '+onthefloor) os.system('rm -r '+foldername) take = counttakes(filmname, filmfolder, scene, shot) elif sceneshotortake == 'scene': - onthefloor = filmfolder + 'onthefloor/' + 'scene' + str(999).zfill(3) + onthefloor = filmfolder + 'onthefloor/' + 'scene' + str(otf_scene).zfill(3) os.makedirs(onthefloor) writemessage('Throwing clips on the floor ' + str(scene)) foldername = filmfolder + filmname + '/' + 'scene' + str(scene).zfill(3) @@ -2033,9 +2140,12 @@ def organize(filmfolder, filmname): logger.info('no takes in this shot, removing shot..') #os.system('rm -r ' + filmfolder + filmname + '/' + i + '/' + p) organized_nr = 1 + print(i) + print(p) + print(sorted(takes)) + #time.sleep(2) for s in sorted(takes): if '.mp4' in s or '.h264' in s: - #print(s) unorganized_nr = int(s[4:7]) takename = filmfolder + filmname + '/' + i + '/' + p + '/take' + str(unorganized_nr).zfill(3) if '.mp4' in s: @@ -2043,7 +2153,7 @@ def organize(filmfolder, filmname): if origin != os.path.abspath(takename+'.mp4'): print('appending: '+origin) origin_files.append(origin) - elif '.h264' in s: + if '.h264' in s: origin=os.path.realpath(takename+'.h264') if origin != os.path.abspath(takename+'.h264'): origin_files.append(origin) @@ -2051,7 +2161,9 @@ def organize(filmfolder, filmname): #print('correct') pass if organized_nr != unorganized_nr: - #print('false, correcting from ' + str(unorganized_nr) + ' to ' + str(organized_nr)) + print('false, correcting from ' + str(unorganized_nr) + ' to ' + str(organized_nr)) + print(s) + time.sleep(3) mv = 'mv ' + filmfolder + filmname + '/' + i + '/' + p + '/take' + str(unorganized_nr).zfill(3) run_command(mv + '.mp4 ' + filmfolder + filmname + '/' + i + '/' + p + '/take' + str(organized_nr).zfill(3) + '.mp4') run_command(mv + '.h264 ' + filmfolder + filmname + '/' + i + '/' + p + '/take' + str(organized_nr).zfill(3) + '.h264') @@ -2059,10 +2171,13 @@ def organize(filmfolder, filmname): run_command(mv + '.jpeg ' + filmfolder + filmname + '/' + i + '/' + p + '/take' + str(organized_nr).zfill(3) + '.jpeg') #check if same video has both h246 and mp4 and render and remove h264 for t in sorted(takes): - if t.strip('.mp4') == s.strip('.h264') or s.strip('.mp4') == t.strip('.h264'): + if t.replace('.mp4','') == s.replace('.h264','') or s.replace('.mp4','') == t.replace('.h264',''): logger.info('Found both mp4 and h264 of same video!') + logger.info(t) + logger.info(s) + #time.sleep(5) compileshot(takename,filmfolder,filmname) - organized_nr -= 1 + #organized_nr -= 1 organized_nr += 1 # Shots for i in sorted(scenes): @@ -2609,8 +2724,11 @@ def renderfilm(filmfolder, filmname, comp, scene, muxing): proc.terminate() proc.join() procdone = True + q='' os.system('pkill MP4Box') vumetermessage('canceled for now, maybe u want to render later ;)') + writemessage('press any button to continue') + print('canceling videorender') renderfilename = '' break return renderfilename @@ -2984,11 +3102,11 @@ def playdub(filmname, filename, player_menu): if buttonpressed == True: flushbutton() if pressed == 'remove': - time.sleep(0.2) if fastedit_shot in remove_shots: remove_shots.remove(fastedit_shot) else: remove_shots.append(fastedit_shot) + time.sleep(0.2) elif pressed == 'right': if selected < (len(settings) - 1): selected = selected + 1 @@ -3052,24 +3170,20 @@ def playdub(filmname, filename, player_menu): if dub == True: os.system('pkill arecord') if video == True: - try: - player.pause() + player.pause() + player.set_position(0) + if player_menu != 'film': playerAudio.pause() - player.set_position(0) playerAudio.set_position(0) - except: - return if dub == True: p = 0 while p < 3: writemessage('Dubbing in ' + str(3 - p) + 's') time.sleep(1) p+=1 - try: - player.play() + player.play() + if player_menu != 'film': playerAudio.play() - except: - return #run_command('aplay -D plughw:0 ' + filename + '.wav &') if dub == True: run_command(tarinafolder + '/alsa-utils-1.1.3/aplay/arecord -D plughw:'+str(plughw)+' -f '+soundformat+' -c '+str(channels)+' -r '+soundrate+' -vv /dev/shm/dub.wav &') @@ -3077,18 +3191,18 @@ def playdub(filmname, filename, player_menu): pass starttime = time.time() elif menu[selected] == 'PAUSE': + player.pause() try: - player.pause() playerAudio.pause() - pause = True except: pass + pause = True elif menu[selected] == 'PLAY': + player.play() try: - player.play() playerAudio.play() except: - return + pass pause = False elif menu[selected] == 'TRIM': selected = 1 @@ -3390,10 +3504,17 @@ def startstream(camera, stream, plughw, channels): #stream_cmd = 'ffmpeg -f h264 -r 25 -i - -itsoffset 5.5 -fflags nobuffer -f alsa -ac '+str(channels)+' -i hw:'+str(plughw)+' -ar 44100 -vcodec copy -acodec libmp3lame -b:a 128k -ar 44100 -map 0:0 -map 1:0 -strict experimental -f flv ' + youtube + key[0] # #stream_cmd = 'ffmpeg -f h264 -r 25 -i - -itsoffset 5.5 -fflags nobuffer -f alsa -ac '+str(channels)+' -i hw:'+str(plughw)+' -ar 44100 -vcodec copy -acodec libmp3lame -b:a 128k -ar 44100 -map 0:0 -map 1:0 -strict experimental -f mpegts tcp://0.0.0.0:3333\?listen' +<<<<<<< HEAD stream_cmd = 'ffmpeg -f h264 -r 25 -i - -itsoffset 5.5 -fflags nobuffer -f alsa -ac '+str(channels)+' -i hw:'+str(plughw)+' -ar '+soundrate+' -acodec mp2 -b:a 128k -ar '+soundrate+' -vcodec copy -map 0:0 -map 1:0 -g 0 -f mpegts udp://10.42.0.169:5000' try: stream = subprocess.Popen(stream_cmd, shell=True, stdin=subprocess.PIPE) camera.start_recording(stream.stdin, splitter_port=2, format='h264', bitrate = 55555) +======= + stream_cmd = 'ffmpeg -f h264 -r 25 -i - -itsoffset 5.5 -fflags nobuffer -f alsa -ac '+str(channels)+' -i hw:'+str(plughw)+' -ar '+soundrate+' -acodec mp2 -b:a 128k -ar '+soundrate+' -vcodec copy -map 0:0 -map 1:0 -g 0 -f mpegts udp://10.42.0.73:5004' + try: + stream = subprocess.Popen(stream_cmd, shell=True, stdin=subprocess.PIPE) + camera.start_recording(stream.stdin, format='h264', bitrate = 555555) +>>>>>>> c7991decc2aa8d0da755b26d40b1cfcd0c63cfca except: stream = '' #now = time.strftime("%Y-%m-%d-%H:%M:%S") @@ -3537,64 +3658,67 @@ def getbutton(lastbutton, buttonpressed, buttontime, holdbutton): #Check controller pressed = '' nextstatus = '' - if process.is_alive() == False and serverstate == 'on': - nextstatus = que.get() - if "*" in nextstatus: - tarinactrl_ip = nextstatus.split('*')[1] - nextstatus = nextstatus.split('*')[0] - print('tarinactrl ip:' + tarinactrl_ip) - process = Process(target=listenforclients, args=("0.0.0.0", port, que)) - process.start() - if 'SELECTED' in nextstatus: - try: - selected=int(nextstatus.split(':')[1]) - except: - print('wtf?') - if nextstatus=="PICTURE": - pressed="picture" - elif nextstatus=="UP": - pressed="up" - elif nextstatus=="DOWN": - pressed="down" - elif nextstatus=="LEFT": - pressed="left" - elif nextstatus=="RIGHT": - pressed="right" - elif nextstatus=="VIEW": - pressed="view" - elif nextstatus=="MIDDLE": - pressed="middle" - elif nextstatus=="DELETE": - pressed="remove" - elif nextstatus=="REC": - pressed="record" - elif nextstatus=="STOP": - if recording == True: - pressed="record" - elif nextstatus=="RECSOUND": - if recording==False: + try: + if process.is_alive() == False and serverstate == 'on': + nextstatus = que.get() + if "*" in nextstatus: + tarinactrl_ip = nextstatus.split('*')[1] + nextstatus = nextstatus.split('*')[0] + print('tarinactrl ip:' + tarinactrl_ip) + process = Process(target=listenforclients, args=("0.0.0.0", port, que)) + process.start() + if 'SELECTED' in nextstatus: + try: + selected=int(nextstatus.split(':')[1]) + except: + print('wtf?') + if nextstatus=="PICTURE": + pressed="picture" + elif nextstatus=="UP": + pressed="up" + elif nextstatus=="DOWN": + pressed="down" + elif nextstatus=="LEFT": + pressed="left" + elif nextstatus=="RIGHT": + pressed="right" + elif nextstatus=="VIEW": + pressed="view" + elif nextstatus=="MIDDLE": + pressed="middle" + elif nextstatus=="DELETE": + pressed="remove" + elif nextstatus=="REC": pressed="record" - onlysound=True - elif nextstatus=="PLACEHOLDER": - selected=2 - pressed="insert_shot" - elif "SYNCIP:" in nextstatus: - ip = nextstatus.split(':')[1] - stopinterface(camera) - run_command('rsync -avr --update --progress --exclude="*.wav" pi@'+ip+':'+filmfolder+filmname+'/'+'scene'+str(scene).zfill(3)+' '+filmfolder+filmname+'/') - sendtoserver(tarinactrl_ip,port,'SYNCDONE') - #run_command('scp -r '+filmfolder+filmname+'/'+'scene'+str(scene).zfill(3)+' pi@'+ip+':'+filmfolder+filmname+'/') - startinterface() - camera = startcamera(lens,fps) - loadfilmsettings = True - elif nextstatus=="NEWSCENE": - scenes, shots, takes = browse(filmname,filmfolder,scene,shot,take) - scene=scenes+1 - shot=1 - take=1 - elif nextstatus=="RETAKE": - pressed="retake" - #print(nextstatus) + elif nextstatus=="STOP": + if recording == True: + pressed="record" + elif nextstatus=="RECSOUND": + if recording==False: + pressed="record" + onlysound=True + elif nextstatus=="PLACEHOLDER": + selected=2 + pressed="insert_shot" + elif "SYNCIP:" in nextstatus: + ip = nextstatus.split(':')[1] + stopinterface(camera) + run_command('rsync -avr --update --progress --exclude="*.wav" pi@'+ip+':'+filmfolder+filmname+'/'+'scene'+str(scene).zfill(3)+' '+filmfolder+filmname+'/') + sendtoserver(tarinactrl_ip,port,'SYNCDONE') + #run_command('scp -r '+filmfolder+filmname+'/'+'scene'+str(scene).zfill(3)+' pi@'+ip+':'+filmfolder+filmname+'/') + startinterface() + camera = startcamera(lens,fps) + loadfilmsettings = True + elif nextstatus=="NEWSCENE": + scenes, shots, takes = browse(filmname,filmfolder,scene,shot,take) + scene=scenes+1 + shot=1 + take=1 + elif nextstatus=="RETAKE": + pressed="retake" + #print(nextstatus) + except: + print('process not found') with term.cbreak(): val = term.inkey(timeout=0) if val.is_sequence: @@ -3614,9 +3738,9 @@ def getbutton(lastbutton, buttonpressed, buttontime, holdbutton): if readbus2 == 0: readbus2 = 247 if readbus != 255: - print('i2cbutton pressed: ' + str(readbus)) + print('i2cbutton readbus pressed: ' + str(readbus)) if readbus2 != 247: - print('i2cbutton pressed: ' + str(readbus2)) + print('i2cbutton readbus2 pressed: ' + str(readbus2)) else: readbus = 255 readbus2 = 247 @@ -3647,9 +3771,13 @@ def getbutton(lastbutton, buttonpressed, buttontime, holdbutton): pressed = 'peak' elif (readbus2 == 245 and readbus == 223): pressed = 'screen' - elif (readbus2 == 245 and readbus == 247): + elif (readbus2 == 245 and readbus == 127): pressed = 'showmenu' - elif event == 'I' or event == 'P' or (readbus2 == 244 and readbus == 255): + elif (readbus2 == 245 and readbus == 251): + pressed = 'showhelp' + elif (readbus2 == 244): + pressed = 'changemode' + elif event == 'I' or event == 'P' or (readbus2 == 245 and readbus == 247): pressed = 'insert' elif event == 'C' or (readbus2 == 245 and readbus == 254): pressed = 'copy' @@ -3690,9 +3818,13 @@ def stopinterface(camera): return camera def startcamera(lens, fps): - global camera_model, fps_selection, fps_selected + global camera_model, fps_selection, fps_selected, cammode camera = picamera.PiCamera() - camera.resolution = (1920, 1080) #tested modes 1920x816, 1296x552/578, v2 1640x698, 1640x1232, hqbinned 2028x1080 + if cammode == 'film': + reso=(1920,1080) + elif cammode == 'picture': + reso=(4056,3040) + camera.resolution = reso #tested modes 1920x816, 1296x552/578, v2 1640x698, 1640x1232, hqbinned 2028x1080, full 4056x3040 #Background image underlay = None bakgimg = tarinafolder + '/extras/bakg.jpg'