User Tools

Site Tools


tvr0tator.c

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

tvr0tator.c [2011/12/30 13:15] (current)
andy created
Line 1: Line 1:
 +====== tvr0tator.c ======
  
 +<​code>/​* 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);​
 + }
 +}
 +</​code>​
tvr0tator.c.txt ยท Last modified: 2011/12/30 13:15 by andy