text: /*
   * AiHidBase.cpp
   *
   *     Author: Measurement Computing Corporation
   */
  
  #include "AiHidBase.h"
  
  namespace ul
  {
  
  AiHidBase::AiHidBase(const HidDaqDevice& daqDevice): AiDevice(daqDevice), mHidDevice(daqDevice)
  {
  
  }
  
  AiHidBase::~AiHidBase()
  {
  
  }
  
  void AiHidBase::readCalDate()
  {
  	unsigned char calDateBuf[6];
  	int calDateAddr = mAiInfo.getCalDateAddr();
  
  	if(calDateAddr != -1 && getScanState() == SS_IDLE)
  	{
  		int bytesReceived = daqDev().memRead(MT_EEPROM, MR_CAL, calDateAddr, (unsigned char*)calDateBuf, sizeof(calDateBuf));
  
  		if(bytesReceived == sizeof(calDateBuf))
  		{
  			tm time;
  			memset(&time, 0, sizeof(time));
  
  			time.tm_year = calDateBuf[0] + 100;
  			time.tm_mon = calDateBuf[1] - 1;
  			time.tm_mday = calDateBuf[2];
  			time.tm_hour = calDateBuf[3];
  			time.tm_min = calDateBuf[4];
  			time.tm_sec = calDateBuf[5];
  			time.tm_isdst = -1;
  
  			// make sure the date is valid, mktime does not validate the range
  			if(time.tm_mon <= 11 && time.tm_mday <= 31 && time.tm_hour <= 23 && time.tm_min <= 59 && time.tm_sec <= 60)
  			{
  				time_t cal_date_sec = mktime(&time); // seconds since unix epoch
  
  				if(cal_date_sec != -1) // mktime returns  -1 if cal date is invalid
  					mCalDate = cal_date_sec;
  
  				// convert seconds to string
  
  				/*struct tm *timeinfo;
  				timeinfo = localtime(&cal_date_sec);
  				char b[100];
  				strftime(b, 100, "%Y-%m-%d %H:%M:%S", timeinfo);
  				std::cout << b << std::endl;*/
  			}
  		}
  	}
  }
  
  } /* namespace ul */
  