182 lines
3.9 KiB
C++
182 lines
3.9 KiB
C++
/*
|
|
*
|
|
* NOTES:
|
|
*
|
|
* REVISIONS:
|
|
* ker04DEC92 Initial OS/2 Revision
|
|
* pcy26Jan93: Superclassed EepromChoiceSensor w/ EepromSensor
|
|
* pcy26Jan93: Handle Dip switch events
|
|
* rct15Jun93: Added error code for getAllowedValues()
|
|
* cad04Mar94: fix for access problem
|
|
* dml13Oct95: fixed assignment in logical expression (needed ==)
|
|
* cgm12Apr96: Add destructor with unregister
|
|
* inf20Mar97: Loaded error string from resource file
|
|
* mholly22Oct98 : recognize ErrITEM_NOT_FOUND as a valid error from
|
|
* theConfigManager->Get in the getAllowedValues method
|
|
*/
|
|
|
|
extern "C" {
|
|
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
#include <malloc.h>
|
|
#include <string.h>
|
|
}
|
|
|
|
#include "eeprom.h"
|
|
#include "cfgmgr.h"
|
|
#include "event.h"
|
|
#include "device.h"
|
|
|
|
|
|
//Constructor
|
|
|
|
EepromSensor::EepromSensor(PDevice aParent, PCommController aCommController,
|
|
INT aSensorCode, ACCESSTYPE anACCESSTYPE)
|
|
: Sensor(aParent,aCommController, aSensorCode, anACCESSTYPE)
|
|
{
|
|
theCommController->RegisterEvent(EEPROM_CHANGED, this);
|
|
}
|
|
|
|
EepromSensor::~EepromSensor()
|
|
{
|
|
theCommController->UnregisterEvent(EEPROM_CHANGED, this);
|
|
}
|
|
|
|
INT EepromSensor::Update(PEvent anEvent)
|
|
{
|
|
INT val;
|
|
|
|
switch(anEvent->GetCode()) {
|
|
case EEPROM_CHANGED:
|
|
//
|
|
//
|
|
DeepGet();
|
|
break;
|
|
case DIP_SWITCH_POSITION:
|
|
//
|
|
// If the dip swicthes change, reget the valu from the UPS
|
|
// and if not all zeros, we cant change the settings so we
|
|
// set our access to read only. This probably shouldn't be
|
|
// here since it ties UPS implementation to the values of the
|
|
// Dip switches. Oh well.
|
|
//
|
|
DeepGet();
|
|
|
|
val = (atoi(anEvent->GetValue()) == 0) ? AREAD_WRITE : AREAD_ONLY;
|
|
SetEepromAccess(val);
|
|
break;
|
|
default:
|
|
Sensor::Update(anEvent);
|
|
break;
|
|
}
|
|
return ErrNO_ERROR;
|
|
}
|
|
|
|
INT EepromSensor::Set(const PCHAR aValue)
|
|
{
|
|
return Sensor::Set(aValue);
|
|
}
|
|
|
|
|
|
VOID EepromSensor::SetEepromAccess(INT anAccessCode)
|
|
{
|
|
readOnly = (ACCESSTYPE)anAccessCode;
|
|
}
|
|
|
|
|
|
INT EepromSensor::setInitialValue()
|
|
{
|
|
return ErrNO_ERROR;
|
|
}
|
|
|
|
|
|
EepromChoiceSensor:: EepromChoiceSensor(PDevice aParent, PCommController aCommController,
|
|
INT aSensorCode, ACCESSTYPE anACCESSTYPE)
|
|
:EepromSensor(aParent,aCommController, aSensorCode, anACCESSTYPE)
|
|
{
|
|
//Set the Values
|
|
theAllowedValues = (PCHAR)NULL;
|
|
}
|
|
|
|
EepromChoiceSensor::~EepromChoiceSensor() {
|
|
free(theAllowedValues);
|
|
}
|
|
|
|
INT EepromChoiceSensor::Validate(INT aCode, const PCHAR aValue)
|
|
{
|
|
INT err = ErrNO_ERROR;
|
|
|
|
if(aCode!=theSensorCode)
|
|
err = ErrINVALID_CODE;
|
|
|
|
if(theAllowedValues != (PCHAR)NULL) {
|
|
if(strstr(theAllowedValues, aValue))
|
|
err = ErrNO_ERROR;
|
|
else
|
|
err = ErrINVALID_VALUE;
|
|
}
|
|
else {
|
|
err = ErrINVALID_VALUE;
|
|
}
|
|
return err;
|
|
}
|
|
|
|
|
|
INT EepromChoiceSensor::Get(INT aCode, PCHAR aValue)
|
|
{
|
|
INT err = ErrNO_ERROR;
|
|
|
|
switch(aCode)
|
|
{
|
|
case ALLOWED_VALUES:
|
|
getCurrentAllowedValues(aValue);
|
|
break;
|
|
|
|
default:
|
|
err = Sensor::Get(aCode, aValue);
|
|
break;
|
|
}
|
|
return err;
|
|
}
|
|
|
|
|
|
|
|
INT EepromChoiceSensor::getAllowedValues()
|
|
{
|
|
CHAR value[128];
|
|
CHAR allowedValue[128] = "";
|
|
|
|
INT cCode = _theConfigManager->GetListValue(lookupSensorName(IsA()),
|
|
"AllowedValues", value);
|
|
theDevice->GetAllowedValue(theSensorCode, allowedValue);
|
|
|
|
if (strlen(allowedValue))
|
|
{
|
|
theAllowedValues = _strdup(allowedValue);
|
|
return ErrNO_ERROR;
|
|
}
|
|
else
|
|
{
|
|
theAllowedValues = _strdup(value);
|
|
return cCode;
|
|
}
|
|
}
|
|
|
|
|
|
VOID EepromChoiceSensor::getCurrentAllowedValues(PCHAR aValue)
|
|
{
|
|
if (theAllowedValues)
|
|
{
|
|
strcpy(aValue, theAllowedValues);
|
|
}
|
|
else
|
|
{
|
|
strcpy(aValue, "");
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|