function dmx_connect() { global $debug, $dmx, $read_buffer; $r = trim(`ls -1 /dev/serial/by-id 2>/dev/null |grep "DMX"`); if ($r == '') { logformat("No USB DMX Interface appears to be connected!\n"); exit(1); } $t = explode("-", $r); if (isset($t[1])) { logformat(sprintf("Found a %s\n", $t[1])); } $interface = "/dev/serial/by-id/" . $r; `stty -F {$interface} 230400 raw -echo`; if ($dmx = fopen($interface, 'w+')) { stream_set_blocking($dmx, 0); stream_set_read_buffer($dmx, 2048); $data = ''; dmx_set_levels($data); dmx_set_dmx_receive_mode(SEND_ON_CHANGE_ONLY); sleep(1); while ($b = fread($dmx, 2048)) { } //empty the buffer $data = "Hello World!"; dmx_set_parameters(27, 4, 40, $data); if (!($c = dmx_request_parameters($read_buffer))) { dmx_close(); return 0; } return $c; } return 0; }
$argv = $_SERVER["argv"]; //$argv is an array if ($argc == 0) { error(usage()); } $args = parse_args($argc, $argv); if (isset($args['d'])) { $debug = $args['d']; } elseif (isset($args['debug'])) { $debug = $args['debug']; } else { $debug = 0; } exec('stty -F /dev/ttyUSB0 115200 raw -echo'); if ($dmx = fopen('/dev/ttyUSB0', 'w+')) { dmx_set_levels(''); $d1 = str_pad('', 128, chr(0)); $d2 = str_pad('', 128, chr(0)); dmx_set_levels_U1($d1); dmx_set_levels_U2($d2); $t = microtime(true); for ($i = 0; $i <= 255; $i++) { $d1 = str_pad('', 128, chr($i)); $d2 = str_pad('', 128, chr(255 - $i)); dmx_set_levels_U1($d1); dmx_set_levels_U2($d2); if ($must_exit) { break; } } fclose($dmx);
} $f = 0; if ($sn = dmx_request_serial_number()) { printf("Found DMX Interface with Serial Number: %s\n", $sn); if ($fw = dmx_request_parameters()) { printf("Firmware Version: %s\n", $fw['FW_VER']); printf("DMX Output Break Time: %s x 10.67 = %.02f us\n", $fw['DMX_BR_TIME'], $fw['DMX_BR_TIME'] * 10.67); printf("DMX Mark After Break Time: %s x 10.67 = %.02f us\n", $fw['DMX_MABR_TIME'], $fw['DMX_MABR_TIME'] * 10.67); printf("DMX Output Rate: %s packets/sec\n", $fw['DMX_OUTPUT_RATE']); } $f = 1; } if (!$f) { die("Could not find a DMX interface!\n"); } $d = ''; dmx_set_levels($d); $d1 = str_pad('', 512, chr(0)); $d2 = str_pad('', 512, chr(0)); dmx_set_levels_U1($d1); dmx_set_levels_U2($d2); for ($i = 0; $i <= 255; $i++) { $d1 = str_pad('', 512, chr($i)); $d2 = str_pad('', 512, chr(255 - $i)); dmx_set_levels_U1($d1); dmx_set_levels_U2($d2); if ($must_exit) { break; } } $dmx->deviceClose();