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 06:30:46 2013 +0000
Revision:
17:f0a973f17917
bastel mit adb

Who changed what in which revision?

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