// Internal state handling ---------------------------------------------------- uint8_t EndDevice::tick() { // Avoid reading packet in states that does not // check what the packet contains. switch(State) { case EndDeviceStart: case EndDeviceResetStart: case EndDeviceJoiningSend: case EndDeviceIdle: case EndDeviceSleeping: case EndDeviceWaking: case EndDeviceRequestSend: //case Error: //? break; default: xbee.readPacket(); } switch(State) { case EndDeviceStart: return start(); case EndDeviceFormingNetwork: return formingNetwork(); case EndDeviceJoiningSend: return joiningSend(); case EndDeviceJoiningWait: return joiningWait(); case EndDeviceJoiningWaitResponse: return joiningWaitResponse(); case EndDeviceIdle: return idle(); case EndDeviceSleepWait: return sleepWait(); case EndDeviceSleeping: return sleeping(); case EndDeviceError: return error(); case EndDeviceRequestSend: return requestSend(); case EndDeviceRequestStatus: return requestStatus(); case EndDeviceRequestWait: return requestWait(); case EndDeviceResetStart: return resetStart(); case EndDeviceResetWait: return resetWait(); case EndDeviceWaking: return waking(); default: { DEBUG_MSG("Bad state!"); } return TICK_UNKNOWN_ERROR; } }
int AddToUserDictionaryTest::doTest() { Models::ArtItemsModel *artItemsModel = m_CommandManager->getArtItemsModel(); QList<QUrl> files; files << getImagePathForTest("images-for-tests/pixmap/seagull.jpg"); int addedCount = artItemsModel->addLocalArtworks(files); VERIFY(addedCount == files.length(), "Failed to add file"); MetadataIO::MetadataIOCoordinator *ioCoordinator = m_CommandManager->getMetadataIOCoordinator(); SignalWaiter waiter; QObject::connect(ioCoordinator, SIGNAL(metadataReadingFinished()), &waiter, SIGNAL(finished())); ioCoordinator->continueReading(true); if (!waiter.wait(20)) { VERIFY(false, "Timeout exceeded for reading metadata."); } VERIFY(!ioCoordinator->getHasErrors(), "Errors in IO Coordinator while reading"); Models::ArtworkMetadata *metadata = artItemsModel->getArtwork(0); // wait for after-add spellchecking QThread::sleep(1); auto *basicKeywordsModel = metadata->getBasicModel(); QString wrongWord = "abbreviatioe"; metadata->setDescription(metadata->getDescription() + ' ' + wrongWord); metadata->setTitle(metadata->getTitle() + ' ' + wrongWord); metadata->appendKeyword("correct part " + wrongWord); metadata->setIsSelected(true); Models::FilteredArtItemsProxyModel *filteredModel = m_CommandManager->getFilteredArtItemsModel(); SpellCheck::SpellCheckerService *spellCheckService = m_CommandManager->getSpellCheckerService(); QObject::connect(spellCheckService, SIGNAL(spellCheckQueueIsEmpty()), &waiter, SIGNAL(finished())); filteredModel->spellCheckSelected(); if (!waiter.wait(5)) { VERIFY(false, "Timeout for waiting for spellcheck results"); } // wait for finding suggestions QThread::sleep(1); VERIFY(basicKeywordsModel->hasDescriptionSpellError(), "Description spell error not detected"); VERIFY(basicKeywordsModel->hasTitleSpellError(), "Title spell error not detected"); VERIFY(basicKeywordsModel->hasKeywordsSpellError(), "Keywords spell error not detected"); spellCheckService->addWordToUserDictionary(wrongWord); SignalWaiter spellingWaiter; QObject::connect(spellCheckService, SIGNAL(spellCheckQueueIsEmpty()), &spellingWaiter, SIGNAL(finished())); QCoreApplication::processEvents(QEventLoop::AllEvents); // wait add user word to finish if (!spellingWaiter.wait(5)) { VERIFY(false, "Timeout for waiting for spellcheck results"); } sleepWait(5, [=]() { return !basicKeywordsModel->hasDescriptionSpellError() && !basicKeywordsModel->hasTitleSpellError() && !basicKeywordsModel->hasKeywordsSpellError(); }); int userDictWords = spellCheckService->getUserDictWordsNumber(); LOG_DEBUG << "User dict words count:" << userDictWords; VERIFY(userDictWords == 1, "Wrong number of words in user dictionary"); VERIFY(!basicKeywordsModel->hasDescriptionSpellError(), "After adding word. Description spell error is still present"); VERIFY(!basicKeywordsModel->hasTitleSpellError(), "After adding word. Title spell error is still present"); VERIFY(!basicKeywordsModel->hasKeywordsSpellError(), "After adding word. Keywords spell error is still present"); return 0; }
int SpellingProducesWarningsTest::doTest() { Models::ArtItemsModel *artItemsModel = m_CommandManager->getArtItemsModel(); QList<QUrl> files; files << getImagePathForTest("images-for-tests/vector/026.jpg"); int addedCount = artItemsModel->addLocalArtworks(files); VERIFY(addedCount == files.length(), "Failed to add file"); MetadataIO::MetadataIOCoordinator *ioCoordinator = m_CommandManager->getMetadataIOCoordinator(); SignalWaiter waiter; QObject::connect(ioCoordinator, SIGNAL(metadataReadingFinished()), &waiter, SIGNAL(finished())); ioCoordinator->continueReading(true); if (!waiter.wait(20)) { VERIFY(false, "Timeout exceeded for reading metadata."); } VERIFY(!ioCoordinator->getHasErrors(), "Errors in IO Coordinator while reading"); Models::ArtworkMetadata *metadata = artItemsModel->getArtwork(0); sleepWait(3, [metadata]() { return !Common::HasFlag(metadata->getWarningsFlags(), Common::WarningFlags::SpellErrorsInTitle) && !Common::HasFlag(metadata->getWarningsFlags(), Common::WarningFlags::SpellErrorsInDescription) && !Common::HasFlag(metadata->getWarningsFlags(), Common::WarningFlags::SpellErrorsInKeywords); }); VERIFY(!Common::HasFlag(metadata->getWarningsFlags(), Common::WarningFlags::SpellErrorsInTitle), "Error for reading title"); VERIFY(!Common::HasFlag(metadata->getWarningsFlags(), Common::WarningFlags::SpellErrorsInDescription), "Error for reading description"); VERIFY(!Common::HasFlag(metadata->getWarningsFlags(), Common::WarningFlags::SpellErrorsInKeywords), "Error for reading keywords"); QString wrongWord = "abbreviatioe"; metadata->setDescription(metadata->getDescription() + ' ' + wrongWord); metadata->setTitle(metadata->getTitle() + ' ' + wrongWord); metadata->appendKeyword("correct part " + wrongWord); metadata->setIsSelected(true); Models::FilteredArtItemsProxyModel *filteredModel = m_CommandManager->getFilteredArtItemsModel(); SpellCheck::SpellCheckerService *spellCheckService = m_CommandManager->getSpellCheckerService(); SignalWaiter spellingWaiter; QObject::connect(spellCheckService, SIGNAL(spellCheckQueueIsEmpty()), &spellingWaiter, SIGNAL(finished())); filteredModel->spellCheckSelected(); if (!spellingWaiter.wait(5)) { VERIFY(false, "Timeout for waiting for first spellcheck results"); } LOG_INFO << "Spellchecking finished. Waiting for warnings..."; sleepWait(5, [=]() { return Common::HasFlag(metadata->getWarningsFlags(), Common::WarningFlags::SpellErrorsInTitle) && Common::HasFlag(metadata->getWarningsFlags(), Common::WarningFlags::SpellErrorsInDescription) && Common::HasFlag(metadata->getWarningsFlags(), Common::WarningFlags::SpellErrorsInKeywords); }); auto *keywordsModel = metadata->getBasicModel(); VERIFY(keywordsModel->hasDescriptionSpellError(), "Description spell error not detected"); VERIFY(keywordsModel->hasTitleSpellError(), "Title spell error not detected"); VERIFY(keywordsModel->hasKeywordsSpellError(), "Keywords spell error not detected"); VERIFY(Common::HasFlag(metadata->getWarningsFlags(), Common::WarningFlags::SpellErrorsInTitle), "Warning was not produced for title spelling error"); VERIFY(Common::HasFlag(metadata->getWarningsFlags(), Common::WarningFlags::SpellErrorsInDescription), "Warning was not produced for description spelling error"); VERIFY(Common::HasFlag(metadata->getWarningsFlags(), Common::WarningFlags::SpellErrorsInKeywords), "Warning was not produced for keywords spelling error"); return 0; }
void vLogicAnalizer(void){ unsigned int keepGoing = 0; // Determina si debe seguir o no el muestreo unsigned int triggerType; // Tipo de trigger unsigned int samplingFrequency; // Frecuencia de muestreo unsigned int channelMask; // Máscara para filtrar los canales (un 1 en el canal que se desea el trigger, 0 de otro modo) TRISB |= 0xFF00; // Parte alta del puerto B como entrada (hacemos una OR sino modificamos los pines // UART y deja de funcionar) TRISAbits.TRISA1 = 0; // Pin de dirección del buffer PORTAbits.RA1 = 0; // Puerto B del buffer como entrada y A como salida (A <- B) CNPU1 = CNPU2 = 0; // Deshabilito pull-ups CLKDIVbits.DOZEN = 0; // CPU a 40 MIPS disableUARTInt(); writeUART1(LOGIC_ANALIZER); // Envío el modo debug("\r\nAnalizador Logico"); // Elimino datos que puedan quedar en el UART while(DataRdyUART1()){ printNumericDebug("\r\nDatos disponibles en el UART: ", ReadUART1()); } // Leo el estado para saber si debo continuar o detenerme sleepWait(); keepGoing = mReadUART1(); printNumericDebug("\r\nKeepGoing recibido: ", keepGoing); while(keepGoing != 0){ if(keepGoing != 0){ debug("\r\nKeep Going!"); samplingFrequency = mReadUART1(); // Obtengo la frecuencia de muestreo triggerType = mReadUART1(); // Obtengo el tipo de trigger channelMask = mReadUART1(); // Obtengo la máscara printCharDebug("\r\nSampling Frequency: ", samplingFrequency); printNumericDebug("\r\nTrigger Type: ", triggerType); printNumericDebug("\r\nChannel Mask: ", channelMask); CNEN1 = CNEN2 = 0; if(channelMask == 0) triggerType = noTrigger; // De acuerdo al bit seteado en el Mask detecto o no el cambio de estado // en el pin correspondiente if(bitTest(channelMask, 7)) CNEN1bits.CN11IE = 1; if(bitTest(channelMask, 6)) CNEN1bits.CN12IE = 1; if(bitTest(channelMask, 5)) CNEN1bits.CN13IE = 1; if(bitTest(channelMask, 4)) CNEN1bits.CN14IE = 1; if(bitTest(channelMask, 3)) CNEN1bits.CN15IE = 1; if(bitTest(channelMask, 2)) CNEN2bits.CN16IE = 1; if(bitTest(channelMask, 1)) CNEN2bits.CN21IE = 1; if(bitTest(channelMask, 0)) CNEN2bits.CN22IE = 1; // Habilito interrupciones por cambio de estado en caso de usarlas if(triggerType == simpleTrigger){ IEC1bits.CNIE = 1; IFS1bits.CNIF = 0; } else IEC1bits.CNIE = 0; } else{ debug("\r\nAnalizador Logico BREAK"); break; } switch(samplingFrequency){ case F40MHz: debug("\r\nSampling 40MHz"); if(triggerType == noTrigger) vSample40MHz((unsigned char *)&PORTB+1, Buffer, BUFFER_SIZE); else if(triggerType == simpleTrigger) vSample40MHzTriggerSimple((unsigned char *)&PORTB+1, Buffer, BUFFER_SIZE, channelMask); break; case F20MHz: debug("\r\nSampling 20MHz"); if(triggerType == noTrigger) vSample20MHz((unsigned char *)&PORTB+1, Buffer, BUFFER_SIZE); else if(triggerType == simpleTrigger) vSample20MHzTriggerSimple((unsigned char *)&PORTB+1, Buffer, BUFFER_SIZE, channelMask); break; case F10MHz: debug("\r\nSampling 10MHz"); if(triggerType == noTrigger) vSample10MHz((unsigned char *)&PORTB+1, Buffer, BUFFER_SIZE); else if(triggerType == simpleTrigger) vSample10MHzTriggerSimple((unsigned char *)&PORTB+1, Buffer, BUFFER_SIZE, channelMask); break; case F4MHz: debug("\r\nSampling 4MHz"); if(triggerType == noTrigger) vSample4MHz((unsigned char *)&PORTB+1, Buffer, BUFFER_SIZE); else if(triggerType == simpleTrigger) vSample4MHzTriggerSimple((unsigned char *)&PORTB+1, Buffer, BUFFER_SIZE, channelMask); break; case F400KHz: debug("\r\nSampling 400KHz"); if(triggerType == noTrigger) vSample400KHz((unsigned char *)&PORTB+1, Buffer, BUFFER_SIZE); else if(triggerType == simpleTrigger) vSample400KHzTriggerSimple((unsigned char *)&PORTB+1, Buffer, BUFFER_SIZE, channelMask); break; case F2KHz: debug("\r\nSampling 2KHz"); //vSample2KHz((char *)&PORTB+1, &Buffer, BUFFER_SIZE); break; case F10Hz: debug("\r\nSampling 10Hz"); //vSample10Hz((char *)&PORTB+1, &Buffer, BUFFER_SIZE); break; default: debug("\r\nSampling Default"); break; } debug("\r\nSending data"); writeUART1(START_BYTE); // Envío byte de Start writeUART1(LOGIC_ANALIZER); // Envío proveniencia del dato // Envío el buffer comprimido RLEncodeSendBuffer(Buffer, BUFFER_SIZE); // Dos 0xFF indican la terminación writeUART1(0xFF); writeUART1(0xFF); sleepWait(); keepGoing = mReadUART1(); printNumericDebug("\r\nKeepGoing recibido: ", keepGoing); } debug("\r\nSale de Analizador Logico"); enableUARTInt(); // Habilito nuevamente las interrupciones UART }