Hello,
I am trying to write driver (but now not kernel module, only user mode) for
Motorola C380/C650 Mobile phone. After plug in in Linux (Kernel 2.6.10), it
works as ACM modem (cdc-acm module). I send "AT+MODE=8" AT command. Phone
change's Product id, so it became not ACM device. Here is output of lsusb -a:
-------------------------------------------------------
Bus 003 Device 003: ID 22b8:4901 Motorola PCS
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x22b8 Motorola PCS
idProduct 0x4901
bcdDevice 0.01
iManufacturer 1 Motorola Inc.
iProduct 2 Motorola Phone (C380)
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 43
bNumInterfaces 3
bConfigurationValue 1
iConfiguration 23 MCU Logging+test cmd+accy
bmAttributes 0xc0
Self Powered
MaxPower 20mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 5
bAlternateSetting 0
bNumEndpoints 0
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 1
bInterfaceProtocol 255
iInterface 11 Motorola Accessory
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 6
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 2
bInterfaceProtocol 255
iInterface 12 Motorola MCU Data Logger
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x84 EP 4 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 bytes 32 once
bInterval 0
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 8
bAlternateSetting 0
bNumEndpoints 0
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 3
bInterfaceProtocol 255
iInterface 13 Motorola Test Command
-------------------------------------------------------
I have some information about protocol. (I get it via UsbSnoop in M$). Windows
program use Interface Number 8 (Motorola Test Command), which has no
endpoints (except standart). So, it must use only CONTROL TRANSFER. Now i use
libusb and try to create user mode program. Here is one of packet (UsbSnoop):
--------------------------------------
00000002 11:02:45 >>>>>>> URB 18 going down...
00000003 11:02:45 -- URB_FUNCTION_VENDOR_INTERFACE:
00000004 11:02:45 TransferFlags = 00000002
(USBD_TRANSFER_DIRECTION_OUT, USBD_SHORT_TRANSFER_OK)
00000005 11:02:45 TransferBufferLength = 00000008
00000006 11:02:45 TransferBuffer = 81752ff0
00000007 11:02:45 TransferBufferMDL = 00000000
00000008 11:02:45
00000009 11:02:45 0000:
00000010 11:02:45 00
00000011 11:02:45 07
00000012 11:02:45 00
00000013 11:02:45 22
00000014 11:02:45 00
00000015 11:02:45 00
00000016 11:02:45 00
00000017 11:02:45 00
00000018 11:02:45
00000019 11:02:45 UrbLink = 00000000
00000020 11:02:45 RequestTypeReservedBits = 00
00000021 11:02:45 Request = 02
00000022 11:02:45 Value = 0000
00000023 11:02:45 Index = 0008
00000024 11:02:45
00000025 11:02:45 <<<<<<< URB 18 coming back...
00000026 11:02:45 -- URB_FUNCTION_CONTROL_TRANSFER:
00000027 11:02:45 PipeHandle = ffa86c00
00000028 11:02:45 TransferFlags = 0000000a
(USBD_TRANSFER_DIRECTION_OUT, USBD_SHORT_TRANSFER_OK)
00000029 11:02:45 TransferBufferLength = 00000008
00000030 11:02:45 TransferBuffer = 81752ff0
00000031 11:02:45 TransferBufferMDL = 817ac150
00000032 11:02:45 UrbLink = 00000000
00000033 11:02:45 SetupPacket :
00000034 11:02:45 41
00000035 11:02:45 02
00000036 11:02:45 00
00000037 11:02:45 00
00000038 11:02:45 08
00000039 11:02:45 00
00000040 11:02:45 08
00000041 11:02:45 00
00000042 11:02:45
00000043 11:02:45 UsbSnoop - IRP_MJ_INTERNAL_DEVICE_CONTROL,
IOCTL_INTERNAL_USB_SUBMIT_URB
00000044 11:02:45
-----------------------------------------
Have you any idea, how can i send same packet with libusb or another way.
I try to use usb_control_msg function:
int usb_control_msg(usb_dev_handle *dev, int requesttype, int request, int
value, int index, char *bytes, int size, int timeout);
requesttype is 00, request=0x02, value=0, index=0x8. bytes is array of {00 07
00 22 00 00 00 00}. But phone don't accept this packet. libusb says, that
pipe is broken.
Can i send this packet this way?
--
##################################################
Dmitry Nezhevenko (dion) <[EMAIL PROTECTED]>
GnuPG Key 0xB5BCA66C Sun Jan 30 02:38:08 2005
##################################################