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

Dependencies:   TextLCD mbed

Committer:
jksoft
Date:
Sun Aug 21 14:36:35 2011 +0000
Revision:
0:dde3f92088d5

        

Who changed what in which revision?

UserRevisionLine numberNew 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 }