blob: 0e7d824fffead646ed252589b09f54062716edfd [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2015, 2016 fortiss GmbH
* 2019 Robert Promok
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
* Jose Cabral - expansion of capabilities
* Robert Promok - added functions
*******************************************************************************/
#ifndef _PROCESSINTERFACE_H_
#define _PROCESSINTERFACE_H_
#include <../../stdfblib/io/processinterfacebase.h>
#include <vector>
#include <string>
#include <fstream>
struct st_ButtonVariables {
int nmbutton;
int nmFd;
};
enum ETypeOfIO {
UNDEFINED,
LED,
SENSOR,
SENSORW_VALUE,
SENSORW_MODE,
BUTTON,
MOTOR_ENABLE,
MOTOR_ENABLE_SPEED,
MOTOR_RELATIVE_POSITION,
MOTOR_ABSOLUTE_POSITION,
MOTOR_RESET,
MOTOR_PWM,
MOTOR_SPEED,
MOTOR_SPEEDSETPOINT,
MOTOR_POSITIONSETPOINT,
MOTOR_STOP,
MOTOR_POSITION,
MOTOR_ROT,
};
class CLMSEV3ProcessInterface : public CProcessInterfaceBase{
public:
CLMSEV3ProcessInterface(CResource *paSrcRes, const SFBInterfaceSpec *paInterfaceSpec, const CStringDictionary::TStringId paInstanceNameId, TForteByte *paFBConnData, TForteByte *paFBVarsData);
virtual ~CLMSEV3ProcessInterface();
protected:
bool initialise(bool paIsInput);
bool deinitialise();
bool writePin();
bool readPin();
bool readWord();
bool writeWord();
bool readDWord();
bool writeDWord();
private:
static const std::string scmLEDID;
static const std::string scmSensorID;
static const std::string scmSensorWID;
static const std::string scmButtonID;
static const std::string scmMotorID;
static const std::string scmModeID; /* Used together wuth sensorw*/
/* Used together with Motor */
static const std::string scmEnableID;
static const std::string scmEnableSpeedID;
static const std::string scmRelPositionID;
static const std::string scmAbsPositionID;
static const std::string scmResetID;
static const std::string scmPWMID;
static const std::string scmSPEEDID;
static const std::string scmSPEEDSETPOINTID;
static const std::string scmPOSITIONSETPOINTID;
static const std::string scmStopID;
static const std::string scmPositionID;
static const std::string scmRotID;
static const char * const scmOK;
static const char * const scmNotInitialised;
static const char * const scmCouldNotRead;
static const char * const scmCouldNotWrite;
bool setupLED(const std::vector<std::string> &paParamList, bool paIsInput);
bool setupSensor(const std::vector<std::string> &paParamList, bool paIsInput);
bool setupSensorW(const std::vector<std::string> &paParamList, bool paIsInput);
bool setupMotor(const std::vector<std::string> &paParamList, bool paIsInput);
bool setupButton(const std::string &paParam, bool paIsInput);
/**
* return: 0 if no error, 1 if it is not initialized, 2 if it couldn't read
*/
int readNumberFromFile(TForteInt32* paResult);
bool setupSensorMode(const std::vector<std::string> &paParamList, bool paIsInput);
bool setupSensorValue(const std::vector<std::string> &paParamList);
std::vector<std::string> generateParameterList();
static int findNumberFromPort(const std::string &paBasePath, const std::string &paEv3Port);
std::fstream mFile; //!< the file to be used for this process interface instance
int mnTypeOfIO;
int mnNoOfBits;
struct st_ButtonVariables* mstButtonVariables;
std::vector<std::string> mModes;
};
//tell the IX and QX FB that this is the process interface to be used
typedef CLMSEV3ProcessInterface CProcessInterface;
#endif /* PROCESSINTERFACE_H_ */