Files
qad/mbricks/brick_interface.cpp
Бычков Андрей ba8bc27298 1
git-svn-id: svn://db.shs.com.ru/libs@1 a8b55f48-bf90-11e4-a774-851b48703e85
2015-02-28 21:28:53 +00:00

121 lines
3.2 KiB
C++

#include "brick_interface.h"
bool BrickInterfaceBaseIn::received(void * t, uchar * d, int s) {
mutex.lock();
BrickInterfaceBaseIn * i = (BrickInterfaceBaseIn * )t;
memcpy(i->data.data(), d + i->header_, i->data.size() - i->header_);
///i->struct_.readData(i->data.data());
mutex.unlock();
return true;
}
bool BrickInterfaceBaseIn::tick_body(double time) {
mutex.lock();
/**for (uint i = 0; i < struct_.count(); ++i)
outputs[i + 1] = struct_[i].value();*/
mutex.unlock();
return true;
}
bool BrickInterfaceBaseOut::tick_body(double time) {
mutex.lock();
/**for (uint i = 0; i < struct_.count(); ++i)
struct_[i].setValue(inputs[i]);
struct_.writeData(data.data());*/
mutex.unlock();
return true;
}
void BrickInterfaceSerialIn::started() {
parameterChanged(0);
///struct_.writeData(data.data());
header_ = parameters[5].toInt();
ser.stop(false);
ser.setDevice(parameters[1].toString());
PIFlags<PISerial::Parameters> f = 0;
if (parameters[2].toBool()) f |= PISerial::ParityControl;
if (parameters[3].toBool()) f |= PISerial::TwoStopBits;
ser.setParameters(f);
ser.setSpeed((PISerial::Speed)parameters[4].toInt());
ser.setThreadedReadSlot(received);
ser.setThreadedReadData(this);
//ser.setReadData(data.data(), header_, data.size() - header_);
//cout << "header " << header_ << " bytes, data " << data.size() - header_ << " bytes" << endl;
ser.start();
}
bool BrickInterfaceSerialIn::tick_body(double time) {
outputs[0] = dbool(ser.isOpened());
return BrickInterfaceBaseIn::tick_body(time);
}
void BrickInterfaceSerialOut::started() {
parameterChanged(0);
ser.stop(false);
ser.setDevice(parameters[1].toString());
PIFlags<PISerial::Parameters> f = 0;
if (parameters[2].toBool()) f |= PISerial::ParityControl;
if (parameters[3].toBool()) f |= PISerial::TwoStopBits;
ser.setParameters(f);
ser.setSpeed((PISerial::Speed)parameters[4].toInt());
ser.initialize();
}
bool BrickInterfaceSerialOut::tick_body(double time) {
BrickInterfaceBaseOut::tick_body(time);
ser.send(data.data(), data.size());
outputs[0] = dbool(ser.isOpened());
return true;
}
void BrickInterfaceUDPIn::started() {
parameterChanged(0);
eth.stop(false);
eth.setReadAddress(parameters[1].toString(), parameters[2].toInt());
eth.setThreadedReadSlot(received);
eth.setThreadedReadData(this);
eth.start();
}
bool BrickInterfaceUDPIn::tick_body(double time) {
outputs[0] = dbool(eth.isOpened());
return BrickInterfaceBaseIn::tick_body(time);
}
bool BrickInterfaceUDPOut::tick_body(double time) {
BrickInterfaceBaseOut::tick_body(time);
if (eth.send(parameters[1].toString(), parameters[2].toInt(), data.data(), data.size()))
outputs[0] = 1.;
else outputs[0] = 0.;
return true;
}
void BrickInterfaceBinFileOut::started() {
if (file.isOpened()) file.close();
file.open(parameters[1].toString());
if (!file.isOpened()) file.open(parameters[1].toString(), PIIODevice::ReadWrite);
if (parameters[3].toBool() > 0) file.clear();
file.seekToEnd();
id = parameters[2].toInt();
}
bool BrickInterfaceBinFileOut::tick_body(double time) {
BrickInterfaceBaseOut::tick_body(time);
///file.writeToBinLog(id, data.data(), struct_.size());
if (parameters[4].toBool() > 0) file.flush();
return true;
}