ORTP-L_WiiRemoteTest

Dependencies:   Motordriver mbed FatFileSystem

Fork of WallbotTypeN by Junichi Katsu

Committer:
passionvirus
Date:
Fri Mar 29 09:05:28 2013 +0000
Revision:
1:df4118878dc4
Parent:
0:425791fe4b42
init

Who changed what in which revision?

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