git-svn-id: svn://db.shs.com.ru/libs@2 a8b55f48-bf90-11e4-a774-851b48703e85
208 lines
6.4 KiB
C++
208 lines
6.4 KiB
C++
#ifndef BRICK_INTERFACE_H
|
|
#define BRICK_INTERFACE_H
|
|
|
|
#include "brick_base.h"
|
|
#include "piserial.h"
|
|
#include "piethernet.h"
|
|
#include "pifile.h"
|
|
|
|
static PIMutex mutex;
|
|
|
|
class BrickInterfaceBase: public BrickBase {
|
|
public:
|
|
BrickInterfaceBase(int inputs_num = 1, int outputs_num = 1, int parameters_num = 1): BrickBase(inputs_num, outputs_num, parameters_num + 1) {
|
|
lib = "Interfaces";
|
|
paramNames[0] = "Struct file";
|
|
parameters[0].setValue("struct_example.conf");
|
|
parameters[0].setType(BrickBase::File);
|
|
header_ = 0;
|
|
note_ = "\"Struct file\" is a path to *.conf file that describe struct to send or receive. See \"struct_example.conf\" for details.";
|
|
rtOnly = true;
|
|
}
|
|
virtual ~BrickInterfaceBase() {;}
|
|
protected:
|
|
virtual void parameterChanged(int index) {
|
|
if (index != 0) return;
|
|
mutex.lock();
|
|
///struct_.parseFile(parameters[0].toString());
|
|
///data.resize(struct_.size());
|
|
mutex.unlock();
|
|
}
|
|
///PIStruct struct_;
|
|
PIVector<char> data;
|
|
int header_;
|
|
};
|
|
|
|
class BrickInterfaceBaseIn: public BrickInterfaceBase {
|
|
public:
|
|
BrickInterfaceBaseIn(int inputs_num = 1, int outputs_num = 1, int parameters_num = 1): BrickInterfaceBase(inputs_num, outputs_num, parameters_num) {parameterChanged(0);}
|
|
virtual ~BrickInterfaceBaseIn() {;}
|
|
protected:
|
|
static bool received(void * t, uchar * d, int s);
|
|
virtual bool tick_body(double time);
|
|
virtual void parameterChanged(int index) {
|
|
if (index != 0) return;
|
|
BrickInterfaceBase::parameterChanged(0);
|
|
/**setOutputsCount(struct_.count() + 1);
|
|
for (uint i = 0; i < struct_.count(); ++i) {
|
|
outNames[i + 1] = struct_[i].name();
|
|
outputs[i + 1] = struct_[i].value();
|
|
}*/
|
|
}
|
|
};
|
|
|
|
class BrickInterfaceBaseOut: public BrickInterfaceBase {
|
|
public:
|
|
BrickInterfaceBaseOut(int inputs_num = 1, int outputs_num = 1, int parameters_num = 1): BrickInterfaceBase(inputs_num, outputs_num, parameters_num) {parameterChanged(0);}
|
|
virtual ~BrickInterfaceBaseOut() {;}
|
|
protected:
|
|
virtual bool tick_body(double time);
|
|
virtual void parameterChanged(int index) {
|
|
if (index != 0) return;
|
|
BrickInterfaceBase::parameterChanged(0);
|
|
/**setInputsCount(struct_.count());
|
|
for (uint i = 0; i < struct_.count(); ++i) {
|
|
inNames[i] = struct_[i].name();
|
|
inputs[i] = struct_[i].value();
|
|
}*/
|
|
}
|
|
};
|
|
|
|
|
|
class BrickInterfaceSerialIn: public BrickInterfaceBaseIn {
|
|
MBRICK(BrickInterfaceSerialIn)
|
|
BrickInterfaceSerialIn(): BrickInterfaceBaseIn(0, 1,5) {
|
|
type = "SerialIn";
|
|
setName(type);
|
|
outNames[0] = "Init";
|
|
paramNames[1] = "Device";
|
|
paramNames[2] = "Parity control";
|
|
paramNames[3] = "Two stop bits";
|
|
paramNames[4] = "Baud rate";
|
|
paramNames[5] = "Header size";
|
|
#ifdef WINDOWS
|
|
parameters[1].setValue("COM1");
|
|
#else
|
|
parameters[1].setValue("/dev/ttyS0");
|
|
#endif
|
|
parameters[2].setValue(false);
|
|
parameters[3].setValue(false);
|
|
parameters[4].setValue(115200);
|
|
parameters[5].setValue(0);
|
|
note_ += "\n\"Header size\" is a bytes count from begin of struct, that contains packet attribute (need for advanced receive algorithm).";
|
|
note_ += "\n\"Device\" is a name of your serial device, e.g. \"/dev/ttyS0\" or \"COM1\".";
|
|
}
|
|
virtual ~BrickInterfaceSerialIn() {;}
|
|
virtual void started();
|
|
virtual void finished() {ser.stop(false);}
|
|
virtual bool tick_body(double time);
|
|
private:
|
|
PISerial ser;
|
|
};
|
|
ADD_NEW_TO_COLLECTION(Interfaces, BrickInterfaceSerialIn)
|
|
|
|
|
|
class BrickInterfaceSerialOut: public BrickInterfaceBaseOut {
|
|
MBRICK(BrickInterfaceSerialOut)
|
|
BrickInterfaceSerialOut(): BrickInterfaceBaseOut(0, 1, 4) {
|
|
type = "SerialOut";
|
|
setName(type);
|
|
outNames[0] = "Init";
|
|
paramNames[1] = "Device";
|
|
paramNames[2] = "Parity control";
|
|
paramNames[3] = "Two stop bits";
|
|
paramNames[4] = "Baud rate";
|
|
#ifdef WINDOWS
|
|
parameters[1].setValue("COM1");
|
|
#else
|
|
parameters[1].setValue("/dev/ttyS0");
|
|
#endif
|
|
parameters[2].setValue(false);
|
|
parameters[3].setValue(false);
|
|
parameters[4].setValue(115200);
|
|
note_ += "\n\"Header size\" is a bytes count from begin of struct, that contains packet attribute (need for advanced receive algorithm).";
|
|
note_ += "\n\"Device\" is a name of your serial device, e.g. \"/dev/ttyS0\" or \"COM1\".";
|
|
}
|
|
virtual ~BrickInterfaceSerialOut() {;}
|
|
virtual void started();
|
|
virtual void finished() {ser.stop(false);}
|
|
virtual bool tick_body(double time);
|
|
private:
|
|
PISerial ser;
|
|
};
|
|
ADD_NEW_TO_COLLECTION(Interfaces, BrickInterfaceSerialOut)
|
|
|
|
|
|
class BrickInterfaceUDPIn: public BrickInterfaceBaseIn {
|
|
MBRICK(BrickInterfaceUDPIn)
|
|
BrickInterfaceUDPIn(): BrickInterfaceBaseIn(0, 1, 2) {
|
|
type = "UDPIn";
|
|
setName(type);
|
|
outNames[0] = "Init";
|
|
paramNames[1] = "IP";
|
|
paramNames[2] = "Port";
|
|
parameters[1].setValue("127.0.0.1");
|
|
parameters[2].setValue(1638);
|
|
}
|
|
virtual ~BrickInterfaceUDPIn() {;}
|
|
virtual void started();
|
|
virtual void finished() {eth.stop(false);}
|
|
virtual bool tick_body(double time);
|
|
private:
|
|
PIEthernet eth;
|
|
};
|
|
ADD_NEW_TO_COLLECTION(Interfaces, BrickInterfaceUDPIn)
|
|
|
|
|
|
class BrickInterfaceUDPOut: public BrickInterfaceBaseOut {
|
|
MBRICK(BrickInterfaceUDPOut)
|
|
BrickInterfaceUDPOut(): BrickInterfaceBaseOut(0, 1, 2) {
|
|
type = "UDPOut";
|
|
setName(type);
|
|
outNames[0] = "Init";
|
|
paramNames[1] = "IP";
|
|
paramNames[2] = "Port";
|
|
parameters[1].setValue("127.0.0.1");
|
|
parameters[2].setValue(1638);
|
|
}
|
|
virtual ~BrickInterfaceUDPOut() {;}
|
|
virtual void started() {parameterChanged(0); eth.open();}
|
|
//virtual void finished() {eth.terminate();}
|
|
virtual bool tick_body(double time);
|
|
private:
|
|
PIEthernet eth;
|
|
};
|
|
ADD_NEW_TO_COLLECTION(Interfaces, BrickInterfaceUDPOut)
|
|
|
|
|
|
class BrickInterfaceBinFileOut: public BrickInterfaceBaseOut {
|
|
MBRICK(BrickInterfaceBinFileOut)
|
|
BrickInterfaceBinFileOut(): BrickInterfaceBaseOut(0, 0, 4) {
|
|
type = "BinFileOut";
|
|
setName(type);
|
|
paramNames[1] = "File";
|
|
paramNames[2] = "ID(Dec)";
|
|
paramNames[3] = "Overwrite";
|
|
paramNames[4] = "Flush";
|
|
parameters[1].setValue("binlog.dat");
|
|
parameters[2].setValue(1);
|
|
parameters[3].setValue(false);
|
|
parameters[4].setValue(false);
|
|
parameters[1].setType(BrickBase::File);
|
|
note_ += "\nIf \"Overwrite\" is true file will be cleared before every start.";
|
|
note_ += "\nIf \"Flush\" is true file will be flushed after every tick.";
|
|
note_ += "\nb{NOTE:} this brick create binary file for \"Log Parser\".";
|
|
rtOnly = false;
|
|
}
|
|
virtual ~BrickInterfaceBinFileOut() {;}
|
|
virtual void started();
|
|
virtual void finished() {file.flush(); file.close();}
|
|
virtual bool tick_body(double time);
|
|
private:
|
|
ushort id;
|
|
PIFile file;
|
|
};
|
|
ADD_NEW_TO_COLLECTION(Interfaces, BrickInterfaceBinFileOut)
|
|
|
|
#endif // BRICK_INTERFACE_H
|