From owner-FreeBSD-users-jp@jp.FreeBSD.org Fri Sep  5 02:39:29 2003
Received: (from daemon@localhost)
	by castle.jp.FreeBSD.org (8.11.6p2+3.4W/8.11.3) id h84HdTW40668;
	Fri, 5 Sep 2003 02:39:29 +0900 (JST)
	(envelope-from owner-FreeBSD-users-jp@jp.FreeBSD.org)
Received: from mgate10.so-net.ne.jp (mgate10.so-net.ne.jp [210.139.254.157])
	by castle.jp.FreeBSD.org (8.11.6p2+3.4W/8.11.3) with ESMTP/inet id h84HdTw40614
	for <FreeBSD-users-jp@jp.FreeBSD.org>; Fri, 5 Sep 2003 02:39:29 +0900 (JST)
	(envelope-from hsato@iwate-u.ac.jp)
Received: from mail.ba2.so-net.ne.jp (mspool28.so-net.ne.jp [210.139.248.26])
	by mgate10.so-net.ne.jp  with ESMTP id h84HdTT03362
	for <FreeBSD-users-jp@jp.FreeBSD.org>; Fri, 5 Sep 2003 02:39:29 +0900 (JST)
Received: from freebsd.hs.or.jp (p6fa018.iwatnt01.ap.so-net.ne.jp [219.111.160.24])
	by mail.ba2.so-net.ne.jp  with ESMTP id h84HdSl09455
	for <FreeBSD-users-jp@jp.FreeBSD.org>; Fri, 5 Sep 2003 02:39:28 +0900 (JST)
Received: by freebsd.hs.or.jp (8.12.9/3.7W-00071606) with ESMTP id h84HdRWm005502
	for <FreeBSD-users-jp@jp.FreeBSD.org>; Fri, 5 Sep 2003 02:39:27 +0900 (JST)
Message-Id: <20030905.023927.74758085.hsato@ba2.so-net.ne.jp>
To: FreeBSD-users-jp@jp.FreeBSD.org
From: Hiroaki Satoh (=?iso-2022-jp?B?GyRCOjRGIzkoTEAbKEI=?=)
 <hsato@iwate-u.ac.jp>
X-Mailer: Mew version 2.2 on Emacs 21.2 / Mule 5.0 (SAKAKI)
Mime-Version: 1.0
Content-Type: Text/Plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit
Reply-To: FreeBSD-users-jp@jp.FreeBSD.org
Precedence: list
Date: Fri, 05 Sep 2003 02:39:27 +0900
X-Sequence: FreeBSD-users-jp 76073
Subject: [FreeBSD-users-jp 76073] USB =?ISO-2022-JP?B?GyRCJUclUBsoQg==?=
 =?ISO-2022-JP?B?GyRCJSQlOUYwOm5KczlwGyhC?= Sony Clie PEG-S500C
Sender: owner-FreeBSD-users-jp@jp.FreeBSD.org
X-Originator: hsato@iwate-u.ac.jp
X-Distribute: distribute version 2.1 (Alpha) patchlevel 24e+030902


