None

Dependencies:   mbed

Committer:
henryeherman
Date:
Wed Dec 01 03:28:28 2010 +0000
Revision:
0:6ae7b9747a06
A

Who changed what in which revision?

UserRevisionLine numberNew contents of line
henryeherman 0:6ae7b9747a06 1 #include "handler.h"
henryeherman 0:6ae7b9747a06 2 #include "com.h"
henryeherman 0:6ae7b9747a06 3
henryeherman 0:6ae7b9747a06 4
henryeherman 0:6ae7b9747a06 5
henryeherman 0:6ae7b9747a06 6 Handler::Handler(char *nm) {
henryeherman 0:6ae7b9747a06 7 name = nm;
henryeherman 0:6ae7b9747a06 8 init();
henryeherman 0:6ae7b9747a06 9 stringState=NOTREADY;
henryeherman 0:6ae7b9747a06 10 }
henryeherman 0:6ae7b9747a06 11
henryeherman 0:6ae7b9747a06 12
henryeherman 0:6ae7b9747a06 13 void Handler::init() {
henryeherman 0:6ae7b9747a06 14 #ifdef DEBUGHAND
henryeherman 0:6ae7b9747a06 15 com.printf("INIT HANDLER\r\n");
henryeherman 0:6ae7b9747a06 16 #endif
henryeherman 0:6ae7b9747a06 17 state = WAITINGON_S;
henryeherman 0:6ae7b9747a06 18 resetMatch();
henryeherman 0:6ae7b9747a06 19 }
henryeherman 0:6ae7b9747a06 20
henryeherman 0:6ae7b9747a06 21 void Handler::resetMatch() {
henryeherman 0:6ae7b9747a06 22 #ifdef DEBUGHAND
henryeherman 0:6ae7b9747a06 23 com.printf("RESET MATCH STRING\r\n");
henryeherman 0:6ae7b9747a06 24 #endif
henryeherman 0:6ae7b9747a06 25 matchString[0]='\0';
henryeherman 0:6ae7b9747a06 26 pmatchString = matchString;
henryeherman 0:6ae7b9747a06 27 }
henryeherman 0:6ae7b9747a06 28
henryeherman 0:6ae7b9747a06 29
henryeherman 0:6ae7b9747a06 30 void Handler::run() {
henryeherman 0:6ae7b9747a06 31 int c;
henryeherman 0:6ae7b9747a06 32 if (!com.readable()) {
henryeherman 0:6ae7b9747a06 33 return;
henryeherman 0:6ae7b9747a06 34 }
henryeherman 0:6ae7b9747a06 35 c = com.getc();
henryeherman 0:6ae7b9747a06 36
henryeherman 0:6ae7b9747a06 37 #ifdef DEBUGHAND
henryeherman 0:6ae7b9747a06 38 com.printf("READ CHAR, %c\r\n", c);
henryeherman 0:6ae7b9747a06 39 #endif
henryeherman 0:6ae7b9747a06 40
henryeherman 0:6ae7b9747a06 41 switch (state) {
henryeherman 0:6ae7b9747a06 42 case WAITINGON_S:
henryeherman 0:6ae7b9747a06 43 recievedStart(c);
henryeherman 0:6ae7b9747a06 44 break;
henryeherman 0:6ae7b9747a06 45 case RECIEVING_MATCH:
henryeherman 0:6ae7b9747a06 46 processChar(c);
henryeherman 0:6ae7b9747a06 47 break;
henryeherman 0:6ae7b9747a06 48 default:
henryeherman 0:6ae7b9747a06 49 //should not get here
henryeherman 0:6ae7b9747a06 50 hostError();
henryeherman 0:6ae7b9747a06 51 break;
henryeherman 0:6ae7b9747a06 52
henryeherman 0:6ae7b9747a06 53 }
henryeherman 0:6ae7b9747a06 54 }
henryeherman 0:6ae7b9747a06 55
henryeherman 0:6ae7b9747a06 56 void Handler::processChar(char c) {
henryeherman 0:6ae7b9747a06 57 switch (c) {
henryeherman 0:6ae7b9747a06 58 case ONECHR:
henryeherman 0:6ae7b9747a06 59 case ZEROCHR:
henryeherman 0:6ae7b9747a06 60 recieveMatchString(c);
henryeherman 0:6ae7b9747a06 61 #ifdef DEBUGHAND
henryeherman 0:6ae7b9747a06 62 com.printf("REC 1 or 0\r\n");
henryeherman 0:6ae7b9747a06 63 #endif
henryeherman 0:6ae7b9747a06 64 break;
henryeherman 0:6ae7b9747a06 65 case '\r':
henryeherman 0:6ae7b9747a06 66 case ' ':
henryeherman 0:6ae7b9747a06 67 case '\n':
henryeherman 0:6ae7b9747a06 68 //do nothing
henryeherman 0:6ae7b9747a06 69 break;
henryeherman 0:6ae7b9747a06 70 case ENDCHAR:
henryeherman 0:6ae7b9747a06 71 #ifdef DEBUGHAND
henryeherman 0:6ae7b9747a06 72 com.printf("REC E\r\n");
henryeherman 0:6ae7b9747a06 73 #endif
henryeherman 0:6ae7b9747a06 74 matchStringRecieved();
henryeherman 0:6ae7b9747a06 75 break;
henryeherman 0:6ae7b9747a06 76 default:
henryeherman 0:6ae7b9747a06 77 hostError();
henryeherman 0:6ae7b9747a06 78 }
henryeherman 0:6ae7b9747a06 79 }
henryeherman 0:6ae7b9747a06 80
henryeherman 0:6ae7b9747a06 81
henryeherman 0:6ae7b9747a06 82 void Handler::hostError() {
henryeherman 0:6ae7b9747a06 83 com.printf(HOSTERROR);
henryeherman 0:6ae7b9747a06 84 init();
henryeherman 0:6ae7b9747a06 85 }
henryeherman 0:6ae7b9747a06 86
henryeherman 0:6ae7b9747a06 87 void Handler::recieveMatchString(char c) {
henryeherman 0:6ae7b9747a06 88 *pmatchString = c;
henryeherman 0:6ae7b9747a06 89 pmatchString++;
henryeherman 0:6ae7b9747a06 90 }
henryeherman 0:6ae7b9747a06 91
henryeherman 0:6ae7b9747a06 92 void Handler::recievedStart(char c) {
henryeherman 0:6ae7b9747a06 93 if (c==STARTCHAR) {
henryeherman 0:6ae7b9747a06 94 #ifdef DEBUGHAND
henryeherman 0:6ae7b9747a06 95 com.printf("REC S\r\n");
henryeherman 0:6ae7b9747a06 96 #endif
henryeherman 0:6ae7b9747a06 97 state = RECIEVING_MATCH;
henryeherman 0:6ae7b9747a06 98 stringState = NOTREADY;
henryeherman 0:6ae7b9747a06 99 resetMatch();
henryeherman 0:6ae7b9747a06 100 }
henryeherman 0:6ae7b9747a06 101 }
henryeherman 0:6ae7b9747a06 102
henryeherman 0:6ae7b9747a06 103 void Handler::matchStringRecieved() {
henryeherman 0:6ae7b9747a06 104 #ifdef DEBUGHAND
henryeherman 0:6ae7b9747a06 105 com.printf("COMPLETE\r\n");
henryeherman 0:6ae7b9747a06 106 #endif
henryeherman 0:6ae7b9747a06 107 *pmatchString=NULL;
henryeherman 0:6ae7b9747a06 108 strcpy(completeMatchString, matchString);
henryeherman 0:6ae7b9747a06 109 com.printf("ARMED-%s\r\n",matchString);
henryeherman 0:6ae7b9747a06 110 init();
henryeherman 0:6ae7b9747a06 111 stringState=READY;
henryeherman 0:6ae7b9747a06 112 }
henryeherman 0:6ae7b9747a06 113
henryeherman 0:6ae7b9747a06 114
henryeherman 0:6ae7b9747a06 115
henryeherman 0:6ae7b9747a06 116 bool Handler::isReady() {
henryeherman 0:6ae7b9747a06 117 if (stringState==READY) {
henryeherman 0:6ae7b9747a06 118 return true;
henryeherman 0:6ae7b9747a06 119 } else {
henryeherman 0:6ae7b9747a06 120 return false;
henryeherman 0:6ae7b9747a06 121 }
henryeherman 0:6ae7b9747a06 122 }
henryeherman 0:6ae7b9747a06 123
henryeherman 0:6ae7b9747a06 124 char *Handler::getMatchString() {
henryeherman 0:6ae7b9747a06 125 return completeMatchString;
henryeherman 0:6ae7b9747a06 126 }