mirror of
git://projects.qi-hardware.com/f32xbase.git
synced 2024-11-04 23:21:53 +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:
parent
97d2ed102e
commit
7501137fac
23
include/f32xbase/usb.h
Normal file
23
include/f32xbase/usb.h
Normal 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
37
lib/Makefile.common
Normal 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
72
lib/usb.c
Normal 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;
|
||||
}
|
Loading…
Reference in New Issue
Block a user