EyeToyに関するページです。

EyeToyとは

SONY Playstation2用のUSBカメラ。中に使用されているチップは ov511 で有名な OmniVision? 社製の OV519 で、センサーは OV7640(with microphone) 。このごろはプレステ2の周辺機器の価格もこなれてきて、場合によっては数百円程度で入手可能。Logitech製とNamtai製の2種類あり。

[M.D.L. 今機器] Eyetoy (Playstation2)

Linuxで使う

標準ではドライバが用意されていないので、ドライバ用のソースをダウンロードして、自前でコンパイル、インストールする必要あり。

ov51xドライバ(本家)

Linux OVCam Driversより ov51xドライバ用のソースをダウンロードして、自前でコンパイル、インストールする。

ov51x JPEG hacked linux driver

本家のov51xドライバにはJPEG圧縮や最新のv4lに対応していないので、書き直されたもの。作者もWikiページに書いているように、本来はJPEG圧縮などはカーネルレベルで対応するのが美しいのであろうが、それを待っていられないってことだろう。

このドライバはDebianとOpenSuse? 10.x用にコンパイル済みのパッケージが用意されているので、これらのディストリビューションのユーザには朗報である。(2008-04-15: Debian sid/lenny用にはパッケージが用意されるようになったので、本家サイトでのDebian用レポジトリは廃止になった。Etchユーザはどうすればよいの?)

Debianでのインストール

参考:Software/LinuxKernel - Debian GNU/Linux スレッドテンプレ 外部カーネルモジュールを再構築したい~ 最新のソースパッケージをダウンロードし、module-assistantを使ってモジュールパッケージを作成する。linux-kernel-headersなど必要なパッケージは事前に適宜インストールしておくこと。

$ mkdir workdir
$ cd workdir
$ wget http://ftp.yz.yamagata-u.ac.jp/debian/pool/main/o/ov51x-jpeg/ov51x-jpeg-source_1.5.7-1_all.deb 
$ sudo dpkg -i ov51x-jpeg-source_1.5.7-1_all.deb
$ mkdir modass
$ module-assistant --userdir="(workingdir)/modass" build ov51x-jpeg
$ ls modass
ov51x-jpeg-modules-2.6.18-6-686_1.5.7-1+2.6.18.dfsg.1-18etch1_i386.deb  var_cache_modass
usr_src
$ sudo dpkg -i modass/ov51x-jpeg-modules-2.6.18-6-686_1.5.7-1+2.6.18.dfsg.1-18etch1_i386.deb

Ubuntu 8.04 amd64 でのインストール

やりかたはDebianとほとんど同じ。最新のソースパッケージをダウンロードし、module-assistantを使ってモジュールパッケージを作成する。linux-kernel-headersなど必要なパッケージは事前に適宜インストールしておくこと。

$ sudo aptitude install debhelper module-assistant fakeroot
$ mkdir workdir
$ cd workdir
$ wget http://ubuntutym.u-toyama.ac.jp/ubuntu/pool/universe/o/ov51x-jpeg/ov51x-jpeg-source_1.5.7-1_all.deb 
$ sudo dpkg -i ov51x-jpeg-source_1.5.7-1_all.deb
$ mkdir modass
$ module-assistant --userdir="(workingdir)/modass" build ov51x-jpeg
$ ls modass
ov51x-jpeg-modules-2.6.24-16-generic_1.5.7-1+2.6.24-16.30_amd64.deb  var_cache_modass
usr_src
$ sudo dpkg -i modass/ov51x-jpeg-modules-2.6.24-16-generic_1.5.7-1+2.6.24-16.30_amd64.deb

最新版のオリジナルソースコードとDebian用パッチをダウンロードしてくる。

$ mkdir workdir
$ cd workdir
$ wget http://ring.maffin.ad.jp/pub/linux/debian/debian/pool/main/o/ov51x-jpeg/ov51x-jpeg_1.5.7.orig.tar.gz 
$ wget http://ring.maffin.ad.jp/pub/linux/debian/debian/pool/main/o/ov51x-jpeg/ov51x-jpeg_1.5.7-1.diff.gz 
$ tar zxvf ov51x-jpeg_1.5.7.orig.tar.gz
$ cd ov51x-jpeg-1.5.7
$ zcat ../ov51x-jpeg_1.5.7-1.diff.gz | patch -p1
$ chmod a+x debian/rules

