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.

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?

UserRevisionLine numberNew 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 }