This program is for an autonomous robot for the competition at the Hochschule Luzern. http://cruisingcrepe.wordpress.com/ We are one of the 32 teams. http://cruisingcrepe.wordpress.com/ The postition control is based on this Documentation: Control of Wheeled Mobile Robots: An Experimental Overview from Alessandro De Luca, Giuseppe Oriolo, Marilena Vendittelli. For more information see here: http://www.dis.uniroma1.it/~labrob/pub/papers/Ramsete01.pdf

Dependencies:   mbed

Fork of autonomous Robot Android by Christian Burri

Committer:
chrigelburri
Date:
Fri May 03 08:35:29 2013 +0000
Revision:
18:306d362d692b
androidADB successfully linking

Who changed what in which revision?

UserRevisionLine numberNew contents of line
chrigelburri 18:306d362d692b 1 /*
chrigelburri 18:306d362d692b 2 Copyright 2011 Niels Brouwers
chrigelburri 18:306d362d692b 3
chrigelburri 18:306d362d692b 4 Licensed under the Apache License, Version 2.0 (the "License");
chrigelburri 18:306d362d692b 5 you may not use this file except in compliance with the License.
chrigelburri 18:306d362d692b 6 You may obtain a copy of the License at
chrigelburri 18:306d362d692b 7
chrigelburri 18:306d362d692b 8 http://www.apache.org/licenses/LICENSE-2.0
chrigelburri 18:306d362d692b 9
chrigelburri 18:306d362d692b 10 Unless required by applicable law or agreed to in writing, software
chrigelburri 18:306d362d692b 11 distributed under the License is distributed on an "AS IS" BASIS,
chrigelburri 18:306d362d692b 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
chrigelburri 18:306d362d692b 13 See the License for the specific language governing permissions and
chrigelburri 18:306d362d692b 14 limitations under the License.#include <string.h>
chrigelburri 18:306d362d692b 15 */
chrigelburri 18:306d362d692b 16
chrigelburri 18:306d362d692b 17 /* Changed by Junichi Katsu */
chrigelburri 18:306d362d692b 18
chrigelburri 18:306d362d692b 19 #ifndef __adb_h__
chrigelburri 18:306d362d692b 20 #define __adb_h__
chrigelburri 18:306d362d692b 21
chrigelburri 18:306d362d692b 22 #include "mbed.h"
chrigelburri 18:306d362d692b 23 #include "USBHost.h"
chrigelburri 18:306d362d692b 24 #include "PacketBuffer.h"
chrigelburri 18:306d362d692b 25
chrigelburri 18:306d362d692b 26 typedef bool boolean;
chrigelburri 18:306d362d692b 27 typedef unsigned char uint8_t;
chrigelburri 18:306d362d692b 28 typedef unsigned short uint16_t;
chrigelburri 18:306d362d692b 29 typedef unsigned int uint32_t;
chrigelburri 18:306d362d692b 30
chrigelburri 18:306d362d692b 31
chrigelburri 18:306d362d692b 32 #define MAX_PAYLOAD 4096;
chrigelburri 18:306d362d692b 33
chrigelburri 18:306d362d692b 34 #define A_SYNC 0x434e5953
chrigelburri 18:306d362d692b 35 #define A_CNXN 0x4e584e43
chrigelburri 18:306d362d692b 36 #define A_OPEN 0x4e45504f
chrigelburri 18:306d362d692b 37 #define A_OKAY 0x59414b4f
chrigelburri 18:306d362d692b 38 #define A_CLSE 0x45534c43
chrigelburri 18:306d362d692b 39 #define A_WRTE 0x45545257
chrigelburri 18:306d362d692b 40
chrigelburri 18:306d362d692b 41 #define ADB_CLASS 0xff
chrigelburri 18:306d362d692b 42 #define ADB_SUBCLASS 0x42
chrigelburri 18:306d362d692b 43 #define ADB_PROTOCOL 0x1
chrigelburri 18:306d362d692b 44
chrigelburri 18:306d362d692b 45 #define ADB_USB_PACKETSIZE 0x40
chrigelburri 18:306d362d692b 46 #define ADB_CONNECTION_RETRY_TIME 1000
chrigelburri 18:306d362d692b 47
chrigelburri 18:306d362d692b 48 typedef struct
chrigelburri 18:306d362d692b 49 {
chrigelburri 18:306d362d692b 50 uint8_t address;
chrigelburri 18:306d362d692b 51 uint8_t configuration;
chrigelburri 18:306d362d692b 52 uint8_t interface;
chrigelburri 18:306d362d692b 53 uint8_t inputEndPointAddress;
chrigelburri 18:306d362d692b 54 uint8_t outputEndPointAddress;
chrigelburri 18:306d362d692b 55 } adb_usbConfiguration;
chrigelburri 18:306d362d692b 56
chrigelburri 18:306d362d692b 57 typedef struct
chrigelburri 18:306d362d692b 58 {
chrigelburri 18:306d362d692b 59 // Command identifier constant
chrigelburri 18:306d362d692b 60 uint32_t command;
chrigelburri 18:306d362d692b 61
chrigelburri 18:306d362d692b 62 // First argument
chrigelburri 18:306d362d692b 63 uint32_t arg0;
chrigelburri 18:306d362d692b 64
chrigelburri 18:306d362d692b 65 // Second argument
chrigelburri 18:306d362d692b 66 uint32_t arg1;
chrigelburri 18:306d362d692b 67
chrigelburri 18:306d362d692b 68 // Payload length (0 is allowed)
chrigelburri 18:306d362d692b 69 uint32_t data_length;
chrigelburri 18:306d362d692b 70
chrigelburri 18:306d362d692b 71 // Checksum of data payload
chrigelburri 18:306d362d692b 72 uint32_t data_check;
chrigelburri 18:306d362d692b 73
chrigelburri 18:306d362d692b 74 // Command ^ 0xffffffff
chrigelburri 18:306d362d692b 75 uint32_t magic;
chrigelburri 18:306d362d692b 76
chrigelburri 18:306d362d692b 77 } adb_message;
chrigelburri 18:306d362d692b 78
chrigelburri 18:306d362d692b 79 typedef enum
chrigelburri 18:306d362d692b 80 {
chrigelburri 18:306d362d692b 81 ADB_UNUSED = 0,
chrigelburri 18:306d362d692b 82 ADB_CLOSED,
chrigelburri 18:306d362d692b 83 ADB_OPEN,
chrigelburri 18:306d362d692b 84 ADB_OPENING,
chrigelburri 18:306d362d692b 85 ADB_RECEIVING,
chrigelburri 18:306d362d692b 86 ADB_WRITING
chrigelburri 18:306d362d692b 87 } ConnectionStatus;
chrigelburri 18:306d362d692b 88
chrigelburri 18:306d362d692b 89 typedef enum
chrigelburri 18:306d362d692b 90 {
chrigelburri 18:306d362d692b 91 ADB_CONNECT = 0,
chrigelburri 18:306d362d692b 92 ADB_DISCONNECT,
chrigelburri 18:306d362d692b 93 ADB_CONNECTION_OPEN,
chrigelburri 18:306d362d692b 94 ADB_CONNECTION_CLOSE,
chrigelburri 18:306d362d692b 95 ADB_CONNECTION_FAILED,
chrigelburri 18:306d362d692b 96 ADB_CONNECTION_RECEIVE
chrigelburri 18:306d362d692b 97 } adb_eventType;
chrigelburri 18:306d362d692b 98
chrigelburri 18:306d362d692b 99 class Connection;
chrigelburri 18:306d362d692b 100
chrigelburri 18:306d362d692b 101 // Event handler
chrigelburri 18:306d362d692b 102 typedef void(adb_eventHandler)(Connection * connection, adb_eventType event, uint16_t length, uint8_t * data);
chrigelburri 18:306d362d692b 103
chrigelburri 18:306d362d692b 104 class Connection
chrigelburri 18:306d362d692b 105 {
chrigelburri 18:306d362d692b 106 private:
chrigelburri 18:306d362d692b 107 public:
chrigelburri 18:306d362d692b 108 char * connectionString;
chrigelburri 18:306d362d692b 109 uint32_t localID, remoteID;
chrigelburri 18:306d362d692b 110 uint32_t lastConnectionAttempt;
chrigelburri 18:306d362d692b 111 uint16_t dataSize, dataRead;
chrigelburri 18:306d362d692b 112 ConnectionStatus status;
chrigelburri 18:306d362d692b 113 boolean reconnect;
chrigelburri 18:306d362d692b 114 adb_eventHandler * eventHandler;
chrigelburri 18:306d362d692b 115 Connection * next;
chrigelburri 18:306d362d692b 116
chrigelburri 18:306d362d692b 117 int write(uint16_t length, uint8_t * data);
chrigelburri 18:306d362d692b 118 int writeString(char * str);
chrigelburri 18:306d362d692b 119 bool isOpen();
chrigelburri 18:306d362d692b 120 };
chrigelburri 18:306d362d692b 121
chrigelburri 18:306d362d692b 122 class ADB
chrigelburri 18:306d362d692b 123 {
chrigelburri 18:306d362d692b 124
chrigelburri 18:306d362d692b 125 private:
chrigelburri 18:306d362d692b 126 static void fireEvent(Connection * connection, adb_eventType type, uint16_t length, uint8_t * data);
chrigelburri 18:306d362d692b 127 static int writeEmptyMessage(int device, uint32_t command, uint32_t arg0, uint32_t arg1);
chrigelburri 18:306d362d692b 128 static int writeMessage(int device, uint32_t command, uint32_t arg0, uint32_t arg1, uint32_t length, uint8_t * data);
chrigelburri 18:306d362d692b 129 static int writeStringMessage(int device, uint32_t command, uint32_t arg0, uint32_t arg1, char * str);
chrigelburri 18:306d362d692b 130 static boolean pollMessage(adb_message * message, boolean poll);
chrigelburri 18:306d362d692b 131 static void openClosedConnections();
chrigelburri 18:306d362d692b 132 static void handleOkay(Connection * connection, adb_message * message);
chrigelburri 18:306d362d692b 133 static void handleClose(Connection * connection);
chrigelburri 18:306d362d692b 134 static void handleWrite(Connection * connection, adb_message * message);
chrigelburri 18:306d362d692b 135 static void handleConnect(adb_message * message);
chrigelburri 18:306d362d692b 136 static void AdbreadCallback(int device, int endpoint, int status, uint8_t* buf, int len, void* userData);
chrigelburri 18:306d362d692b 137
chrigelburri 18:306d362d692b 138 public:
chrigelburri 18:306d362d692b 139 static void init();
chrigelburri 18:306d362d692b 140 static void poll();
chrigelburri 18:306d362d692b 141
chrigelburri 18:306d362d692b 142 static void setEventHandler(adb_eventHandler * handler);
chrigelburri 18:306d362d692b 143 virtual void setupDevice()=0;
chrigelburri 18:306d362d692b 144 static Connection * addConnection(const char * connectionString, boolean reconnect, adb_eventHandler * eventHandler);
chrigelburri 18:306d362d692b 145 static int write(Connection * connection, uint16_t length, uint8_t * data);
chrigelburri 18:306d362d692b 146 static int writeString(Connection * connection, char * str);
chrigelburri 18:306d362d692b 147
chrigelburri 18:306d362d692b 148 static boolean isAdbDevice(int device, int configuration, int interfaceNumber);
chrigelburri 18:306d362d692b 149 static void closeAll();
chrigelburri 18:306d362d692b 150 };
chrigelburri 18:306d362d692b 151
chrigelburri 18:306d362d692b 152 #endif