1
0
mirror of git://projects.qi-hardware.com/f32xbase.git synced 2024-11-24 01:03:10 +02:00

Added library for items commonly shared among tools.

- lib/Makefile.common: common makefile rules for USB tools
- include/f32xbase/usb.h, lib/usb.c: library with the common open_usb
  function
This commit is contained in:
Werner Almesberger 2010-08-20 14:21:39 -03:00
parent 97d2ed102e
commit 7501137fac
3 changed files with 132 additions and 0 deletions

23
include/f32xbase/usb.h Normal file
View File

@ -0,0 +1,23 @@
/*
* include/f32xbase/usb.h - Common USB code for F32Xbase tools
*
* Written 2008-2010 by Werner Almesberger
* Copyright 2008-2010 Werner Almesberger
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*/
#ifndef F32XBASE_USB_H
#define F32XBASE_USB_H
#include <usb.h>
usb_dev_handle *open_usb(uint16_t default_vendor, uint16_t default_product);
void parse_usb_id(const char *id);
#endif /* !F32XBASE_USB_H */

37
lib/Makefile.common Normal file
View File

@ -0,0 +1,37 @@
#
# Makefile.common - Common rules and definitions for all the tools
#
# Written 2008 by Werner Almesberger
# Copyright 2008 Werner Almesberger
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
INSTALL_PREFIX=/usr/local
CFLAGS=-Wall
LDFLAGS=-lusb
.PHONY: all install uninstall clean spotless
all: $(MAIN)
$(MAIN): $(MAIN).o $(OBJS)
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(MAIN).o $(OBJS)
install: $(MAIN)
install $(MAIN) $(INSTALL_PREFIX)/bin/
uninstall:
rm -f $(INSTALL_PREFIX)/bin/$(MAIN)
clean:
rm -f $(MAIN).o $(OBJS)
spotless: clean
rm -f $(MAIN)

72
lib/usb.c Normal file
View File

@ -0,0 +1,72 @@
/*
* lib/usb.c - Common USB code for F32Xbase tools
*
* Written 2008-2010 by Werner Almesberger
* Copyright 2008-2010 Werner Almesberger
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*/
#include <stdint.h>
#include <stdlib.h>
#include <stdio.h>
#include <usb.h>
static uint16_t vendor = 0;
static uint16_t product = 0;
usb_dev_handle *open_usb(uint16_t default_vendor, uint16_t default_product)
{
const struct usb_bus *bus;
struct usb_device *dev;
usb_init();
usb_find_busses();
usb_find_devices();
for (bus = usb_get_busses(); bus; bus = bus->next)
for (dev = bus->devices; dev; dev = dev->next) {
if (dev->descriptor.idVendor !=
vendor ? vendor : default_vendor)
continue;
if (dev->descriptor.idProduct !=
product ? product : default_product)
continue;
return usb_open(dev);
}
return NULL;
}
static void bad_id(const char *id)
{
fprintf(stderr, "\"%s\" is not a valid vendor:product ID\n", id);
exit(1);
}
void parse_usb_id(const char *id)
{
unsigned long tmp;
char *end;
tmp = strtoul(id, &end, 16);
if (*end != ':')
bad_id(id);
if (tmp > 0xffff)
bad_id(id);
vendor = tmp;
tmp = strtoul(end+1, &end, 16);
if (*end)
bad_id(id);
if (tmp > 0xffff)
bad_id(id);
product = tmp;
}