git-svn-id: svn://db.shs.com.ru/pip@267 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5
This commit is contained in:
276
main.cpp
276
main.cpp
@@ -1,106 +1,178 @@
|
||||
#include "pikbdlistener.h"
|
||||
#include "piconnection.h"
|
||||
#include "piconfig.h"
|
||||
#include "piscreentiles.h"
|
||||
#include "piscreen.h"
|
||||
#include "piethernet.h"
|
||||
#include "piintrospection.h"
|
||||
#include "pifile.h"
|
||||
#include "piterminal.h"
|
||||
#include "piserial.h"
|
||||
#include "pip.h"
|
||||
|
||||
|
||||
PIConnection conn;
|
||||
TilePICout cout_tile;
|
||||
|
||||
|
||||
const char conn_config[] =
|
||||
"[connection]\n\
|
||||
device.test = ser://COM54:115200 #s\n\
|
||||
device.test.disconnectTimeout = 3.00000000 #f\n\
|
||||
[]\n";
|
||||
class TileTerminal: public PIScreenTile {
|
||||
public:
|
||||
TileTerminal(PITerminal * t) {
|
||||
focus_flags = PIScreenTypes::CanHasFocus;
|
||||
term = t;
|
||||
}
|
||||
private:
|
||||
void drawEvent(PIScreenDrawer * d) {
|
||||
//piCout << "draw" << visible;
|
||||
if (!term) return;
|
||||
PIVector<PIVector<PIScreenTypes::Cell> > c = term->content();
|
||||
d->fillRect(x_, y_, x_ + width_, y_ + height_, c);
|
||||
}
|
||||
bool keyEvent(PIKbdListener::KeyEvent key) {
|
||||
//return false;
|
||||
if (key.key == '~') {
|
||||
cout_tile.content.clear();
|
||||
return true;
|
||||
}
|
||||
if (!term) return false;
|
||||
term->write(key);
|
||||
}
|
||||
void resizeEvent(int w, int h) {
|
||||
if (!term) return;
|
||||
term->resize(w, h);
|
||||
}
|
||||
PITerminal * term;
|
||||
};
|
||||
|
||||
int main (int argc, char * argv[]) {
|
||||
/*const char cs[] = "this is text\e";
|
||||
PIByteArray ba(cs, sizeof(cs) - 1);
|
||||
PIString s(ba);
|
||||
piCout << ba;
|
||||
piCout << s;
|
||||
piCout << s.toByteArray();
|
||||
return 0;*/
|
||||
PIScreen * screen = 0;
|
||||
if (argc > 1) screen = new PIScreen();
|
||||
PITerminal term;
|
||||
TileTerminal tt(&term);
|
||||
TileScrollBar * s = new TileScrollBar();
|
||||
if (screen) {
|
||||
screen->rootTile()->addTile(&tt);
|
||||
screen->rootTile()->addTile(&cout_tile);
|
||||
screen->enableExitCapture();
|
||||
}
|
||||
tt.setFocus();
|
||||
term.initialize();
|
||||
piMSleep(100);
|
||||
//term.write(PIString("ls -l /etc/\n").toByteArray());
|
||||
//term.write(PIString("mc\n").toByteArray());
|
||||
//term.write(PIString("aptitude\n").toByteArray());
|
||||
if (screen) {
|
||||
screen->start();
|
||||
piMSleep(100);
|
||||
|
||||
piMSleep(200);
|
||||
s->setValue(20);
|
||||
piMSleep(200);
|
||||
s->setValue(50);
|
||||
piMSleep(200);
|
||||
s->setValue(100);
|
||||
|
||||
//piCout << tt.width() << tt.height();
|
||||
term.resize(tt.width(), tt.height());
|
||||
screen->waitForFinish();
|
||||
} else {
|
||||
piMSleep(4000);
|
||||
term.write(PIKbdListener::KeyEvent(PIKbdListener::Tab));
|
||||
piMSleep(1000);
|
||||
term.write(PIKbdListener::KeyEvent(PIKbdListener::Tab));
|
||||
//term.write(PIKbdListener::KeyEvent(PIKbdListener::Space));
|
||||
//term.write(PIString("exit\n").toByteArray());
|
||||
term.write(PIString("Q\n").toByteArray());
|
||||
piMSleep(1000);
|
||||
}
|
||||
if (screen) {
|
||||
screen->rootTile()->takeTile(&tt);
|
||||
screen->rootTile()->takeTile(&cout_tile);
|
||||
delete screen;
|
||||
}
|
||||
int main(int argc, char *argv[]) {
|
||||
sleep(30);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
using namespace PIScreenTypes;
|
||||
|
||||
PIScreen screen;
|
||||
PIConnection conn;
|
||||
TileSimple statustile;
|
||||
TileSimple odbtile;
|
||||
|
||||
void update();
|
||||
void updateODB();
|
||||
|
||||
struct ODBdata {
|
||||
float speed;
|
||||
float temp_engine_coolant;
|
||||
float temp_intake_air;
|
||||
float voltage;
|
||||
float fluel;
|
||||
float pedal_accelerator;
|
||||
float throttle;
|
||||
float engine_load;
|
||||
float engine_RPM;
|
||||
};
|
||||
|
||||
ODBdata odb;
|
||||
|
||||
const char conn_config[] =
|
||||
"[connection]\n\
|
||||
device.test = ser://COM61:9600 #s\n\
|
||||
device.test.disconnectTimeout = 3.00000000 #f\n\
|
||||
filter.raw.device = test\n\
|
||||
filter.raw.splitMode = header & footer\n\
|
||||
filter.raw.header = 0x34 0x31\n\
|
||||
filter.raw.footer = 0x0D\n\
|
||||
[]\n";
|
||||
|
||||
class Obj : public PIObject {
|
||||
PIOBJECT(Obj)
|
||||
public:
|
||||
Obj() {
|
||||
quering = false;
|
||||
CONNECTU(&conn, dataReceivedEvent, this, recv);
|
||||
CONNECTU(&conn, packetReceivedEvent, this, recv2);
|
||||
CONNECTU(&timer, tickEvent, this, tick);
|
||||
st = PISystemTime::current();
|
||||
timer.start(5);
|
||||
}
|
||||
EVENT_HANDLER1(void, keyEv, PIKbdListener::KeyEvent, k) {
|
||||
//piCoutObj << k.key;
|
||||
if (k.key == -20) {
|
||||
piCout << "exiting...";
|
||||
PIKbdListener::exiting = true;
|
||||
}
|
||||
if (k.key == 's') {
|
||||
quering = !quering;
|
||||
}
|
||||
if (k.key == 'a') {
|
||||
quering = true;
|
||||
queryODB();
|
||||
}
|
||||
if (k.key == 'i') {
|
||||
initODB();
|
||||
}
|
||||
}
|
||||
|
||||
EVENT_HANDLER2(void, recv, const PIString &, from, const PIByteArray &, data) {
|
||||
PIString s(data);
|
||||
if (s.isEmpty()) return;
|
||||
piCoutObj << from << PIString(data) << PICoutManipulators::Hex << data;
|
||||
}
|
||||
|
||||
EVENT_HANDLER2(void, recv2, const PIString &, from, const PIByteArray &, data) {
|
||||
PIString s(data);
|
||||
s.cutRight(1);
|
||||
if (s.isEmpty()) return;
|
||||
piCoutObj << from << PICoutManipulators::Hex << data << s;
|
||||
PIByteArray ba = PIByteArray::fromHex(s);
|
||||
piCoutObj << s << ba;
|
||||
if (ba.size() < 3) return;
|
||||
int mode = ba[0] - 0x40;
|
||||
int pid = ba[1];
|
||||
if (mode != 1) return;
|
||||
switch(pid) {
|
||||
case 0x0D:
|
||||
odb.speed = ba[2];
|
||||
break;
|
||||
case 0x0C:
|
||||
odb.engine_RPM = (float(ba[2])*256. + float(ba[3]))/4.;
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
|
||||
EVENT_HANDLER(void, tick) {
|
||||
PISystemTime t = PISystemTime::current() - st;
|
||||
if (t.toSeconds() > 100. || t.toSeconds() < -100.) piCout << "time error! " << st << PISystemTime::current(true) << t;
|
||||
st = PISystemTime::current();
|
||||
if (!inited) initODB();
|
||||
queryODB();
|
||||
update();
|
||||
updateODB();
|
||||
}
|
||||
|
||||
private:
|
||||
void initODB() {
|
||||
conn.writeByName("test", PIString("ATZ\r\n").toByteArray());
|
||||
piMSleep(1000);
|
||||
inited = true;
|
||||
}
|
||||
|
||||
void queryODB() {
|
||||
if (!quering) return;
|
||||
conn.writeByName("test", PIString("01 0D\r").toByteArray());
|
||||
//piMSleep(10);
|
||||
//conn.writeByName("test", PIString("01 0C\r").toByteArray());
|
||||
}
|
||||
bool inited;
|
||||
bool quering;
|
||||
PITimer timer;
|
||||
PISystemTime st;
|
||||
};
|
||||
|
||||
int main (int argc, char * argv[]) {
|
||||
PIScreenTile * tl = new PIScreenTile();
|
||||
tl->direction = Horizontal;
|
||||
statustile.size_policy = Expanding;
|
||||
statustile.maximumWidth = 40;
|
||||
odbtile.size_policy = Expanding;
|
||||
tl->addTile(&statustile);
|
||||
tl->addTile(&odbtile);
|
||||
screen.rootTile()->addTile(tl);
|
||||
screen.rootTile()->addTile(new TilePICout());
|
||||
screen.enableExitCapture();
|
||||
screen.rootTile()->children().front()->setFocus();
|
||||
Obj * o = new Obj();
|
||||
CONNECTU(&screen, keyPressed, o, keyEv)
|
||||
PIString s = conn_config;
|
||||
conn.configureFromString(&s);
|
||||
conn.start();
|
||||
screen.waitForFinish();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void update() {
|
||||
screen.lock();
|
||||
statustile.content.clear();
|
||||
PISerial * ser = (PISerial *)conn.deviceByName("test");
|
||||
PIDiagnostics * diag = conn.diagnostic(ser);
|
||||
if (ser && diag) {
|
||||
statustile.content << TileSimple::Row(ser->constructFullPath() + " - " + PIString::fromBool(ser->isOpened()), CellFormat(PIScreenTypes::Default, PIScreenTypes::Default, PIScreenTypes::Bold));
|
||||
statustile.content << TileSimple::Row(diag->name() + " diagnostics", CellFormat(PIScreenTypes::Default, PIScreenTypes::Default, PIScreenTypes::Bold));
|
||||
statustile.content << TileSimple::Row("Received count: " + PIString::fromNumber(diag->receiveCount()), CellFormat());
|
||||
statustile.content << TileSimple::Row("Invalid count: " + PIString::fromNumber(diag->wrongCount()), CellFormat());
|
||||
statustile.content << TileSimple::Row("Sended count: " + PIString::fromNumber(diag->sendCount()), CellFormat());
|
||||
statustile.content << TileSimple::Row("Immediate Frequency, Hz: " + PIString::fromNumber(diag->immediateFrequency()), CellFormat());
|
||||
statustile.content << TileSimple::Row("Integral Frequency, Hz: " + PIString::fromNumber(diag->integralFrequency()), CellFormat());
|
||||
statustile.content << TileSimple::Row("Receive speed: " + diag->receiveSpeed(), CellFormat());
|
||||
statustile.content << TileSimple::Row("Send speed: " + diag->sendSpeed(), CellFormat());
|
||||
statustile.content << TileSimple::Row("Quality: " + PIString::fromNumber((int)diag->quality()), CellFormat());
|
||||
}
|
||||
screen.unlock();
|
||||
}
|
||||
|
||||
void updateODB() {
|
||||
screen.lock();
|
||||
odbtile.content.clear();
|
||||
odbtile.content << TileSimple::Row("Speed: " + PIString::fromNumber(odb.speed), CellFormat());
|
||||
odbtile.content << TileSimple::Row("RPM: " + PIString::fromNumber(odb.engine_RPM), CellFormat());
|
||||
screen.unlock();
|
||||
}
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user