PIC-ADK を Android 4.1 対応にする


Android 4.1 から ADK の protocol version が1から 2 にバージョンアップしました。
それに伴い PIC-ADK も protocol version 2 に対応にする必要があります。
変更するのは下記の2つのファイルです。

main.c

 
BOOL USB_ApplicationEventHandler( BYTE address, USB_EVENT event, void *data, DWORD size )
{
	...
	case EVENT_ANDROID_DETACH:
		device_attached = FALSE;

		// Reinit the device if a detach is detected
		USBInitialize(0);
		AndroidAppStart(&myDeviceInfo);
 
		return TRUE;
		break;

usb_host_android.c

 
static ANDROID_PROTOCOL_VERSION protocolVersions[] =
{
	{
		1,
		...
	},
	{
 		2,
		AndroidAppWrite_Pv1,
		AndroidAppIsWriteComplete_Pv1,
		AndroidAppRead_Pv1,
		AndroidAppIsReadComplete_Pv1,
		AndroidInitialize_Pv1,
		AndroidTasks_Pv1,
		AndroidAppEventHandler_Pv1,
		AndroidAppDataEventHandler_Pv1
	}
};

BOOL AndroidAppEventHandler( BYTE address, USB_EVENT event, void *data, DWORD size )
{
	...
	case EVENT_TRANSFER:
		...  
		if(j >= (sizeof(protocolVersions)/sizeof(ANDROID_PROTOCOL_VERSION)))
		{
			//If we don't support that protocol version, use the next best version

			//Override the protocol version specified by the device                       
			devices[i].protocol = protocolVersions[j-1].versionNumber;                       

			devices[i].state = READY;                       
			devices[i].protocolHandle = protocolVersions[j-1].init(devices[i].address,devices[i].flags, devices[i].clientDriverID);                   
		}

修正したファイルは code.google にあります。

参考
PIC24F ADK device not working on Android Jelly Bean (Nexus 7 Tablet)
ADK 1.0 devices fail to work with Jelly Bean, why?

関連
PIC24FJ64GB002のADK開発環境
ADK 2012


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です