IoTGateway/Features/Android/Module

From ESS-WIKI
Jump to: navigation, search

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 &

EWM-C109FT01E

pppd connect 'chat -v -s -t 10 "" "AT" "" "ATDT*99#" "CONNECT" ""' user username password password /dev/ttyUSB3 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 &
Sierra AirPrime MC8090 connecting.png
# ifconfig
Sierra AirPrime MC8090 ifconfig.png
# ping -c5 8.8.8.8
Sierra AirPrime MC8090 ping.png

Telit HE910-D

The following operations are performed with UBC-221 using U221LBV1050.

  • practical test on target board
# modprobe cdc-acm
Telit HE910-D modprobe.png
# dmesg | grep ttyACM
Telit HE910-D dmesg.png
# 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
RTENOTITLE RTENOTITLE

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

Telit LE910C4

For Yocto 2.5 and later

We have to enable CONFIG_USB_SERIAL_OPTION=y

Using command as below to connect

Setup APN

echo -e "AT+CGDCONT=2,\"ip\",\"internet\"\r\n" >/dev/ttyUSB2

Connect

pppd connect 'chat -v -s -t 10 "" "AT" "" "ATDT*99***2#" "CONNECT" ""' user username password password /dev/ttyUSB2 460800 nodetach crtscts debug usepeerdns defaultroute &

For EPC-R7200

File:Telit_le910c4_on_EPCR7200.pdf

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 &

Sierra AirPrime MC7430

Modify drivers/usb/serial/option.c

--- a/drivers/usb/serial/option.c
+++ b/drivers/usb/serial/option.c
@@ -1123,6 +1123,8 @@ static const struct usb_device_id option_ids[] = {
        { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x9000)}, /* SIMCom SIM5218 */
        { USB_DEVICE_INTERFACE_CLASS(SIERRA_VENDOR_ID, 0x68c0, 0xff),
          .driver_info = (kernel_ulong_t)&sierra_mc73xx_blacklist }, /* MC73xx */
+       { USB_DEVICE_INTERFACE_CLASS(SIERRA_VENDOR_ID, 0x9071, 0xff),
+         .driver_info = (kernel_ulong_t)&sierra_mc73xx_blacklist }, /* MC7430 */
        { USB_DEVICE_INTERFACE_CLASS(SIERRA_VENDOR_ID, 0x9041, 0xff),
          .driver_info = (kernel_ulong_File:4G_rndis.zip)&sierra_mc73xx_blacklist }, /* MC7305/MC7355 */
        { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6001) },

Sierra AirPrime EM7565

Verified on RSB-4760 (Qualcomm db410c)

Drivers in Yocto 2.1

Script for data connection

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)


  • load drivers
# rmmod usbserial
# modprobe rndis_host
# modprobe usbserial vendor=0x1ECB product=0x0205

e.g. put the 3 lines to /etc/rc.local
AMM561KT load drivers.png

  • list usb devices
# lsusb
# ll /dev/ttyUSB[012]

AMM561KT list usb devices.png

Fibocom NL668

EWM-C145

EWM-C117

Default RNDIS Mode

Use the script to connect to internet

File:4G_rndis.zip

Change to normal mode

File:module-ewm-117-for-ppp.zip

Connect to internet by pppd demand

File:4G_ppp.zip

Reference from AE Phill

File:RSB-4220_EWM-C117.docx

:File:EWM-C117 RSB-4760 internaluse.docx

Made from RD

File:EWM-C117_for_RK3399_ds100.docx

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

RTENOTITLE

WiFi

EWM-W142F01E

For Yocto 1.8 

Check wlan0 existing or not
           # ifconfig wlan0 up

  1. ifconfig
    # wpa_passphrase "ASUS_RISC_SOM_ESBC_2.4"  1qaz2wsx > /tmp/wpa.conf
    #wpa_supplicant -BDwext -iwlan0 -c/tmp/wpa.conf
    # cat /tmp/wpa.conf
    # udhcpc -b -i wlan0

Check wlan0 working or not
# ifconfig wlan0
# ping 8.8.8.8

For Debian 8 

           # apt-get update 
           # apt-get install network-manager-gnome

