From owner-FreeBSD-users-jp@jp.FreeBSD.org Wed Dec  3 03:05:19 2003
Received: (from daemon@localhost)
	by castle.jp.FreeBSD.org (8.11.6p2+3.4W/8.11.3) id hB2I5Ja39127;
	Wed, 3 Dec 2003 03:05:19 +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 hB2I5IM39122
	for <FreeBSD-users-jp@jp.FreeBSD.org>; Wed, 3 Dec 2003 03:05:18 +0900 (JST)
	(envelope-from hsato@ba2.so-net.ne.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 hB2I5H513536;
	Wed, 3 Dec 2003 03:05:17 +0900 (JST)
Received: from freebsd.hs.or.jp (p6fa0b9.iwatnt01.ap.so-net.ne.jp [219.111.160.185])
	by mail.ba2.so-net.ne.jp  with ESMTP id hB2I5H121944;
	Wed, 3 Dec 2003 03:05:17 +0900 (JST)
Received: by freebsd.hs.or.jp (8.12.10/3.7W-00071606) with ESMTP id hB2I5GMk050422;
	Wed, 3 Dec 2003 03:05:16 +0900 (JST)
Message-Id: <20031203.030516.112631243.hsato@ba2.so-net.ne.jp>
To: FreeBSD-users-jp@jp.FreeBSD.org, kimoto@ohnolab.org
From: Hiroaki Satoh (=?iso-2022-jp?B?GyRCOjRGIzkoTEAbKEI=?=)
 <hsato@ba2.so-net.ne.jp>
In-Reply-To: <20031128.194130.45280227.kimoto@ohnolab.org>
References: <20031124.162616.70994158.kimoto@ohnolab.org>
	<20031128.194130.45280227.kimoto@ohnolab.org>
X-Mailer: Mew version 2.2 on Emacs 21.2 / Mule 5.0 (SAKAKI)
Mime-Version: 1.0
Content-Type: Multipart/Mixed;
 boundary="--Next_Part(Wed_Dec__3_03:05:16_2003_801)--"
Content-Transfer-Encoding: 7bit
Reply-To: FreeBSD-users-jp@jp.FreeBSD.org
Precedence: list
Date: Wed, 03 Dec 2003 03:05:16 +0900
X-Sequence: FreeBSD-users-jp 77426
Subject: [FreeBSD-users-jp 77426] Re: uvisor with Tungsten T on
 4.9-RELEASE
Sender: owner-FreeBSD-users-jp@jp.FreeBSD.org
X-Originator: hsato@ba2.so-net.ne.jp
X-Distribute: distribute version 2.1 (Alpha) patchlevel 24e+031103

----Next_Part(Wed_Dec__3_03:05:16_2003_801)--
Content-Type: Text/Plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit


$B:4F#9(L@$H$$$$$^$9(B.

From: Masahiko KIMOTO <kimoto@ohnolab.org>
Subject: [FreeBSD-users-jp 77379] Re: uvisor with Tungsten T on 4.9-RELEASE
Date: Fri, 28 Nov 2003 19:41:30 +0900
Message-ID: <20031128.194130.45280227.kimoto@ohnolab.org>

kimoto>  > Palm Tungsten T($B=iBe(B)$B$rF~<j$7$^$7$?!#AaB.Jl4O$K$7$F$$$k(BFreeBSD 4.9-RELASE
kimoto>  > $B$N%^%7%s$K7R$2$F$_$^$7$?$,!"0J2<$N$h$&$K(Battach$B$G<:GT$7$F;H$($^$;$s!#(B
kimoto> 
kimoto> $B0l1~;H$($k$h$&$K$7$F$_$^$7$?!#(B

kimoto> 
kimoto> $BLdBj$J$1$l$P(Bsend-pr$B$9$k$+!"$=$NA0$K(Busb-bsd$B$KEj$2$F$_$k$+!"$A$g$C$H9M$($^$9!#(B
kimoto> 
kimoto> $B%Q%C%A$O(B4.9-RELEASE$B$N(Buvisor.c$B$+$i$N:9J,$G$9!#(B
kimoto> 
kimoto> ----------------------------------------------------------------------
kimoto>     $BLZK\(B $B2mI'(B <kimoto@ohnolab.org> :  http://www.ohnolab.org/~kimoto
kimoto> ----------------------------------------------------------------------

send-pr$B$N:]$O(B [FreeBSD-users-jp 76073]$B$G;d$,Js9p$7$?(B $B=iBe(BClie(S500C,OS3.5)$B$K(B
$BBP1~$9$k%Q%C%A$b%^!<%8$7$F$b$i$($k$H=u$+$j$^$9(B.

$BLZK\$5$s$N:n6H$H;d$N:n6H$r%^!<%8$7$?%Q%C%A(B(4.9R$BMQ(B)$B$rIU$1$^$9$N$G;29M$K$7$F2<$5$$(B.

$B$3$N%Q%C%A$K$h$k(Buvisor$B%I%i%$%P!<$G;d$N(BS500C$B$H$N%G!<%?8r49$O=PMh$F$$$^$9(B.

$B$A$J$_$K(B [FreeBSD-users-jp 76073]$B$K$O(B5.x$B7ONs$N$?$a$N%Q%C%A$b>R2p$7$F$$$^$9(B($B@kEA(B)

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



----Next_Part(Wed_Dec__3_03:05:16_2003_801)--
Content-Type: Text/Plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Content-Disposition: inline; filename="uvisor.c.clie+.patch"

--- uvisor.c.org	Wed Nov 12 09:19:50 2003
+++ uvisor.c	Wed Dec  3 02:24:00 2003
@@ -140,8 +140,19 @@
  * Unknown PalmOS stuff.
  */
 #define UVISOR_GET_PALM_INFORMATION		0x04
-#define UVISOR_GET_PALM_INFORMATION_LEN		0x14
+#define UVISOR_GET_PALM_INFORMATION_LEN		0x44
 
+struct uvisor_palm_connection_info {
+        uByte   num_ports;
+        uByte   endpoint_numbers_different;
+        uWord   reserved1;
+  struct {
+                uDWord  port_function_id;
+                uByte   port;
+                uByte   end_point_info;
+                uWord   reserved;
+  } connections[UVISOR_MAX_CONN];
+};
 
 /*
  * Crank down UVISORBUFSIZE from 1024 to 64 to avoid a problem where
@@ -163,6 +174,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 = {
@@ -203,9 +216,10 @@
 	struct usb_devno	uv_dev;
 	u_int16_t		uv_flags;
 #define PALM4	0x0001
+#define VISOR   0x0002
 };
 static const struct uvisor_type uvisor_devs[] = {
-	{{ USB_VENDOR_HANDSPRING, USB_PRODUCT_HANDSPRING_VISOR }, 0 },
+	{{ USB_VENDOR_HANDSPRING, USB_PRODUCT_HANDSPRING_VISOR }, VISOR },
 	{{ USB_VENDOR_HANDSPRING, USB_PRODUCT_HANDSPRING_TREO }, PALM4 },
 	{{ USB_VENDOR_PALM, USB_PRODUCT_PALM_M500 }, PALM4 },
 	{{ USB_VENDOR_PALM, USB_PRODUCT_PALM_M505 }, PALM4 },
@@ -220,6 +234,7 @@
 	{{ 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 },
+	{{ 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))
@@ -284,7 +299,7 @@
 		goto bad;
 	}
 
-	printf("%s: %s\n", devname, devinfo);
+/*	printf("%s: %s\n", devname, devinfo);*/
 
 	sc->sc_flags = uvisor_lookup(uaa->vendor, uaa->product)->uv_flags;
 
@@ -335,7 +350,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));
@@ -395,21 +415,23 @@
 	usbd_status err;
 	usb_device_request_t req;
 	struct uvisor_connection_info coninfo;
+	struct uvisor_palm_connection_info pconinfo;
 	int actlen;
 	uWord avail;
 	char buffer[256];
 
-	DPRINTF(("uvisor_init: getting connection info\n"));
-	req.bmRequestType = UT_READ_VENDOR_ENDPOINT;
-	req.bRequest = UVISOR_GET_CONNECTION_INFORMATION;
-	USETW(req.wValue, 0);
-	USETW(req.wIndex, 0);
-	USETW(req.wLength, UVISOR_CONNECTION_INFO_SIZE);
-	err = usbd_do_request_flags(sc->sc_ucom.sc_udev, &req, &coninfo,
-				    USBD_SHORT_XFER_OK, &actlen);
-	if (err)
-		return (err);
-
+	if (sc->sc_flags & VISOR) { 
+		DPRINTF(("uvisor_init: getting connection info\n"));
+		req.bmRequestType = UT_READ_VENDOR_ENDPOINT;
+		req.bRequest = UVISOR_GET_CONNECTION_INFORMATION;
+		USETW(req.wValue, 0);
+		USETW(req.wIndex, 0);
+		USETW(req.wLength, UVISOR_CONNECTION_INFO_SIZE);
+		err = usbd_do_request_flags(sc->sc_ucom.sc_udev, &req, &coninfo,
+					    USBD_SHORT_XFER_OK, &actlen);
+		if (err)
+			return (err);
+	}
 #ifdef USB_DEBUG
 	{
 		int i, np;
@@ -443,15 +465,34 @@
 #endif
 
 	if (sc->sc_flags & PALM4) {
+	        int port;
 		/* Palm OS 4.0 Hack */
+	  	DPRINTF(("uvisor_init: getting Palm connection info\n"));
 		req.bmRequestType = UT_READ_VENDOR_ENDPOINT;
 		req.bRequest = UVISOR_GET_PALM_INFORMATION;
 		USETW(req.wValue, 0);
 		USETW(req.wIndex, 0);
 		USETW(req.wLength, UVISOR_GET_PALM_INFORMATION_LEN);
-		err = usbd_do_request(sc->sc_ucom.sc_udev, &req, buffer);
+		err = usbd_do_request_flags(sc->sc_ucom.sc_udev, &req, &pconinfo,
+					    USBD_SHORT_XFER_OK, &actlen);
 		if (err)
 			return (err);
+
+	  /*
+		printf("pconinfo.num_ports=%d\n",pconinfo.num_ports);
+		printf("pconinfo.endpoint_numbers_different=%d\n",pconinfo.endpoint_numbers_different);
+	   */
+
+		if (pconinfo.endpoint_numbers_different) {
+			port = pconinfo.connections[0].end_point_info;
+			sc->sc_ucom.sc_bulkin_no = (port >> 4) | UE_DIR_IN;
+			sc->sc_ucom.sc_bulkout_no = (port & 0xf) | UE_DIR_OUT;
+		} else {
+			port = pconinfo.connections[0].port;
+			sc->sc_ucom.sc_bulkin_no = port | UE_DIR_IN;
+			sc->sc_ucom.sc_bulkout_no = port | UE_DIR_OUT;
+		}
+#if 0
 		req.bmRequestType = UT_READ_VENDOR_ENDPOINT;
 		req.bRequest = UVISOR_GET_PALM_INFORMATION;
 		USETW(req.wValue, 0);
@@ -460,6 +501,7 @@
 		err = usbd_do_request(sc->sc_ucom.sc_udev, &req, buffer);
 		if (err)
 			return (err);
+#endif
 	}
 
 	DPRINTF(("uvisor_init: getting available bytes\n"));
@@ -474,6 +516,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);
 }
 

----Next_Part(Wed_Dec__3_03:05:16_2003_801)----