$B$_$J$5$s$3$s$K$A$O(B.
$B:4F#9(L@!w4d<jBg$H$$$$$^$9(B.

$B$:$C$H7|0F$G$"$C$?(B Sony Clie $B$N=iBe(B(S500C)$B$N(BUSB$B$G$N(Bpilot-link(pilot-xfer(1))$B$,(B
$B:G6a$N%+!<%M%k%=!<%9$NJQ99$K$h$j2DG=$K$J$C$j$^$7$?(B.

1. $B$*;H$$$N(B USB $B%G%P%$%9$N@5<0L>>N!"%a!<%+!<!#$G$-$l$P@=IJ$X$N(B URL$B!"$I$s$J%G%P%$%9$+4JC1$J@bL@!#(B
  $B%a!<%+!<(B: Sony Corporation
  $B>&IJL>(B: Clie
  $B7?HV(B: PEG-S500C
  $B@=IJ$X$N(BURL:
  $B@bL@(B: Sony Palm PDE (Palm OS 3.5)
 
2. $B$*;H$$$N(B OS $B$N(B $B%P!<%8%g%s(B($B=PMh$l$P(B-CURRENT$B!"(B-STABLE $B$N>l9g$O$$$D:"(B cvsup $B$7$?$+$b(B)$B!#(B
   4.9-PRERELEASE (2003-08-30 $B$4$m(B)
   5-CURRENT (2003-08-30 $B$4$m(B)
 
3. USB $B%G%P%$%9$rG'<1$7$F$$$k$H$3$m$N(B /var/log/messages
4.9-PRERELEASE:
ucom0: Sony product 0x0038, rev 1.10/11.00, addr 2
ucom0: at uhub0 port 2 (addr 2) disconnected
ucom0: detached

5-CURRENT:
ucom0: Sony Sony Clie v3.5, rev 1.10/11.00, addr 4
ucom0: at uhub0 port 2 (addr 4) disconnected
ucom0: detached

4. usbdevs -v $B$N7k2L(B
4.9-PRERELEASE:
Controller /dev/usb0:
addr 1: self powered, config 1, UHCI root hub(0x0000), VIA(0x0000), rev 1.00
 port 1 powered
 port 2 addr 2: self powered, config 1, product 0x0038(0x0038), Sony(0x054c), rev 11.00
 
5-CURRENT:
log$BL5$7(B

5. $BF0:n$7$?$+!"$7$J$$$+!#(B
   $BF0:n$7$^$7$?(B.
   pilot-link(pilot-xfer(1)),jpilot(1)$B$G3NG'(B.
   $B%G%P%$%9$O(B"/dev/ucom*"$B$K$J$j$^$9(B.
 
6. $BB>$K5$$K$J$kE@!"Cm0UE@$K$D$$$F!#(B
   $B%+!<%M%k$N%=!<%9%3!<%I$K%Q%C%A$,I,MW(B.($B8e=R(B)
   $B$^$?%Y!<%9$K$J$k%=!<%9%3!<%I$O<!$N$h$&$K$J$j$^$9(B.

   4.9-PRERELEASE: sys/dev/usb/uvisor.c
   /*	$NetBSD: uvisor.c,v 1.9 2001/01/23 14:04:14 augustss Exp $	*/
   /*      $FreeBSD: src/sys/dev/usb/uvisor.c,v 1.7.2.5 2003/08/14 00:22:08 joe Exp $	*/

   5-CURRENT: sys/dev/usb/uvisor.c
   /*	$NetBSD: uvisor.c,v 1.9 2001/01/23 14:04:14 augustss Exp $	*/
   /*      $FreeBSD: src/sys/dev/usb/uvisor.c,v 1.15 2003/08/14 00:15:23 joe Exp $	*/

   $B$3$l0JA0$N$b$N$G$O;]$/$$$-$^$;$s$G$7$?(B.
   $B$3$3$G2C$($i$l$?JQ99!JF~NO%P%C%U%!$N=L>.(B)$B$,M-8z$@$C$?$h$&$G$9(B.

7. $B%W%i%$%Y!<%H%a!<%k$r8x3+$7$F$h$$$+(B
  OK
 
8. $B<U<-$KL>A0$r:\$;$F$b$h$$$+$I$&$+(B
  OK
 
9.$B$=$NB>(B
$B$I$J$?$+(B, -CURRENT$B!"(B-STABLE$B$N%=!<%9%3!<%I$KF~$l$F$b$i$C$F2<$5$$(B.

===
                                   == mailto:hsato@iwate-u.ac.jp    ==
                                   == mailto:hsato@ba2.so-net.ne.jp ==
                                    $B:4F#(B $B9(L@(B   (Hiroaki Satoh)


$B0J2<$K%Q%C%A$r$D$1$^$9(B.
$B!J3:Ev$9$k%3!<%I$N%"%k%4%j%:%`$O(BLinux$B$N$b$N$r;29M$K$7$^$7$?(B.$B!K(B

4.9-PRERELEASE: sys/dev/usb/uvisor.c $B$X$N%Q%C%A(B
--- uvisor.c.orig	Sun Aug 31 02:03:10 2003
+++ uvisor.c	Sun Aug 31 02:06:36 2003
@@ -53,6 +53,8 @@
 /*
  * Handspring Visor (Palmpilot compatible PDA) driver
  */
+/*#define USB_DEBUG 0
+ */
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -163,6 +165,8 @@
 
 Static usbd_status uvisor_init(struct uvisor_softc *);
 
+Static usbd_status clie_3_5_init(struct uvisor_softc *);
+
 Static void uvisor_close(void *, int);
 
 struct ucom_callback uvisor_callback = {
@@ -212,6 +216,8 @@
 	{{ USB_VENDOR_PALM, USB_PRODUCT_PALM_M125 }, PALM4 },
 	{{ USB_VENDOR_SONY, USB_PRODUCT_SONY_CLIE_40 }, PALM4 },
 	{{ USB_VENDOR_SONY, USB_PRODUCT_SONY_CLIE_41 }, 0 },
+#define USB_PRODUCT_SONY_CLIE_35 0x0038
+	{{ USB_VENDOR_SONY, USB_PRODUCT_SONY_CLIE_35 }, 0 },
 /*	{{ USB_VENDOR_SONY, USB_PRODUCT_SONY_CLIE_25 }, PALM4 },*/
 };
 #define uvisor_lookup(v, p) ((const struct uvisor_type *)usb_lookup(uvisor_devs, v, p))
@@ -327,7 +333,12 @@
 	ucom->sc_opkthdrlen = 0;
 	ucom->sc_callback = &uvisor_callback;
 
-	err = uvisor_init(sc);
+	if ((uaa->vendor==USB_VENDOR_SONY)
+	    &&(uaa->product==USB_PRODUCT_SONY_CLIE_35))
+	  err = clie_3_5_init(sc);
+	else
+	  err = uvisor_init(sc);
+
 	if (err) {
 		printf("%s: init failed, %s\n", USBDEVNAME(ucom->sc_dev),
 		       usbd_errstr(err));
@@ -466,6 +477,78 @@
 	DPRINTF(("uvisor_init: avail=%d\n", UGETW(avail)));
 
 	DPRINTF(("uvisor_init: done\n"));
+	return (err);
+}
+
+usbd_status
+clie_3_5_init(struct uvisor_softc *sc)
+{
+	usbd_status err;
+	usb_device_request_t req;
+	struct uvisor_connection_info coninfo;
+	int actlen;
+	uWord avail;
+	char buffer[256];
+
+	/*
+	 * Note that PEG-300 series devices expect the following two calls.
+	 */
+
+	/* get the config number */
+	DPRINTF(("clie_3_5_init: getting config info\n"));
+	req.bmRequestType = UT_READ;
+	req.bRequest = UR_GET_CONFIG;
+	USETW(req.wValue, 0);
+	USETW(req.wIndex, 0);
+	USETW(req.wLength, 1);
+	err = usbd_do_request(sc->sc_ucom.sc_udev, &req, buffer);
+	if (err)
+		return (err);
+
+	/* get the interface number */
+	DPRINTF(("clie_3_5_init: get the interface number\n"));
+	req.bmRequestType = UT_READ_DEVICE;
+	req.bRequest = UR_GET_INTERFACE;
+	USETW(req.wValue, 0);
+	USETW(req.wIndex, 0);
+	USETW(req.wLength, 1);
+	err = usbd_do_request(sc->sc_ucom.sc_udev, &req, buffer);
+	if (err)
+		return (err);
+
+#ifdef USB_DEBUG
+	{
+		int i, np;
+		char *string;
+
+		np = UGETW(coninfo.num_ports);
+		DPRINTF(("%s: Number of ports: %d\n", USBDEVNAME(sc->sc_ucom.sc_dev), np));
+		for (i = 0; i < np; ++i) {
+			switch (coninfo.connections[i].port_function_id) {
+			case UVISOR_FUNCTION_GENERIC:
+				string = "Generic";
+				break;
+			case UVISOR_FUNCTION_DEBUGGER:
+				string = "Debugger";
+				break;
+			case UVISOR_FUNCTION_HOTSYNC:
+				string = "HotSync";
+				break;
+			case UVISOR_FUNCTION_REMOTE_FILE_SYS:
+				string = "Remote File System";
+				break;
+			default:
+				string = "unknown";
+				break;	
+			}
+			DPRINTF(("%s: port %d, is for %s\n",
+			    USBDEVNAME(sc->sc_ucom.sc_dev), coninfo.connections[i].port,
+			    string));
+		}
+	}
+#endif
+
+	DPRINTF(("clie_3_5_init: done\n"));
 	return (err);
 }
 

5-CURRENT: sys/dev/usb/uvisor.c $B$X$N%Q%C%A(B
--- uvisor.c.orig	Thu Sep  4 00:47:24 2003
+++ uvisor.c	Thu Sep  4 00:50:31 2003
@@ -164,6 +164,8 @@
 
 Static usbd_status uvisor_init(struct uvisor_softc *);
 
+Static usbd_status clie_3_5_init(struct uvisor_softc *);
+
 Static void uvisor_close(void *, int);
 
 struct ucom_callback uvisor_callback = {
@@ -221,6 +223,8 @@
 	{{ USB_VENDOR_SONY, USB_PRODUCT_SONY_CLIE_41 }, 0 },
 	{{ USB_VENDOR_SONY, USB_PRODUCT_SONY_CLIE_S360 }, PALM4 },
 	{{ USB_VENDOR_SONY, USB_PRODUCT_SONY_CLIE_NX60 }, PALM4 },
+#define USB_PRODUCT_SONY_CLIE_35 0x0038
+	{{ USB_VENDOR_SONY, USB_PRODUCT_SONY_CLIE_35 }, 0 },
 /*	{{ USB_VENDOR_SONY, USB_PRODUCT_SONY_CLIE_25 }, PALM4 },*/
 };
 #define uvisor_lookup(v, p) ((const struct uvisor_type *)usb_lookup(uvisor_devs, v, p))
@@ -336,7 +340,12 @@
 	ucom->sc_opkthdrlen = 0;
 	ucom->sc_callback = &uvisor_callback;
 
-	err = uvisor_init(sc);
+	if ((uaa->vendor==USB_VENDOR_SONY)
+	    &&(uaa->product==USB_PRODUCT_SONY_CLIE_35))
+	  err = clie_3_5_init(sc);
+	else
+	  err = uvisor_init(sc);
+
 	if (err) {
 		printf("%s: init failed, %s\n", USBDEVNAME(ucom->sc_dev),
 		       usbd_errstr(err));
@@ -482,6 +491,78 @@
 	DPRINTF(("uvisor_init: avail=%d\n", UGETW(avail)));
 
 	DPRINTF(("uvisor_init: done\n"));
+	return (err);
+}
+
+usbd_status
+clie_3_5_init(struct uvisor_softc *sc)
+{
+	usbd_status err;
+	usb_device_request_t req;
+	struct uvisor_connection_info coninfo;
+	int actlen;
+	uWord avail;
+	char buffer[256];
+
+	/*
+	 * Note that PEG-300 series devices expect the following two calls.
+	 */
+
+	/* get the config number */
+	DPRINTF(("clie_3_5_init: getting config info\n"));
+	req.bmRequestType = UT_READ;
+	req.bRequest = UR_GET_CONFIG;
+	USETW(req.wValue, 0);
+	USETW(req.wIndex, 0);
+	USETW(req.wLength, 1);
+	err = usbd_do_request(sc->sc_ucom.sc_udev, &req, buffer);
+	if (err)
+		return (err);
+
+	/* get the interface number */
+	DPRINTF(("clie_3_5_init: get the interface number\n"));
+	req.bmRequestType = UT_READ_DEVICE;
+	req.bRequest = UR_GET_INTERFACE;
+	USETW(req.wValue, 0);
+	USETW(req.wIndex, 0);
+	USETW(req.wLength, 1);
+	err = usbd_do_request(sc->sc_ucom.sc_udev, &req, buffer);
+	if (err)
+		return (err);
+
+#ifdef USB_DEBUG
+	{
+		int i, np;
+		char *string;
+
+		np = UGETW(coninfo.num_ports);
+		DPRINTF(("%s: Number of ports: %d\n", USBDEVNAME(sc->sc_ucom.sc_dev), np));
+		for (i = 0; i < np; ++i) {
+			switch (coninfo.connections[i].port_function_id) {
+			case UVISOR_FUNCTION_GENERIC:
+				string = "Generic";
+				break;
+			case UVISOR_FUNCTION_DEBUGGER:
+				string = "Debugger";
+				break;
+			case UVISOR_FUNCTION_HOTSYNC:
+				string = "HotSync";
+				break;
+			case UVISOR_FUNCTION_REMOTE_FILE_SYS:
+				string = "Remote File System";
+				break;
+			default:
+				string = "unknown";
+				break;	
+			}
+			DPRINTF(("%s: port %d, is for %s\n",
+			    USBDEVNAME(sc->sc_ucom.sc_dev), coninfo.connections[i].port,
+			    string));
+		}
+	}
+#endif
+
+	DPRINTF(("clie_3_5_init: done\n"));
 	return (err);
 }
 
