read/write data on usb weather station WMR100

Olivier GARNIER oli.garnier at
Mon Nov 23 18:41:38 UTC 2009

Roland Smith a écrit :
> On Mon, Nov 23, 2009 at 02:57:27PM +0100, Olivier GARNIER wrote:
>> Hi,
>> I have an usb weather station (oregon wmr100).
>> It's an usb device only.
>> I want to be able to get data from it (T°, H°, wind, ...)
> This machine probably only comes with windoze software? If you don't know the
> protocol for data exchange used between the hard- and software it might be
> difficult getting it to work on FreeBSD.
I've found some internet site witch speak about it. I've asked oregon, 
but they do not want to talk about it...
> There seems to be a Linux program (WeatherD) that works with this
> station. Maybe you can get that to work? Or you could try running the windows
> softere under emulators/wine.
Yes, but i want to get back data and put it in a postgresql database, 
and i found no way to use it as i want.
>> I tried to use libusb to make a c software but it seems not to work 
>> (exemple witch are in /usr/ports/devel/libusb/work/...test/ do not work).
> Can you elaborate a bit? This is too little info for anyone to help you.
> If you plug the device in, do you see an ugen device being created? What does
> dmesg report?
When I plug in and out the device that's what i see :
uhid0: <vendor 0x0fde Universal Bridge, class 0/0, rev 1.10/3.02, addr 
2> on uhub0
uhid0: at uhub0 port 1 (addr 2) disconnected
uhid0: detached

# pkg_info | grep libusb
libusb-0.1.12_4     Library giving userland programs access to USB devices

# cd /usr/ports/devel/libusb/work/libusb-0.1.12/tests
#  ./descriptor_test
bus/device  idVendor/idProduct
# ./find_hubs
#  ./find_mice
# ./get_resolution
# ./hub_strings
bus/device  idVendor/idProduct/bcdDevice  Class/SubClass/Protocol
# ./testlibusb

As it does not work i tried this i named test.c :
#include <usb.h>
// discover devices
libusb_device **list;
libusb_device *found = NULL;
ssize_t cnt = libusb_get_device_list(NULL, &list);
ssize_t i = 0;
int err = 0;
if (cnt < 0)
for (i = 0; i < cnt; i++) {
  libusb_device *device = list[i];
  if (is_interesting(device)) {
    found = device;
if (found) {
  libusb_device_handle *handle;
  err = libusb_open(found, &handle);
  if (err)
libusb_free_device_list(list, 1);

But it seems not to work
# make
gcc -g -Wall -c test.c
test.c:4: error: expected '=', ',', ';', 'asm' or '__attribute__' before 
'*' token
test.c:5: error: expected '=', ',', ';', 'asm' or '__attribute__' before 
'*' token
test.c:6: warning: implicit declaration of function 'libusb_get_device_list'
test.c:6: error: 'list' undeclared here (not in a function)
test.c:6: error: initializer element is not constant
test.c:9: error: expected identifier or '(' before 'if'
test.c:12: error: expected identifier or '(' before 'for'
test.c:12: error: expected '=', ',', ';', 'asm' or '__attribute__' 
before '<' token
test.c:12: error: expected '=', ',', ';', 'asm' or '__attribute__' 
before '++' token
test.c:20: error: expected identifier or '(' before 'if'
test.c:29: error: expected ')' before numeric constant
*** Error code 1

As it always not work, i look after something else.
I found this
When i modifie it a little this is what it give me :
# ./wmr100
-device: Trouve le device cherche : IDVendeur FDE, IDProduit : CA01, 
IDNom : Universal Bridge
-device: uhid0

so i know i can find the device (i expect i can also speak with it)
I don't know how i can use libusb ....

>> I've seen what's written on /usr/ports/UPDATING (20090309) so i 
>> reinstall libusb
> The note you reference only affected what was then CURRENT, i.e. what is now
> 8.0-PRERELEASE. It shouldn't bother people on 7.x.
>> But it since doesn't work. libusb will not work with FreeBSD 7.0 ?
> It works.
> Roland

Thanks you,


More information about the freebsd-questions mailing list