[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: xircom cf ethernet



鈴木(康)です。
<200002280130.KAA11033@ninja.hpc.bs1.fc.nec.co.jp>の記事において
suz@hpc.bs1.fc.nec.co.jpさんは書きました。
  |   | ところで、タッチパネルのキャリブレーションってできるんですか?
  | 
  | MGL の demos にある tap.c をベースに作ろうと思っています。
  | 
  | コマンドの名前なんかいいのないですかね。
  | calibrate ?
  | 

作ろうと思ってやってみたんですが、WSMOUSEIO_SCALIBCOORDS をすると
システムが止まってしまいます。

MGL で画面を占有しているんで、panic ってことわからなかったです。

シリアルつないで、やってみたら次のようになりました。
カーネル内部で、浮動小数点命令が実行されています。

# ./calibrate < /dev/ttyE0
load_font /usr/pkg/lib/mgl2/k12x12.fnt
load_font /usr/pkg/lib/mgl2/k16x16.fnt
load_font /usr/pkg/lib/mgl2/k24x24.fnt
initializing secondary evnet manager
md_hpcmips init
md_hpcmipSs init mouse
mdt_hpcmips init opoen /dev/ttyE0
mpd_hpcmips init GpINFO
md_hpcmipse fbsetinfo: platdform = MC-R300 ( NEC VR4111 rev0.i0 84.260MHz) 
dnisplay: 640x240x 2
fbsize: 61440c off:0 rowbytes:a256
md_hpcmips linit MODE
ibrate at __qdivrem+0x50: mflo    v0
db> trace
__assert+80 (0,0,8035ce70,0) ra 800310fc sz 32
mips3_KernIntr+84 (c003c014,100000,10,c003c000) ra 8016d584 sz 120
mra_Y_AX1_BX2_C+284 (c003c014,10,10,100000) ra 10 sz 168
PC 0x10: not in kernel space
_DYNAMIC_LINK+10 (c003c014,10,10,100000) ra 0 sz 0
User-level: pid 152
db> 


テストした、tap.c -> calibrate.c のパッチ添付します。

---------- パッチここから
--- tap.c	Thu Feb 17 12:50:39 2000
+++ calibrate.c	Mon Feb 28 14:00:49 2000
@@ -1,4 +1,7 @@
 #include "mgl2.h"
+#include <sys/types.h>
+#include <time.h>
+#include <dev/wscons/wsconsio.h>
 
 #define OFFSET 24
 
@@ -37,16 +40,59 @@
 	ts_put_string(ts,buf,0);
 }
 
+calib_dump(char *name,struct wsmouse_calibcoords *calib) {
+	int i;
+	printf("------- %s --------------------\n",name);
+	printf("minx %d ",calib->minx);
+	printf("maxx %d ",calib->maxx);
+	printf("miny %d ",calib->miny);
+	printf("maxy %d ",calib->maxy);
+	printf("samplelen %d \n",calib->samplelen);
+	for (i=0; i< calib->samplelen; i++) {
+		printf("    ");
+		printf("x %d ",calib->samples[i].x);
+		printf("y %d ",calib->samples[i].y);
+		printf("rawx %d ",calib->samples[i].rawx);
+		printf("rawy %d ",calib->samples[i].rawy);
+		printf("\n");
+	}
+}
+
 main() {
 	int h;
 	struct textscreen *ts;
 	struct virtual_key *v;
+	struct wsmouse_calibcoords icalib,calib;
+	extern int mgl_mouse_fd;
+	int i,ret;
 
 	SCREEN_WIDTH = 240;
 	SCREEN_HEIGHT = 320;
 	if (!open_graph()) {
 		exit(1);
 	}
+
+	ret = ioctl(mgl_mouse_fd,WSMOUSEIO_GCALIBCOORDS,&calib);
+	if (ret < 0) {
+		perror("(1)WSMOUSEIO_GCALIBCOORDS");
+		exit(1);
+	}
+	calib_dump("initial",&calib);
+	ret = ioctl(mgl_mouse_fd,WSMOUSEIO_SCALIBCOORDS,&calib);
+	if (ret < 0) {
+		perror("(2)WSMOUSEIO_SCALIBCOORDS");
+		exit(1);
+	}
+	for (i=0; i< calib.samplelen; i++) {
+		calib.samples[i].rawx += 1;
+		calib.samples[i].rawy += 1;
+	}
+	ret = ioctl(mgl_mouse_fd,WSMOUSEIO_GCALIBCOORDS,&calib);
+	if (ret < 0) {
+		perror("(3)WSMOUSEIO_GCALIBCOORDS");
+		exit(1);
+	}
+	calib_dump("initial +1",&calib);
 
 	set_color(COLOR_WHITE);
 	clear_screen();

--
					鈴木 康司 @NEC
					suz@hpc.bs1.fc.nec.co.jp
					TEL 0423-33-5381