เพราะว่า ADB เป็นโปรโตคอลหนึ่งที่สามารถเข้าถึงตัวระบบของแอนดรอยด์ได้จึงต้องมีการป้องกันสำหรับ ADB ซึ่งเป็นที่มาของ Secure USB Debugging ซึ่งจะแสดงหมายเลข RSA ของเครื่องคอมพิวเตอร์ที่ต่อด้วยทุกครั้ง เพื่อให้ผู้ใช้ทราบและเลือกได้ว่าจะอนุญาตให้ใช้งาน ADB ได้หรือไม่
แต่สำหรับบอร์ด IOIO กลับเจอปัญหาเข้าไปเต็มที่เลยทีเดียว ทั้งนี้ก็เพราะว่าบอร์ด IOIO เป็นแค่บอร์ดไมโครคอนโทรลเลอร์ที่ไม่ได้มี RSA แบบคอมพิวเตอร์เพื่อให้อุปกรณ์แอนดรอยด์เช็คได้ ดังนั้นเวลาที่เชื่อมต่อสาย USB เข้ากับบอร์ด IOIO จึงไม่ทำงาน เกิดอาการไฟสถานะบนบอร์ด IOIO เกิดการติดค้างและไม่ทำงานจึงทำให้ต้องเปลี่ยนไปเชื่อมต่อผ่านบลูทูธแทน (ซึ่งสะดวกกว่านะ)
แต่สำหรับบอร์ด IOIO กลับเจอปัญหาเข้าไปเต็มที่เลยทีเดียว ทั้งนี้ก็เพราะว่าบอร์ด IOIO เป็นแค่บอร์ดไมโครคอนโทรลเลอร์ที่ไม่ได้มี RSA แบบคอมพิวเตอร์เพื่อให้อุปกรณ์แอนดรอยด์เช็คได้ ดังนั้นเวลาที่เชื่อมต่อสาย USB เข้ากับบอร์ด IOIO จึงไม่ทำงาน เกิดอาการไฟสถานะบนบอร์ด IOIO เกิดการติดค้างและไม่ทำงานจึงทำให้ต้องเปลี่ยนไปเชื่อมต่อผ่านบลูทูธแทน (ซึ่งสะดวกกว่านะ)
แต่ในบางกรณีก็อาจจะมีความจำเป็นต้องใช้งานผ่านสาย USB ทั้งนี้จะเป็นเรื่องของความเร็ว ความแม่นยำของการสั่งงานก็แล้วแต่
ในบทความนี้ก็จะมานำเสนอวิธีแก้ปัญหาดังกล่าวให้ได้รู้กันว่าบอร์ด IOIO ที่นอกจากจะเชื่อมต่อแบบ ADB และบลูทูธแล้ว ยังสามารถเชื่อมต่อในแบบ Open Accessory ได้อีกด้วย ซึ่งเป็นโปรโตคอลแบบหนึ่งที่มากับ Android 2.3.4 ขึ้นไปที่ยอมให้อุปกรณ์ภายนอกสามารถเชื่อมต่อผ่านสาย USB ได้ โดยเชื่อมต่อกันในระดับหนึ่งเท่านั้น ไม่ได้เข้าถึงระบบแบบ ADB
จากนั้นให้เลือกที่ Android > Android Application Project
ที่หน้านี้ก็กด Next ข้ามไปเลย
สำหรับหน้ากำหนดไอคอนก็จัดการตามใจชอบเลย
สำหรับการกำหนด Activity เริ่มต้น ให้ใช้เป็น Empty Activity
สำหรับชื่อ Activity กับ Layout เริ่มต้น ก็ตั้งตามใจชอบแล้วก็กดที่ Finish เพื่อเริ่มสร้างโปรเจคขึ้นมาได้เลย แต่ถ้าเป็นมือใหม่ ก็อิงตามชื่อเริ่มต้นไปก่อนก็ได้
คลิกขวาที่โฟลเดอร์โปรเจคแล้วเลือกที่ Properties
ที่ช่องซ้ายมือเลือก Android แล้วช่องขวามือเลื่อนลงมา กดปุ่ม Add..
สำหรับผู้ที่หลงเข้ามาอ่านที่ใช้งานบอร์ด IOIO บ่อยๆก็คงรู้อยู่แล้ว ว่าขั้นตอนนี้ก็คือการอิมพอร์ตไลบรารีของ IOIO ให้กับโปรเจคนั่นเอง ก็ให้ผู้ที่หลงเข้ามาอ่านทำการเพิ่มไลบรารีเข้าไปจนครบทั้งสามตัวเลย
จากนั้นให้คลิกขวาที่โฟลเดอร์ res แล้วเลือก New > Folder
ตั้งชื่อโฟลเดอร์ว่า xml โดยโฟลเดอร์นี้จะใช้สำหรับ Open Accessory
ดูให้ดีๆนะ โฟลเดอร์ xml ต้องอยู่ในโฟลเดอร์ res นะ
ทีนี้ให้คลิกขวาที่โฟลเดอร์ xml ต่อ แล้วเลือก New > File
ให้ตั้งชื่อไฟล์ว่า accessory_filter.xml
โดยที่ไฟล์ดังกล่าวนี้จะใช้สำหรับกำหนดให้แอปพลิเคชันใช้งาน Open Accessory ได้
ให้พิมพ์คำสั่งเพิ่มลงไปดังนี้
<?xml version="1.0" encoding="utf-8" ?>
<resources>
<usb-accessory model="IOIO" />
</resources>
เปิดไฟล์ AndroidManifest.xml ขึ้นมา
ให้เพิ่มโค๊ดที่เป็นข้อความสีแดงลงไปใน AndroidManifest.xml
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.inex.ioioopenaccessory"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="10"
android:targetSdkVersion="17" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.inex.ioioopenaccessory.Main"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name
="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" />
</intent-filter>
<meta-data
android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED"
android:resource="@xml/accessory_filter" />
</activity>
<uses-library
android:name="com.android.future.usb.accessory"
android:required="false" />
</application>
</manifest>
เรียบร้อยแล้วกับส่วนของการขอใช้งาน Open Accessory ต่อไปก็เป็นแค่โค๊ดสำหรับทดสอบการทำงานของบอร์ดก็จะเป็นปุ่มกดแล้วให้ไฟ LED บนบอร์ดติดดับนั่นแหละ ให้เปิดไฟล์ main.xml แล้ววาง Toggle Button ลงไป ตั้งชื่อว่า tb
main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".Main" >
<ToggleButton
android:id="@+id/tb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="ToggleButton" />
</RelativeLayout>
ทีนี้ก็เปิดไฟล์ Main.java ขึ้นมา
ให้แก้ไขคำสั่งให้เป็นตามนี้
Main.java
package com.inex.ioioopenaccessory;
import ioio.lib.api.DigitalOutput;
import ioio.lib.api.exception.ConnectionLostException;
import ioio.lib.util.BaseIOIOLooper;
import ioio.lib.util.IOIOLooper;
import ioio.lib.util.android.IOIOActivity;
import android.os.Bundle;
import android.widget.Toast;
import android.widget.ToggleButton;
public class Main extends IOIOActivity {
ToggleButton tb;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tb = (ToggleButton)findViewById(R.id.tb);
}
class Looper extends BaseIOIOLooper {
DigitalOutput dio;
protected void setup() throws ConnectionLostException {
dio = ioio_.openDigitalOutput(0);
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(getApplicationContext(),
"Connected!", Toast.LENGTH_SHORT).show();
}
});
}
public void loop() throws ConnectionLostException {
dio.write(!tb.isChecked());
}
}
protected IOIOLooper createIOIOLooper() {
return new Looper();
}
}
เมื่อแอปพลิเคชันเปิดขึ้นมาแล้วอย่าพึงรีบต่อกับบอร์ด IOIO ให้ไปที่ Settings เพื่อติ๊กช่อง USB debugging ออกก่อน เพราะถ้าเปิดอยู่ เวลาเชื่อมต่อกับบอร์ด IOIO ก็จะมองเป็น ADB ถ้าจะใช้งาน Open Accessory ก็ต้องปิด USB debugging ทุกครั้ง (เวลาต่อกับคอมเพื่อเขียนแอปฯต่อ ก็ต้องเปิด USB debugging ด้วย) สรุปสั้นๆคือต่อกับบอร์ด IOIO ให้ปิด ต่อกับคอมเพื่อเขียนแอปพลิเคชันให้เปิด
เมื่อกด OK แอปฯนั้นๆก็จะถูกเปิดขึ้นมาและเชื่อมต่อทันที ซึ่งต่างจากแบบ ADB ที่ต้องเปิดแอปพลิเคชันขึ้นมาเอง ไม่เหมือน Open Accessory ที่จะขึ้นหน้าต่างให้เลือกเลย
คำเตือน - ถ้าเปิดแอปพลิเคชันอยู่แล้ว ถ้าเชื่อมต่อกับบอร์ด แล้วเปิดแอปพลิเคชันในขณะที่ยังเปิดอยู่แล้ว จะเชื่อมต่อไม่ได้ ให้ทำการปิดหรือย่อแอปพลิเคชันก่อน แล้วเปิดขึ้นมาใหม่
เรียบร้อยแล้ว ทีนี้ก็หมดปัญหากับ Secure USB Debugging แล้วล่ะ ถึงแม้ว่าอาจจะดูยุ่งยากที่ต้องมานั่งเปิดปิด USB Debugging แต่การใช้ Open Accessory ก็มีข้อดีกว่า ADB อยู่บ้าง สำหรับผู้ที่หลงเข้ามาอ่านคนใดต้องการไฟล์ตัวอย่างสามารถดาวน์โหลดได้จาก IOIO - Open Accessory [Google Drive]