From 2a135d02f1905c482dd5cdc30e5a669611ae9bab Mon Sep 17 00:00:00 2001 From: Nathanael Schneider Date: Mon, 6 Mar 2023 09:17:01 +0100 Subject: [PATCH] Bugfix for receiving non-DMX packets and flickering --- DMX G441/Inc/eth/artnet.h | 1 + DMX G441/Src/dmx_usart.c | 17 +++++++++++------ DMX G441/Src/eth/artnet.c | 2 +- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/DMX G441/Inc/eth/artnet.h b/DMX G441/Inc/eth/artnet.h index 1c88770..c537937 100644 --- a/DMX G441/Inc/eth/artnet.h +++ b/DMX G441/Inc/eth/artnet.h @@ -7,6 +7,7 @@ #include "arch/cc.h" #define ARTNET_FAILTIMEOUT 5000 +#define ARTNET_FIRMWAREV 3 typedef enum { ArtCode_OpPoll = 0x2000, diff --git a/DMX G441/Src/dmx_usart.c b/DMX G441/Src/dmx_usart.c index 4a806fd..75024ee 100644 --- a/DMX G441/Src/dmx_usart.c +++ b/DMX G441/Src/dmx_usart.c @@ -290,14 +290,19 @@ static void USART_HandleIrqResponse(USART_DmxConfig *dmx) { dmx->Usart->CR3 &= ~USART_CR3_DMAR; dmx->Dma->CCR &= ~DMA_CCR_EN; dmx->Usart->ICR |= USART_ICR_FECF; + dmx->BreakStatus = 1; } else if ((dmx->Usart->CR3 & USART_CR3_DMAR) == 0) { // check for 0 byte - if (data == 0x00) { - dmx->Usart->CR3 |= USART_CR3_DMAR; - dmx->Dma->CMAR = dmx->DmxBuffer + 1; - dmx->Dma->CNDTR = 512; - dmx->Dma->CCR |= DMA_CCR_EN; - dmx->NewInput = 1; + if (dmx->BreakStatus) { + if (data == 0x00) { + dmx->Usart->CR3 |= USART_CR3_DMAR; + dmx->Dma->CMAR = dmx->DmxBuffer + 1; + dmx->Dma->CNDTR = 512; + dmx->Dma->CCR |= DMA_CCR_EN; + dmx->NewInput = 1; + }else{ + dmx->BreakStatus = 0; + } } } } diff --git a/DMX G441/Src/eth/artnet.c b/DMX G441/Src/eth/artnet.c index 2b6e71c..422d95e 100644 --- a/DMX G441/Src/eth/artnet.c +++ b/DMX G441/Src/eth/artnet.c @@ -136,7 +136,7 @@ static void ArtNet_SendPollReply(const ip_addr_t *addr, u16_t port) { reply->Port = UI16_BIG_ENDIAN(0x1936); - reply->VersInfo = UI16_LITTLE_ENDIAN(2); + reply->VersInfo = UI16_LITTLE_ENDIAN(ARTNET_FIRMWAREV); reply->OEM = 0xFFFF; reply->NetSwitch = config->ArtNetNetwork;