Sorry I forgot to tell you that I'm using USB Host shield (which depend on MAX3421E).
and I'm knowing about the USB stick it's a combo device contain Modem & CD & Card Reader devices
I have found that AT^U2DIAG=0 runs the USB Stick in the Modem Mode only
I used putty(an app like Hyperterminal) and sent AT^U2DIAG=0 so the USB Stick runs now in the Modem Mode only
As I explained earlier, I'm using Arduino Mega and trying to modify this example to get my modem work
Code: Select all
/* Arduino terminal for PL2303 USB to serial converter and DealeXtreme GPRS modem. */
/* USB support */
#include <avrpins.h>
#include <max3421e.h>
#include <usbhost.h>
#include <usb_ch9.h>
#include <Usb.h>
#include <usbhub.h>
#include <avr/pgmspace.h>
#include <address.h>
/* CDC support */
#include <cdcacm.h>
#include <cdcprolific.h>
/* Debug support */
#include <printhex.h>
#include <message.h>
#include <hexdump.h>
#include <parsetools.h>
class PLAsyncOper : public CDCAsyncOper
{
public:
virtual uint8_t OnInit(ACM *pacm);
};
uint8_t PLAsyncOper::OnInit(ACM *pacm)
{
uint8_t rcode;
// Set DTR = 1
rcode = pacm->SetControlLineState(1);
if (rcode)
{
ErrorMessage<uint8_t>(PSTR("SetControlLineState"), rcode);
return rcode;
}
LINE_CODING lc;
//lc.dwDTERate = 9600;
lc.dwDTERate = 115200;
lc.bCharFormat = 0;
lc.bParityType = 0;
lc.bDataBits = 8;
rcode = pacm->SetLineCoding(&lc);
if (rcode)
ErrorMessage<uint8_t>(PSTR("SetLineCoding"), rcode);
return rcode;
}
USB Usb;
//USBHub Hub(&Usb);
PLAsyncOper AsyncOper;
PL2303 Pl(&Usb, &AsyncOper);
void setup()
{
Serial.begin( 115200 );
Serial.println("Start");
if (Usb.Init() == -1)
Serial.println("OSCOKIRQ failed to assert");
delay( 200 );
}
void loop()
{
Usb.Task();
if( Usb.getUsbTaskState() == USB_STATE_RUNNING )
{
uint8_t rcode;
/* reading the keyboard */
if(Serial.available()) {
uint8_t data= Serial.read();
/* sending to the phone */
rcode = Pl.SndData(1, &data);
if (rcode)
ErrorMessage<uint8_t>(PSTR("SndData"), rcode);
}//if(Serial.available()...
/* reading the converter */
/* buffer size must be greater or equal to max.packet size */
/* it it set to 64 (largest possible max.packet size) here, can be tuned down
for particular endpoint */
uint8_t buf[64];
uint16_t rcvd = 64;
rcode = Pl.RcvData(&rcvd, buf);
if (rcode && rcode != hrNAK)
ErrorMessage<uint8_t>(PSTR("Ret"), rcode);
if( rcvd ) { //more than zero bytes received
for(uint16_t i=0; i < rcvd; i++ ) {
Serial.print((char)buf[i]); //printing on the screen
}
}//if( rcvd ...
}//if( Usb.getUsbTaskState() == USB_STATE_RUNNING..
}
I tried this code with these USB Modems list :
ZTE MF180
Huawei E303
Huawei E220
Huawei k3565
Huawei k3765
Huawei K3770
but unfortunately attempt didn't succeed
Reference files
https://github.com/felis/USB_Host_Shiel ... rminal.pde
https://github.com/felis/USB_Host_Shiel ... olific.cpp
https://github.com/felis/USB_Host_Shiel ... prolific.h
I think the problem is in the cdcprolific.h & cdcprolific.cpp If I could to edit a few data in them, I'm sure I will get my USB Modem work
I hope anyone guide me what I do to get it work
I have used an a USB Sniff program to get the initial details till the PC detect the modem
Code: Select all
1 in down n/a 0.000 GET_DESCRIPTOR_FROM_DEVICE
URB Header (length: 80)
SequenceNumber: 1
Function: 000b (GET_DESCRIPTOR_FROM_DEVICE)
1 in up n/a 0.000 GET_DESCRIPTOR_FROM_DEVICE 0x00000000
URB Header (length: 80)
SequenceNumber: 1
Function: 000b (GET_DESCRIPTOR_FROM_DEVICE)
2 in down n/a 0.000 GET_DESCRIPTOR_FROM_DEVICE
URB Header (length: 80)
SequenceNumber: 2
Function: 000b (GET_DESCRIPTOR_FROM_DEVICE)
2 in up n/a 0.000 GET_DESCRIPTOR_FROM_DEVICE 0x00000000
URB Header (length: 80)
SequenceNumber: 2
Function: 000b (GET_DESCRIPTOR_FROM_DEVICE)
3 in down n/a 0.000 GET_DESCRIPTOR_FROM_DEVICE
URB Header (length: 80)
SequenceNumber: 3
Function: 000b (GET_DESCRIPTOR_FROM_DEVICE)
3 in up n/a 0.000 GET_DESCRIPTOR_FROM_DEVICE 0x00000000
URB Header (length: 80)
SequenceNumber: 3
Function: 000b (GET_DESCRIPTOR_FROM_DEVICE)
4 ??? down n/a 0.000 SELECT_CONFIGURATION
URB Header (length: 100)
SequenceNumber: 4
Function: 0000 (SELECT_CONFIGURATION)
Configuration Descriptor:
bLength: 9 (0x09)
bDescriptorType: 2 (0x02)
wTotalLength: 39 (0x0027)
bNumInterfaces: 1 (0x01)
bConfigurationValue: 1 (0x01)
iConfiguration: 1 (0x01)
bmAttributes: 224 (0xe0)
0x80: Bus Powered
0x40: Self Powered
0x20: Remote Wakeup
BANNED: 250 (0xfa)
(in 2 mA units, therefore 500 mA power consumption)
Number of interfaces: 1
Interface[0]:
Length: 0x004c
InterfaceNumber: 0x02
AlternateSetting: 0x00
Class = 0x00
SubClass = 0x00
Protocol = 0x00
InterfaceHandle = 0x00000000
NumberOfPipes = 0x00000003
Pipe[0]:
MaximumPacketSize = 0x0000
EndpointAddress = 0x00
Interval = 0x00
PipeType = 0x00
UsbdPipeTypeControl
PipeHandle = 0x00000000
MaxTransferSize = 0x00001000
PipeFlags = 0x00
Pipe[1]:
MaximumPacketSize = 0x0000
EndpointAddress = 0x00
Interval = 0x00
PipeType = 0x00
UsbdPipeTypeControl
PipeHandle = 0x00000000
MaxTransferSize = 0x00001000
PipeFlags = 0x00
Pipe[2]:
MaximumPacketSize = 0x0000
EndpointAddress = 0x00
Interval = 0x00
PipeType = 0x00
UsbdPipeTypeControl
PipeHandle = 0x00000000
MaxTransferSize = 0x00001000
PipeFlags = 0x00
4 ??? up n/a 0.000 SELECT_CONFIGURATION 0x00000000
URB Header (length: 100)
SequenceNumber: 4
Function: 0000 (SELECT_CONFIGURATION)
Configuration Descriptor:
bLength: 9 (0x09)
bDescriptorType: 2 (0x02)
wTotalLength: 39 (0x0027)
bNumInterfaces: 1 (0x01)
bConfigurationValue: 1 (0x01)
iConfiguration: 1 (0x01)
bmAttributes: 224 (0xe0)
0x80: Bus Powered
0x40: Self Powered
0x20: Remote Wakeup
BANNED: 250 (0xfa)
(in 2 mA units, therefore 500 mA power consumption)
Number of interfaces: 1
Interface[0]:
Length: 0x004c
InterfaceNumber: 0x02
AlternateSetting: 0x00
Class = 0xff
SubClass = 0xff
Protocol = 0xff
InterfaceHandle = 0x85adc0a8
NumberOfPipes = 0x00000003
Pipe[0]:
MaximumPacketSize = 0x0040
EndpointAddress = 0x83
Interval = 0x05
PipeType = 0x03
UsbdPipeTypeInterrupt
PipeHandle = 0x85adc0c4
MaxTransferSize = 0x00001000
PipeFlags = 0x00
Pipe[1]:
MaximumPacketSize = 0x0200
EndpointAddress = 0x84
Interval = 0x20
PipeType = 0x02
UsbdPipeTypeBulk
PipeHandle = 0x85adc0e4
MaxTransferSize = 0x00001000
PipeFlags = 0x00
Pipe[2]:
MaximumPacketSize = 0x0200
EndpointAddress = 0x03
Interval = 0x20
PipeType = 0x02
UsbdPipeTypeBulk
PipeHandle = 0x85adc104
MaxTransferSize = 0x00001000
PipeFlags = 0x00
5 out down n/a 0.000 CLEAR_FEATURE_TO_DEVICE
URB Header (length: 80)
SequenceNumber: 5
Function: 0010 (CLEAR_FEATURE_TO_DEVICE)
5 out up n/a 0.000 CONTROL_TRANSFER - 0x00000000
URB Header (length: 80)
SequenceNumber: 5
Function: 0008 (CONTROL_TRANSFER)
PipeHandle: 854c8a90
SetupPacket:
0000: 00 01 01 00 00 00 00 00
bmRequestType: 00
DIR: Host-To-Device
TYPE: Standard
RECIPIENT: Device
bRequest: 01
CLEAR_FEATURE
No TransferBuffer
6 ??? down n/a 0.000 RESET_PIPE
URB Header (length: 24)
SequenceNumber: 6
Function: 001e (RESET_PIPE)
6 ??? up n/a 0.000 RESET_PIPE 0x00000000
URB Header (length: 24)
SequenceNumber: 6
Function: 001e (RESET_PIPE)
7 ??? down n/a 0.000 RESET_PIPE
URB Header (length: 24)
SequenceNumber: 7
Function: 001e (RESET_PIPE)
7 ??? up n/a 0.000 RESET_PIPE 0x00000000
URB Header (length: 24)
SequenceNumber: 7
Function: 001e (RESET_PIPE)