00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "adcpin.h"
00026 #include "avrerror.h"
00027
00028 AdcPin::AdcPin(const char* fileName, Net& pinNet) throw():
00029 _analogPin(),
00030 _anaFile(fileName)
00031 {
00032 _analogPin.outState = Pin::ANALOG;
00033 pinNet.Add(&_analogPin);
00034
00035 if(!_anaFile)
00036 avr_error("Cannot open Analog input file '%s'.", fileName);
00037 }
00038
00039 char* readNextLine(std::ifstream& f, char* buffer, unsigned len, SystemClockOffset *timeToNextStepIn_ns) {
00040 for(unsigned i = 0; i < 2; ++i){
00041 while(f.getline(buffer, len)){
00042
00043 if(buffer[0] == '#')
00044 continue;
00045 return buffer;
00046 }
00047 f.clear();
00048 f.seekg (0, std::ios::beg);
00049 }
00050 return 0;
00051 }
00052
00053 int AdcPin::Step(bool &trueHwStep, SystemClockOffset *timeToNextStepIn_ns) {
00054 char lineBuffer[1024];
00055
00056 if(!readNextLine(_anaFile, lineBuffer, sizeof(lineBuffer), timeToNextStepIn_ns)) {
00057 _anaFile.close();
00058 }
00059
00060 char* p = lineBuffer;
00061 unsigned long delayInNs = strtoul(p, &p, 0);
00062 int analogValue = (int)strtol(p, &p, 0);
00063
00064 _analogPin.setAnalogValue(analogValue);
00065
00066 *timeToNextStepIn_ns = delayInNs;
00067
00068 return 0;
00069 }
00070