[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

sn9c102 come installare



Come posso installare i drivers di sn9c102 allego i files in questione

Grazie

-- 
 .''`.  ** Debian GNU/Linux **  | David Simoni   aka Morphy
: :'  :   The Universal O.S.    | david at simoni dot it
`. `'`  			| GPG Key ID: 0xDE319AC5
  `-     http://www.debian.org 	| GNU/LINUX register user #382129
                                | http://counter.li.org/
Key Fingerprint A895 CE22 624C 6D61 0789 7F26 2E88 B9A0 DE31 9AC5
/* This code is (c) Ian Molton. It is GPL, however I *must be asked for permission to use it* should you desire to use it in your own project. */

#include <gtk/gtk.h>
#include <linux/soundcard.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/ioctl.h>
#include <fcntl.h>

#include "sonixbits.c"

#define WIDTH 640
#define HEIGHT 480

struct usb_dev_handle *dev;

/* Backing pixmap for drawing area */
static GdkPixbuf *pixbuf = NULL;
float *buffer = NULL;

/* Create a new backing pixmap of the appropriate size */
static gint configure_event( GtkWidget         *widget,
                             GdkEventConfigure *event )
{
  if (pixbuf)
    g_object_unref (pixbuf);

  pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, 0, 8, WIDTH, HEIGHT);

  return TRUE;
}

/* Redraw the screen from the backing pixmap */
static gint expose_event( GtkWidget      *widget,
                          GdkEventExpose *event )
{
  gdk_pixbuf_render_to_drawable (pixbuf, widget->window,
		     widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
		     0, 0, 0, 0, WIDTH, HEIGHT, GDK_RGB_DITHER_NONE, 0, 0);

  return FALSE;
}

int find_header (unsigned char *buffer, int length){
	int i;
	
	i = 0;

	while(i < length-12){
		if(buffer[i] == 0xff && buffer[i+1] == 0xff && buffer[i+2] == 0x00 && buffer[i+3] == 0xc4 && buffer[i+4] == 0xc4 && buffer[i+5] == 0x96 && buffer[i+6] == 0x00)
			return i;
		i++;
	}
	return -1;
}


/* Draw the graph */

int get_bit(unsigned char *data, int *position, int reset){
        static int bit;
        static unsigned char byte;

        if(reset){
                bit = 0;
                byte = data[*position]; *position++;
        }

        if(bit < 7){
                bit++;
                return (byte >> (7-bit)) & 1;
        }

        bit = 1;
        byte = data[*position]; *position++;

        return byte >> 7;
}

int get_byte(unsigned char last, unsigned char *data, int *position, int reset){
        int i;
        int b;

        b = get_bit(data, position, reset);

        if(b == 0)
                return last;

        i = get_bit(data, position, 0) << 1 | get_bit(data, position, 0);

        switch(i){
                case 1:
                return last+3;
                case 2:
                return last-3;
                case 0:
                        i = get_bit(data, position, 0);
                        if(i)
                                return last-8;
                        return last+8;
                case 3:
                        i = get_bit(data, position, 0);
                        if(i)
                                return last-18;
                        i = get_bit(data, position, 0);
                        if(!i)
                                return last+18;
                        b = 0;
                        for(i = 4 ; i >=0 ; i--)
                                b |= get_bit(data, position, 0) << i;
                        return (8*b)+4;
        }
        return last;
}

static gboolean draw_graph(gpointer data){
	GtkWidget *widget = data;
	unsigned char *pixdata = gdk_pixbuf_get_pixels(pixbuf);
	static unsigned char databuffer[4*1024*1024];
	int i, o, x, start, end;

	usb_bulk_read(dev, 0x82, databuffer, 352*288*3, 1000);	

	start = find_header(databuffer, 352*288*3); printf("start: %d\n", start);
	if(start == -1)
		return TRUE;
	end = find_header(databuffer+start+12, 352*288*3 - start - 12);
	if(end == -1)
		end = 352*288*3;
	else
		end += start+12;
	printf("len: %d\n", end-start);

	if(end-start < 128){
		for(i = 0 ; i < end-start ; i++)
			printf("<%02x> ", databuffer[start+i]);fflush(0);
		printf("\n");
	}

	i = start+12; o = 0;
	while(i < end && o < WIDTH*HEIGHT*3 && i < end){
		pixdata[o] = databuffer[i]; o++ ; i++;
		pixdata[o] = databuffer[i]; o++ ; i++;
		o++;
		for(x = 0 ; x < WIDTH-2 && o < WIDTH*HEIGHT*3 && i < end; x++){
			pixdata[o] = get_byte(pixdata[o-3], databuffer, &i, x?0:1);
			o+=3;
		}
		o+=3;
	}
	
  gtk_widget_queue_draw_area (widget, 0,0,widget->allocation.width, widget->allocation.height);
	return TRUE;
}


















void quit ()
{
  exit (0);
}

int main( int   argc, 
          char *argv[] )
{
  GtkWidget *window;
  GtkWidget *drawing_area;
  GtkWidget *vbox;

  gtk_init (&argc, &argv);

  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  gtk_widget_set_name (window, "Test Input");

  vbox = gtk_vbox_new (FALSE, 0);
  gtk_container_add (GTK_CONTAINER (window), vbox);
  gtk_widget_show (vbox);

  g_signal_connect (G_OBJECT (window), "destroy",
                    G_CALLBACK (quit), NULL);

  /* Create the drawing area */

  drawing_area = gtk_drawing_area_new ();
  gtk_widget_set_size_request (GTK_WIDGET (drawing_area), WIDTH, HEIGHT);
  gtk_box_pack_start (GTK_BOX (vbox), drawing_area, TRUE, TRUE, 0);

  gtk_widget_show (drawing_area);

  /* Signals used to handle backing pixmap */

  g_signal_connect (G_OBJECT (drawing_area), "expose_event",
		    G_CALLBACK (expose_event), NULL);
  g_signal_connect (G_OBJECT (drawing_area),"configure_event",
		    G_CALLBACK (configure_event), NULL);

  gtk_widget_set_events (drawing_area, GDK_EXPOSURE_MASK
			 | GDK_LEAVE_NOTIFY_MASK);

  dev = get_dev();
  gtk_widget_show (window);


	gtk_timeout_add(10, draw_graph, (gpointer)drawing_area);

  gtk_main ();

  return 0;
}
/* This code is (c) Ian Molton. It is GPL, however I *must be asked for permission to use it* should you desire to use it in your own project. */

#include <stdio.h>
#include <usb.h>
#include <sys/ioctl.h>

struct usb_dev_handle {
  int fd;

  struct usb_bus *bus;
  struct usb_device *device;

  int config;
  int interface;
  int altsetting;

  /* Added by RMT so implementations can store other per-open-device data */
  void *impl_info;
};


void send_ctrl(usb_dev_handle *handle, int rq, int rqt, int value, int index, unsigned char *str, int len){
	int p, q;
	q = usb_control_msg(handle, rq, rqt, value, index, str, len, 100);
        if(q != -1){
                printf("control: %02x\n", q);
                for(p = 0 ; p < q ; p++)
                        printf("%02x ", str[p]);fflush(0);
                printf("\n");
        }
}

struct usbdevfs_iso_packet_desc {
        unsigned int length;
        unsigned int actual_length;
        unsigned int status;
};

struct usbdevfs_urb {
        unsigned char type;
        unsigned char endpoint;
        int status;
        unsigned int flags;
        void *buffer;
        int buffer_length;
        int actual_length;
        int start_frame;
        int number_of_packets;
        int error_count;
        unsigned int signr;  /* signal to be sent on error, -1 if none should be sent */
        void *usercontext;
//        struct usbdevfs_iso_packet_desc iso_frame_desc[0];
};

struct usbthing {
	struct usbdevfs_urb urb;
	struct usbdevfs_iso_packet_desc iso[32];
};

#define USBDEVFS_URB_TYPE_ISO              0
#define USBDEVFS_SUBMITURB         _IOR('U', 10, struct usbdevfs_urb)

int submit_iso(usb_dev_handle *handle, int ep){
	struct usbthing thing;
	struct usbdevfs_urb *urb = &thing.urb;
	struct usbdevfs_iso_packet_desc *iso = &thing.iso;
	char buf[640000];
	int ret;
	int i;

	urb->type = USBDEVFS_URB_TYPE_ISO;
	urb->endpoint = ep;
	urb->flags = 0x0; //0x82??
	urb->buffer = buf;
	urb->buffer_length = 640000;
	urb->start_frame = 0;
	urb->number_of_packets = 32;
	urb->signr = 0; // -1
	//urb->iso_frame_desc = iso;

	for(i = 0 ; i < 32 ; i++){
		iso[i].length=1023;
		iso[i].status = 0;	
	}


	ret = ioctl(handle->fd, USBDEVFS_SUBMITURB, &thing);
	if(ret >= 0)
		printf("submit_iso: %d\n", ret);
}

void do_stuff(struct usb_device *dev){
	usb_dev_handle *handle;
	unsigned char str[64000];
	int q, p, j, i;
	FILE *file;

	handle = usb_open(dev);
	printf("%d\n", handle);
	printf("set_config: %d\n", usb_set_configuration(handle, 1));	
	printf("claim:      %d\n", usb_claim_interface(handle, 0));
	printf("set_alt:    %d\n", usb_set_altinterface(handle, 8));

	send_ctrl(handle, 0xc1, 0, 0, 0, str, 1);
	str[0] = 0x28; str[1] = 0x1e;
	send_ctrl(handle, 0x41, 0x08, 0x15, 0, str, 2);
	str[0] = 0x9e;
	send_ctrl(handle, 0x41, 0x08, 0x18, 0, str, 1);
	str[0] = 0x20;
	send_ctrl(handle, 0x41, 0x08, 0x17, 0, str, 1);
	str[0] = 0x22;
	send_ctrl(handle, 0x41, 0x08, 0x19, 0, str, 1);
	str[0] = 0x02; str[1] = 0x03; str[2] = 0x0f; str[3] = 0x0c;
	send_ctrl(handle, 0x41, 0x08, 0x1c, 0, str, 4);
	str[0] = 0x46;
	send_ctrl(handle, 0x41, 0x08, 0x01, 0, str, 1);
	str[0] = 0xb0; str[1] = 0x11; str[2] = 0x20; str[3] = 0x00;
	str[4] = 0xc1; str[5] = 0x00; str[6] = 0x00; str[7] = 0x10;
	send_ctrl(handle, 0x41, 0x08, 0x08, 0, str, 8);
	str[0] = 0xb0; str[1] = 0x11; str[2] = 0x22; str[3] = 0x00;
        str[4] = 0x10; str[5] = 0x00; str[6] = 0x00; str[7] = 0x10;
        send_ctrl(handle, 0x41, 0x08, 0x08, 0, str, 8);
	str[0] = 0xd0; str[1] = 0x11; str[2] = 0x10; str[3] = 0x00;
        str[4] = 0x04; str[5] = 0x00; str[6] = 0x03; str[7] = 0x10;
        send_ctrl(handle, 0x41, 0x08, 0x08, 0, str, 8);
	str[0] = 0xd0; str[1] = 0x11; str[2] = 0x14; str[3] = 0x01;
        str[4] = 0xe0; str[5] = 0x02; str[6] = 0x80; str[7] = 0x10;
        send_ctrl(handle, 0x41, 0x08, 0x08, 0, str, 8);
	str[0] = 0xb0; str[1] = 0x11; str[2] = 0x20; str[3] = 0x00;
        str[4] = 0xc1; str[5] = 0x02; str[6] = 0x80; str[7] = 0x10;
        send_ctrl(handle, 0x41, 0x08, 0x08, 0, str, 8);
	str[0] = 0x46;
	send_ctrl(handle, 0x41, 0x08, 0x01, 0, str, 1);
	str[0] = 0x20;
	send_ctrl(handle, 0x41, 0x08, 0x17, 0, str, 1);
	str[0] = 0x90; str[1] = 0x11; str[2] = 0x00; str[3] = 0x00;
        str[4] = 0x00; str[5] = 0x00; str[6] = 0x00; str[7] = 0x10;
        send_ctrl(handle, 0x41, 0x08, 0x08, 0, str, 8);
	str[0] = 0x92; str[1] = 0x11; str[2] = 0x00; str[3] = 0x00;
        str[4] = 0x00; str[5] = 0x00; str[6] = 0x00; str[7] = 0x10;
        send_ctrl(handle, 0x41, 0x08, 0x08, 0, str, 8);
	send_ctrl(handle, 0xc1, 0, 0x0a, 0, str, 5);
	str[0] = 0x16; str[1] = 0x12;
        send_ctrl(handle, 0x41, 0x08, 0x15, 0, str, 2);
	str[0] = 0x8e;
	send_ctrl(handle, 0x41, 0x08, 0x18, 0, str, 1);
	str[0] = 0x20;
        send_ctrl(handle, 0x41, 0x08, 0x17, 0, str, 1);
        str[0] = 0x22;
        send_ctrl(handle, 0x41, 0x08, 0x19, 0, str, 1);
	str[0] = 0x02; str[1] = 0x02; str[2] = 0x09; str[3] = 0x07;
        send_ctrl(handle, 0x41, 0x08, 0x1c, 0, str, 4);
	str[0] = 0x06;
	send_ctrl(handle, 0x41, 0x08, 0x01, 0, str, 1);
        str[0] = 0xb0; str[1] = 0x11; str[2] = 0x20; str[3] = 0x00;
        str[4] = 0x2d; str[5] = 0x00; str[6] = 0x00; str[7] = 0x10;
        send_ctrl(handle, 0x41, 0x08, 0x08, 0, str, 8);
        str[0] = 0xb0; str[1] = 0x11; str[2] = 0x22; str[3] = 0x00;
        str[4] = 0x03; str[5] = 0x00; str[6] = 0x00; str[7] = 0x10;
        send_ctrl(handle, 0x41, 0x08, 0x08, 0, str, 8);
        str[0] = 0xd0; str[1] = 0x11; str[2] = 0x10; str[3] = 0x00;
        str[4] = 0x64; str[5] = 0x00; str[6] = 0x91; str[7] = 0x10;
        send_ctrl(handle, 0x41, 0x08, 0x08, 0, str, 8);
        str[0] = 0xd0; str[1] = 0x11; str[2] = 0x14; str[3] = 0x01;
        str[4] = 0x20; str[5] = 0x01; str[6] = 0x60; str[7] = 0x10;
        send_ctrl(handle, 0x41, 0x08, 0x08, 0, str, 8);
        str[0] = 0xb0; str[1] = 0x11; str[2] = 0x20; str[3] = 0x00;
        str[4] = 0x2d; str[5] = 0x01; str[6] = 0x60; str[7] = 0x10;
        send_ctrl(handle, 0x41, 0x08, 0x08, 0, str, 8);
	str[0] = 0x06; str[1] = 0x03; str[2] = 0x00; str[3] = 0x00;
        str[4] = 0x00; str[5] = 0x00; str[6] = 0x00; str[7] = 0xb0;
	str[8] = 0x11; str[9] = 0x20; str[10] = 0x00; str[11] = 0x2d;
        str[12] = 0x01; str[13] = 0x60; str[14] = 0x10; str[15] = 0x00;
	str[16] = 0x00; str[17] = 0x01; str[18] = 0x01; str[19] = 0x00;
        str[20] = 0x16; str[21] = 0x12; str[22] = 0x20; str[23] = 0x8e;
        str[24] = 0x22; str[25] = 0x00; str[26] = 0x00; str[27] = 0x02;
        str[28] = 0x02; str[29] = 0x09; str[30] = 0x07;
	send_ctrl(handle, 0x41, 0x08, 0x01, 0, str, 31);
	
	str[0] = 0xb0; str[1] = 0x11; str[2] = 0x01; str[3] = 0x05;
        str[4] = 0x02; str[5] = 0x01; str[6] = 0x60; str[7] = 0x10;
	send_ctrl(handle, 0x41, 0x08, 0x08, 0, str, 8);
        str[0] = 0xd0; str[1] = 0x11; str[2] = 0x10; str[3] = 0x00;
        str[4] = 0x64; str[5] = 0x00; str[6] = 0x91; str[7] = 0x10;
        send_ctrl(handle, 0x41, 0x08, 0x08, 0, str, 8);
        str[0] = 0xd0; str[1] = 0x11; str[2] = 0x14; str[3] = 0x01;
        str[4] = 0x20; str[5] = 0x01; str[6] = 0x60; str[7] = 0x10;
        send_ctrl(handle, 0x41, 0x08, 0x08, 0, str, 8);
        str[0] = 0xd0; str[1] = 0x11; str[2] = 0x20; str[3] = 0x00;
        str[4] = 0x2d; str[5] = 0x00; str[6] = 0x03; str[7] = 0x10;
        send_ctrl(handle, 0x41, 0x08, 0x08, 0, str, 8);
        str[0] = 0xc0; str[1] = 0x11; str[2] = 0x25; str[3] = 0x00;
        str[4] = 0x02; str[5] = 0x88; str[6] = 0x03; str[7] = 0x10;
        send_ctrl(handle, 0x41, 0x08, 0x08, 0, str, 8);
        str[0] = 0xd0; str[1] = 0x11; str[2] = 0x30; str[3] = 0x20;
        str[4] = 0x19; str[5] = 0x19; str[6] = 0x19; str[7] = 0x10;
        send_ctrl(handle, 0x41, 0x08, 0x08, 0, str, 8);
        str[0] = 0xa0; str[1] = 0x11; str[2] = 0x34; str[3] = 0x02;
        str[4] = 0x19; str[5] = 0x19; str[6] = 0x19; str[7] = 0x10;
        send_ctrl(handle, 0x41, 0x08, 0x08, 0, str, 8);
        str[0] = 0xa0; str[1] = 0x11; str[2] = 0x5b; str[3] = 0x0a;
        str[4] = 0x19; str[5] = 0x19; str[6] = 0x19; str[7] = 0x10;
        send_ctrl(handle, 0x41, 0x08, 0x08, 0, str, 8);
        str[0] = 0xb0; str[1] = 0x11; str[2] = 0x20; str[3] = 0x00;
        str[4] = 0x2d; str[5] = 0x19; str[6] = 0x19; str[7] = 0x10;
        send_ctrl(handle, 0x41, 0x08, 0x08, 0, str, 8);
        str[0] = 0xb0; str[1] = 0x11; str[2] = 0x20; str[3] = 0x00;
        str[4] = 0x2d; str[5] = 0x19; str[6] = 0x19; str[7] = 0x10;
        send_ctrl(handle, 0x41, 0x08, 0x08, 0, str, 8);

	str[0] = 0x30;
        //send_ctrl(handle, 0x41, 0x08, 0x17, 0, str, 1);
	str[0] = 0x0e;
        send_ctrl(handle, 0x41, 0x08, 0x18, 0, str, 1);

	usb_resetep(handle, 0x83);
	usb_resetep(handle, 0x81);
	usb_resetep(handle, 0x82);
sleep(1);
	//while(1)
//		submit_iso(handle, 0x81);
//	return;
	file = fopen("/home/ian/cam_in.raw", "wb");
	while(1){
		memset(str, 0, 1023);
		send_ctrl(handle, 0xc1, 0, 0x0a, 0, str, 5);
		q = usb_bulk_read(handle, 0x82, str, 64000, 1000);
		j = 0;
		if(q >= 0){
                       	fwrite(str, q, 1, file);
			for(i = 0 ; i < q ; i++)
				j += str[i];
			printf("%d  : %08x\n",q, j);
		}
		/*else{
			usb_resetep(handle, 0x83);
			usb_resetep(handle, 0x81);
		}*/
	}

	printf("\n");
}


int main(void){
	struct usb_bus *busses;
    	struct usb_bus *bus;
    
    	usb_init();
    	usb_find_busses();
    	usb_find_devices();
    
    	busses = usb_get_busses();
        
    	for (bus = busses; bus; bus = bus->next) {
    		struct usb_device *dev;
    
    		for (dev = bus->devices; dev; dev = dev->next) {
    			if (dev->descriptor.idVendor == 0x0c45 && dev->descriptor.idProduct == 0x602a) {
//				printf("%d\n", dev->config[0].bConfigurationValue);
				do_stuff(dev);
				exit(0);
    			}
    		}
    	}
        
	return 0;
}
/* This code is (c) Ian Molton. It is GPL, however I *must be asked for permission to use it* should you desire to use it in your own project. */

#include <stdio.h>
#include <usb.h>
#include <sys/ioctl.h>

void send_ctrl(usb_dev_handle *handle, int rq, int rqt, int value, int index, unsigned char *str, int len){
	int p, q;
	q = usb_control_msg(handle, rq, rqt, value, index, str, len, 100);
        if(q != -1){
                printf("control: %02x\n", q);
                for(p = 0 ; p < q ; p++)
                        printf("%02x ", str[p]);fflush(0);
                printf("\n");
        }
}

usb_dev_handle *do_stuff(struct usb_device *dev){
	usb_dev_handle *handle;
	unsigned char str[64000];

	handle = usb_open(dev);
	printf("set_config: %d\n", usb_set_configuration(handle, 1));	
	printf("claim:      %d\n", usb_claim_interface(handle, 0));
	printf("set_alt:    %d\n", usb_set_altinterface(handle, 8));

	send_ctrl(handle, 0xc1, 0, 0, 0, str, 1);
	str[0] = 0x28; str[1] = 0x1e;
	send_ctrl(handle, 0x41, 0x08, 0x15, 0, str, 2);
	str[0] = 0x8e;
	send_ctrl(handle, 0x41, 0x08, 0x18, 0, str, 1);
	str[0] = 0x20;
	send_ctrl(handle, 0x41, 0x08, 0x17, 0, str, 1);
	str[0] = 0x32;
	send_ctrl(handle, 0x41, 0x08, 0x19, 0, str, 1);
	str[0] = 0x02; str[1] = 0x03; str[2] = 0x0f; str[3] = 0x0c;
	send_ctrl(handle, 0x41, 0x08, 0x1c, 0, str, 4);
	str[0] = 0x06;
	send_ctrl(handle, 0x41, 0x08, 0x01, 0, str, 1);
	str[0] = 0xb0; str[1] = 0x11; str[2] = 0x20; str[3] = 0x00;
	str[4] = 0x2a; str[5] = 0x00; str[6] = 0x00; str[7] = 0x10;
	send_ctrl(handle, 0x41, 0x08, 0x08, 0, str, 8);
	str[0] = 0xb0; str[1] = 0x11; str[2] = 0x22; str[3] = 0x00;
        str[4] = 0x28; str[5] = 0x00; str[6] = 0x00; str[7] = 0x10;
        send_ctrl(handle, 0x41, 0x08, 0x08, 0, str, 8);
	str[0] = 0xd0; str[1] = 0x11; str[2] = 0x10; str[3] = 0x00;
        str[4] = 0x04; str[5] = 0x00; str[6] = 0x03; str[7] = 0x10;
        send_ctrl(handle, 0x41, 0x08, 0x08, 0, str, 8);
	str[0] = 0xd0; str[1] = 0x11; str[2] = 0x14; str[3] = 0x01;
        str[4] = 0xe0; str[5] = 0x02; str[6] = 0x80; str[7] = 0x10;
        send_ctrl(handle, 0x41, 0x08, 0x08, 0, str, 8);
	str[0] = 0xb0; str[1] = 0x11; str[2] = 0x20; str[3] = 0x00;
        str[4] = 0x2a; str[5] = 0x02; str[6] = 0x80; str[7] = 0x10;
        send_ctrl(handle, 0x41, 0x08, 0x08, 0, str, 8);
	str[0] = 0x06;
	send_ctrl(handle, 0x41, 0x08, 0x01, 0, str, 1);
	str[0] = 0x20;
	send_ctrl(handle, 0x41, 0x08, 0x17, 0, str, 1);
	str[0] = 0x90; str[1] = 0x11; str[2] = 0x00; str[3] = 0x00;
        str[4] = 0x00; str[5] = 0x00; str[6] = 0x00; str[7] = 0x10;
        send_ctrl(handle, 0x41, 0x08, 0x08, 0, str, 8);
	str[0] = 0x92; str[1] = 0x11; str[2] = 0x00; str[3] = 0x00;
        str[4] = 0x00; str[5] = 0x00; str[6] = 0x00; str[7] = 0x10;
        send_ctrl(handle, 0x41, 0x08, 0x08, 0, str, 8);
	send_ctrl(handle, 0xc1, 0, 0x0a, 0, str, 5);
	str[0] = 0x16; str[1] = 0x12;
        send_ctrl(handle, 0x41, 0x08, 0x15, 0, str, 2);
	str[0] = 0x8e;
	send_ctrl(handle, 0x41, 0x08, 0x18, 0, str, 1);
	str[0] = 0x20;
        send_ctrl(handle, 0x41, 0x08, 0x17, 0, str, 1);
        str[0] = 0x22;
        send_ctrl(handle, 0x41, 0x08, 0x19, 0, str, 1);
	str[0] = 0x02; str[1] = 0x02; str[2] = 0x09; str[3] = 0x07;
        send_ctrl(handle, 0x41, 0x08, 0x1c, 0, str, 4);
	str[0] = 0x06;
	send_ctrl(handle, 0x41, 0x08, 0x01, 0, str, 1);
        str[0] = 0xb0; str[1] = 0x11; str[2] = 0x20; str[3] = 0x00;
        str[4] = 0x2d; str[5] = 0x00; str[6] = 0x00; str[7] = 0x10;
        send_ctrl(handle, 0x41, 0x08, 0x08, 0, str, 8);
        str[0] = 0xb0; str[1] = 0x11; str[2] = 0x22; str[3] = 0x00;
        str[4] = 0x03; str[5] = 0x00; str[6] = 0x00; str[7] = 0x10;
        send_ctrl(handle, 0x41, 0x08, 0x08, 0, str, 8);
        str[0] = 0xd0; str[1] = 0x11; str[2] = 0x10; str[3] = 0x00;
        str[4] = 0x64; str[5] = 0x00; str[6] = 0x91; str[7] = 0x10;
        send_ctrl(handle, 0x41, 0x08, 0x08, 0, str, 8);
        str[0] = 0xd0; str[1] = 0x11; str[2] = 0x14; str[3] = 0x01;
        str[4] = 0x20; str[5] = 0x01; str[6] = 0x60; str[7] = 0x10;
        send_ctrl(handle, 0x41, 0x08, 0x08, 0, str, 8);
        str[0] = 0xb0; str[1] = 0x11; str[2] = 0x20; str[3] = 0x00;
        str[4] = 0x2d; str[5] = 0x01; str[6] = 0x60; str[7] = 0x10;
        send_ctrl(handle, 0x41, 0x08, 0x08, 0, str, 8);
	str[0] = 0x06; str[1] = 0x03; str[2] = 0x00; str[3] = 0x00;
        str[4] = 0x00; str[5] = 0x00; str[6] = 0x00; str[7] = 0xb0;
	str[8] = 0x11; str[9] = 0x20; str[10] = 0x00; str[11] = 0x2d;
        str[12] = 0x01; str[13] = 0x60; str[14] = 0x10; str[15] = 0x00;
	str[16] = 0x00; str[17] = 0x01; str[18] = 0x01; str[19] = 0x00;
        str[20] = 0x16; str[21] = 0x12; str[22] = 0x20; str[23] = 0x8e;
        str[24] = 0x22; str[25] = 0x00; str[26] = 0x00; str[27] = 0x02;
        str[28] = 0x02; str[29] = 0x09; str[30] = 0x07;
	send_ctrl(handle, 0x41, 0x08, 0x01, 0, str, 31);
	
	str[0] = 0xb0; str[1] = 0x11; str[2] = 0x01; str[3] = 0x05;
        str[4] = 0x02; str[5] = 0x01; str[6] = 0x60; str[7] = 0x10;
	send_ctrl(handle, 0x41, 0x08, 0x08, 0, str, 8);
        str[0] = 0xd0; str[1] = 0x11; str[2] = 0x10; str[3] = 0x00;
        str[4] = 0x64; str[5] = 0x00; str[6] = 0x91; str[7] = 0x10;
        send_ctrl(handle, 0x41, 0x08, 0x08, 0, str, 8);
        str[0] = 0xd0; str[1] = 0x11; str[2] = 0x14; str[3] = 0x01;
        str[4] = 0x20; str[5] = 0x01; str[6] = 0x60; str[7] = 0x10;
        send_ctrl(handle, 0x41, 0x08, 0x08, 0, str, 8);
        str[0] = 0xd0; str[1] = 0x11; str[2] = 0x20; str[3] = 0x00;
        str[4] = 0x2d; str[5] = 0x00; str[6] = 0x03; str[7] = 0x10;
        send_ctrl(handle, 0x41, 0x08, 0x08, 0, str, 8);
        str[0] = 0xc0; str[1] = 0x11; str[2] = 0x25; str[3] = 0x00;
        str[4] = 0x02; str[5] = 0x88; str[6] = 0x03; str[7] = 0x10;
        send_ctrl(handle, 0x41, 0x08, 0x08, 0, str, 8);
        str[0] = 0xd0; str[1] = 0x11; str[2] = 0x30; str[3] = 0x20;
        str[4] = 0x19; str[5] = 0x19; str[6] = 0x19; str[7] = 0x10;
        send_ctrl(handle, 0x41, 0x08, 0x08, 0, str, 8);
        str[0] = 0xa0; str[1] = 0x11; str[2] = 0x34; str[3] = 0x02;
        str[4] = 0x19; str[5] = 0x19; str[6] = 0x19; str[7] = 0x10;
        send_ctrl(handle, 0x41, 0x08, 0x08, 0, str, 8);
        str[0] = 0xa0; str[1] = 0x11; str[2] = 0x5b; str[3] = 0x0a;
        str[4] = 0x19; str[5] = 0x19; str[6] = 0x19; str[7] = 0x10;
        send_ctrl(handle, 0x41, 0x08, 0x08, 0, str, 8);
        str[0] = 0xb0; str[1] = 0x11; str[2] = 0x20; str[3] = 0x00;
        str[4] = 0x2d; str[5] = 0x19; str[6] = 0x19; str[7] = 0x10;
        send_ctrl(handle, 0x41, 0x08, 0x08, 0, str, 8);

	str[0] = 0x30;
        //send_ctrl(handle, 0x41, 0x08, 0x17, 0, str, 1);
	str[0] = 0x0e;
        //send_ctrl(handle, 0x41, 0x08, 0x18, 0, str, 1);

	usb_resetep(handle, 0x83);
	usb_resetep(handle, 0x81);
	usb_resetep(handle, 0x82);
	return handle;
}

struct usb_dev_handle *get_dev(void){
        struct usb_bus *busses;
        struct usb_bus *bus;

        usb_init();
        usb_find_busses();
        usb_find_devices();

        busses = usb_get_busses();

        for (bus = busses; bus; bus = bus->next) {
                struct usb_device *dev;

                for (dev = bus->devices; dev; dev = dev->next) {
                        if (dev->descriptor.idVendor == 0x0c45 && dev->descriptor.idProduct == 0x602a) {
//                              printf("%d\n", dev->config[0].bConfigurationValue);
                                return do_stuff(dev);
                        }
                }
        }

        return NULL;
}


Reply to: