/*
Simple USB driver for Linux
Copyright (C) 2006 Lily <bt@k5-n.com>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License version 2 as
published by the Free Software Foundation;
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
SOFTWARE IS DISCLAIMED.
*/
#include <linux/usb.h>
/*
* 定数とマクロ
*/
/* ドライバのバージョン */
#define VERSION "0.1"
/* このドライバがサポートするデバイスのベンダーIDとプロダクトID */
#define VENDOR_ID 0x0a12 /* TODO ドライバがサポートする機器に合わせて変更 */
#define PRODUCT_ID 0x0001 /* TODO ドライバがサポートする機器に合わせて変更 */
/*
* 関数宣言
*/
staticint simple_usb_probe(struct usb_interface *intf, conststruct usb_device_id *id);
staticvoid simple_usb_disconnect(struct usb_interface *intf);
staticint __init simple_usb_init(void);
staticvoid __exit simple_usb_exit(void);
/*
* データ定義
*/
/* このドライバを利用する機器のリスト */
staticstruct usb_device_id simple_usb_id_table[] = {
{ USB_DEVICE(VENDOR_ID, PRODUCT_ID) },
{ },
};
MODULE_DEVICE_TABLE (usb, simple_usb_id_table);
/* USBドライバ構造体 */
staticstruct usb_driver simple_usb_driver = {
.name = "simple_usb",
.probe = simple_usb_probe,
.disconnect = simple_usb_disconnect,
.id_table = simple_usb_id_table,
};
/*
* 関数定義
*/
/* デバイスが接続されるたびに呼び出される */
staticint simple_usb_probe(struct usb_interface *intf, conststruct usb_device_id *id)
{
info("Probed");
return0;
}
/* デバイスが取り外されるたびに呼び出される */
staticvoid simple_usb_disconnect(struct usb_interface *intf)
{
info("Disconnected");
}
/* ロードされた時にモジュールを初期化する */
staticint __init simple_usb_init(void)
{
int ret;
info("Simple USB Driver ver %s", VERSION);
ret = usb_register(&simple_usb_driver);
if (ret < 0) {
err("usb_register faild. Error Number = %d", ret);
}
return ret;
}
/* モジュールを削除する直前に呼ばれる */
staticvoid __exit simple_usb_exit(void)
{
usb_deregister(&simple_usb_driver);
info("Simple USB Driver deregistered");
}
/*
* ドライバ情報の登録
*/
/* 初期化関数、終了関数の登録 */
module_init(simple_usb_init);
module_exit(simple_usb_exit);
MODULE_AUTHOR("Lily <bt@k5-n.com>");
MODULE_DESCRIPTION("Simple USB driver ver " VERSION);
MODULE_VERSION(VERSION);
MODULE_LICENSE("GPL");
/home/lily/work/bluetooth/blacktooth/drivers/simple/simple_usb.c: Simple USB Driver ver 0.1
usbcore: registered new driver simple_usb
次にBluetooth USBアダプターを接続すると、以下がdmesgに追加されます。
usb 3-2: new full speed USB device using uhci_hcd and address 3
usb 3-2: configuration #1 chosen from 1 choice
/home/lily/work/bluetooth/blacktooth/drivers/simple/simple_usb.c: Probed
/home/lily/work/bluetooth/blacktooth/drivers/simple/simple_usb.c: Probed
さらにBluetooth USBアダプターを取り外すと、以下がdmesgに追加されます。
usb 3-2: USB disconnect, address 3
/home/lily/work/bluetooth/blacktooth/drivers/simple/simple_usb.c: Disconnected
/home/lily/work/bluetooth/blacktooth/drivers/simple/simple_usb.c: Disconnected
# rmmod simple_usb
でドライバモジュールを削除すると、以下がdmesgに追加されます。
usbcore: deregistering driver simple_usb
/home/lily/work/bluetooth/blacktooth/drivers/simple/simple_usb.c: Simple USB Driver deregistered