ADKに対応していないAndroid端末にマイコンを繋いでADBインターフェースで通信できるMicroBridgeのmbed移植版。 mbedに繋いだサーボをAndroid端末から動かすサンプルプログラムです。 とりあえず暫定バージョンを公開します。 Dev Phone 1でのみ動作確認をしています。 USBのインターフェース番号を固定しているので他で繋がるかわかりません。

Dependencies:   TextLCD mbed

Revision:
0:dde3f92088d5
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PacketBuffer/PacketBuffer.cpp	Sun Aug 21 14:36:35 2011 +0000
@@ -0,0 +1,84 @@
+
+/** @file PacketBuffer.cpp
+ * @brief Ring Buffer
+ */
+
+#include "PacketBuffer.h"
+
+
+PacketBuffer::PacketBuffer(int num,int packet_size)
+{
+    max_num = num;
+    max_size = packet_size;
+
+    p_buf = new PacketBufInf[num];
+        
+    for(int i = 0 ; i < num ; i++)
+    {
+        p_buf[i].buf = new char[packet_size];
+        p_buf[i].size = 0;
+    }
+    addr_w = 0;
+    addr_r = 0;
+}
+
+PacketBuffer::~PacketBuffer()
+{
+    
+    for(int i = 0 ; i < max_num ; i++)
+    {
+        delete [] p_buf[i].buf;
+    }
+    delete [] p_buf;
+}
+
+int PacketBuffer::PutPacket(char *packet, int len)
+{
+    int next;
+    
+    if(max_size < len) return(-1);
+     
+    next = (addr_w + 1) % max_num;
+    
+    if( next == addr_r ) return(0);
+    
+    memcpy( p_buf[addr_w].buf , packet , len );
+    
+    p_buf[addr_w].size = len;
+    
+    addr_w = next;
+    
+    return(len);
+}
+
+int PacketBuffer::GetPacket(char *packet)
+{
+    int len;
+    
+    if( addr_w == addr_r ) return(0);
+    
+    len = p_buf[addr_r].size;
+    
+    memcpy( packet , p_buf[addr_r].buf , len );
+    
+    addr_r = (addr_r + 1) % max_num;
+    
+    return len;
+}
+
+int PacketBuffer::available () {
+    if (addr_w < addr_r) {
+        return addr_r - addr_w - 1;
+    } else {
+        return (max_num - addr_w) + addr_r - 1;
+    }
+}
+
+int PacketBuffer::use () {
+    return max_num - available() - 1;
+}
+
+void PacketBuffer::clear () {
+    addr_w = 0;
+    addr_r = 0;
+}