class library to access fischertechnik interfaces via USB

Dependencies:   FatFileSystem mbed myBlueUSB neigbourhood rfcomm sdp

Committer:
networker
Date:
Wed Jun 15 19:12:25 2011 +0000
Revision:
0:7da612835693
initial version
; Bluetooth support incomplete

Who changed what in which revision?

UserRevisionLine numberNew contents of line
networker 0:7da612835693 1 /*
networker 0:7da612835693 2 Copyright (c) 2010 Peter Barrett
networker 0:7da612835693 3
networker 0:7da612835693 4 Permission is hereby granted, free of charge, to any person obtaining a copy
networker 0:7da612835693 5 of this software and associated documentation files (the "Software"), to deal
networker 0:7da612835693 6 in the Software without restriction, including without limitation the rights
networker 0:7da612835693 7 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
networker 0:7da612835693 8 copies of the Software, and to permit persons to whom the Software is
networker 0:7da612835693 9 furnished to do so, subject to the following conditions:
networker 0:7da612835693 10
networker 0:7da612835693 11 The above copyright notice and this permission notice shall be included in
networker 0:7da612835693 12 all copies or substantial portions of the Software.
networker 0:7da612835693 13
networker 0:7da612835693 14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
networker 0:7da612835693 15 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
networker 0:7da612835693 16 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
networker 0:7da612835693 17 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
networker 0:7da612835693 18 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
networker 0:7da612835693 19 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
networker 0:7da612835693 20 THE SOFTWARE.
networker 0:7da612835693 21 */
networker 0:7da612835693 22
networker 0:7da612835693 23 #ifndef SOCKET_H_INCLUDED
networker 0:7da612835693 24 #define SOCKET_H_INCLUDED
networker 0:7da612835693 25
networker 0:7da612835693 26 #define SOCKET_HCI 1
networker 0:7da612835693 27 #define SOCKET_L2CAP 2
networker 0:7da612835693 28 #define SOCKET_RFCOM 3
networker 0:7da612835693 29 #define SOCKET_SDP 4
networker 0:7da612835693 30
networker 0:7da612835693 31 typedef struct
networker 0:7da612835693 32 {
networker 0:7da612835693 33 u8 AddressSpecific[0]; // BDADDR,psm etc
networker 0:7da612835693 34 } SocketAddrHdr;
networker 0:7da612835693 35
networker 0:7da612835693 36 enum SocketState
networker 0:7da612835693 37 {
networker 0:7da612835693 38 SocketState_Unknown,
networker 0:7da612835693 39 SocketState_Opening,
networker 0:7da612835693 40 SocketState_Open,
networker 0:7da612835693 41 SocketState_Closing,
networker 0:7da612835693 42 SocketState_Closed,
networker 0:7da612835693 43 SocketState_Listen,
networker 0:7da612835693 44 SocketState_Accepting,
networker 0:7da612835693 45 SocketState_L2CAP_WaitConnect = 8,
networker 0:7da612835693 46 SocketState_L2CAP_WaitConnectRsp,
networker 0:7da612835693 47 SocketState_L2CAP_WaitDisconnect,
networker 0:7da612835693 48 SocketState_L2CAP_Config_wait = 16,
networker 0:7da612835693 49 SocketState_L2CAP_Config_wait_send,
networker 0:7da612835693 50 SocketState_L2CAP_Config_wait_req,
networker 0:7da612835693 51 SocketState_L2CAP_Config_wait_rsp,
networker 0:7da612835693 52 SocketState_L2CAP_Config_wait_reqrsp
networker 0:7da612835693 53 };
networker 0:7da612835693 54
networker 0:7da612835693 55 typedef void (*SocketCallback)(int socket, SocketState state, const u8* data, int len, void* userData);
networker 0:7da612835693 56
networker 0:7da612835693 57 int Socket_Create(int type, SocketCallback callback, void* userData); // Allocate a socket
networker 0:7da612835693 58 int Socket_Open(int type, SocketAddrHdr* addr, SocketCallback callback, void* userData); // Open a socket
networker 0:7da612835693 59 int Socket_Listen(int type, int channel, SocketCallback callback, void* userData); // Open a socket passive
networker 0:7da612835693 60 int Socket_Accept(int type, int scid, int rxid, SocketCallback callback, void* userData); // Open a socket for an incoming connection
networker 0:7da612835693 61 int Socket_Send(int socket, const u8* data, int len);
networker 0:7da612835693 62 int Socket_State(int socket);
networker 0:7da612835693 63 int Socket_Close(int socket);
networker 0:7da612835693 64
networker 0:7da612835693 65 //===========================================================================
networker 0:7da612835693 66 //===========================================================================
networker 0:7da612835693 67 // Don't need to look at or use anything below this line:
networker 0:7da612835693 68 // Internal representation of socket
networker 0:7da612835693 69
networker 0:7da612835693 70 class SocketHandler;
networker 0:7da612835693 71 class SocketInternal
networker 0:7da612835693 72 {
networker 0:7da612835693 73 public:
networker 0:7da612835693 74
networker 0:7da612835693 75 u8 ID;
networker 0:7da612835693 76 u8 State;
networker 0:7da612835693 77 u8 Type;
networker 0:7da612835693 78 u8 B0;
networker 0:7da612835693 79 SocketCallback Callback;
networker 0:7da612835693 80 void* userData;
networker 0:7da612835693 81 u8 Data[0]; // Extra socket data starts here
networker 0:7da612835693 82
networker 0:7da612835693 83 void Recv(const u8* data, int len)
networker 0:7da612835693 84 {
networker 0:7da612835693 85 Callback(ID,(SocketState)State,data,len,userData);
networker 0:7da612835693 86 }
networker 0:7da612835693 87
networker 0:7da612835693 88 void SetState(SocketState state)
networker 0:7da612835693 89 {
networker 0:7da612835693 90 State = state;
networker 0:7da612835693 91 Callback(ID,(SocketState)State,0,0,userData);
networker 0:7da612835693 92 if (state == SocketState_Closed) {
networker 0:7da612835693 93 printf("Socket %d has been freed\n", ID);
networker 0:7da612835693 94 ID = 0;
networker 0:7da612835693 95 }
networker 0:7da612835693 96 }
networker 0:7da612835693 97 };
networker 0:7da612835693 98
networker 0:7da612835693 99 class SocketHandler
networker 0:7da612835693 100 {
networker 0:7da612835693 101 public:
networker 0:7da612835693 102 virtual int Create(SocketInternal* sock) { printf("SocketHandler::Create: not implemented for %s\n", Name()); return sock->ID;}
networker 0:7da612835693 103 virtual int Open(SocketInternal* sock, SocketAddrHdr* addr) = 0;
networker 0:7da612835693 104 virtual int Send(SocketInternal* sock, const u8* data, int len) = 0;
networker 0:7da612835693 105 virtual int Close(SocketInternal* sock) = 0;
networker 0:7da612835693 106 virtual int Listen(SocketInternal* sock, int channel) { printf("SocketHandler::Listen: not implemented for %s\n", Name());return 0;}
networker 0:7da612835693 107 virtual int Accept(SocketInternal* sock, int scid, int rxid) { printf("SocketHandler::Accept: not implemented for %s\n", Name());return 0;}
networker 0:7da612835693 108 virtual char* Name() { return "Base_SocketHandler";}
networker 0:7da612835693 109 };
networker 0:7da612835693 110
networker 0:7da612835693 111 int RegisterSocketHandler(int type, SocketHandler* handler);
networker 0:7da612835693 112 SocketInternal* GetSocketInternal(int socket);
networker 0:7da612835693 113
networker 0:7da612835693 114 #define ERR_SOCKET_TYPE_NOT_FOUND -200
networker 0:7da612835693 115 #define ERR_SOCKET_NOT_FOUND -201
networker 0:7da612835693 116 #define ERR_SOCKET_NONE_LEFT -202
networker 0:7da612835693 117 #define ERR_SOCKET_CANT_LISTEN -203
networker 0:7da612835693 118
networker 0:7da612835693 119 #endif // SOCKET_H_INCLUDED