被不同的ADK库混淆了

时间:2013-02-05 21:13:26

标签: arduino adk

我正在尝试将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库共存。

但问题是网上所有已存在的草图都使用了旧草图,例如 ardinoADK-beta-001 中不存在 poweron() methd而你应该使用 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()函数?从Android设备收到数据应该存储在哪里?

0 个答案:

没有答案