[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[debian-users:23981] Re: Potato PCMCIA on Let's Note S21
佐野@浜松です。
In <200009121432.XAA04540@xxxxxxxxxxxxxxxxxxxxxxxxxxx>,
on "Tue, 12 Sep 2000 23:33:04 +0900',
with "Re: Potato PCMCIA on Let's Note S21",
OZAWA -Crouton- Sakuro <crouton@xxxxxxxxxxxxxxxx> さん wrote:
> うぅ。できれば本体のインストールはネットワーク経由でやりたかったんですが……。
> # 手持ちのCD-ROMドライブが悪名高いKXL-810ANなんで使えない。
あれ ? KXL-810AN ってサポートされているはずですが。
PC カード給電の場合はちょっとしたツールが必要だけど、
AC アダプタで使う場合にはそのまま接続すれば認識しません ?
pcmcia-cs 3.1.4 以降で野村さんのパッチが採用されていると
思っていたのですが。実際 TP235 に KXL-810AN を接続して動作
を確認したこともありますし。
PC カード給電の場合は以下のコードを make して ./kxl810 0
(/dev/sg0 の場合) を実行すると使えるようになるはず。
# タイムアウトを待つのが長いけれど、葢を開閉すると早く動き出す。
# 附属の SCSI カード以外に使うとカードを壊す場合があるそうなので
# 要注意のこと。
このコードも作者の野村さん (s.nomura@xxxxxxxxxxxxxxx) にメールで
問い合わせて GPL での配布許可をもらったのですが、時間が無くて
pcmcia-source パッケージの contrib に入れてもらうという目論見は
実現していません。誰か BTS してくれる人がいることを期待。
===== Makefile =====
OBJS = main.o
PROGRAM = kxl810
CFLAGS = -O2
$(PROGRAM): $(OBJS)
cc -o $(PROGRAM) $(OBJS)
clean:
$(RM) $(OBJS)
===== main.c =====
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <fcntl.h>
main(int argc, char *argv[])
{
int fd, on, sp;
char fname[16];
u_char inq[36 + 1];
if (argc != 2){
help();
exit(-1);
}
sprintf(fname, "/dev/sg%c", argv[1][0]);
if ((fd = open(fname, O_RDWR)) < 0){
perror(fname);
exit(1);
}
if (inquiry(fd, 0, inq, sizeof inq) < 0){
close(fd);
exit(-1);
}
inq[36] = '\0';
printf("%s\n", inq + 8);
cmdE0(fd, 0, on);
close(fd);
exit(0);
}
help()
{
fprintf(stderr, "Usage: kxl810 {a|b|c|d|e|f}\n");
}
#include <scsi/sg.h>
u_char sg_buf[1024];
inquiry(int fd, int lun, void *inq)
{
struct sg_header *sg = (struct sg_header *)sg_buf;
u_char *cmd = sg_buf + sizeof (struct sg_header);
int n;
sg->reply_len = sizeof (struct sg_header) + 36;
sg->pack_id = 1;
sg->twelve_byte = 0;
cmd[0] = 0x12;
cmd[1] = (lun << 5);
cmd[2] = 0x00;
cmd[3] = 0x00;
cmd[4] = 36;
cmd[5] = 0x00;
n = sizeof (struct sg_header) + 6;
if (write(fd, sg_buf, n) != n){
perror("inquiry: write");
return (-1);
}
if ((n = read(fd, sg_buf, sizeof sg_buf)) <= 0){
perror("inquiry: read");
return (-1);
}
if (sg->result != 0){
fprintf(stderr, "inquiry: error code = 0x%x\n", sg->result);
return (-1);
}
memcpy(inq, sg_buf + sizeof (struct sg_header), 36);
return (0);
}
cmdE0(int fd, int lun)
{
struct sg_header *sg = (struct sg_header *)sg_buf;
u_char *cmd = sg_buf + sizeof (struct sg_header);
int n;
printf("command 0xe0:\n");
sg->reply_len = sizeof (struct sg_header);
sg->pack_id = 1;
sg->twelve_byte = 1;
cmd[0] = 0xe0;
cmd[1] = 0x00;
cmd[2] = 0x00;
cmd[3] = 0x00;
cmd[4] = 0x00;
cmd[5] = 0x54;
cmd[6] = 0x4f;
cmd[7] = 0x4d;
cmd[8] = 0x59;
cmd[9] = 0x30;
cmd[10] = 0x31;
cmd[11] = 0x48;
n = sizeof (struct sg_header) + 12;
if (write(fd, sg_buf, n) != n){
perror("cmdE0: write");
return (-1);
}
if ((n = read(fd, sg_buf, sizeof sg_buf)) <= 0){
perror("cmdE0: read");
return (-1);
}
if (sg->result != 0){
fprintf(stderr, "cmdE0: error code = 0x%x\n", sg->result);
return (-1);
}
return (0);
}
===== README =====
kxl810
■ 概要
Panasonic KXL-810 を付属の SCSI カードからの給電で動作可能にする
ツールです。
■ 免責
作者は、本ソフトウェアに起因するいかなる損害に対しても責任は
負いません。また、サポートの義務も負いません。
■ 履歴
v0.1 1999,11.1.
■ 注意
必ず付属の SCSI I/F カードをお使い下さい。
それ以外の SCSI I/F カードを使うとカードが壊れる可能性があります。
■ 使い方
kxl810 {a|b|c|d|e|f|g}
PCカード給電での動作を enable にするコマンドを CD-ROM ドライブへ
送ります。
引数 {a|b|c|d|e|f|g} はそれぞれ /dev/sg{a|b|c|d|e|f|g} に対応します。
この CD-ROM しか接続していない場合は /dev/sga になりますから
kxl810 a
で OK です。
★実行には root 権限が必要です。
(Debian の場合は sg0, sg1, sg2 などになるので ./kxl810 0 などの
ような使い方になります)
では。
--
# (わたしのおうちは浜松市、「夜のお菓子」で有名さ。)
<kgh12351@xxxxxxxxxxx> : Taketoshi Sano (佐野 武俊)