/*
** tst.c - simple test program for USB development system.
** Based on Brad Minch's clr_ra0.c and set_ra0 programs.
** Pulses RA0 at a visible rate.
** Compile with "gcc tst.c -o tst.exe -lusb".
**
** Version 1.0 - 17/07/06
*/

#include <stdio.h>
#include <usb.h>

#define FALSE   0
#define TRUE    1

#define SET_RA0  0x01
#define CLR_RA0  0x02

int main(void) {
    struct usb_bus *bus;
    struct usb_device *dev;
    usb_dev_handle *udev;
    int dev_found, ret;
    char buffer[8];
    
    usb_init();

    usb_find_busses();
    usb_find_devices();

    udev = NULL;
    dev_found = FALSE;
    for (bus = usb_get_busses(); bus && !dev_found; bus = bus->next) {
        for (dev = bus->devices; dev && !dev_found; dev = dev->next) {
            if ((dev->descriptor.idVendor == 0x04D8) && (dev->descriptor.idProduct == 0x0001)) {
                dev_found = TRUE;
                udev = usb_open(dev);
            }
        }
    }
    if (!dev_found) {
        printf("No matching device found...\n");
    }
    while (1) {
        ret = usb_control_msg(udev, USB_TYPE_VENDOR | USB_RECIP_DEVICE, CLR_RA0, 0, 0, buffer, 0, 100);
 	if (ret < 0) 
		error();
   	dly();
       	ret = usb_control_msg(udev, USB_TYPE_VENDOR | USB_RECIP_DEVICE, SET_RA0, 0, 0, buffer, 0, 100);
	if (ret < 0)
		error(ret);
	dly();
        }    
}

dly()
{
	int i, j;

	for (i = 0; i < 10000; i++)
		for (j = 0; j < 10000; j++)
			;
}

error(ret, udev)
int ret;
usb_dev_handle *udev;
{
	printf("Unable to send vendor specific request, ret = %d...\n", ret);
	usb_close(udev);
	exit(0);
}

