IoTGateway/Features/Linux/Module
3G
EWM-C106FT01E
pppd connect 'chat -v -s -t 10 "" "AT" "" "ATDT*99#" "CONNECT" ""' user username password password /dev/ttyUSB2 460800 nodetach crtscts debug usepeerdns defaultroute &
Sierra AirPrime MC8090
The following operations are performed with UBC-221 using U221LBV1050.
- linux kernel config
- set the following lines to meta-advantech/recipes-kernel/linux/linux-yocto-clanton/advantech.cfg
CONFIG_USB_SERIAL_FTDI_SIO=m
CONFIG_USB_SERIAL_SIERRAWIRELESS=m
- add the following line to meta-advantech/recipes-kernel/advantech-init/files/advantech.conf
sierra
- execute the following command
$ bitbake advantech-init
- rebuild the kernel
$ bitbake linux-yocto-clanton
- rebuild the full image
$ bitbake image-full
- practical test on target board
# pppd connect 'chat -v -s -t 10 "" "AT" "" "ATDT*99#" "CONNECT" ""' \
user username password password /dev/ttyUSB3 460800 nodetach crtscts debug usepeerdns defaultroute &
# ifconfig
# ping -c5 8.8.8.8
Telit HE910-D
The following operations are performed with UBC-221 using U221LBV1050.
- practical test on target board
# modprobe cdc-acm
# dmesg | grep ttyACM
# pppd connect 'chat -v -s -t 10 "" "AT" "" "ATDT*99#" "CONNECT" ""' \
user username password password /dev/ttyACM0 460800 nodetach crtscts debug usepeerdns defaultroute &
# pinc -c5 8.8.8.8
Quectel UC20
3G module Porting (QUECTEL UC20)
In linux kernel
1. You need to add the mechanism for processing zero packets during transmission of “usb_wwan.c” file under “[KERNEL]/drivers/usb/serial”.
You need to add the following statements to the “usb_wwan_write” and “usb_wwan_setup_urb” function, as shown below:
… #include "usb-wwan.h" + #ifdef CONFIG_ARCH_ADVANTECH + #define HW_bcdUSB 0x0110 + #define HUAWEI_VENDOR_ID 0x12d1 + #endif void usb_wwan_dtr_rts(struct usb_serial_port *port, int on) … … … int usb_wwan_write(struct tty_struct *tty, struct usb_serial_port *port, const unsigned char *buf, int count) { … … int left, todo; struct urb *this_urb = NULL; /* spurious */ + #ifdef CONFIG_ARCH_ADVANTECH + struct usb_host_endpoint *ep=NULL; + #endif int err; unsigned long flags; … … … /* send the data */ memcpy(this_urb->transfer_buffer, buf, todo); this_urb->transfer_buffer_length = todo; + #ifdef CONFIG_ARCH_ADVANTECH + if (IS_RSB_6410) + { + if((HUAWEI_VENDOR_ID == port->serial->dev->descriptor.idVendor) + && (HW_bcdUSB != port->serial->dev->descriptor.bcdUSB)){ + ep = usb_pipe_endpoint(this_urb->dev, this_urb->pipe); + if(ep && (0 != this_urb->transfer_buffer_length) + && (0 == this_urb->transfer_buffer_length % + ep->desc.wMaxPacketSize)){ + this_urb->transfer_flags |= URB_ZERO_PACKET; + } + } + } + #endif spin_lock_irqsave(&intfdata->susp_lock, flags); if (intfdata->suspended) { usb_anchor_urb(this_urb, &portdata->delayed); … … … } … … … /* Helper functions used by usb_wwan_setup_urbs */ static struct urb *usb_wwan_setup_urb(struct usb_serial_port *port, int endpoint, int dir, void *ctx, char *buf, int len, void (*callback) (struct urb *)) { struct usb_serial *serial = port->serial; struct urb *urb; urb = usb_alloc_urb(0, GFP_KERNEL); /* No ISO */ if (!urb) return NULL; /* Fill URB using supplied data. */ usb_fill_bulk_urb(urb, serial->dev, usb_sndbulkpipe(serial->dev, endpoint) | dir, buf, len, callback, ctx); + #ifdef CONFIG_ARCH_ADVANTECH + if (dir == USB_DIR_OUT) { + struct usb_device_descriptor *desc = &serial->dev->descriptor; + if (desc->idVendor == 0x05C6 && (desc->idProduct == 0x9003 || desc->idProduct == + 0x9090 || desc->idProduct == 0x9215)) + urb->transfer_flags |= URB_ZERO_PACKET; + } + #endif return urb; }
2. Add UC15/UC20/EC20's Vendor ID and Product ID in "option_ids[]" in the file "drivers/usb/serial/option.c":
static const struct usb_device_id option_ids[] = { … + { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x9090) }, //for Quectel UC15 + { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x9003) }, //for Quectel UC20 + { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x9215) }, //for Quectel EC20 … }
4G
Sierra AirPrime MC7304
- For Yocto 1.8
We have to enable CONFIG_USB_SERIAL_QUALCOMM=m
- For Yocto 2.0 and later
We have to enable CONFIG_USB_SERIAL_OPTION=y
- Using command as below to connect
pppd connect 'chat -v -s -t 10 "" "AT" "" "ATDT*99#" "CONNECT" ""' user username password password /dev/ttyUSB2 460800 nodetach crtscts debug usepeerdns defaultroute &
AM Telecom AMM561KT
The following operations are performed with UBC-222(U222LBV2011).
- linux kernel config
- Device Drivers --->
- [*] USB support --->
- <M> Support for Host-side USB
- [*] Network device support --->
- USB Network Adapters --->
- <M> Multi-purpose USB Networking Framework
- <M> Host for RNDIS and ActiveSync devices (EXPERIMENTAL)
- USB Network Adapters --->
- [*] USB support --->
- Device Drivers --->
- load drivers
# rmmod usbserial # modprobe rndis_host # modprobe usbserial vendor=0x1ECB product=0x0205
- list usb devices
Bluetooth
EWM-W155H01E
Please refer to Bluetooth Testing Guide for Quark Platform for all operations performed using UBC-222 with U222LBV2011.
AW-CB178NF
Porting AzureWave Wifi BT module
1. Add compile option ins arch/arm/configs/imx_v7_adv_deconfig
… CONFIG_BT_HIDP=y CONFIG_BT_HCIBTUSB=y CONFIG_BT_HCIVHCI=y + CONFIG_BT_MRVL=m + CONFIG_BT_MRVL_SDIO=m CONFIG_BT_ATH3K=m CONFIG_CFG80211=m CONFIG_CFG80211_WEXT=y … … CONFIG_USB_NET_RNDIS_HOST=y CONFIG_USB_NET_CDC_SUBSET=m CONFIG_USB_NET_ZAURUS=m + CONFIG_LIBERTAS_THINFIRM=m CONFIG_ATH_CARDS=m CONFIG_ATH9K=m CONFIG_ATH9K_LEGACY_RATE_CONTROL=y … CONFIG_RT2800USB_RT55XX=y CONFIG_RT2800USB_UNKNOWN=y CONFIG_RTL8188EE=m + CONFIG_MWIFIEX=m + CONFIG_MWIFIEX_SDIO=m CONFIG_INPUT_POLLDEV=y #CONFIG_INPUT_MOUSEDEV_PSAUX is not set CONFIG_INPUT_EVDEV=y …
2. Modify in arch/arm/boot/dts/imx6qdl-advantech.dtsi
... usdhc1 { pinctrl_usdhc1_1: usdhc1grp-1 { fsl,pins = < MX6QDL_PAD_SD1_CMD__SD1_CMD 0x17059 MX6QDL_PAD_SD1_CLK__SD1_CLK 0x10059 MX6QDL_PAD_SD1_DAT0__SD1_DATA0 0x17059 MX6QDL_PAD_SD1_DAT1__SD1_DATA1 0x17059 MX6QDL_PAD_SD1_DAT2__SD1_DATA2 0x17059 MX6QDL_PAD_SD1_DAT3__SD1_DATA3 0x17059 >; }; }; ...
3. add in arch/arm/boot/dts/imx6q-[board].dts
... &iomuxc { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_hog_1 &pinctrl_hog_2>; hog { pinctrl_hog_1: hoggrp-1 { fsl,pins = < MX6QDL_PAD_SD3_DAT4__GPIO7_IO01 0x80000000 /* SD3_CD */ MX6QDL_PAD_SD3_DAT5__GPIO7_IO00 0x80000000 /* SD3_WP */ MX6QDL_PAD_SD2_CMD__GPIO1_IO11 0x80000000 /* SDIO RST */ MX6QDL_PAD_SD2_CLK__GPIO1_IO10 0x80000000 /* SDIO WAKE */ + MX6QDL_PAD_NANDF_D7__GPIO2_IO07 0x80000000 /* M.2 WLAN OFF */ + MX6QDL_PAD_NANDF_D1__GPIO2_IO01 0x80000000 /* M.2 BT OFF */ MX6QDL_PAD_GPIO_0__CCM_CLKO1 0x130b0 /* AUDIO CLK */ >; }; ...
Testing Operations
hciconfig hci0 up hcitool dev | grep hci hcitool scan
WiFi
EWM-W142F01E
EWM-W151H01E
EWM-W155H01E
USB
EMIO-200U3
Set CONFIG_USB_XHCI_HCD=y in kernel config
ADC
USB-4702/4704
Driver Confirmation
Make sure the DAQ device driver has been loaded by the kernel
Make sure the DAQ driver has been successfully matched with the DAQ device.
Change Device Description
To check deviceDescription
cat /sys/class/daq/daq0/desc
and change deviceDescription of your device in sample codes
example:
#define deviceDescription L"USB-4704,BID#0"
Compile sample code
First, download this package for arm64-oecore
Linux_driver_source_3.2.10.6_arm64-oecore.zip
These libraries in ./libs are only for arm64-oecore cross-compiler and have to be copyed into /usr/lib/ in Root File System
If you want to use these libraries on other platforms (ex: I.MX6 ...), please contact with Advantech.
Set-up arm64-oecore environment
source [your cross-compiler path]/environment-setup-aarch64-oe-linux
Compile sample code
[your cross-compiler path]/sysroots/x86_64-oesdk-linux/usr/bin/aarch64-oe-linux/aarch64-oe-linux-g++ -o $Example_NAME $Example_NAME.cpp \ --sysroot=[your cross-compiler path]/sysroots/aarch64-oe-linux/ \ -I [your cross-compiler path]/sysroots/aarch64-oe-linux/usr/include/ \ -L [your cross-compiler path]/sysroots/aarch64-oe-linux/usr/lib/ \ -L [USB-4704 driver source path]/libs \ -lbiodaq