Console handler in C++
This commit is contained in:
parent
f0c2ad69c9
commit
2d6567b1b2
5 changed files with 131 additions and 41 deletions
16
.cproject
16
.cproject
|
@ -138,10 +138,13 @@
|
||||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.symbolsrec.201215599" name="MCU Output Converter Motorola S-rec with symbols" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.symbolsrec.1329542300"/>
|
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.symbolsrec.201215599" name="MCU Output Converter Motorola S-rec with symbols" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.symbolsrec.1329542300"/>
|
||||||
</toolChain>
|
</toolChain>
|
||||||
</folderInfo>
|
</folderInfo>
|
||||||
|
<fileInfo id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.1652594594.961313506" name="stm32f4xx_it.c" rcbsApplicability="disable" resourcePath="Src/stm32f4xx_it.c" toolsToInvoke="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.954718294.1178785425">
|
||||||
|
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.954718294.1178785425" name="MCU GCC Compiler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.954718294"/>
|
||||||
|
</fileInfo>
|
||||||
<sourceEntries>
|
<sourceEntries>
|
||||||
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Drivers"/>
|
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Drivers"/>
|
||||||
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Middlewares"/>
|
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Middlewares"/>
|
||||||
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Src"/>
|
<entry excluding="stm32f4xx_it.c" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Src"/>
|
||||||
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Startup"/>
|
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Startup"/>
|
||||||
<entry excluding="application.c" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="app"/>
|
<entry excluding="application.c" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="app"/>
|
||||||
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="lib"/>
|
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="lib"/>
|
||||||
|
@ -283,10 +286,13 @@
|
||||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.symbolsrec.1462449351" name="MCU Output Converter Motorola S-rec with symbols" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.symbolsrec.1720505789"/>
|
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.symbolsrec.1462449351" name="MCU Output Converter Motorola S-rec with symbols" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.symbolsrec.1720505789"/>
|
||||||
</toolChain>
|
</toolChain>
|
||||||
</folderInfo>
|
</folderInfo>
|
||||||
|
<fileInfo id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.699478562.767195492" name="stm32f4xx_it.c" rcbsApplicability="disable" resourcePath="Src/stm32f4xx_it.c" toolsToInvoke="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.1361867544.1134416128">
|
||||||
|
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.1361867544.1134416128" name="MCU GCC Compiler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.1361867544"/>
|
||||||
|
</fileInfo>
|
||||||
<sourceEntries>
|
<sourceEntries>
|
||||||
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Drivers"/>
|
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Drivers"/>
|
||||||
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Middlewares"/>
|
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Middlewares"/>
|
||||||
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Src"/>
|
<entry excluding="stm32f4xx_it.c" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Src"/>
|
||||||
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Startup"/>
|
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Startup"/>
|
||||||
<entry excluding="application.c" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="app"/>
|
<entry excluding="application.c" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="app"/>
|
||||||
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="lib"/>
|
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="lib"/>
|
||||||
|
@ -325,6 +331,12 @@
|
||||||
</tool>
|
</tool>
|
||||||
</toolChain>
|
</toolChain>
|
||||||
</folderInfo>
|
</folderInfo>
|
||||||
|
<fileInfo id="0.1999792219.1199955544.808863076" name="stm32f4xx_it.c" rcbsApplicability="disable" resourcePath="Src/stm32f4xx_it.c" toolsToInvoke="org.eclipse.cdt.build.core.settings.holder.771704016.422534878">
|
||||||
|
<tool id="org.eclipse.cdt.build.core.settings.holder.771704016.422534878" name="GNU C" superClass="org.eclipse.cdt.build.core.settings.holder.771704016"/>
|
||||||
|
</fileInfo>
|
||||||
|
<sourceEntries>
|
||||||
|
<entry excluding="Src/stm32f4xx_it.c" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
|
||||||
|
</sourceEntries>
|
||||||
</configuration>
|
</configuration>
|
||||||
</storageModule>
|
</storageModule>
|
||||||
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
|
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
|
||||||
|
|
|
@ -36,6 +36,7 @@ extern "C" {
|
||||||
|
|
||||||
#include "globals_cpp.h"
|
#include "globals_cpp.h"
|
||||||
#include "ll_memcpydma.h"
|
#include "ll_memcpydma.h"
|
||||||
|
#include "ll_consolehandler.h"
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
||||||
|
@ -265,7 +266,7 @@ void DMA1_Stream3_IRQHandler(void)
|
||||||
void DMA1_Stream4_IRQHandler(void)
|
void DMA1_Stream4_IRQHandler(void)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN DMA1_Stream4_IRQn 0 */
|
/* USER CODE BEGIN DMA1_Stream4_IRQn 0 */
|
||||||
HandleConsoleUsartTxDmaIrq(&g_ConsoleTxDmaInfo, UART4);
|
f4ll::LL_ConsoleHandler::HandleTxDmaIrq(&f4ll::LL_ConsoleHandler::Instance());
|
||||||
/* USER CODE END DMA1_Stream4_IRQn 0 */
|
/* USER CODE END DMA1_Stream4_IRQn 0 */
|
||||||
|
|
||||||
/* USER CODE BEGIN DMA1_Stream4_IRQn 1 */
|
/* USER CODE BEGIN DMA1_Stream4_IRQn 1 */
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
#include "ll_hsusart.h"
|
#include "ll_hsusart.h"
|
||||||
#include "ll_crchandler.h"
|
#include "ll_crchandler.h"
|
||||||
#include "ll_memcpydma.h"
|
#include "ll_memcpydma.h"
|
||||||
|
#include "ll_consolehandler.h"
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "globals.h"
|
#include "globals.h"
|
||||||
|
@ -25,37 +26,6 @@ extern "C" {
|
||||||
b += strcpy_ex(b,s); \
|
b += strcpy_ex(b,s); \
|
||||||
b += uitodec(b,u);
|
b += uitodec(b,u);
|
||||||
|
|
||||||
void _PrintStats(char *buffer, uint8_t id, f4ll::LL_HsUsart &handler, USART_TypeDef *usart, DMAINFO* dmaInfo)
|
|
||||||
{
|
|
||||||
char ids[] = " : ";
|
|
||||||
char *bs = buffer;
|
|
||||||
|
|
||||||
f4ll::LL_HsUsart::Stats const & stats(handler.GetStats());
|
|
||||||
|
|
||||||
ids[0] = id + '0';
|
|
||||||
buffer += strcpy_ex(buffer, ids);
|
|
||||||
ADDINFO(buffer, " s: ", stats.sent);
|
|
||||||
ADDINFO(buffer, " r: ", stats.rcvd);
|
|
||||||
ADDINFO(buffer, " sk: ", stats.skiped);
|
|
||||||
ADDINFO(buffer, " or: ", stats.overrun);
|
|
||||||
ADDINFO(buffer, " he: ", stats.hdrError);
|
|
||||||
// buffer += strcpy_ex(buffer,",0x");
|
|
||||||
// buffer += uitohex(buffer, stats.lastErrHdr, 8);
|
|
||||||
ADDINFO(buffer, " pe: ", stats.payloadErrror);
|
|
||||||
buffer += strcpy_ex(buffer,",0x");
|
|
||||||
buffer += uitohex(buffer, stats.pep1, 8);
|
|
||||||
buffer += strcpy_ex(buffer,",0x");
|
|
||||||
buffer += uitohex(buffer, stats.pep2, 8);
|
|
||||||
ADDINFO(buffer, " rde: ", stats.rxDmaError);
|
|
||||||
ADDINFO(buffer, " tde: ", stats.txDmaError);
|
|
||||||
ADDINFO(buffer, " pmh: ", stats.premature_hdr);
|
|
||||||
ADDINFO(buffer, " pmp: ", stats.premature_payload);
|
|
||||||
buffer += strcpy_ex(buffer, "\r\n");
|
|
||||||
|
|
||||||
SetupTransmit(usart, dmaInfo->dma, dmaInfo->stream, bs, buffer - bs + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
extern "C" void MainLoop()
|
extern "C" void MainLoop()
|
||||||
{
|
{
|
||||||
uint8_t const text2Send[] __attribute__((aligned(4))) =
|
uint8_t const text2Send[] __attribute__((aligned(4))) =
|
||||||
|
@ -64,6 +34,7 @@ extern "C" void MainLoop()
|
||||||
|
|
||||||
f4ll::LL_MemcpyDma::Init(MEMCPY_DMA_ENGINE, MEMCPY_DMA_STREAM);
|
f4ll::LL_MemcpyDma::Init(MEMCPY_DMA_ENGINE, MEMCPY_DMA_STREAM);
|
||||||
f4ll::LL_CrcHandler::Init(DMA2, LL_DMA_STREAM_4);
|
f4ll::LL_CrcHandler::Init(DMA2, LL_DMA_STREAM_4);
|
||||||
|
f4ll::LL_ConsoleHandler::Init(UART4, CONSOLE_DMA_ENGINE, 0u, CONSOLE_TX_DMA_STREAM);
|
||||||
|
|
||||||
f4ll::LL_HsUsart u1{ USART1, DMA2, LL_DMA_STREAM_2, LL_DMA_STREAM_7 };
|
f4ll::LL_HsUsart u1{ USART1, DMA2, LL_DMA_STREAM_2, LL_DMA_STREAM_7 };
|
||||||
f4ll::LL_HsUsart u2{ USART2, DMA1, LL_DMA_STREAM_5, LL_DMA_STREAM_6 };
|
f4ll::LL_HsUsart u2{ USART2, DMA1, LL_DMA_STREAM_5, LL_DMA_STREAM_6 };
|
||||||
|
@ -80,14 +51,12 @@ extern "C" void MainLoop()
|
||||||
|
|
||||||
uint32_t tmp = sizeof(text2Send) - 1;
|
uint32_t tmp = sizeof(text2Send) - 1;
|
||||||
uint32_t randmask = 0x80000000;
|
uint32_t randmask = 0x80000000;
|
||||||
do
|
|
||||||
|
do {
|
||||||
if(randmask & tmp)
|
if(randmask & tmp)
|
||||||
break;
|
break;
|
||||||
while((randmask = randmask >> 1));
|
} while((randmask = randmask >> 1));
|
||||||
randmask -= 1;
|
--randmask;
|
||||||
|
|
||||||
InitDmaInfo(&g_ConsoleTxDmaInfo, CONSOLE_DMA_ENGINE, CONSOLE_TX_DMA_STREAM);
|
|
||||||
LL_DMA_EnableIT_TC(g_ConsoleTxDmaInfo.dma, g_ConsoleTxDmaInfo.stream);
|
|
||||||
|
|
||||||
lastStatsTick = HAL_GetTick();
|
lastStatsTick = HAL_GetTick();
|
||||||
|
|
||||||
|
@ -114,7 +83,7 @@ extern "C" void MainLoop()
|
||||||
u->RxProcessed((bool)rIdx);
|
u->RxProcessed((bool)rIdx);
|
||||||
}
|
}
|
||||||
if(tick - lastStatsTick > STATS_DELAY_MS) {
|
if(tick - lastStatsTick > STATS_DELAY_MS) {
|
||||||
_PrintStats((char*)g_statsBuf, statId, *usarts[statId], UART4, &g_ConsoleTxDmaInfo);
|
f4ll::LL_ConsoleHandler::Instance().PrintStats(statId, *usarts[statId]);
|
||||||
lastStatsTick += STATS_DELAY_MS;
|
lastStatsTick += STATS_DELAY_MS;
|
||||||
++statId;
|
++statId;
|
||||||
if(statId >= sizeof(usarts) / sizeof(usarts[0]))
|
if(statId >= sizeof(usarts) / sizeof(usarts[0]))
|
||||||
|
|
65
lib/ll_consolehandler.cpp
Normal file
65
lib/ll_consolehandler.cpp
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
/*
|
||||||
|
* ll_consolehandler.cpp
|
||||||
|
*
|
||||||
|
* Created on: Nov 7, 2019
|
||||||
|
* Author: abody
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <ll_consolehandler.h>
|
||||||
|
#include <strutil.h>
|
||||||
|
|
||||||
|
namespace f4ll {
|
||||||
|
|
||||||
|
LL_ConsoleHandler::LL_ConsoleHandler(USART_TypeDef *usart, DMA_TypeDef *dma, uint32_t streamRx, uint32_t streamTx)
|
||||||
|
: LL_UsartCore(usart, dma, streamRx, streamTx)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void LL_ConsoleHandler::ReceiverIdle(void) {}
|
||||||
|
void LL_ConsoleHandler::TransmissionComplete(void) {}
|
||||||
|
void LL_ConsoleHandler::RxDmaTransferComplete(void) {}
|
||||||
|
void LL_ConsoleHandler::RxDmaHalfTransfer(void) {}
|
||||||
|
void LL_ConsoleHandler::RxDmaError(LL_DmaHelper::DmaErrorType reason) {}
|
||||||
|
void LL_ConsoleHandler::TxDmaTransferComplete(void)
|
||||||
|
{
|
||||||
|
LL_USART_EnableIT_TC(m_usart);
|
||||||
|
LL_DMA_DisableStream(m_txDma.GetDma(), m_txDma.GetStream());
|
||||||
|
}
|
||||||
|
void LL_ConsoleHandler::TxDmaHalfTransfer(void) {}
|
||||||
|
void LL_ConsoleHandler::TxDmaError(LL_DmaHelper::DmaErrorType reason) {}
|
||||||
|
|
||||||
|
|
||||||
|
#define ADDINFO(b,s,u) \
|
||||||
|
b += strcpy_ex(b,s); \
|
||||||
|
b += uitodec(b,u);
|
||||||
|
|
||||||
|
void LL_ConsoleHandler::PrintStats(uint8_t id, LL_HsUsart &usart)
|
||||||
|
{
|
||||||
|
char ids[] = " : ";
|
||||||
|
char *buffer = m_buffer;
|
||||||
|
LL_HsUsart::Stats const &stats(usart.GetStats());
|
||||||
|
|
||||||
|
ids[0] = id + '0';
|
||||||
|
buffer += strcpy_ex(buffer, ids);
|
||||||
|
ADDINFO(buffer, " s: ", stats.sent);
|
||||||
|
ADDINFO(buffer, " r: ", stats.rcvd);
|
||||||
|
ADDINFO(buffer, " sk: ", stats.skiped);
|
||||||
|
ADDINFO(buffer, " or: ", stats.overrun);
|
||||||
|
ADDINFO(buffer, " he: ", stats.hdrError);
|
||||||
|
ADDINFO(buffer, " pe: ", stats.payloadErrror);
|
||||||
|
buffer += strcpy_ex(buffer,",0x");
|
||||||
|
buffer += uitohex(buffer, stats.pep1, 8);
|
||||||
|
buffer += strcpy_ex(buffer,",0x");
|
||||||
|
buffer += uitohex(buffer, stats.pep2, 8);
|
||||||
|
ADDINFO(buffer, " rde: ", stats.rxDmaError);
|
||||||
|
ADDINFO(buffer, " tde: ", stats.txDmaError);
|
||||||
|
ADDINFO(buffer, " pmh: ", stats.premature_hdr);
|
||||||
|
ADDINFO(buffer, " pmp: ", stats.premature_payload);
|
||||||
|
buffer += strcpy_ex(buffer, "\r\n");
|
||||||
|
|
||||||
|
SetupTransmit(m_buffer, buffer - m_buffer + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
} /* namespace f4ll */
|
||||||
|
|
43
lib/ll_consolehandler.h
Normal file
43
lib/ll_consolehandler.h
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
/*
|
||||||
|
* ll_consolehandler.h
|
||||||
|
*
|
||||||
|
* Created on: Nov 7, 2019
|
||||||
|
* Author: abody
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef LL_CONSOLEHANDLER_H_
|
||||||
|
#define LL_CONSOLEHANDLER_H_
|
||||||
|
|
||||||
|
#include "ll_hsusart.h"
|
||||||
|
#include "singleton.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace f4ll {
|
||||||
|
|
||||||
|
class LL_ConsoleHandler: public LL_UsartCore, public Singleton<LL_ConsoleHandler>
|
||||||
|
{
|
||||||
|
friend class Singleton<LL_ConsoleHandler>;
|
||||||
|
|
||||||
|
public:
|
||||||
|
// LL_UsartCore pure virtual function implementations
|
||||||
|
virtual void ReceiverIdle(void);
|
||||||
|
virtual void TransmissionComplete(void);
|
||||||
|
virtual void RxDmaTransferComplete(void);
|
||||||
|
virtual void RxDmaHalfTransfer(void);
|
||||||
|
virtual void RxDmaError(LL_DmaHelper::DmaErrorType reason);
|
||||||
|
virtual void TxDmaTransferComplete(void);
|
||||||
|
virtual void TxDmaHalfTransfer(void);
|
||||||
|
virtual void TxDmaError(LL_DmaHelper::DmaErrorType reason);
|
||||||
|
|
||||||
|
void PrintStats(uint8_t id, LL_HsUsart &usart);
|
||||||
|
|
||||||
|
private:
|
||||||
|
LL_ConsoleHandler(USART_TypeDef *usart, DMA_TypeDef *dma, uint32_t streamRx, uint32_t streamTx);
|
||||||
|
|
||||||
|
char m_buffer[128];
|
||||||
|
uint16_t m_used = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
} /* namespace f4ll */
|
||||||
|
|
||||||
|
#endif /* LL_CONSOLEHANDLER_H_ */
|
Loading…
Add table
Add a link
Reference in a new issue