ADKに対応していないAndroid端末にマイコンを繋いでADBインターフェースで通信できるMicroBridgeのmbed移植版。 mbedに繋いだサーボをAndroid端末から動かすサンプルプログラムです。 とりあえず暫定バージョンを公開します。 Dev Phone 1でのみ動作確認をしています。 USBのインターフェース番号を固定しているので他で繋がるかわかりません。
PacketBuffer/PacketBuffer.cpp@0:dde3f92088d5, 2011-08-21 (annotated)
- Committer:
- jksoft
- Date:
- Sun Aug 21 14:36:35 2011 +0000
- Revision:
- 0:dde3f92088d5
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jksoft | 0:dde3f92088d5 | 1 | |
jksoft | 0:dde3f92088d5 | 2 | /** @file PacketBuffer.cpp |
jksoft | 0:dde3f92088d5 | 3 | * @brief Ring Buffer |
jksoft | 0:dde3f92088d5 | 4 | */ |
jksoft | 0:dde3f92088d5 | 5 | |
jksoft | 0:dde3f92088d5 | 6 | #include "PacketBuffer.h" |
jksoft | 0:dde3f92088d5 | 7 | |
jksoft | 0:dde3f92088d5 | 8 | |
jksoft | 0:dde3f92088d5 | 9 | PacketBuffer::PacketBuffer(int num,int packet_size) |
jksoft | 0:dde3f92088d5 | 10 | { |
jksoft | 0:dde3f92088d5 | 11 | max_num = num; |
jksoft | 0:dde3f92088d5 | 12 | max_size = packet_size; |
jksoft | 0:dde3f92088d5 | 13 | |
jksoft | 0:dde3f92088d5 | 14 | p_buf = new PacketBufInf[num]; |
jksoft | 0:dde3f92088d5 | 15 | |
jksoft | 0:dde3f92088d5 | 16 | for(int i = 0 ; i < num ; i++) |
jksoft | 0:dde3f92088d5 | 17 | { |
jksoft | 0:dde3f92088d5 | 18 | p_buf[i].buf = new char[packet_size]; |
jksoft | 0:dde3f92088d5 | 19 | p_buf[i].size = 0; |
jksoft | 0:dde3f92088d5 | 20 | } |
jksoft | 0:dde3f92088d5 | 21 | addr_w = 0; |
jksoft | 0:dde3f92088d5 | 22 | addr_r = 0; |
jksoft | 0:dde3f92088d5 | 23 | } |
jksoft | 0:dde3f92088d5 | 24 | |
jksoft | 0:dde3f92088d5 | 25 | PacketBuffer::~PacketBuffer() |
jksoft | 0:dde3f92088d5 | 26 | { |
jksoft | 0:dde3f92088d5 | 27 | |
jksoft | 0:dde3f92088d5 | 28 | for(int i = 0 ; i < max_num ; i++) |
jksoft | 0:dde3f92088d5 | 29 | { |
jksoft | 0:dde3f92088d5 | 30 | delete [] p_buf[i].buf; |
jksoft | 0:dde3f92088d5 | 31 | } |
jksoft | 0:dde3f92088d5 | 32 | delete [] p_buf; |
jksoft | 0:dde3f92088d5 | 33 | } |
jksoft | 0:dde3f92088d5 | 34 | |
jksoft | 0:dde3f92088d5 | 35 | int PacketBuffer::PutPacket(char *packet, int len) |
jksoft | 0:dde3f92088d5 | 36 | { |
jksoft | 0:dde3f92088d5 | 37 | int next; |
jksoft | 0:dde3f92088d5 | 38 | |
jksoft | 0:dde3f92088d5 | 39 | if(max_size < len) return(-1); |
jksoft | 0:dde3f92088d5 | 40 | |
jksoft | 0:dde3f92088d5 | 41 | next = (addr_w + 1) % max_num; |
jksoft | 0:dde3f92088d5 | 42 | |
jksoft | 0:dde3f92088d5 | 43 | if( next == addr_r ) return(0); |
jksoft | 0:dde3f92088d5 | 44 | |
jksoft | 0:dde3f92088d5 | 45 | memcpy( p_buf[addr_w].buf , packet , len ); |
jksoft | 0:dde3f92088d5 | 46 | |
jksoft | 0:dde3f92088d5 | 47 | p_buf[addr_w].size = len; |
jksoft | 0:dde3f92088d5 | 48 | |
jksoft | 0:dde3f92088d5 | 49 | addr_w = next; |
jksoft | 0:dde3f92088d5 | 50 | |
jksoft | 0:dde3f92088d5 | 51 | return(len); |
jksoft | 0:dde3f92088d5 | 52 | } |
jksoft | 0:dde3f92088d5 | 53 | |
jksoft | 0:dde3f92088d5 | 54 | int PacketBuffer::GetPacket(char *packet) |
jksoft | 0:dde3f92088d5 | 55 | { |
jksoft | 0:dde3f92088d5 | 56 | int len; |
jksoft | 0:dde3f92088d5 | 57 | |
jksoft | 0:dde3f92088d5 | 58 | if( addr_w == addr_r ) return(0); |
jksoft | 0:dde3f92088d5 | 59 | |
jksoft | 0:dde3f92088d5 | 60 | len = p_buf[addr_r].size; |
jksoft | 0:dde3f92088d5 | 61 | |
jksoft | 0:dde3f92088d5 | 62 | memcpy( packet , p_buf[addr_r].buf , len ); |
jksoft | 0:dde3f92088d5 | 63 | |
jksoft | 0:dde3f92088d5 | 64 | addr_r = (addr_r + 1) % max_num; |
jksoft | 0:dde3f92088d5 | 65 | |
jksoft | 0:dde3f92088d5 | 66 | return len; |
jksoft | 0:dde3f92088d5 | 67 | } |
jksoft | 0:dde3f92088d5 | 68 | |
jksoft | 0:dde3f92088d5 | 69 | int PacketBuffer::available () { |
jksoft | 0:dde3f92088d5 | 70 | if (addr_w < addr_r) { |
jksoft | 0:dde3f92088d5 | 71 | return addr_r - addr_w - 1; |
jksoft | 0:dde3f92088d5 | 72 | } else { |
jksoft | 0:dde3f92088d5 | 73 | return (max_num - addr_w) + addr_r - 1; |
jksoft | 0:dde3f92088d5 | 74 | } |
jksoft | 0:dde3f92088d5 | 75 | } |
jksoft | 0:dde3f92088d5 | 76 | |
jksoft | 0:dde3f92088d5 | 77 | int PacketBuffer::use () { |
jksoft | 0:dde3f92088d5 | 78 | return max_num - available() - 1; |
jksoft | 0:dde3f92088d5 | 79 | } |
jksoft | 0:dde3f92088d5 | 80 | |
jksoft | 0:dde3f92088d5 | 81 | void PacketBuffer::clear () { |
jksoft | 0:dde3f92088d5 | 82 | addr_w = 0; |
jksoft | 0:dde3f92088d5 | 83 | addr_r = 0; |
jksoft | 0:dde3f92088d5 | 84 | } |