#
# Functions for an USB device
#					Shuu Yamaguchi <shuu@dotAster.com>
# $Id: usb_functions,v 1.3 2004/03/03 22:21:21 shuu Exp shuu $

# print the requested value on sysfs
get_usb_field_sysfs() {
	case "$1" in
	vendor)
		FILE="idVendor"
		;;
	product)
		FILE="idProduct"
		;;
	version)
		FILE="bcdDevice"
		;;
	device_class)
		FILE="bDeviceClass"
		;;
	device_subclass)
		FILE="bDeviceSubClass"
		;;
	device_protocol)
		FILE="bDeviceProtocol"
		;;
	interface_class)
		FILE="bInterfaceClass"
		;;
	interface_subclass)
		FILE="bInterfaceSubClass"
		;;
	interface_protocol)
		FILE="bInterfaceProtocol"
		;;
	esac
	if [ -r ${SYSFS_DIR}/${DEVPATH}/${FILE} ];then
		cat ${SYSFS_DIR}/${DEVPATH}/${FILE}
	else
		echo ""
	fi
}

# print the requested value from an environment value
get_usb_field() {
	FIELD_FMT="%02d"
	case "$1" in
	vendor)
		FIELD=$PRODUCT
		FIELD_NUM=1
		FIELD_FMT="%04x"
		FIELD_X="0x"
		;;
	product)
		FIELD=$PRODUCT
		FIELD_NUM=2
		FIELD_FMT="%04x"
		FIELD_X="0x"
		;;
	version)
		FIELD=$PRODUCT
		FIELD_NUM=3
		FIELD_FMT="%04x"
		FIELD_X="0x"
		;;
	device_class)
		FIELD=$TYPE
		FIELD_NUM=1
		;;
	device_subclass)
		FIELD=$TYPE
		FIELD_NUM=2
		;;
	device_protocol)
		FIELD=$TYPE
		FIELD_NUM=3
		;;
	interface_class)
		FIELD=$INTERFACE
		FIELD_NUM=1
		;;
	interface_subclass)
		FIELD=$INTERFACE
		FIELD_NUM=2
		;;
	interface_protocol)
		FIELD=$INTERFACE
		FIELD_NUM=3
		;;
	esac
	TMP_VAL=`echo $FIELD | cut -f $FIELD_NUM -d '/'`
	printf $FIELD_FMT ${FIELD_X}${TMP_VAL}
}

# print the requested value from both SYSFS and an environment value
get_usb_val(){
	if [ -n "$DEVPATH" ];then	# SYSFS
		. ${MURASAKI_SCRIPT_DIR}/func_sysfs
		get_sysfs
		if [ -z "$SYSFS_DIR" ];then
			log "daemon.err" "murasaki:get_usb_val" "SYSFS is Not mounted."
			exit 1;
		fi
		get_usb_field_sysfs $1
	else
		get_usb_field $1
	fi
}

# USB_VENDOR: vendor(04x)
get_usb_vendor() {
	USB_VENDOR=`get_usb_val "vendor"`
}

# USB_PRODUCT: product(04x)
get_usb_product() {
	USB_PRODUCT=`get_usb_val "product"`
}

# USB_VERSION: version(04x in BCD)
get_usb_version() {
	USB_VERSION=`get_usb_val "version"`
}

# USB_DEVICE_CLASS: device class(02d)
get_device_class() {
	USB_DEVICE_CLASS=`get_usb_val "device_class"`
}

# USB_DEVICE_SUBCLASS: device subclass(02d)
get_device_subclass() {
	USB_DEVICE_SUBCLASS=`get_usb_val "device_subclass"`
}

# USB_DEVICE_PROTOCOL: device protocol(02d)
get_device_protocol() {
	USB_DEVICE_PROTOCOL=`get_usb_val "device_protocol"`
}

# USB_INTERFACE_CLASS: interface class(02d)
get_interface_class() {
	USB_INTERFACE_CLASS=`get_usb_val "interface_class"`
}

# USB_INTERFACE_SUBCLASS: interface subclass(02d)
get_interface_subclass() {
	USB_INTERFACE_SUBCLASS=`get_usb_val "interface_subclass"`
}

# USB_INTERFACE_PROTOCOL: interface protocol(02d)
get_interface_protocol() {
	USB_INTERFACE_PROTOCOL=`get_usb_val "interface_protocol"`
}
