A USB/360deg Rotational device, communicating via blue-tooth, test code

Dependencies:   FatFileSystem mbed

Committer:
lolpcc
Date:
Fri Dec 21 11:37:38 2012 +0000
Revision:
0:87da38093be9
Used to test the Lazy Susan at work, hence the A2D code in Utils.cpp

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lolpcc 0:87da38093be9 1 /*
lolpcc 0:87da38093be9 2 Copyright (c) 2010 Peter Barrett
lolpcc 0:87da38093be9 3
lolpcc 0:87da38093be9 4 Permission is hereby granted, free of charge, to any person obtaining a copy
lolpcc 0:87da38093be9 5 of this software and associated documentation files (the "Software"), to deal
lolpcc 0:87da38093be9 6 in the Software without restriction, including without limitation the rights
lolpcc 0:87da38093be9 7 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
lolpcc 0:87da38093be9 8 copies of the Software, and to permit persons to whom the Software is
lolpcc 0:87da38093be9 9 furnished to do so, subject to the following conditions:
lolpcc 0:87da38093be9 10
lolpcc 0:87da38093be9 11 The above copyright notice and this permission notice shall be included in
lolpcc 0:87da38093be9 12 all copies or substantial portions of the Software.
lolpcc 0:87da38093be9 13
lolpcc 0:87da38093be9 14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
lolpcc 0:87da38093be9 15 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
lolpcc 0:87da38093be9 16 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
lolpcc 0:87da38093be9 17 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
lolpcc 0:87da38093be9 18 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
lolpcc 0:87da38093be9 19 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
lolpcc 0:87da38093be9 20 THE SOFTWARE.
lolpcc 0:87da38093be9 21 */
lolpcc 0:87da38093be9 22
lolpcc 0:87da38093be9 23 #include <stdio.h>
lolpcc 0:87da38093be9 24 #include <stdlib.h>
lolpcc 0:87da38093be9 25 #include <stdio.h>
lolpcc 0:87da38093be9 26 #include <string.h>
lolpcc 0:87da38093be9 27
lolpcc 0:87da38093be9 28 #include "Utils.h"
lolpcc 0:87da38093be9 29 #include "Socket.h"
lolpcc 0:87da38093be9 30
lolpcc 0:87da38093be9 31 #define MAX_SOCKET_HANDLERS 3
lolpcc 0:87da38093be9 32 #define MAX_SOCKETS 16
lolpcc 0:87da38093be9 33
lolpcc 0:87da38093be9 34 class SocketInternalPad
lolpcc 0:87da38093be9 35 {
lolpcc 0:87da38093be9 36 public:
lolpcc 0:87da38093be9 37 SocketInternal si;
lolpcc 0:87da38093be9 38 u8 pad[8];
lolpcc 0:87da38093be9 39 };
lolpcc 0:87da38093be9 40
lolpcc 0:87da38093be9 41 class SocketManager
lolpcc 0:87da38093be9 42 {
lolpcc 0:87da38093be9 43 SocketHandler* _handlers[MAX_SOCKET_HANDLERS];
lolpcc 0:87da38093be9 44 SocketInternalPad _sockets[MAX_SOCKETS];
lolpcc 0:87da38093be9 45
lolpcc 0:87da38093be9 46 public:
lolpcc 0:87da38093be9 47 SocketManager()
lolpcc 0:87da38093be9 48 {
lolpcc 0:87da38093be9 49 memset(_handlers,0,sizeof(_handlers));
lolpcc 0:87da38093be9 50 memset(_sockets,0,sizeof(_sockets));
lolpcc 0:87da38093be9 51 }
lolpcc 0:87da38093be9 52
lolpcc 0:87da38093be9 53 SocketHandler* GetHandler(int type)
lolpcc 0:87da38093be9 54 {
lolpcc 0:87da38093be9 55 if (type < 1 || type > MAX_SOCKET_HANDLERS)
lolpcc 0:87da38093be9 56 return 0;
lolpcc 0:87da38093be9 57 return _handlers[type - 1];
lolpcc 0:87da38093be9 58 }
lolpcc 0:87da38093be9 59
lolpcc 0:87da38093be9 60 SocketInternal* GetInternal(int s)
lolpcc 0:87da38093be9 61 {
lolpcc 0:87da38093be9 62 if (s < 1 || s > MAX_SOCKETS)
lolpcc 0:87da38093be9 63 return 0;
lolpcc 0:87da38093be9 64 return &_sockets[s - 1].si;
lolpcc 0:87da38093be9 65 }
lolpcc 0:87da38093be9 66
lolpcc 0:87da38093be9 67 int RegisterSocketHandler(int type, SocketHandler* handler)
lolpcc 0:87da38093be9 68 {
lolpcc 0:87da38093be9 69 if (type < 1 || type > MAX_SOCKET_HANDLERS)
lolpcc 0:87da38093be9 70 return ERR_SOCKET_TYPE_NOT_FOUND;
lolpcc 0:87da38093be9 71 _handlers[type - 1] = handler;
lolpcc 0:87da38093be9 72 return 0;
lolpcc 0:87da38093be9 73 }
lolpcc 0:87da38093be9 74
lolpcc 0:87da38093be9 75 int Open(int type, SocketAddrHdr* addr, SocketCallback callback, void* userData)
lolpcc 0:87da38093be9 76 {
lolpcc 0:87da38093be9 77 SocketHandler* h = GetHandler(type);
lolpcc 0:87da38093be9 78 if (!h)
lolpcc 0:87da38093be9 79 return ERR_SOCKET_TYPE_NOT_FOUND;
lolpcc 0:87da38093be9 80
lolpcc 0:87da38093be9 81 for (int i = 0; i < MAX_SOCKETS; i++)
lolpcc 0:87da38093be9 82 {
lolpcc 0:87da38093be9 83 SocketInternal* si = (SocketInternal*)(_sockets+i);
lolpcc 0:87da38093be9 84 if (si->ID == 0)
lolpcc 0:87da38093be9 85 {
lolpcc 0:87da38093be9 86 si->ID = i+1;
lolpcc 0:87da38093be9 87 si->Type = type;
lolpcc 0:87da38093be9 88 si->Callback = callback;
lolpcc 0:87da38093be9 89 si->userData = userData;
lolpcc 0:87da38093be9 90 return h->Open(si,addr);
lolpcc 0:87da38093be9 91 }
lolpcc 0:87da38093be9 92 }
lolpcc 0:87da38093be9 93 return ERR_SOCKET_NONE_LEFT;
lolpcc 0:87da38093be9 94 }
lolpcc 0:87da38093be9 95
lolpcc 0:87da38093be9 96 int Send(int socket, const u8* data, int len)
lolpcc 0:87da38093be9 97 {
lolpcc 0:87da38093be9 98 SocketInternal* si = GetInternal(socket);
lolpcc 0:87da38093be9 99 if (!si || si->ID != socket)
lolpcc 0:87da38093be9 100 return ERR_SOCKET_NOT_FOUND;
lolpcc 0:87da38093be9 101 return GetHandler(si->Type)->Send(si,data,len);
lolpcc 0:87da38093be9 102 }
lolpcc 0:87da38093be9 103
lolpcc 0:87da38093be9 104 int Close(int socket)
lolpcc 0:87da38093be9 105 {
lolpcc 0:87da38093be9 106 SocketInternal* si = GetInternal(socket);
lolpcc 0:87da38093be9 107 if (!si || si->ID != socket)
lolpcc 0:87da38093be9 108 return ERR_SOCKET_NOT_FOUND;
lolpcc 0:87da38093be9 109 si->ID = 0;
lolpcc 0:87da38093be9 110 return GetHandler(si->Type)->Close(si);
lolpcc 0:87da38093be9 111 }
lolpcc 0:87da38093be9 112 };
lolpcc 0:87da38093be9 113
lolpcc 0:87da38093be9 114 SocketManager gSocketManager;
lolpcc 0:87da38093be9 115
lolpcc 0:87da38093be9 116 int Socket_Open(int type, SocketAddrHdr* addr, SocketCallback callback, void* userData)
lolpcc 0:87da38093be9 117 {
lolpcc 0:87da38093be9 118 return gSocketManager.Open(type,addr,callback,userData);
lolpcc 0:87da38093be9 119 }
lolpcc 0:87da38093be9 120
lolpcc 0:87da38093be9 121 int Socket_Send(int socket, const u8* data, int len)
lolpcc 0:87da38093be9 122 {
lolpcc 0:87da38093be9 123 return gSocketManager.Send(socket,data,len);
lolpcc 0:87da38093be9 124 }
lolpcc 0:87da38093be9 125
lolpcc 0:87da38093be9 126 int Socket_Close(int socket)
lolpcc 0:87da38093be9 127 {
lolpcc 0:87da38093be9 128 return gSocketManager.Close(socket);
lolpcc 0:87da38093be9 129 }
lolpcc 0:87da38093be9 130
lolpcc 0:87da38093be9 131 int RegisterSocketHandler(int type, SocketHandler* handler)
lolpcc 0:87da38093be9 132 {
lolpcc 0:87da38093be9 133 return gSocketManager.RegisterSocketHandler(type,handler);
lolpcc 0:87da38093be9 134 }
lolpcc 0:87da38093be9 135
lolpcc 0:87da38093be9 136 SocketInternal* GetSocketInternal(int socket)
lolpcc 0:87da38093be9 137 {
lolpcc 0:87da38093be9 138 return gSocketManager.GetInternal(socket);
lolpcc 0:87da38093be9 139 }
lolpcc 0:87da38093be9 140