git-svn-id: svn://db.shs.com.ru/libs@125 a8b55f48-bf90-11e4-a774-851b48703e85

This commit is contained in:
2016-09-26 17:17:54 +00:00
parent a8289c1ee6
commit 125158f243
8 changed files with 56 additions and 20 deletions

View File

@@ -68,6 +68,7 @@ CDCore::CDCore() {
CONNECTU(&datatr, sendRequest, this, dtSendRequest) CONNECTU(&datatr, sendRequest, this, dtSendRequest)
CONNECTU(&datatr, receiveFinished, this, dtReceiveFinished) CONNECTU(&datatr, receiveFinished, this, dtReceiveFinished)
CONNECTU(&sendt, started, this, sendThread) CONNECTU(&sendt, started, this, sendThread)
CONNECTU(&x_timer, tickEvent, this, xTimerTick)
/*k_[1] = KType(1, "123", "120+3", "comment"); /*k_[1] = KType(1, "123", "120+3", "comment");
k_[2] = KType(2, "1", "2", "comm"); k_[2] = KType(2, "1", "2", "comm");
@@ -81,18 +82,12 @@ CDCore::CDCore() {
} }
void CDCore::k_rec(const PIByteArray & data) { CDCore::~CDCore() {
datatr.stop();
} x_timer.stop();
sendt.stop();
sendt.waitForFinish(10);
void CDCore::x_rec(const PIByteArray & data) { connection.stop();
}
void CDCore::c_rec(const PIByteArray & data) {
} }
@@ -142,11 +137,29 @@ void CDCore::reinitConnection(const PIString &configuration) {
} }
void CDCore::startPing() {
x_timer.start(1);
}
void CDUtils::CDCore::dataReceived(const PIString & from, const PIByteArray & data) { void CDUtils::CDCore::dataReceived(const PIString & from, const PIByteArray & data) {
// piCoutObj << "dataReceived" << from << data.size(); // piCoutObj << "dataReceived" << from << data.size();
PIIODevice * d = connection.deviceByName("cd"); PIIODevice * d = connection.deviceByName("cd");
if (d && d == connection.deviceByFullPath(from)) { if (d && d == connection.deviceByFullPath(from)) {
datatr.received(data); if (data.size() >= sizeof(4)) {
const uint sig = *((const uint*)(data.data()));
if (sig == 0x54424950) datatr.received(data);
else {
CDPacketType pt = (CDPacketType)sig;
switch(pt) {
case CD_Ping:
piCoutObj << "ping";
break;
default: break;
}
}
}
} }
} }
@@ -209,6 +222,15 @@ void CDCore::sendThread() {
} }
void CDCore::xTimerTick() {
PacketHeader ph;
ph.type = CD_Ping;
PIByteArray ba;
ba << ph;
connection.writeByName("cd", ba);
}
void CDCore::dtSendRequest(PIByteArray &data) { void CDCore::dtSendRequest(PIByteArray &data) {
connection.writeByName("cd", data); connection.writeByName("cd", data);
// piCoutObj << "send" << data.size() << ret; // piCoutObj << "send" << data.size() << ret;

View File

@@ -45,17 +45,17 @@ public:
PIString pultConfig() {return PIString(pult_config);} PIString pultConfig() {return PIString(pult_config);}
PIString appConfig() {return PIString(app_config);} PIString appConfig() {return PIString(app_config);}
void reinitConnection(const PIString & configuration); void reinitConnection(const PIString & configuration);
void startPing();
bool inProgress() {return sendt.isRunning();} bool inProgress() {return sendt.isRunning();}
private: private:
CDCore(); CDCore();
~CDCore();
EVENT_HANDLER2(void, dataReceived, const PIString &, from, const PIByteArray &, data); EVENT_HANDLER2(void, dataReceived, const PIString &, from, const PIByteArray &, data);
EVENT_HANDLER1(void, dtSendRequest, PIByteArray &, data); EVENT_HANDLER1(void, dtSendRequest, PIByteArray &, data);
EVENT_HANDLER1(void, dtReceiveFinished, bool, ok); EVENT_HANDLER1(void, dtReceiveFinished, bool, ok);
EVENT_HANDLER(void, sendThread); EVENT_HANDLER(void, sendThread);
void k_rec(const PIByteArray & data); EVENT_HANDLER(void, xTimerTick);
void x_rec(const PIByteArray & data);
void c_rec(const PIByteArray & data);
static const char app_config[], pult_config[]; static const char app_config[], pult_config[];
PIConnection connection; PIConnection connection;
@@ -63,6 +63,7 @@ private:
PacketHeader wheader; PacketHeader wheader;
PIByteArray send_data; PIByteArray send_data;
PIThread sendt; PIThread sendt;
PITimer x_timer;
}; };

View File

@@ -93,6 +93,11 @@ void KInterface::reinitConnection(const PIString &configuration) {
} }
void KInterface::startPing() {
core->startPing();
}
void KInterface::write(PIIODevice * d) { void KInterface::write(PIIODevice * d) {
core->k_write(d); core->k_write(d);
} }

View File

@@ -39,6 +39,7 @@ public:
void setFileName(const PIString & file) {k_file = file;} void setFileName(const PIString & file) {k_file = file;}
bool configure(const PIString & config, const PIString & sect = PIStringAscii("k")); bool configure(const PIString & config, const PIString & sect = PIStringAscii("k"));
void reinitConnection(const PIString & configuration); void reinitConnection(const PIString & configuration);
void startPing();
void write(PIIODevice * d); void write(PIIODevice * d);
void read(PIIODevice * d); void read(PIIODevice * d);
void parse(PIIODevice * d); void parse(PIIODevice * d);

View File

@@ -9,15 +9,15 @@ enum CDPacketType {CD_Ping, CD_Pong, CD_KQuery, CD_KSend, CD_Command, CD_XData,
# pragma pack(push,1) # pragma pack(push,1)
struct PacketHeader { struct PacketHeader {
int session_id;
int type; // CDPacketType int type; // CDPacketType
int session_id;
}; };
# pragma pack(pop) # pragma pack(pop)
inline PIByteArray & operator <<(PIByteArray & s, const PacketHeader & v) {s << v.session_id << v.type; return s;} inline PIByteArray & operator <<(PIByteArray & s, const PacketHeader & v) {s << v.type << v.session_id; return s;}
inline PIByteArray & operator >>(PIByteArray & s, PacketHeader & v) {s >> v.session_id >> v.type; return s;} inline PIByteArray & operator >>(PIByteArray & s, PacketHeader & v) {s >> v.type >> v.session_id; return s;}
} }

View File

@@ -44,6 +44,11 @@ void CDKView::setKFile(const QString &filename) {
} }
void CDKView::startPing() {
K.startPing();
}
void CDKView::sendK() { void CDKView::sendK() {
bisyStatusChanged(true); bisyStatusChanged(true);
K.send(); K.send();

View File

@@ -15,6 +15,7 @@ public:
~CDKView(); ~CDKView();
void refresh(); void refresh();
void setKFile(const QString & filename); void setKFile(const QString & filename);
void startPing();
CDKItemModel * CDKModel() {return kmodel;} CDKItemModel * CDKModel() {return kmodel;}

View File

@@ -6,6 +6,7 @@ Form::Form(QWidget *parent) : QWidget(parent), ui(new Ui::Form) {
ui->setupUi(this); ui->setupUi(this);
ui->treeView->setKFile(""); ui->treeView->setKFile("");
ui->treeView->refresh(); ui->treeView->refresh();
ui->treeView->startPing();
} }