From bc69d53152f7b8fd5ddd8afbee9ec88f47a19a0b Mon Sep 17 00:00:00 2001 From: David Lamparter Date: Sun, 27 Apr 2014 17:53:27 +0000 Subject: Miscellaneous foo --- cethcan/can.c | 10 ++++--- cethcan/cethcan.h | 2 ++ cethcan/cethcan.json | 4 +-- cethcan/main.c | 7 ++++- cethcan/start | 19 ++++++++++++++ svg/subcan.js | 27 ++++++++++++++----- svg/subcan_dxf.svg | 74 +++++++++++++++++++++++++++++++++++++++++++++++----- 7 files changed, 124 insertions(+), 19 deletions(-) create mode 100755 cethcan/start diff --git a/cethcan/can.c b/cethcan/can.c index 5145871..39da3f1 100644 --- a/cethcan/can.c +++ b/cethcan/can.c @@ -40,10 +40,12 @@ void can_broadcast(struct can_user *origin, struct can_message *msg) lprintf("invalid CAN message (DLC = %zu)", msg->dlc); return; } - for (size_t i = 0; i < msg->dlc; i++) - sprintf(buf + 3 * i, " %02x", msg->bytes[i]); - lprintf("%s: %08x (%zu)%s", origin->name, - (unsigned)msg->daddr, msg->dlc, buf); + if (verbosity >= 1) { + for (size_t i = 0; i < msg->dlc; i++) + sprintf(buf + 3 * i, " %02x", msg->bytes[i]); + lprintf("%s: %08x (%zu)%s", origin->name, + (unsigned)msg->daddr, msg->dlc, buf); + } for (u = users; u; u = u->next) if (u != origin) diff --git a/cethcan/cethcan.h b/cethcan/cethcan.h index ab5edde..5b42f54 100644 --- a/cethcan/cethcan.h +++ b/cethcan/cethcan.h @@ -27,6 +27,8 @@ #include "protocol.h" +extern int verbosity; + #define lprintf(...) do { \ struct timeval tv; struct tm tm; char tvbuf[64]; \ gettimeofday(&tv, NULL); localtime_r(&tv.tv_sec, &tm); \ diff --git a/cethcan/cethcan.json b/cethcan/cethcan.json index 25aaea8..ae84cb4 100644 --- a/cethcan/cethcan.json +++ b/cethcan/cethcan.json @@ -18,9 +18,9 @@ { "addr": 1098, "name": "dali.hacklab.west.outer" } ], "beans": [ - { "addr": 256, "name": "door.right", "values": [ "open", "closed" ] }, + { "addr": 256, "name": "toilet.lock", "values": [ "open", "closed" ] }, { "addr": 257, "name": "door.left", "values": [ "open", "closed" ] }, - { "addr": 258, "name": "door.light", "values": [ "triggered", "normal" ] }, + { "addr": 258, "name": "door.right", "values": [ "open", "closed" ] }, { "addr": 259, "name": "door.lock", "values": [ "open", "closed" ] } ], "espnet": [ { diff --git a/cethcan/main.c b/cethcan/main.c index 961c543..2b9154e 100644 --- a/cethcan/main.c +++ b/cethcan/main.c @@ -2,6 +2,8 @@ struct event_base *ev_base; +int verbosity = 0; + int main(int argc, char **argv) { int optch = 0; @@ -11,11 +13,14 @@ int main(int argc, char **argv) struct sigaction sa; do { - optch = getopt(argc, argv, "c:"); + optch = getopt(argc, argv, "vc:"); switch (optch) { case 'c': cfgfile = optarg; break; + case 'v': + verbosity++; + break; case -1: break; } diff --git a/cethcan/start b/cethcan/start new file mode 100755 index 0000000..33a9be2 --- /dev/null +++ b/cethcan/start @@ -0,0 +1,19 @@ +#!/bin/sh + +sleep 1 + +/sbin/modprobe c_can_platform +/sbin/modprobe can-raw + +sleep 1 + +/sbin/ip link set can0 down +/sbin/ip link set can0 type can tq 1500 prop-seg 2 phase-seg1 1 phase-seg2 2 sjw 1 +# /sbin/ip link set can0 type can bitrate 111111 +/sbin/ip link set can0 type can restart-ms 100 listen-only off berr-reporting on +/sbin/ip link set can0 promisc on up + +sleep 1 + +exec /root/spaceautomation/cethcan/cethcan + diff --git a/svg/subcan.js b/svg/subcan.js index 63d0e74..4b328cf 100644 --- a/svg/subcan.js +++ b/svg/subcan.js @@ -45,12 +45,26 @@ function picker_begin(target) { var pickelem = document.getElementById('picker'); pickelem.style.visibility = 'visible'; - picktimer = window.setTimeout(picker_end, 5000); + picktimer = window.setTimeout(picker_end, 30000); } function picker_refresh() { window.clearTimeout(picktimer); - picktimer = window.setTimeout(picker_end, 5000); + picktimer = window.setTimeout(picker_end, 30000); +} + +function rgb2dmx(r, g, b) { + r = Math.floor((Math.pow(4.0, r / 255.0) - 1) / 3 * 255); + g = Math.floor((Math.pow(4.0, g / 255.0) - 1) / 3 * 180); + b = Math.floor((Math.pow(4.0, b / 255.0) - 1) / 3 * 144); + return [r,g,b]; +} +function dmx2rgb(r, g, b) { + l4 = 255.0 / Math.log(4.0); + r = Math.floor(Math.log(r / 255.0 * 3 + 1) * l4); + g = Math.floor(Math.log(g / 180.0 * 3 + 1) * l4); + b = Math.floor(Math.log(g / 144.0 * 3 + 1) * l4); + return [r,g,b]; } function on_picker(hex, hsv, rgb) { @@ -58,7 +72,7 @@ function on_picker(hex, hsv, rgb) { picker_refresh(); $.jsonRPC.request('light_set', { - params: [picktgt, [rgb.r, rgb.g, rgb.b]], + params: [picktgt, rgb2dmx(rgb.r, rgb.g, rgb.b)], error: function(result) { console.log('light_set RGB error', result); }, @@ -383,10 +397,11 @@ function update_elements(json) { continue; if (node.localName == "path") { + rgb = dmx2rgb(dataelem['r'], dataelem['g'], dataelem['b']); node.style.fill = "rgb(" - + dataelem['r'] + ", " - + dataelem['g'] + ", " - + dataelem['b'] + ")"; + + rgb[0] + ", " + + rgb[1] + ", " + + rgb[2] + ")"; } else { console.log("unknown dynamic content type", node.localName); } diff --git a/svg/subcan_dxf.svg b/svg/subcan_dxf.svg index 7e923c2..5a4ca69 100644 --- a/svg/subcan_dxf.svg +++ b/svg/subcan_dxf.svg @@ -175,8 +175,8 @@ borderopacity="1.0" inkscape:pageopacity="1" inkscape:pageshadow="2" - inkscape:zoom="1.3229167" - inkscape:cx="420" + inkscape:zoom="1.3" + inkscape:cx="480" inkscape:cy="240" inkscape:document-units="px" inkscape:current-layer="layer1" @@ -232,6 +232,66 @@ x="0.5" y="-0.5" /> + + + inkscape:connector-curvature="0" + sodipodi:nodetypes="cccc" /> + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" />