Check wlan0 existing or not
           # ifconfig wlan0 up

  1. ifconfig
    # wpa_passphrase "ASUS_RISC_SOM_ESBC_2.4"  1qaz2wsx > /tmp/wpa.conf
    #wpa_supplicant -BDwext -iwlan0 -c/tmp/wpa.conf
    # cat /tmp/wpa.conf
    # dhclient wlan0

EWM-W151H01E

EWM-W155H01E

EWM-W157H01E

Support WiFi and BT function on Yocto 2.1.

For Yocto 2.1 

Check wlan0 existing or not
           # ifconfig wlan0 up

  1. ifconfig
    # wpa_passphrase "ASUS_RISC_SOM_ESBC_2.4"  1qaz2wsx > /tmp/wpa.conf
    #wpa_supplicant -BDwext -iwlan0 -c/tmp/wpa.conf
    # cat /tmp/wpa.conf
    # udhcpc -b -i wlan0

Check wlan0 working or not
# ifconfig wlan0
# ping 8.8.8.8

EWM-W163M201E

EWM-W163M201E_porting_guide_on_DS100.docx

EWM-W168

EWM-W168_rsb4411.pptx

EWM-W170

EWM-W170_WIFI_porting_guide_for_imx6.docx

EWM-W170_WIFI_Sparklan_Driver

EWM-W188

File:EWM-W188_Bluetooth_porting_guide_for_ds100-debian.docx

File:EWM-W188_RSB4710_Android10.docx

AIW-W154

Yocto 3.0

AIW154_WIFIBT_v2.docx

Yocto 3.3

AIW154_WIFIBT_kernel_5_10.docx

AIW-W165

The AIW-W165 (Support OS is Yocto3.3)

WIFI Test Command

  1. modprobe moal mod_para=nxp/wifi_mod_para.conf
  1. iwconfig
  1. ifconfig mlan0 up
  2. wpa_passphrase "XX" yy >/tmp/wpa.conf (XX is WIFI ESSID , yy is password)
  3. ifconfig eth0 down
  4. wpa_supplicant -d -B -imlan0 -c /tmp/wpa.conf -Dnl80211
  5. udhcpc -imlan0

BT Test Command

  1. modprobe moal mod_para=nxp/wifi_mod_para.conf
  2. hciattach /dev/ttymxc2 any 3000000 3000000 flow
  3. hciconfig hci0 up
  4. hcitool scan

TOUCH

EETI_eGTouch

File:EETI_Touch_porting_guide_on_Android_10.docx

USB

EMIO-200U3

Set CONFIG_USB_XHCI_HCD=y in kernel config

ADC

USB-4702/4704 & USB-4761

Driver Confirmation

1. Make sure the DAQ device driver has been loaded by the kernel

lsmod_4704_1.png

2. If login by normal user (not root user), you have to place drivers\driver_base\src\lnx_ko\71-bionic-daq.rules

to /etc/udev/rules.d/ in Root File System

3. Make sure the DAQ driver has been successfully matched with the DAQ device.

daq_device.png

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 the package for specific platform, e.g. arm64-oecore or TI am335x.

ZIP for arm64-oecore

ZIP for Poky2.1.1

ZIP for TI am335x

These libraries in ./libs are only for specific platform and have to be copied into /usr/lib/ in Root File System

If you want to support on other platforms (ex: i.MX6 ...), please contact with Advantech.

  • [RSB-4760]

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
  • [RSB-4220 / UBC-330]

Compile sample code

[your cross-compiler path]/sysroots/x86_64-arago-linux/usr/bin/arm-linux-gnueabihf-g++ -o $Example_NAME $Example_NAME.cpp \
--sysroot=[your cross-compiler path]/sysroots/armv7ahf-neon-linux-gnueabi/ \
-I [your cross-compiler path]/sysroots/armv7ahf-neon-linux-gnueabi/usr/include/ \
-L [your cross-compiler path]/sysroots/armv7ahf-neon-linux-gnueabi/usr/lib/ \
-L [USB-4704 driver source path]/libs \
-lbiodaq

Example List

For simple test, you can use AO_StaticAO to see if the output voltage of AO0 changes automatically.

  • For USB-4702/4704
usb-4704_1.png
  • For USB-4761
usb-4761_1.png