/* * ll_testbed.cpp * * Created on: Oct 28, 2019 * Author: abody */ #ifdef USE_CPLUSPLUS #include #include #include "f4ll/hsusart.h" #include "f4ll/crchandler.h" #include "f4ll/memcpydma.h" #include "f4ll/consolehandler.h" extern "C" { #include "main.h" #include "globals.h" #include "f4ll_c/strutil.h" #include "config.h" } #include "globals_cpp.h" #define PACKAGE_DELAY_MS 0 #define STATS_DELAY_MS 1000 #define ADDINFO(b,s,u) \ b += strcpy_ex(b,s); \ b += uitodec(b,u); extern "C" void MainLoop() { uint8_t const text2Send[] __attribute__((aligned(4))) = "Megszentsegtelenithetetlensegeskedeseitekert\r\n" "--------------------------------------------\r\n\0\0\0"; f4ll::MemcpyDma::Init(MEMCPY_DMA_ENGINE, MEMCPY_DMA_STREAM); f4ll::CrcHandler::Init(DMA2, LL_DMA_STREAM_4); f4ll::ConsoleHandler::Init(UART4, CONSOLE_DMA_ENGINE, 0u, CONSOLE_TX_DMA_STREAM); f4ll::HsUsart u1{ USART1, DMA2, LL_DMA_STREAM_2, LL_DMA_STREAM_7 }; f4ll::HsUsart u2{ USART2, DMA1, LL_DMA_STREAM_5, LL_DMA_STREAM_6 }; f4ll::HsUsart u3{ USART3, DMA1, LL_DMA_STREAM_1, LL_DMA_STREAM_3 }; f4ll::HsUsart u6{ USART6, DMA2, LL_DMA_STREAM_1, LL_DMA_STREAM_6 }; f4ll::HsUsart * usarts[] = { &u1, &u2, &u3, &u6 }; for(unsigned int i=0; i < sizeof(usarts) / sizeof(usarts[0]); ++i) g_usarts[i] = usarts[i]; uint32_t lastStatsTick = 0; uint32_t prevSentTick = 0; uint8_t statId = 0; uint32_t tmp = sizeof(text2Send) - 1; uint32_t randmask = 0x80000000; do { if(randmask & tmp) break; } while((randmask = randmask >> 1)); --randmask; lastStatsTick = HAL_GetTick(); for(auto u : usarts) u->SetupReceive(); for(;;) { uint32_t tick = HAL_GetTick(); bool send = PACKAGE_DELAY_MS ? (tick - prevSentTick > PACKAGE_DELAY_MS) : 1; if(send) prevSentTick += PACKAGE_DELAY_MS; for(auto u : usarts) { if(!u->IsTxBusy() && send) { //DIAG_ENTER_BUSY(); auto len = sizeof(text2Send) - 1 - (rand() & randmask); f4ll::MemcpyDma::Instance().Copy(u->GetTxPacketBuffer(), text2Send, len); u->PostPacket(nullptr, len); //DIAG_EXIT_BUSY(); } for(uint16_t rIdx = 0; rIdx < 2; ++rIdx) if(u->IsRxBusy((bool)rIdx) || u->IsRxFailed(rIdx)) u->RxProcessed((bool)rIdx); } if(tick - lastStatsTick > STATS_DELAY_MS) { f4ll::ConsoleHandler::Instance().PrintStats(statId, *usarts[statId]); lastStatsTick += STATS_DELAY_MS; ++statId; if(statId >= sizeof(usarts) / sizeof(usarts[0])) statId = 0; } // uint32_t ein = LL_GPIO_ReadInputPort(KEY1_GPIO_Port); // if(!(ein & KEY1_Pin)) { // void (*fptr)(void) = (void (*)(void))(void*)0xa0000000; // fptr(); // } } } #endif // USE_CPLUSPLUS