b

Committer:
henryeherman
Date:
Wed Dec 01 03:29:25 2010 +0000
Revision:
0:4841f4169944

        

Who changed what in which revision?

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