まずはov51x-jpeg-source用debファイルを作成する。(というか、直接モジュールを作成するやりかたがわからない。)

$ dpkg-buildpackage -us -uc -rfakeroot
dpkg-buildpackage: source package is ov51x-jpeg
dpkg-buildpackage: source version is 1.5.7-1
dpkg-buildpackage: source changed by Romain Beauxis <toots@rastageeks.org>
dpkg-buildpackage: host architecture i386
dpkg-buildpackage: source version without epoch 1.5.7-1
 fakeroot debian/rules clean
dh_testdir
dh_testroot
rm -f build-arch-stamp build-indep-stamp configure-stamp build-stamp
dh_clean
 dpkg-source -b ov51x-jpeg-1.5.7
dpkg-source: building ov51x-jpeg using existing ov51x-jpeg_1.5.7.orig.tar.gz
dpkg-source: building ov51x-jpeg in ov51x-jpeg_1.5.7-1.diff.gz
dpkg-source: building ov51x-jpeg in ov51x-jpeg_1.5.7-1.dsc
 debian/rules build
dh_testdir
# Add here commands to configure the package.
touch configure-stamp
dh_testdir
touch build-stamp
 fakeroot debian/rules binary
dh_testdir
dh_testroot
dh_clean -k
dh_installdirs usr/src/modules/ov51x-jpeg/debian
# Copy only the driver source to the proper location
cp Makefile ChangeLog? ov51* ov7670.h debian/ov51x-jpeg-source/usr/src/modules/ov51x-jpeg
# Copy the needed debian/ pieces to the proper location
cp debian/*modules.in* \
                debian/ov51x-jpeg-source/usr/src/modules/ov51x-jpeg/debian
cp debian/rules debian/changelog debian/copyright \
                debian/compat debian/ov51x-jpeg-source/usr/src/modules/ov51x-jpeg/debian/
cd debian/ov51x-jpeg-source/usr/src && tar c modules | bzip2 -9 > ov51x-jpeg.tar.bz2 && rm -rf modules
dh_install
dh_testdir
dh_testroot
dh_installdocs
dh_installchangelogs ChangeLog?
dh_link
dh_compress
dh_fixperms
dh_installdeb
dh_gencontrol
dh_md5sums
dh_builddeb
dpkg-deb: `../ov51x-jpeg-source_1.5.7-1_all.deb' にパッケージ `ov51x-jpeg-source' を構築しています。
 dpkg-genchanges
dpkg-genchanges: including full source code in upload
dpkg-buildpackage: full upload (original source is included)

一つ上のディレクトリにov51x-jpeg-sourceパッケージが作成される。

$ ls ..
ov51x-jpeg-1.5.7                   ov51x-jpeg_1.5.7-1.dsc
ov51x-jpeg-source_1.5.7-1_all.deb  ov51x-jpeg_1.5.7-1_i386.changes
ov51x-jpeg_1.5.7-1.diff.gz         ov51x-jpeg_1.5.7.orig.tar.gz

作成されたソースパッケージをインストールして、modules-assistantを使ってモジュールパッケージを作成する。linux-kernel-headersなど必要なパッケージは事前に適宜インストールしておくこと。

$ sudo dpkg -i ../ov51x-jpeg-source_1.5.7-1_all.deb
$ ls /usr/src
linux-headers-2.6.18-6
linux-headers-2.6.18-6-686
linux-kbuild-2.6.18
modass
rpm
$ cd ..
$ mkdir modass
$ modules-assistant --userdir="(workingdir)/modass" build ov51x-jpeg
$ ls
modass
ov51x-jpeg-1.5.7
ov51x-jpeg-modules-2.6.18-6-686_1.5.7-1+2.6.18.dfsg.1-18etch1_i386.deb
ov51x-jpeg-source_1.5.7-1_all.deb
ov51x-jpeg_1.5.7-1.diff.gz
ov51x-jpeg_1.5.7-1.dsc
ov51x-jpeg_1.5.7-1_i386.changes
ov51x-jpeg_1.5.7.orig.tar.gz
usr_src
var_cache_modass
$ sudo dpkg -i ov51x-jpeg-modules-2.6.18-6-686_1.5.7-1+2.6.18.dfsg.1-18etch1_i386.deb

/etc/apt/sources.listに以下のエントリを追加。

# ov51x-jpeg repository
deb http://www.rastageeks.org/downloads/debian binary/
deb-src http://www.rastageeks.org/downloads/debian source/	←ソースコードが欲しい場合

module-assisantを用いて、モジュールのコンパイルとインストール

# apt-get update
# apt-get install ov51x-jpeg-source module-assistant
# module-assistant a-i ov51x-jpeg
# depmod -a
# modprobe ov51x-jpeg

LinkStation?/玄箱の場合

ソースからコンパイルする場合もmodule-assistantを用いる場合でも、環境変数ARCHにppcを設定しなければならない。また。野良コンパイルした独自kernelを使用している場合、module-assistantでコンパイルはできるがカーネルモジュールへの依存性を解消できないので、インストールに失敗する。そこで、module-assistantでモジュールをビルドだけして、dpkgで強制インストールする。

# export ARCH=ppc
# m-a build --non-inter ov51x-jpeg
# dpkg -i --force-depends ov51x-jpeg-modules-2.6.22.9-kurobox_1.5.2-1_powerpc.deb

xawtv, camEで使えた。

  • xawtv
    当然だが、実行にはX Window Systemの環境が必要。
    $ xawtv -hwscan
    $ xawtv
  • camE
    .camErcを自分の環境に合わせて設定すること。
    $ camE -s

Windowsで使う

DLinkのDCS-C310が同じチップを使っているので、この製品用のドライバをダウンロードした後、INFファイル(OV519.INF)を書き換えるか、あらかじめINFファイルを書きかえたドライバをダウンロードして、インストールする。

  • Eye Toy Logitech
    VID_05A9&PID_8519 → VID_054C&PID_0154
  • Eye Toy Namtai
    VID_05A9&PID_8519 → VID_054C&PID_0155

2007-09-14時点で、以下のファイルが検索で見つかった。

  • dsbc310_winxp2k98se_driver_110.zip
  • dsbc310_winxp2k98se_driver_110_Eyetoy_HACKED_SLEH-00031_INF_ONLY.zip
  • dsbc310_winxp2k98se_driver_110_Eyetoy_HACKED_SLEH-00030_INF_ONLY.zip
  • dsbc310_winxp2k98se_driver_110_Eyetoy_HACKED_SLEH-00030.zip
  • dsbc310_winxp2k98se_driver_110_Eyetoy_HACKED_SLEH-00031.zip
  • logitech_eyetoy_drivers.zip
  • namtai_eyetoy_drivers.zip

参考:

LEDの制御

Linux

ov51x(-jpeg)ドライバの標準IOCTLインタフェースにはV4L(Video For Linux)関係の処理しか定義されていない。しかし、/procインタフェースにov51x_control_ioctl関数が定義されており、これでLEDの状態取得やON/OFF制御ができる。

サンプルコード

ヘッダファイル(ov51x-jpeg-ioctl.h)

#include <linux/videodev.h>
#include <sys/ioctl.h>

/* --------- Definition of ioctl interface --------- */

