Android Project Combat (45): USB to Serial communication (Ch34xuartdriver)

Source: Internet
Author: User
Tags array to string

Requirements: USB interface to plug in a hardware, from the hardware to obtain data

For example : mobile phone USB plug-in hardware a,a through Bluetooth communication to obtain equipment A, B data, as a transit point (can do some data processing) to the data (device A, b generated) to the mobile phone program.

Device A can also be a sensor itself, generating data to be transmitted to the mobile phone program itself.

applies to: The program needs some sensor data, but the phone itself is not supported (or not available).

There is a problem with the Bluetooth connection (the manufacturer's Bluetooth underlying changes cause instability, can not connect multiple)

cons : Some phones do not support OTG, that is, unable to obtain data for USB interface connection hardware

---------------------------------------------------------Split Line--------------------------------------------------------------

This article takes ch34x chip as an example.

Official: http://www.wch.cn/download/CH341SER_ANDROID_ZIP.html

The official demo is the Eclipse Project, and you'll need to create a demo of Android Studio yourself

First, create an Android studio project

B. Place the Ch34xuartdriver.jar file in the directory: App-to-libs file

Right-click Jar Package

  

III. Create a new XML folder under the Res file, and tell the Device_filter.xml in the official demo to copy it in.

  

and add code to the Androidmanifest.xml file:

In an activity, the role is to indicate when the user inserts the device, will be prompted whether to open the program, and transferred to the specified activity ( This step is not necessary to operate, if you do not want the device to insert the pop-up prompt to open a program, do not do this step )

            <intent-filter>                <action android:name= "android.hardware.usb.action.USB_DEVICE_ATTACHED"/ >            </intent-filter>              android:resource= "@xml/device_filter"

Iv. methods provided by some JAR packages

   //turn on the device    Public voidOpendevice (Android.hardware.usb.UsbDevice usbdevice) {/*compiled code*/ }    //turn off the device     Public voidCloseDevice () {/*compiled code*/ }        //determine if the system supports USB HOST     Public BooleanUsbfeaturesupported () {/*compiled code*/ }        Public intResumeusblist () {/*compiled code*/ }     Public intResumeusbpermission () {/*compiled code*/ }    //determine if the device is connected (plugged into a USB port)     Public BooleanIsConnected () {/*compiled code*/ }       protectedAndroid.hardware.usb.UsbDevice Getusbdevice () {/*compiled code*/ }    //initialization of the serial device     Public BooleanUartinit () {/*compiled code*/ }        //Configure serial port baud rate, function description can refer to programming manual     Public BooleanSetconfig (intIbyteBbyteB1,byteB2,byteB3) {/*compiled code*/ }        //Read serial data     Public intReadData (byte[] Bytes,inti) {/*compiled code*/ }        //Write serial data     Public intWriteData (byte[] Bytes,inti) {/*compiled code*/ }    //Write serial data     Public intWriteData (byte[] Bytes,intIintI1) {/*compiled code*/}

V. Some of the pits encountered in practice (emphasis)

1, hardware engineer on the USB serial hardware data transmission processing, the length of this data can not be arbitrarily specified

The length of the pro-test data is 32 correct, and the program read () method accepts normal, i.e. 16, 32, 64 .... , if the length is 28, 34 this, then the program read () method reads the data is not normal.

2, write () The parameter of the method is byte[] array, that is, if the interface input is a string, you need to convert the string to byte[] array.

The method in the official demo is incorrect and is provided correctly as follows

/*** Convert string to byte[] array *@paramarg * String object to convert *@returnconverted Byte[] array*/    Private byte[] toByteArray2 (String Arg) {if(Arg! =NULL) {            /*1. First remove the string ", and then convert the string to a char array*/            Char[] NewArray =New Char[1000]; Char[] Array =Arg.tochararray (); intLength = 0;  for(inti = 0; i < Array.Length; i++) {                if(Array[i]! = ") {Newarray[length]=Array[i]; Length++; }} Newarray[length]= 0x0D; Newarray[length+ 1] = 0x0A; Length+ = 2; byte[] ByteArray =New byte[length];  for(inti = 0; i < length; i++) {Bytearray[i]= (byte) Newarray[i]; }            returnByteArray; }        return New byte[] {}; }
convert string to byte[] array

Similarly, there are several methods that you might use in your project practice:

 Public byte [] subbytes (byteintint  count) {        bytenewbyte [Count];         0, count);         return BS;    }
intercept a part of the byte[] array

    /*** Convert byte[] Array to string type *@paramarg * byte[] array required for conversion *@paramlength * required to convert array lengths *@returnstring formation after conversion*/    PrivateString tohexstring (byte[] Arg,intlength) {String result=NewString (); if(Arg! =NULL) {             for(inti = 0; i < length; i++) {                if(i==length-1) {result=result+(integer.tohexstring (arg[i)< 0? Arg[i] + 256:arg[i]). Length () = = 1? "0" + integer.tohexstring (Arg[i] < 0 Arg[i] + 256: Arg[i]): integer.tohexstring (Arg[i]< 0? Arg[i] + 256: Arg[i])) + ""; }Else{result=result+(integer.tohexstring (arg[i)< 0? Arg[i] + 256:arg[i]). Length () = = 1? "0" + integer.tohexstring (Arg[i] < 0 Arg[i] + 256: Arg[i]): integer.tohexstring (Arg[i]< 0? Arg[i] + 256: Arg[i])) + " "; }            }            returnresult; }        return""; }
Convert byte[] array to String type

3, about the USB port plug operation Monitoring, write dead in the jar package, if you want to customize, you need to modify the jar package source code

4, about the third step of the operation is not necessary, according to the needs of the decision whether to add

5. Not all phones support USB serial communication (OTG feature not supported)

6. The process is to turn on the device and configure the device, if you modify the configuration parameters, you can directly configure the device, do not need to do close--> Open > Config

Vi. Android Studio Demo Link

---------------------------------------------------------Split Line--------------------------------------------------------------

Bluetooth communication, USB serial communication, unity and Android communication issues, welcome to join the right QQ Group Consulting.

Android Project Combat (45): USB to Serial communication (Ch34xuartdriver)

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.