[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