EC20 » History » Revision 2
Revision 1 (zecke, 09/26/2016 06:06 PM) → Revision 2/24 (zecke, 09/26/2016 06:07 PM)
h1. Wiki
Switching on adb (or fastboot or debug to NMEA console)
<pre>
AT+QLINUXCMD="/usr/bin/usb_uartdiag"
AT+QFASTBOOT
AT+QLINUXCMD="echo foo > /dev/ttyGS0"
</pre>
Changing qcserial.c to have adb and ttyUSBs.. Holger wants to upstream it after 32C3.
<pre>
diff --git a/drivers/usb/serial/qcserial.c b/drivers/usb/serial/qcserial.c
index 51da652..2d8d09e 100644
--- a/drivers/usb/serial/qcserial.c
+++ b/drivers/usb/serial/qcserial.c
@@ -176,8 +176,9 @@ static const struct usb_device_id id_table[] = {
};
MODULE_DEVICE_TABLE(usb, id_table);
-static int handle_quectel_ec20(struct device *dev, int ifnum)
+static int handle_quectel_ec20(struct usb_device *usbdev, int ifnum)
{
+ struct device *dev = &usbdev->dev;
int altsetting = 0;
/*
@@ -201,10 +202,12 @@ static int handle_quectel_ec20(struct device *dev, int ifnum)
dev_dbg(dev, "Quectel EC20 Modem port found\n");
break;
case 4:
- case 5:
/* Don't claim the QMI/net or debug interface */
altsetting = -1;
break;
+ case 5:
+ usb_set_interface(usbdev, ifnum, 0);
+ altsetting = -1;
}
return altsetting;
@@ -285,7 +288,7 @@ static int qcprobe(struct usb_serial *serial, const struct usb_device_id *id)
case QCSERIAL_G2K:
/* handle non-standard layouts */
if ((nintf == 5 || nintf == 6) && id->idProduct == QUECTEL_EC20_PID) {
- altsetting = handle_quectel_ec20(dev, ifnum);
+ altsetting = handle_quectel_ec20(serial->dev, ifnum);
goto done;
}
</pre>
<pre>
Not working userspace code
#include <libusb.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
struct libusb_device_handle *devh;
int rc;
rc = libusb_init(NULL);
printf("%d\n", rc);
devh = libusb_open_device_with_vid_pid(NULL, 0x05c6, 0x9215);
if (!devh) {
abort();
}
rc = libusb_claim_interface(devh, 5);
printf("%d\n", rc);
//rc = libusb_detach_kernel_driver(devh, 5);
//printf("%d\n", rc);
rc = libusb_set_interface_alt_setting(devh, 5, 0);
printf("%d\n", rc); ====> currently prints -5 but is like the one above..
return EXIT_FAILURE;
}