#define OV511_INTERFACE_VER 101

/* LED options */
enum {
	LED_OFF,
	LED_ON,
	LED_AUTO,
};

/* Unsigned int option numbers */
enum {
	OV511_UIOPT_INVALID,
	OV511_UIOPT_POWER_FREQ,
	OV511_UIOPT_BFILTER,
	OV511_UIOPT_LED,
	OV511_UIOPT_DEBUG,
	OV511_UIOPT_COMPRESS,
	OV511_UIOPT_LED2,
};

struct ov511_uint_opt {
	int optnum;		/* Specific option number */
	unsigned int val;
};

/* ioctls */
#define OV511IOC_GINTVER  _IOR('v', BASE_VIDIOCPRIVATE + 0, int)
#define OV511IOC_GUSHORT _IOWR('v', BASE_VIDIOCPRIVATE + 1, \
                               struct ov511_ushort_opt)
#define OV511IOC_SUSHORT  _IOW('v', BASE_VIDIOCPRIVATE + 2, \
                               struct ov511_ushort_opt)
#define OV511IOC_GUINT   _IOWR('v', BASE_VIDIOCPRIVATE + 3, \
                               struct ov511_uint_opt)
#define OV511IOC_SUINT    _IOW('v', BASE_VIDIOCPRIVATE + 4, \
                               struct ov511_uint_opt)
