tvr0tator.c
tvr0tator.c
/* Licensed under CC0 1.0 Universal (CC0 1.0) * by andy (andy_@jabber.ccc.de) * see http://r0ket.badge.events.ccc.de/r0ketlauncher */ #include <usb.h> #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <signal.h> #include <string.h> usb_dev_handle* launcher; pid_t pID; int send_message(char* msg, int index) { int i = 0, j; j = usb_control_msg(launcher, 0x21, 0x9, 0x200, index, msg, 8, 1000); memset(msg, 0, 8); return j; } void movement_handler(char control) { /* grabbed from http://www.amctrl.com/rocketlauncher.html */ int deally; char msg[8]; memset(msg, 0, 8); deally = send_message(msg, 1); msg[0] = control; deally = send_message(msg, 0); deally = send_message(msg, 1); } void bye() { kill(pID, SIGTERM); usb_close(launcher); usb_release_interface(launcher, 0); } int main( int argc, const char* argv[] ) { struct usb_bus *busses, *bus; struct usb_device *dev; FILE *fpipe; char line[256]; const char *command = "dvbsnoop -pd 2 -n 1 -s signal | grep Sig | sed 's/Sig: \\([0-9]*\\).*/\\1/'"; int claimed, maxsignal = 0; usb_init(); usb_find_busses(); usb_find_devices(); busses = usb_get_busses(); for (bus = busses; bus; bus = bus->next) { for (dev = bus->devices; dev; dev = dev->next) { if (dev->descriptor.idVendor == 0x0a81) { printf("found r0ketlauncher!"); goto _goon; } } } printf("r0ketlauncher not found :("); exit(0); _goon: atexit(bye); launcher = usb_open(dev); claimed = usb_claim_interface(launcher, 0); if(claimed == EBUSY) { printf("Claim of USB r0cket failed, maybe wrong permissions or pedobear alias generic-usb module rapes it"); exit(0); } printf("found r0ketlauncher, be shure to turn on your DVB Viewer :)"); pID = fork(); if (pID == 0) { while(1) { fpipe = (FILE*)popen(command,"r"); if(!fpipe) { fprintf(stderr, "failed executing %s", command); sleep(5); continue; } fgets(line, sizeof line, fpipe); fclose(fpipe); if(maxsignal > atoi(line)) { movement_handler((rand() % 2 > 0) ? 4 : 8); sleep(rand() % 3); movement_handler(1); } else { maxsignal = atoi(line); sleep(10); } sleep(4); } } else { wait(NULL); } }
tvr0tator.c.txt · Last modified: 2011/12/30 13:15 by andy