A simple UDP logger that lets you send messages via UDP to a remote host. It's a cheap implementation for logging to a remove host via UDP. Note, the logger is uses UDP sockets provided by NetServices (https://mbed.org/cookbook/NetServices). After you are ready with the network setup (eth.setup()...), just call Log::init(), so the logger would create its local socket, and then you can log any text via Log::log(); Also note that the logger won't do any net polls (eth.poll()) to save computing time, so it's up to you to handle it.

Committer:
screamer
Date:
Sun Mar 04 20:42:10 2012 +0000
Revision:
0:959f4bf01f37
initial release

Who changed what in which revision?

UserRevisionLine numberNew contents of line
screamer 0:959f4bf01f37 1
screamer 0:959f4bf01f37 2 /*
screamer 0:959f4bf01f37 3 Copyright (c) 2012 Mihail Stoyanov (wm [at] screamer [dot] org)
screamer 0:959f4bf01f37 4
screamer 0:959f4bf01f37 5 Permission is hereby granted, free of charge, to any person obtaining a copy
screamer 0:959f4bf01f37 6 of this software and associated documentation files (the "Software"), to deal
screamer 0:959f4bf01f37 7 in the Software without restriction, including without limitation the rights
screamer 0:959f4bf01f37 8 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
screamer 0:959f4bf01f37 9 copies of the Software, and to permit persons to whom the Software is
screamer 0:959f4bf01f37 10 furnished to do so, subject to the following conditions:
screamer 0:959f4bf01f37 11
screamer 0:959f4bf01f37 12 The above copyright notice and this permission notice shall be included in
screamer 0:959f4bf01f37 13 all copies or substantial portions of the Software.
screamer 0:959f4bf01f37 14
screamer 0:959f4bf01f37 15 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
screamer 0:959f4bf01f37 16 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
screamer 0:959f4bf01f37 17 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
screamer 0:959f4bf01f37 18 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
screamer 0:959f4bf01f37 19 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
screamer 0:959f4bf01f37 20 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
screamer 0:959f4bf01f37 21 THE SOFTWARE.
screamer 0:959f4bf01f37 22 */
screamer 0:959f4bf01f37 23
screamer 0:959f4bf01f37 24
screamer 0:959f4bf01f37 25 #ifndef LOG_H
screamer 0:959f4bf01f37 26 #define LOG_H
screamer 0:959f4bf01f37 27
screamer 0:959f4bf01f37 28 #include "mbed.h"
screamer 0:959f4bf01f37 29 #include "UDPSocket.h"
screamer 0:959f4bf01f37 30
screamer 0:959f4bf01f37 31
screamer 0:959f4bf01f37 32 class Log {
screamer 0:959f4bf01f37 33 private:
screamer 0:959f4bf01f37 34 UDPSocket sock;
screamer 0:959f4bf01f37 35 int lPort;
screamer 0:959f4bf01f37 36 Host lHost;
screamer 0:959f4bf01f37 37 Host dHost;
screamer 0:959f4bf01f37 38
screamer 0:959f4bf01f37 39 bool is_init;
screamer 0:959f4bf01f37 40
screamer 0:959f4bf01f37 41 public:
screamer 0:959f4bf01f37 42 ///Constructor
screamer 0:959f4bf01f37 43 /**
screamer 0:959f4bf01f37 44 @param port : local UDP bind port even though the logger doesn't acccept messages
screamer 0:959f4bf01f37 45 */
screamer 0:959f4bf01f37 46 Log (int port = 10000) {
screamer 0:959f4bf01f37 47 lPort = port;
screamer 0:959f4bf01f37 48 };
screamer 0:959f4bf01f37 49
screamer 0:959f4bf01f37 50 ///The actual init method, which should be called after the ethernet is initialized
screamer 0:959f4bf01f37 51 /**
screamer 0:959f4bf01f37 52 @param pHost : the destination UDP server - Host dHost(IpAddr(1,2,3,4), port)
screamer 0:959f4bf01f37 53
screamer 0:959f4bf01f37 54 Can be called multiple times to switch destination UDP servers
screamer 0:959f4bf01f37 55 */
screamer 0:959f4bf01f37 56 inline bool init(Host pHost) {
screamer 0:959f4bf01f37 57 Host lHost(IpAddr(), lPort);
screamer 0:959f4bf01f37 58
screamer 0:959f4bf01f37 59 UDPSocketErr udpErr = sock.bind(lHost);
screamer 0:959f4bf01f37 60 if (udpErr != UDPSOCKET_OK) {
screamer 0:959f4bf01f37 61 printf("error %d\n", udpErr);
screamer 0:959f4bf01f37 62 return false;
screamer 0:959f4bf01f37 63 };
screamer 0:959f4bf01f37 64
screamer 0:959f4bf01f37 65 dHost = pHost;
screamer 0:959f4bf01f37 66 is_init = true;
screamer 0:959f4bf01f37 67
screamer 0:959f4bf01f37 68 return true;
screamer 0:959f4bf01f37 69 };
screamer 0:959f4bf01f37 70
screamer 0:959f4bf01f37 71 ///The logging method.
screamer 0:959f4bf01f37 72 inline bool log(const char *msg) {
screamer 0:959f4bf01f37 73 if (!is_init) return false;
screamer 0:959f4bf01f37 74
screamer 0:959f4bf01f37 75 int sent = sock.sendto(msg, strlen(msg), &dHost);
screamer 0:959f4bf01f37 76 if (sent < 0) {
screamer 0:959f4bf01f37 77 printf("error %d\n", (UDPSocketErr)sent);
screamer 0:959f4bf01f37 78 };
screamer 0:959f4bf01f37 79
screamer 0:959f4bf01f37 80 return true;
screamer 0:959f4bf01f37 81 };
screamer 0:959f4bf01f37 82 };
screamer 0:959f4bf01f37 83
screamer 0:959f4bf01f37 84 #endif