00001 #include <iostream>
00002 #include "pinmon.h"
00003
00004 using namespace std;
00005
00006 PinMonitor::PinMonitor( AvrDevice& avr,
00007 const char* pinNameStr,
00008 const char* pinDescStr,
00009 const char* pinHighStr,
00010 const char* pinLowStr
00011 ) throw():
00012 _prevState(true)
00013 {
00014 Pin* pin = avr.GetPin(pinNameStr);
00015 pin->RegisterCallback(this);
00016 _pinDescStr = pinDescStr?pinDescStr:pinNameStr;
00017 _pinHighStr = pinHighStr?pinHighStr:"HIGH";
00018 _pinLowStr = pinLowStr?pinLowStr:"LOW";
00019 }
00020
00021 void PinMonitor::PinStateHasChanged(Pin* pin){
00022 const char* stateStr;
00023 if((bool)*pin == _prevState){
00024 return;
00025 }
00026 if((bool)*pin){
00027 stateStr = _pinHighStr;
00028 _prevState = true;
00029 }
00030 else {
00031 stateStr = _pinLowStr;
00032 _prevState = false;
00033 }
00034
00035 cout << _pinDescStr << ": " << stateStr << endl;
00036 }
00037