blob: 72d6ac20de32278e3157f7aa869223965e8f6f1c [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2015, 2016 fortiss GmbH
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Gerd Kainz, Alois Zoitl - initial API and implementation and/or initial documentation
* Alois Zoitl - made better use of generic i2c process interface implementation
* changed from i2c-dev to simple read writes
*******************************************************************************/
#include "processinterface.h"
#include <unistd.h>
CProcessInterface::CProcessInterface(CResource *paSrcRes, const SFBInterfaceSpec *paInterfaceSpec, const CStringDictionary::TStringId paInstanceNameId, TForteByte *paFBConnData, TForteByte *paFBVarsData) :
CI2CProcessInterface(paSrcRes, paInterfaceSpec, paInstanceNameId, paFBConnData, paFBVarsData){
}
CProcessInterface::~CProcessInterface(){
}
bool CProcessInterface::readPin(){
bool retVal = CI2CProcessInterface::readPin();
if(retVal){
//Raspberry PI SPS has inverted inputs so we need to re-invert here
IN_X() = !(IN_X().operator bool());
}
return retVal;
}
bool CProcessInterface::writePin(){
//Raspberry PI SPS has inverted inputs so we need to re-invert here
OUT_X() = !(OUT_X().operator bool());
bool retVal = CI2CProcessInterface::writePin();
//Put the value back to the original one
OUT_X() = !(OUT_X().operator bool());
return retVal;
}
bool CProcessInterface::readWord(){
bool retVal = false;
//set the register to read the analog value from
if(1 == write(mFd, &mValueAddress, 1)){
TForteByte buffer[3];
if(3 == read(mFd, buffer, 3)){
IN_W() = static_cast<TForteWord>(((static_cast<TForteWord>(buffer[2]) << 8) & 0xFF00) |
buffer[1]);
STATUS() = scmOK;
retVal = true;
}
else{
STATUS() = scmCouldNotRead;
}
}
else{
STATUS() = scmCouldNotRead;
}
return retVal;
}