The IrcBot class can connect to a channel on an IRC network. Users on the same network can send messages to the bot that are parsed by message handlers. The included handlers read digital/analog inputs and write digital outputs or echo messages back to the command sender/channel. Users can write their own message handlers inheriting from the MessageHandler class to perform different actions.
IrcMessageHandlers.cpp@2:e4c74eb20586, 2014-08-02 (annotated)
- Committer:
- NickRyder
- Date:
- Sat Aug 02 12:57:57 2014 +0000
- Revision:
- 2:e4c74eb20586
- Parent:
- 1:cf586c9bbb52
Added documentation.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
NickRyder | 1:cf586c9bbb52 | 1 | #include "IrcMessageHandlers.h" |
NickRyder | 0:b8fb2df56652 | 2 | |
NickRyder | 0:b8fb2df56652 | 3 | DigitalOutHandler::DigitalOutHandler(char * n, PinName p, bool v) : |
NickRyder | 0:b8fb2df56652 | 4 | pin(p), verbose(v) |
NickRyder | 0:b8fb2df56652 | 5 | { |
NickRyder | 0:b8fb2df56652 | 6 | sprintf(name, "%s", n); |
NickRyder | 0:b8fb2df56652 | 7 | pin = 0; |
NickRyder | 0:b8fb2df56652 | 8 | } |
NickRyder | 0:b8fb2df56652 | 9 | |
NickRyder | 0:b8fb2df56652 | 10 | IrcMessage DigitalOutHandler::handle(IrcMessage msg) { |
NickRyder | 0:b8fb2df56652 | 11 | IrcMessage reply; |
NickRyder | 0:b8fb2df56652 | 12 | if (verbose) { |
NickRyder | 0:b8fb2df56652 | 13 | if (msg.to[0] == '#') { |
NickRyder | 0:b8fb2df56652 | 14 | strcpy(reply.to, msg.to); |
NickRyder | 0:b8fb2df56652 | 15 | } else { |
NickRyder | 0:b8fb2df56652 | 16 | strcpy(reply.to, msg.from); |
NickRyder | 0:b8fb2df56652 | 17 | } |
NickRyder | 0:b8fb2df56652 | 18 | } |
NickRyder | 0:b8fb2df56652 | 19 | char required[64]; |
NickRyder | 0:b8fb2df56652 | 20 | sprintf(required, "WRITE %s", name); |
NickRyder | 0:b8fb2df56652 | 21 | char * c = NULL; |
NickRyder | 0:b8fb2df56652 | 22 | c = strstr(msg.msg, required); |
NickRyder | 0:b8fb2df56652 | 23 | if (c != NULL) { |
NickRyder | 0:b8fb2df56652 | 24 | c = strstr(msg.msg, "ON"); |
NickRyder | 0:b8fb2df56652 | 25 | if (c != NULL) { |
NickRyder | 0:b8fb2df56652 | 26 | pin = 1; |
NickRyder | 0:b8fb2df56652 | 27 | if (verbose) { |
NickRyder | 0:b8fb2df56652 | 28 | sprintf(reply.msg, "SET %s ON", name); |
NickRyder | 0:b8fb2df56652 | 29 | } |
NickRyder | 0:b8fb2df56652 | 30 | } |
NickRyder | 0:b8fb2df56652 | 31 | c = strstr(msg.msg, "OFF"); |
NickRyder | 0:b8fb2df56652 | 32 | if (c != NULL) { |
NickRyder | 0:b8fb2df56652 | 33 | pin = 0; |
NickRyder | 0:b8fb2df56652 | 34 | if (verbose) { |
NickRyder | 0:b8fb2df56652 | 35 | sprintf(reply.msg, "SET %s OFF", name); |
NickRyder | 0:b8fb2df56652 | 36 | } |
NickRyder | 0:b8fb2df56652 | 37 | } |
NickRyder | 0:b8fb2df56652 | 38 | } |
NickRyder | 0:b8fb2df56652 | 39 | return reply; |
NickRyder | 0:b8fb2df56652 | 40 | } |
NickRyder | 0:b8fb2df56652 | 41 | |
NickRyder | 0:b8fb2df56652 | 42 | DigitalInHandler::DigitalInHandler(char * n, PinName p) : |
NickRyder | 0:b8fb2df56652 | 43 | pin(p) |
NickRyder | 0:b8fb2df56652 | 44 | { |
NickRyder | 0:b8fb2df56652 | 45 | sprintf(name, "%s", n); |
NickRyder | 0:b8fb2df56652 | 46 | } |
NickRyder | 0:b8fb2df56652 | 47 | |
NickRyder | 0:b8fb2df56652 | 48 | IrcMessage DigitalInHandler::handle(IrcMessage msg) { |
NickRyder | 0:b8fb2df56652 | 49 | IrcMessage reply; |
NickRyder | 0:b8fb2df56652 | 50 | if (msg.to[0] == '#') { |
NickRyder | 0:b8fb2df56652 | 51 | strcpy(reply.to, msg.to); |
NickRyder | 0:b8fb2df56652 | 52 | } else { |
NickRyder | 0:b8fb2df56652 | 53 | strcpy(reply.to, msg.from); |
NickRyder | 0:b8fb2df56652 | 54 | } |
NickRyder | 0:b8fb2df56652 | 55 | char required[64]; |
NickRyder | 0:b8fb2df56652 | 56 | sprintf(required, "READ %s", name); |
NickRyder | 0:b8fb2df56652 | 57 | char * c = NULL; |
NickRyder | 0:b8fb2df56652 | 58 | c = strstr(msg.msg, required); |
NickRyder | 0:b8fb2df56652 | 59 | if (c != NULL) { |
NickRyder | 0:b8fb2df56652 | 60 | if (pin) { |
NickRyder | 0:b8fb2df56652 | 61 | sprintf(reply.msg, "%s is ON", name); |
NickRyder | 0:b8fb2df56652 | 62 | } else { |
NickRyder | 0:b8fb2df56652 | 63 | sprintf(reply.msg, "%s is OFF", name); |
NickRyder | 0:b8fb2df56652 | 64 | } |
NickRyder | 0:b8fb2df56652 | 65 | } |
NickRyder | 0:b8fb2df56652 | 66 | return reply; |
NickRyder | 0:b8fb2df56652 | 67 | } |
NickRyder | 0:b8fb2df56652 | 68 | |
NickRyder | 0:b8fb2df56652 | 69 | AnalogInHandler::AnalogInHandler(char * n, PinName p) : |
NickRyder | 0:b8fb2df56652 | 70 | pin(p), scaleval(1.0) |
NickRyder | 0:b8fb2df56652 | 71 | { |
NickRyder | 0:b8fb2df56652 | 72 | sprintf(name, "%s", n); |
NickRyder | 0:b8fb2df56652 | 73 | sprintf(unit, ""); |
NickRyder | 0:b8fb2df56652 | 74 | } |
NickRyder | 0:b8fb2df56652 | 75 | |
NickRyder | 0:b8fb2df56652 | 76 | void AnalogInHandler::scale(float s, char * u) { |
NickRyder | 0:b8fb2df56652 | 77 | scaleval = s; |
NickRyder | 0:b8fb2df56652 | 78 | sprintf(unit, "%s", u); |
NickRyder | 0:b8fb2df56652 | 79 | } |
NickRyder | 0:b8fb2df56652 | 80 | |
NickRyder | 0:b8fb2df56652 | 81 | IrcMessage AnalogInHandler::handle(IrcMessage msg) { |
NickRyder | 0:b8fb2df56652 | 82 | IrcMessage reply; |
NickRyder | 0:b8fb2df56652 | 83 | if (msg.to[0] == '#') { |
NickRyder | 0:b8fb2df56652 | 84 | strcpy(reply.to, msg.to); |
NickRyder | 0:b8fb2df56652 | 85 | } else { |
NickRyder | 0:b8fb2df56652 | 86 | strcpy(reply.to, msg.from); |
NickRyder | 0:b8fb2df56652 | 87 | } |
NickRyder | 0:b8fb2df56652 | 88 | char required[64]; |
NickRyder | 0:b8fb2df56652 | 89 | sprintf(required, "READ %s", name); |
NickRyder | 0:b8fb2df56652 | 90 | char * c = NULL; |
NickRyder | 0:b8fb2df56652 | 91 | c = strstr(msg.msg, required); |
NickRyder | 0:b8fb2df56652 | 92 | if (c != NULL) { |
NickRyder | 0:b8fb2df56652 | 93 | float v = pin * scaleval; |
NickRyder | 0:b8fb2df56652 | 94 | sprintf(reply.msg, "%s = %f %s", name, v, unit); |
NickRyder | 0:b8fb2df56652 | 95 | } |
NickRyder | 0:b8fb2df56652 | 96 | return reply; |
NickRyder | 0:b8fb2df56652 | 97 | } |
NickRyder | 0:b8fb2df56652 | 98 | |
NickRyder | 0:b8fb2df56652 | 99 | IrcMessage EchoHandler::handle(IrcMessage msg) { |
NickRyder | 0:b8fb2df56652 | 100 | IrcMessage reply; |
NickRyder | 0:b8fb2df56652 | 101 | char * c = NULL; |
NickRyder | 0:b8fb2df56652 | 102 | c = strstr(msg.msg, "ECHO "); |
NickRyder | 0:b8fb2df56652 | 103 | if (c != NULL) { |
NickRyder | 0:b8fb2df56652 | 104 | strcpy(reply.from, msg.to); |
NickRyder | 0:b8fb2df56652 | 105 | if (msg.to[0] == '#') { |
NickRyder | 0:b8fb2df56652 | 106 | strcpy(reply.to, msg.to); |
NickRyder | 0:b8fb2df56652 | 107 | } else { |
NickRyder | 0:b8fb2df56652 | 108 | strcpy(reply.to, msg.from); |
NickRyder | 0:b8fb2df56652 | 109 | } |
NickRyder | 0:b8fb2df56652 | 110 | strcpy(reply.msg, c + 5); |
NickRyder | 0:b8fb2df56652 | 111 | } |
NickRyder | 0:b8fb2df56652 | 112 | return reply; |
NickRyder | 0:b8fb2df56652 | 113 | } |