Laser Sensing Display for UI interfaces in the real world

Dependencies:   mbed

Fork of skinGames_forktest by Alvaro Cassinelli

Committer:
mbedalvaro
Date:
Wed Mar 28 14:40:01 2012 +0000
Revision:
0:345b3bc7a0ea
This version (using rigid frame, base and child classes, etc) works, but the blob is strangely smaller. Need to check this.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbedalvaro 0:345b3bc7a0ea 1
mbedalvaro 0:345b3bc7a0ea 2 /*
mbedalvaro 0:345b3bc7a0ea 3 Copyright (c) 2010 Donatien Garnier (donatiengar [at] gmail [dot] com)
mbedalvaro 0:345b3bc7a0ea 4
mbedalvaro 0:345b3bc7a0ea 5 Permission is hereby granted, free of charge, to any person obtaining a copy
mbedalvaro 0:345b3bc7a0ea 6 of this software and associated documentation files (the "Software"), to deal
mbedalvaro 0:345b3bc7a0ea 7 in the Software without restriction, including without limitation the rights
mbedalvaro 0:345b3bc7a0ea 8 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
mbedalvaro 0:345b3bc7a0ea 9 copies of the Software, and to permit persons to whom the Software is
mbedalvaro 0:345b3bc7a0ea 10 furnished to do so, subject to the following conditions:
mbedalvaro 0:345b3bc7a0ea 11
mbedalvaro 0:345b3bc7a0ea 12 The above copyright notice and this permission notice shall be included in
mbedalvaro 0:345b3bc7a0ea 13 all copies or substantial portions of the Software.
mbedalvaro 0:345b3bc7a0ea 14
mbedalvaro 0:345b3bc7a0ea 15 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
mbedalvaro 0:345b3bc7a0ea 16 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
mbedalvaro 0:345b3bc7a0ea 17 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
mbedalvaro 0:345b3bc7a0ea 18 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
mbedalvaro 0:345b3bc7a0ea 19 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
mbedalvaro 0:345b3bc7a0ea 20 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
mbedalvaro 0:345b3bc7a0ea 21 THE SOFTWARE.
mbedalvaro 0:345b3bc7a0ea 22 */
mbedalvaro 0:345b3bc7a0ea 23
mbedalvaro 0:345b3bc7a0ea 24 /** \file
mbedalvaro 0:345b3bc7a0ea 25 TCP Socket header file
mbedalvaro 0:345b3bc7a0ea 26 */
mbedalvaro 0:345b3bc7a0ea 27
mbedalvaro 0:345b3bc7a0ea 28 #ifndef TCPSOCKET_H
mbedalvaro 0:345b3bc7a0ea 29 #define TCPSOCKET_H
mbedalvaro 0:345b3bc7a0ea 30
mbedalvaro 0:345b3bc7a0ea 31 #include "core/net.h"
mbedalvaro 0:345b3bc7a0ea 32 #include "core/host.h"
mbedalvaro 0:345b3bc7a0ea 33 //Essentially it is a safe interface to NetTcpSocket
mbedalvaro 0:345b3bc7a0ea 34
mbedalvaro 0:345b3bc7a0ea 35 ///TCP Socket error codes
mbedalvaro 0:345b3bc7a0ea 36 enum TCPSocketErr
mbedalvaro 0:345b3bc7a0ea 37 {
mbedalvaro 0:345b3bc7a0ea 38 __TCPSOCKET_MIN = -0xFFFF,
mbedalvaro 0:345b3bc7a0ea 39 TCPSOCKET_SETUP, ///<TCPSocket not properly configured
mbedalvaro 0:345b3bc7a0ea 40 TCPSOCKET_TIMEOUT, ///<Connection timed out
mbedalvaro 0:345b3bc7a0ea 41 TCPSOCKET_IF, ///<Interface has problems, does not exist or is not initialized
mbedalvaro 0:345b3bc7a0ea 42 TCPSOCKET_MEM, ///<Not enough mem
mbedalvaro 0:345b3bc7a0ea 43 TCPSOCKET_INUSE, ///<Interface / Port is in use
mbedalvaro 0:345b3bc7a0ea 44 TCPSOCKET_EMPTY, ///<Connections queue is empty
mbedalvaro 0:345b3bc7a0ea 45 TCPSOCKET_RST, ///<Connection was reset by remote host
mbedalvaro 0:345b3bc7a0ea 46 //...
mbedalvaro 0:345b3bc7a0ea 47 TCPSOCKET_OK = 0 ///<Success
mbedalvaro 0:345b3bc7a0ea 48 };
mbedalvaro 0:345b3bc7a0ea 49
mbedalvaro 0:345b3bc7a0ea 50 ///TCP Socket Events
mbedalvaro 0:345b3bc7a0ea 51 enum TCPSocketEvent
mbedalvaro 0:345b3bc7a0ea 52 {
mbedalvaro 0:345b3bc7a0ea 53 TCPSOCKET_CONNECTED, ///<Connected to host
mbedalvaro 0:345b3bc7a0ea 54 TCPSOCKET_ACCEPT, ///<Client is connected, must call accept() to get a new Socket
mbedalvaro 0:345b3bc7a0ea 55 TCPSOCKET_READABLE, ///<Data in buf
mbedalvaro 0:345b3bc7a0ea 56 TCPSOCKET_WRITEABLE, ///<Can write data to buf
mbedalvaro 0:345b3bc7a0ea 57 TCPSOCKET_CONTIMEOUT, ///<Connection timed out
mbedalvaro 0:345b3bc7a0ea 58 TCPSOCKET_CONRST, ///<Connection was reset by remote host
mbedalvaro 0:345b3bc7a0ea 59 TCPSOCKET_CONABRT, ///<Connection was aborted
mbedalvaro 0:345b3bc7a0ea 60 TCPSOCKET_ERROR, ///<Unknown error
mbedalvaro 0:345b3bc7a0ea 61 TCPSOCKET_DISCONNECTED ///<Disconnected
mbedalvaro 0:345b3bc7a0ea 62 };
mbedalvaro 0:345b3bc7a0ea 63
mbedalvaro 0:345b3bc7a0ea 64 class NetTcpSocket;
mbedalvaro 0:345b3bc7a0ea 65 enum NetTcpSocketEvent;
mbedalvaro 0:345b3bc7a0ea 66
mbedalvaro 0:345b3bc7a0ea 67 ///This is a simple TCP Socket class
mbedalvaro 0:345b3bc7a0ea 68 /**
mbedalvaro 0:345b3bc7a0ea 69 This class exposes an API to deal with TCP Sockets
mbedalvaro 0:345b3bc7a0ea 70 */
mbedalvaro 0:345b3bc7a0ea 71 class TCPSocket
mbedalvaro 0:345b3bc7a0ea 72 {
mbedalvaro 0:345b3bc7a0ea 73 public:
mbedalvaro 0:345b3bc7a0ea 74 ///Creates a new socket
mbedalvaro 0:345b3bc7a0ea 75 TCPSocket();
mbedalvaro 0:345b3bc7a0ea 76 protected:
mbedalvaro 0:345b3bc7a0ea 77 TCPSocket(NetTcpSocket* pNetTcpSocket);
mbedalvaro 0:345b3bc7a0ea 78 public:
mbedalvaro 0:345b3bc7a0ea 79 ///Closes if needed and destroys the socket
mbedalvaro 0:345b3bc7a0ea 80 ~TCPSocket(); //close()
mbedalvaro 0:345b3bc7a0ea 81
mbedalvaro 0:345b3bc7a0ea 82 ///Binds the socket to (local) host
mbedalvaro 0:345b3bc7a0ea 83 TCPSocketErr bind(const Host& me);
mbedalvaro 0:345b3bc7a0ea 84
mbedalvaro 0:345b3bc7a0ea 85 ///Starts listening
mbedalvaro 0:345b3bc7a0ea 86 TCPSocketErr listen();
mbedalvaro 0:345b3bc7a0ea 87
mbedalvaro 0:345b3bc7a0ea 88 ///Connects socket to host
mbedalvaro 0:345b3bc7a0ea 89 TCPSocketErr connect(const Host& host);
mbedalvaro 0:345b3bc7a0ea 90
mbedalvaro 0:345b3bc7a0ea 91 ///Accepts connection from client and gets connected socket
mbedalvaro 0:345b3bc7a0ea 92 TCPSocketErr accept(Host* pClient, TCPSocket** ppNewTcpSocket);
mbedalvaro 0:345b3bc7a0ea 93
mbedalvaro 0:345b3bc7a0ea 94 ///Sends data
mbedalvaro 0:345b3bc7a0ea 95 /*
mbedalvaro 0:345b3bc7a0ea 96 @return a negative error code or the number of bytes transmitted
mbedalvaro 0:345b3bc7a0ea 97 */
mbedalvaro 0:345b3bc7a0ea 98 int /*if < 0 : TCPSocketErr*/ send(const char* buf, int len);
mbedalvaro 0:345b3bc7a0ea 99
mbedalvaro 0:345b3bc7a0ea 100 ///Receives data
mbedalvaro 0:345b3bc7a0ea 101 /*
mbedalvaro 0:345b3bc7a0ea 102 @return a negative error code or the number of bytes received
mbedalvaro 0:345b3bc7a0ea 103 */
mbedalvaro 0:345b3bc7a0ea 104 int /*if < 0 : TCPSocketErr*/ recv(char* buf, int len);
mbedalvaro 0:345b3bc7a0ea 105
mbedalvaro 0:345b3bc7a0ea 106 /* TODO NTH : printf / scanf helpers that call send/recv */
mbedalvaro 0:345b3bc7a0ea 107
mbedalvaro 0:345b3bc7a0ea 108 ///Closes socket
mbedalvaro 0:345b3bc7a0ea 109 TCPSocketErr close();
mbedalvaro 0:345b3bc7a0ea 110
mbedalvaro 0:345b3bc7a0ea 111 //Callbacks
mbedalvaro 0:345b3bc7a0ea 112 ///Setups callback
mbedalvaro 0:345b3bc7a0ea 113 /**
mbedalvaro 0:345b3bc7a0ea 114 @param pMethod : callback function
mbedalvaro 0:345b3bc7a0ea 115 */
mbedalvaro 0:345b3bc7a0ea 116 void setOnEvent( void (*pMethod)(TCPSocketEvent) );
mbedalvaro 0:345b3bc7a0ea 117
mbedalvaro 0:345b3bc7a0ea 118 class CDummy;
mbedalvaro 0:345b3bc7a0ea 119 ///Setups callback
mbedalvaro 0:345b3bc7a0ea 120 /**
mbedalvaro 0:345b3bc7a0ea 121 @param pItem : instance of class on which to execute the callback method
mbedalvaro 0:345b3bc7a0ea 122 @param pMethod : callback method
mbedalvaro 0:345b3bc7a0ea 123 */
mbedalvaro 0:345b3bc7a0ea 124 template<class T>
mbedalvaro 0:345b3bc7a0ea 125 void setOnEvent( T* pItem, void (T::*pMethod)(TCPSocketEvent) )
mbedalvaro 0:345b3bc7a0ea 126 {
mbedalvaro 0:345b3bc7a0ea 127 m_pCbItem = (CDummy*) pItem;
mbedalvaro 0:345b3bc7a0ea 128 m_pCbMeth = (void (CDummy::*)(TCPSocketEvent)) pMethod;
mbedalvaro 0:345b3bc7a0ea 129 }
mbedalvaro 0:345b3bc7a0ea 130
mbedalvaro 0:345b3bc7a0ea 131 ///Disables callback
mbedalvaro 0:345b3bc7a0ea 132 void resetOnEvent();
mbedalvaro 0:345b3bc7a0ea 133
mbedalvaro 0:345b3bc7a0ea 134 protected:
mbedalvaro 0:345b3bc7a0ea 135 void onNetTcpSocketEvent(NetTcpSocketEvent e);
mbedalvaro 0:345b3bc7a0ea 136 TCPSocketErr checkInst();
mbedalvaro 0:345b3bc7a0ea 137
mbedalvaro 0:345b3bc7a0ea 138 private:
mbedalvaro 0:345b3bc7a0ea 139 NetTcpSocket* m_pNetTcpSocket;
mbedalvaro 0:345b3bc7a0ea 140
mbedalvaro 0:345b3bc7a0ea 141 CDummy* m_pCbItem;
mbedalvaro 0:345b3bc7a0ea 142 void (CDummy::*m_pCbMeth)(TCPSocketEvent);
mbedalvaro 0:345b3bc7a0ea 143
mbedalvaro 0:345b3bc7a0ea 144 void (*m_pCb)(TCPSocketEvent);
mbedalvaro 0:345b3bc7a0ea 145
mbedalvaro 0:345b3bc7a0ea 146 };
mbedalvaro 0:345b3bc7a0ea 147
mbedalvaro 0:345b3bc7a0ea 148 #endif