#define OV511IOC_WI2C     _IOW('v', BASE_VIDIOCPRIVATE + 5, \
                               struct ov511_i2c_struct)
#define OV511IOC_RI2C    _IOWR('v', BASE_VIDIOCPRIVATE + 6, \
                               struct ov511_i2c_struct)
/* ------------- End IOCTL interface -------------- */

LED2の状態取得(get_status.c)

#include <fcntl.h>
#include <stdio.h>
#include "ov51x-jpeg-ioctl.h"

#define FAILURE 1
#define SUCCESS 0
#define DEVICE_NAME "/proc/ov51x-jpeg/0/control"

int main(void) {
	int fd;
	int res;
	struct ov511_uint_opt opt;

	fd = open(DEVICE_NAME, O_NONBLOCK);
	if ( fd < 0 ) {
		fprintf( stderr, "\n\tCould not open device file - Error : %i\n"
, fd );
		return FAILURE ;
	}
	opt.optnum = OV511_UIOPT_LED2;
	res = ioctl(fd,  OV511IOC_GUINT, &opt);
	if ( res == 0 ) {
		printf("opt.val = %d\n", opt.val);
		return SUCCESS;
	} else {
		return res;
	}
}

LED2の制御(set_led.c)

#include <fcntl.h>
#include <stdio.h>
#include "ov51x-jpeg-ioctl.h"

#define FAILURE 1
#define SUCCESS 0
#define DEVICE_NAME "/proc/ov51x-jpeg/0/control"

int main(void) {
	int fd;
	int res;
	struct ov511_uint_opt opt;

	fd = open(DEVICE_NAME, O_NONBLOCK);
	if ( fd < 0 ) {
		fprintf( stderr, "\n\tCould not open device file - Error : %i\n"
, fd );
		return FAILURE ;
	}
	opt.optnum = OV511_UIOPT_LED2;
	opt.val = LED_OFF;
	res = ioctl(fd,  OV511IOC_SUINT, &opt);
	if ( res == 0 ) {
		printf("opt.val = %d\n", opt.val);
		return SUCCESS;
	} else {
		return res;
	}
}

参考にしたサイト

経緯

ソースコード中にLED制御に関する記述あり。少なくとも、モジュールオプションにledというのを発見。EyeToyにはled2もあった。モジュールをロードする際に、以下のようにすればよい。

  • 赤色LEDをOFFにする
    # modprobe -r ov51x-jpeg
    # modprobe ov51x-jpeg led2=0
  • 赤色LEDをONにする
    # modprobe -r ov51x-jpeg
    # modprobe ov51x-jpeg led2=1

ov51x-1.65-1.12-mark.tar.bz2に含まれていたov51x.txt中の記述。

  NAME: led
  TYPE: integer (0-2)
  DEFAULT: 1 (Always on)
  DESC: Controls whether the LED (the little light) on the front of the camera
	is always off (0), always on (1), or only on when driver is open (2).
	This is not supported with the OV511, and might only work with certain
	cameras (ones that actually have the LED wired to the control pin, and
	not just hard-wired to be on all the time).

Windows

赤色LEDをoffにする

GadgetMadness :: View topic - Turn off that annoying RED light

OV519.INFファイルを以下のように書き換える。

Code:
HKR,%CamSet?%, TurnOnLed?, 1, 71,01,01	→	HKR,%CamSet?%, TurnOnLed?, 1, 71,00,01

赤外線センサにする

Oliver Jenkins >> Archive >>Converting a PS2 Eye-Toy to Infra-red

EyetoyOnComputer? Project

Windows, Mac と Linux上で EyeToy を動かそうというプロジェクト。Webページはここ。(2008-03-17 現在、Windows用のドライバしか上がっていないようだ。)

Mac版は、maccamのサイトが充実しており、デベロッパが十分集まらず、開発中止になった。


添付ファイル: fileset_led.c 398件 [詳細] fileget_status.c 909件 [詳細] fileov51x-jpeg-ioctl.h 385件 [詳細]

トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-12-25 (木) 17:13:03 (3040d)