[FreeBSD-users-jp 95096] USB 温度計

Kouichi Hirabayashi kh at mogami.com
Wed Dec 11 01:18:19 UTC 2013


簡単な室温補正を必要とする測定のために温度計を探してみたのですが、

  http://www.pcsensor.comindex.php_a=product&product_id=41

が FreeBSD-8.4 でも使えるようです。国内でも、

  http://www.donya.jp/item/24167.html

とか amazon などで取扱があって、1,000 円ちょっとで入手できます。

デバイスそのものは、Hid として設計されていて、
usbconfig dump_device_desc の結果は下記のようになります。

ugen0.2: <TEMPerV1.4 RDing> at usbus0, cfg=0 md=HOST spd=LOW (1.5Mbps) pwr=ON

  bLength = 0x0012 
  bDescriptorType = 0x0001 
  bcdUSB = 0x0200 
  bDeviceClass = 0x0000 
  bDeviceSubClass = 0x0000 
  bDeviceProtocol = 0x0000 
  bMaxPacketSize0 = 0x0008 
  idVendor = 0x0c45 
  idProduct = 0x7401 
  bcdDevice = 0x0001 
  iManufacturer = 0x0001  <RDing>
  iProduct = 0x0002  <TEMPerV1.4>
  iSerialNumber = 0x0000  <no string>
  bNumConfigurations = 0x0001 

付属 CD-ROM には Windows のアプリケーションしかありませんが、
Linux community で開発された pcsensor-1.0.0-multi.tgz が

  http://momtchil.momtchev.com/node/6

にありますので、これに下記のパッチをあてて、make すれば、
FreeBSD-8.4 で動作する pcsensor ができます。

--- pcsensor.c.orig	2013-12-11 09:10:15.000000000 +0900
+++ pcsensor.c	2013-12-11 09:19:40.000000000 +0900
@@ -34,8 +34,13 @@
 #include <string.h>
 #include <errno.h>
 #include <signal.h> 
- 
- 
+#ifdef __FreeBSD__
+#include <stdlib.h>
+#include <unistd.h>
+#include <libusb.h>
+#endif
+
+
 #define VERSION "1.0.0"
  
 #define VENDOR_ID  0x0c45
@@ -80,17 +85,21 @@
  
 	ret = usb_detach_kernel_driver_np(lvr_winusb, iInterface);
 	if(ret) {
+#ifndef __FreeBSD__
 		if(errno == ENODATA) {
 			if(debug) {
 				printf("Device already detached\n");
 			}
 		} else {
+#endif
 			if(debug) {
 				printf("Detach failed: %s[%d]\n",
 				       strerror(errno), errno);
 				printf("Continuing anyway\n");
 			}
+#ifndef __FreeBSD__
 		}
+#endif
 	} else {
 		if(debug) {
 			printf("detach successful\n");
--- Makefile	2013-12-10 17:19:15.000000000 +0900
+++ makefile	2013-12-11 09:07:53.000000000 +0900
@@ -3,10 +3,9 @@
 CFLAGS = -O2 -Wall
 
 pcsensor:	pcsensor.c
-	${CC} -DUNIT_TEST -o $@ $^ -lusb
+	cc -g -o pcsensor pcsensor.c -lusb
+	chmod 4755 pcsensor
+	chown root pcsensor
 
 clean:		
-	rm -f pcsensor *.o
-
-rules-install:			# must be superuser to do this
-	cp 99-tempsensor.rules /etc/udev/rules.d
+	rm -f pcsensor
--< cut >--

このプログラム(pcsensor)を実行すると、下記のような出力が得られます。

  $ pcsensor
  2013/12/11 09:50:08 Temperature 72.05F 22.25C

短いプログラムですから、自分がほしい機能に書き換えるのも簡単です。

なお、このプログラムは libusb(http://www.libusb.org/) の 0.1 を使
っていて、既に legacy 版ですが、FreeBSD-8.4 ではまだ使えるものの、
まともなマニュアルがありませんので、libusb については、

  http://libusb.sourceforge.net/doc/

を参照してください。現行版 1.0 のマニュアルは

  http://libusb.sourceforge.net/api-1.0/

です。

平林 浩一


More information about the freebsd-users-jp mailing list