2021-07-01 14:12:44 +02:00

115 lines
2.9 KiB
C

//##Interrupt receive per character
uint8_t WholeRxBuffer[256];
uint8_t RX[1];
uint8_t ptr = 0;
//setup
HAL_UART_Receive_IT(&huart3, RX, 1);
//callback
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){
WholeRxBuffer[ptr] = RX[0];
ptr++;
HAL_UART_Receive_IT(&huart3, RX, 1);
}
//##DMA receive
//je potreba povolit DMA na uart RX
#include "Alink.h"
uint8_t readBuffer[RX_BUFFER];
uint8_t RX[RX_BUFFER];
//inicializace uartu - interface,buffer,velikost zpravy
HAL_UART_Receive_DMA(&huart1,readBuffer,sizeof(readBuffer));
//vysilani zpravy
HAL_UART_Transmit(&huart1, (uint8_t *)&"\nThe cake is a lie", 18, 0xFFFF);
//presouvani dat z prijimaciho bufferu do cteciho bufferu (prijimaci buffer se ctenim maze)
for(int i = 0; i<sizeof(readBuffer); i++){
RX[i] = readBuffer[i];
readBuffer[i] = 0;
}
//cteni dat z cteciho bufferu a reseni zprav
for(int u = 0; u<sizeof(RX); u++){
u += listVar(u);
}
//funkce pro reseni prichozich zprav
uint8_t listVar(uint8_t index){
uint8_t msgLen = 0;
uint8_t senderAddr = 0;
uint8_t cmd = 0;
uint8_t crc = 0;
if(RX[index] == 0xA5){
if(RX[index+1] == ADDRESS){
msgLen = RX[index+2];
senderAddr = RX[index+3];
cmd = RX[index+4];
crc = RX[index+msgLen-1];
if(msgLen > 6){
uint8_t data[msgLen-6];
for(int i = 0; i<sizeof(data); i++){
data[i] = RX[index+5+i];
}
//zpracovani dat v Alinku
uint8_t inputArray[msgLen];
inputArray[0] = 0xA5;
inputArray[1] = ADDRESS;
inputArray[2] = msgLen;
inputArray[3] = senderAddr;
inputArray[4] = cmd;
inputArray[msgLen-1] = crc;
for(int i = 0; i<sizeof(data); i++){
inputArray[5+i] = data[i];
}
RxParseMSG(&huart1, inputArray);
}
else{
//zpracovani dat v Alinku
uint8_t inputArray[msgLen];
inputArray[0] = 0xA5;
inputArray[1] = ADDRESS;
inputArray[2] = msgLen;
inputArray[3] = senderAddr;
inputArray[4] = cmd;
inputArray[5] = crc;
RxParseMSG(&huart1, inputArray);
}
}
if(msgLen != 0){
return msgLen-1;
}
else{
return 0;
}
}
else{
return 0;
}
}
//int to str conversion
void dbg(unsigned long n){//16.7
char operator = '+';
if(n > 4294967296/2){
n = 4294967296 - n;
operator = '-';
}
char tmp[11];
int i = sizeof(tmp);
for(int j = 0; j<i-1; j++){
tmp[j] = '0';
}
do
{
tmp[--i] = '0' + n % 10;
n /= 10;
} while (n);
HAL_UART_Transmit(&huart7, (uint8_t *)&operator, 1, 0xFFFF);
HAL_UART_Transmit(&huart7, (uint8_t *)&tmp, sizeof(tmp), 0xFFFF);
}