我正在尝试设置 Arduino IDE v 1.0.1 以与 Ardunio mega ADK 一起使用,我设置了所有内容,但问题是周围有很多 adk 库,特别是有 adk_release_20120606可以从 android 开发者网站 http://developer.android下载.com/tools/adk/adk.html 并且有ArduinoADK-beta-001可以从 ardunio labs http://labs.arduino.cc/ADK/AccessoryMode下载。
根据labs.ardunio.cc ArduinoADK-beta-001是较新的版本。
如果您安装了以下任何 Arduino 库,则需要将其删除: AndroidAccessory USB_Host_Shield(版本 1.x 和 2.x) 新的 UsbHost 库不能与旧的 AndroidAccessory 库或任何版本的 USB_Host_Shield 库共存.
但问题是网络上所有现有的草图都使用旧的草图,例如ArduinoADK-beta-001中不存在 poweron()方法,而是应该使用begin()。
另一件事是旧库中的 read() 方法,它可以接受 3 个参数,但在较新的库中,它没有参数。
我已经在两个库中打开了AndroidAccessory.h,我发现在 ArduinoADK-beta-00中包含旧版本中的所有方法,但它们被设置为私有,因此无法使用,这是头文件中的内容:
#ifndef __AndroidAccessory_h__
#define __AndroidAccessory_h__
#include "UsbHost.h"
#include "Arduino.h"
#include "Stream.h"
#define DATA_BUFFER_SIZE 64
class AndroidAccessory : public Stream {
private:
const char *manufacturer;
const char *model;
const char *description;
const char *version;
const char *uri;
const char *serial;
MAX3421E max;
UsbHost usb;
bool connected;
uint8_t in;
uint8_t out;
EP_RECORD epRecord[8];
// TODO: Reuse `descBuff` after connection and/or stream descriptor?
uint8_t descBuff[256];
byte dataBuff[DATA_BUFFER_SIZE];
unsigned int numBytesInDataBuff;
unsigned int nextByteInDataBuffOffset;
bool isAccessoryDevice(USB_DEVICE_DESCRIPTOR *desc)
{
return desc->idVendor == 0x18d1 &&
(desc->idProduct == 0x2D00 || desc->idProduct == 0x2D01);
}
int getProtocol(byte addr);
void sendString(byte addr, int index, const char *str);
bool switchDevice(byte addr);
bool findEndpoints(byte addr, EP_RECORD *inEp, EP_RECORD *outEp);
bool configureAndroid(void);
bool dataBufferIsEmpty();
void refillDataBuffer();
// Private because it bypasses the data buffer.
int read(void *buff, int len, unsigned int nakLimit = USB_NAK_NOWAIT);
void powerOn(void);
public:
AndroidAccessory(const char* manufacturer,
const char* model,
const char* description = "An Arduino-based Android accessory",
const char* version = "1.0",6
const char* uri = "http://labs.arduino.cc/ADK/Index",
const char* serial = "00000000");
boolean begin(void);
void refresh(void);
bool isConnected(void);
virtual size_t write(uint8_t *buff, size_t len);
virtual int available(void);
virtual int peek(void);
virtual int read(void);
virtual void flush();
virtual size_t write(uint8_t);
using Print::write; // pull in write(str) and write(buf, size) from Print
};
#endif /* __AndroidAccessory_h__ */
因此我们可以看到该poweron()
方法仍然存在,但它是私有的,并且read()
在私有部分中声明了两次,如下所示:
int read(void *buff, int len, unsigned int nakLimit = USB_NAK_NOWAIT);
另一个在公共部分是这样的
virtual int read(void);
那么问题来了,我该如何使用该read()
功能?以及从安卓设备接收到的数据应该存储在哪里?