Test version of BlueUSB stack. Includes SDP and RFCOMM. As Client it allows to connect to my fischertechnik TX Controller. As Server it echo\\\\\\\'s characters to Putty. PIN=1234

Dependencies:   mbed myUSBHost AvailableMemory

Dependents:   mbed_TANK_Kinect myBlueUSB_ros ftusbClass

Committer:
networker
Date:
Mon Apr 04 16:41:03 2011 +0000
Revision:
0:81ed8b6e4a8b
initial revision

Who changed what in which revision?

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