add joysick support and state feedback
This commit is contained in:
@ -50,9 +50,9 @@ void Microcontroller::write(const QByteArray& buffer)
|
||||
if(_port != nullptr)
|
||||
{
|
||||
_port->write(buffer);
|
||||
_port->waitForBytesWritten(1000);
|
||||
_port->waitForBytesWritten(1000);
|
||||
}
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(40));
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(40));
|
||||
}
|
||||
|
||||
void Microcontroller::write(char* buffer, const size_t length)
|
||||
@ -61,9 +61,9 @@ void Microcontroller::write(char* buffer, const size_t length)
|
||||
if(_port != nullptr)
|
||||
{
|
||||
_port->write(buffer, length);
|
||||
_port->waitForBytesWritten(1000);
|
||||
//_port->waitForBytesWritten(1000);
|
||||
}
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(40));
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(40));
|
||||
}
|
||||
|
||||
bool Microcontroller::connected()
|
||||
@ -103,20 +103,19 @@ void Microcontroller::setIODevice(QIODevice *port)
|
||||
std::shared_ptr<Item> Microcontroller::processTrainLine(const QString& buffer)
|
||||
{
|
||||
QStringList bufferList = buffer.split(' ');
|
||||
if(bufferList.size() >= 13 && buffer.startsWith("NUMBER:"))
|
||||
if(bufferList.size() >= 14 && buffer.startsWith("TRAIN NUMBER:"))
|
||||
{
|
||||
return std::shared_ptr<Item>(new Train(bufferList[1].toInt(), bufferList[3].toInt(), bufferList[12].toInt()));
|
||||
return std::shared_ptr<Item>(new Train(bufferList[2].toInt(), bufferList[4].toInt(), bufferList[13].toInt()));
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
std::shared_ptr<Item> Microcontroller::processTurnoutLine(const QString& buffer)
|
||||
{
|
||||
qDebug()<<__func__<<" :"<<buffer;
|
||||
QStringList bufferList = buffer.split(' ');
|
||||
if(bufferList.size() >= 6 && buffer.startsWith("NUMBER:"))
|
||||
if(bufferList.size() >= 7 && buffer.startsWith("TURNOUT NUMBER:"))
|
||||
{
|
||||
return std::shared_ptr<Item>(new Turnout(bufferList[1].toInt(), bufferList[1].toInt(), bufferList[5].toInt()));
|
||||
return std::shared_ptr<Item>(new Turnout(bufferList[2].toInt(), bufferList[2].toInt(), bufferList[6].toInt()));
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
@ -125,12 +124,15 @@ void Microcontroller::processList(const QString& buffer)
|
||||
{
|
||||
QStringList bufferList = buffer.split(' ');
|
||||
qDebug()<<__func__<<" :"<<buffer<<" list mode: "<<listMode;
|
||||
if(bufferList.size() >= 10 && buffer.startsWith("NUMBER:"))
|
||||
if(bufferList.size() >= 10 && buffer.contains("NUMBER:"))
|
||||
{
|
||||
std::shared_ptr<Item> item;
|
||||
if(listMode == TRAIN_LIST)
|
||||
itemList.push_back(processTrainLine(buffer));
|
||||
item = processTrainLine(buffer);
|
||||
else if(listMode == TURNOUT_LIST)
|
||||
itemList.push_back(processTurnoutLine(buffer));
|
||||
item = processTurnoutLine(buffer);
|
||||
if(item)
|
||||
itemList.push_back(item);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -146,7 +148,10 @@ void Microcontroller::processList(const QString& buffer)
|
||||
|
||||
void Microcontroller::processItemState(const QString& buffer)
|
||||
{
|
||||
itemChanged(static_cast<ItemData>(*processTrainLine(buffer)));
|
||||
if(_buffer.startsWith("TRAIN NUMBER:"))
|
||||
itemChanged(static_cast<ItemData>(*processTrainLine(buffer)));
|
||||
else if(_buffer.startsWith("TRAIN NUMBER:"))
|
||||
itemChanged(static_cast<ItemData>(*processTurnoutLine(buffer)));
|
||||
}
|
||||
|
||||
|
||||
@ -165,10 +170,10 @@ void Microcontroller::processMicroReturn()
|
||||
{
|
||||
listMode = TURNOUT_LIST;
|
||||
}
|
||||
else if(_buffer.startsWith("NUMBER:"))
|
||||
else if(_buffer.startsWith("TRAIN NUMBER:") || _buffer.startsWith("TRAIN NUMBER:"))
|
||||
{
|
||||
processItemState(_buffer);
|
||||
}
|
||||
}
|
||||
else if(_buffer.startsWith("TrainController"))
|
||||
{
|
||||
requestState();
|
||||
|
Reference in New Issue
Block a user