/* ----------------------------------------------------------------- */ /* 'ZUserInputClass.cc' */ /* */ /* */ /* last modified 07/04/2003 */ /* wraps functions for possibe user input and desenifies it */ /* (Make sure servo-power is switched on to power IR-receiver) */ /* (C) Jochen Zimmermann */ /* */ /* */ /* ----------------------------------------------------------------- */ #include "ZHeaders.h" /* //Headerfile is included by ZHeaders.h #include "ZUserInputClass.h" */ //Single Instance is globally created UserInput UserInput::SingleInstance; //constructor //initialises members UserInput::UserInput() { bufferpos=0; for(int i=0;i0) { count=OSGetCount(); OSWait(1); //LCDPrintf("en read"); while( !( pressed=Read() ) && ((-time)<(count-OSGetCount())) );//waiting for any KEY to be pressed or time elapsed } else { while(!(pressed=Read()));//waiting for any KEY to be pressed } return pressed; } //wait for special key to be pressed int UserInput::Wait(int specified_key) //wait for special Key (does not increas Buffer) { int pressed; while(Read()!=specified_key); return GetFromBuffer(); } //empty local buffer int UserInput::Flush() //empty buffer { bufferpos=0; for(int i=0;i=SIZEOFINPUTBUFFER) bufferpos=0; inputbuffer[bufferpos][0]=value; inputbuffer[bufferpos][1]=OSGetCount(); if(!WrapMultiReadings()) return value; else return 0; } //check last buffer int UserInput::GetFromBuffer() { int old=bufferpos; bufferpos--; if(bufferpos<0) bufferpos=SIZEOFINPUTBUFFER-1; return inputbuffer[old][0]; } //delete fast double-reads bool UserInput::WrapMultiReadings() { int pred,timegap; pred=bufferpos-1; timegap=50; //in 1/100 seconds (e.g. 0: timegap <= 1/100 sec, 1: timegap <= 2/100 sec, aso) if(pred<0) pred=SIZEOFINPUTBUFFER-1; //loopback listpointer if( (inputbuffer[bufferpos][0]==inputbuffer[pred][0]) //same value && //in specified ((inputbuffer[bufferpos][1]-inputbuffer[pred][1])<=timegap) //period ) { bufferpos=pred; WrapMultiReadings(); return true; //wrapped something means there was a double read } else return false; //no double read ok }