void TKN_Window::startTkn() { int baud = ui->comboBox_Baud->currentText().toInt(); /*Get the port index. Needed by rs232 lib */ char portName[32]; strcpy(portName, ui->comboBox_ComPort->currentText().toLatin1().data()); int port = getPortIndexByName(portName); if (port<0){ consoleOut("Not a valid port"); return; } /* Init the network */ if (TKN_Init(port, baud, TKN_ID_DEFAULT, TKN_Window::tokenReceivedCallback, TKN_Window::dataReceivedCallback)) return; QString msg; msg = QString("Opened TKN in ")+ui->comboBox_ComPort->currentText(); consoleOut(msg); msg = QString("Discovering nodes"); consoleOut(msg); BYTE *nodes = TKN_ListActiveNodes(10); if (nodes == NULL){ msg = QString("No connectivity"); consoleOut(msg); TKN_Close(); msg = QString("Closed TKN"); consoleOut(msg); return; } while (*nodes){ TKN_NodeBox *nd = new TKN_NodeBox(this, (int)(*nodes)); nodeMap[*nodes] = nd; ui->centralWidget->layout()->addWidget(nd); nodes++; } if (TKN_Start()) return; TKN_PrintCols(); mTknCounter = 0; this->mTknStarted = true; mTime->start(); }
/*-------------------------------------------------------------------------- ** Purpose: Set the channel full with data previously saved ** ** Parameters: Name Description. ** ** Returns: Nothing. ** **------------------------------------------------------------------------*/ static void pciFull(void) { #if DEBUG fprintf(pciLog, " O(%04o)", pci->data); #endif pciCmd(PciCmdFull | pci->data); consoleOut(pci->data); }
/* * Output a character to logfile, console, or terminal. * Replace LF by CR/LF. */ static void charOut(char c) { if (c == '\n') { if (outputToLogfile) { logfileOut('\r'); } if (outputToConsole) { consoleOut('\r'); } if (outputToTerminal) { terminalOut('\r'); } } if (outputToLogfile) { logfileOut(c); } if (outputToConsole) { consoleOut(c); } if (outputToTerminal) { terminalOut(c); } }
TKN_NodeBox::TKN_NodeBox(QWidget *parent, int id) : NODE_ID(id), voltometer(this), QGroupBox(parent), ui(new Ui::TKN_NodeBox) { ui->setupUi(this); setTitle(QString("Node ").append(QString('0'+NODE_ID))); /* Configure the voltometer */ ui->groupBox_adc->layout()->addWidget(&voltometer); voltometer.setReadOnly(true); voltometer.setMode(QwtDial::RotateNeedle); voltometer.setScaleArc(30, 330); voltometer.setScale(0.0, 5.0); voltometer.setNeedle(new QwtDialSimpleNeedle(QwtDialSimpleNeedle::Arrow)); /* Signal connections */ connect(this, SIGNAL(dataReceived(TKN_Data)), this, SLOT(dataEcho(TKN_Data))); connect(this, SIGNAL(dataReceived(TKN_Data)), this, SLOT(voltometerSet(TKN_Data))); connect(this, SIGNAL(consoleOut(QString)), parentWidget(), SLOT(consoleOut(QString)), Qt::QueuedConnection); PAGESIZE = 128; }
void TKN_Window::stopTkn() { if ( !TKN_Stop()) { if (!nodeMap.empty()){ QMap<int, TKN_NodeBox*>::iterator i; for (i = nodeMap.begin(); i != nodeMap.end(); ++i) ui->centralWidget->layout()->removeWidget(*i); qDeleteAll(nodeMap.begin(), nodeMap.end()); nodeMap.clear(); } TKN_Close(); this->mTknStarted = false; QTimer::singleShot(20, this, SLOT(shrink())); } else emit consoleOut("Network is unstopable. (Not responding)"); }
int main() { std::shared_ptr<Signals::CLightsStatus> signal(new Signals::CLightsStatus); std::unique_ptr<Console::CConsoleOutput> consoleOut(new Console::CConsoleOutput(signal)); // Init countdown timer. std::unique_ptr<CountdownTimer::CTimer> countdown(new CountdownTimer::CTimer(10)); int lightsSet = 0; // Initialize state. if(signal->SystemIsReset()) { signal->SetStatusRed(1); signal->SetStatusAmber(0); signal->SetStatusWalk(0); signal->SetStatusWalk(1); consoleOut->OutputDisplay(); } while(!(GetKeyState(VK_ESCAPE) & 0x80)) { if(countdown->UpdateSequence()) { consoleOut->UpdateDisplay(lightsSet); consoleOut->OutputDisplay(); lightsSet = signal->CycleLights(lightsSet); } } SetConsoleTextAttribute(hConsole, RED); return 0; }
void TKN_NodeBox::hexUpload() { int page=0; int word=0; int byteCount=0; long start, end, addr; TKN_Data recData; BYTE sendData[TKN_DATA_SIZE]; BYTE byteForEmpty = 0xff; QString recString; HEXFile *h; try { h = new HEXFile(1024*1024, byteForEmpty); h->readFile(ui->lineEditHexFilePath->text().toStdString()); } catch(ErrorMsg *err) { emit consoleOut(QString::fromStdString(err->What())); return; } start = h->getRangeStart(); end = h->getRangeEnd(); for (addr=start; addr<= end; ) { /* Initiate a boot procedure */ memset(sendData, 0, TKN_DATA_SIZE); strcpy ((char*)sendData, "B:"); sendData[3] = addr/(PAGESIZE*2); /* Flush any data from receive queue */ flushRecDataQueue(); while (TKN_PushData ((TKN_Data *) sendData, NODE_ID)); /* Wait MCU */ do { if ( !dataDeque(&recData, 1500)) { emit consoleOut("MCU Busy, aborting."); return; } recString = QString(QByteArray((char*)&recData, sizeof(TKN_Data))); } while ( QString::compare(QString("-MCU-READY------"), recString)); emit consoleOut(QString("Sending Page: ") + QString ('0'+sendData[3])); /* Send a complete page */ do { /* Fill a TKN Packet */ for (int i=0; i<sizeof(TKN_Data); i++){ sendData[i] = addr<=end? ((BYTE) h->getData(addr)): byteForEmpty; byteCount++; addr++; } /* Send it to tha MCU */ while (TKN_PushData ((TKN_Data *) sendData, NODE_ID)); } while ((addr % (PAGESIZE*2)!=0) ); } QString msg = QString("Hex upload complete. Sent ") + QString::number(byteCount) + QString(" bytes."); emit consoleOut(msg); }