102 lines
2.8 KiB
C++
102 lines
2.8 KiB
C++
/*******************************************************************************
|
|
* *
|
|
* Société de Transports de Montréal. *
|
|
* 2012 *
|
|
* *
|
|
* Projet Zones Tests *
|
|
* *
|
|
* *
|
|
* *
|
|
*******************************************************************************/
|
|
/*
|
|
Description:
|
|
Pilote d'interface avec un module d'entrées discrètes SEAIO440
|
|
Hérite de COutputModule et réimplémente les fonctions virtuelles d'accès aux
|
|
données du module de sorties externes.
|
|
|
|
*/
|
|
|
|
/* ************************************************************************** */
|
|
/* Revision:
|
|
### 20121213 JFM
|
|
Verision d'origine.
|
|
|
|
### YYYYMMDD Description du besoin ou du bug
|
|
Description du changement.
|
|
*/
|
|
|
|
/* ************************************************************************** */
|
|
|
|
#include "Seaio440driver.h"
|
|
#include "EngLog.h"
|
|
|
|
CSeaIO440Module::CSeaIO440Module(CSeaMaxLin *ModuleDriverPtr)
|
|
{
|
|
mModuleDriverPtr = ModuleDriverPtr;
|
|
mModuleType = EXT_IO_TYPE_440;
|
|
mOutputBuffer = 0;
|
|
}
|
|
|
|
CSeaIO440Module::~CSeaIO440Module()
|
|
{
|
|
// qDebug("clear outputs");
|
|
// quint32 out = 0;
|
|
// SetOutput(out);
|
|
}
|
|
|
|
unsigned int CSeaIO440Module::SetOutput(unsigned char *OutputBuffer)
|
|
{
|
|
if(mModuleDriverPtr == 0)
|
|
return RET_ERROR;
|
|
|
|
if(OutputBuffer == 0)
|
|
return RET_ERROR;
|
|
|
|
mSeaIOModuleType = COILS; //Output type
|
|
mRegisterStart = 1; //Start with input 1
|
|
mRegisterRange = 32; //Set all the 32 outputs
|
|
|
|
int RET = mModuleDriverPtr->Write(mModuleAddress,mSeaIOModuleType,mRegisterStart,mRegisterRange,&OutputBuffer[0]);
|
|
if(RET < 0)
|
|
{
|
|
CEngLog::instance()->AddLogString(QString("SeaIO440 Modbus write FAILED: %d").arg(RET));
|
|
}
|
|
|
|
return RET_OK;
|
|
}
|
|
|
|
unsigned int CSeaIO440Module::SetOutput(quint32 buffer)
|
|
{
|
|
unsigned char buf[4];
|
|
memcpy(&buf[0],&buffer,4);
|
|
mOutputBuffer = buffer;
|
|
|
|
SetOutput(buf);
|
|
return RET_OK;
|
|
}
|
|
|
|
unsigned int CSeaIO440Module::SetOutputFlags(quint32 FlagMask)
|
|
{
|
|
|
|
mOutputBuffer |= FlagMask;
|
|
SetOutput(mOutputBuffer);
|
|
|
|
return RET_OK;
|
|
}
|
|
|
|
unsigned int CSeaIO440Module::ClearOutputFlags(quint32 FlagMask)
|
|
{
|
|
mOutputBuffer &= ~FlagMask;
|
|
SetOutput(mOutputBuffer);
|
|
|
|
return RET_OK;
|
|
}
|
|
|
|
unsigned int CSeaIO440Module::ToggleOutputFlags(quint32 FlagMask)
|
|
{
|
|
mOutputBuffer ^= FlagMask;
|
|
SetOutput(mOutputBuffer);
|
|
|
|
return RET_OK;
|
|
}
|