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