278 lines
6.3 KiB
C
278 lines
6.3 KiB
C
/*
|
|
* Monitor.c
|
|
*
|
|
* Created on: 23 Mar 2021
|
|
* Author: angoosh
|
|
*/
|
|
#include "Monitor.h"
|
|
|
|
|
|
void MONITOR_VarSendInt(UART_HandleTypeDef*, char*, int, int, uint8_t, uint8_t, int*);
|
|
void MONITOR_VarSendFloat(UART_HandleTypeDef*, char*, int, float, int*);
|
|
void MONITOR_VarSendReg(UART_HandleTypeDef*, char*, int, uint32_t, int*);
|
|
void MONITOR_Update(uint8_t*, int);
|
|
|
|
int Gaddress;
|
|
char GaddrBuff[10];
|
|
/**
|
|
* @brief Posilani promenne
|
|
* @param UART type
|
|
* @param <string> Jmeno promenne
|
|
* @param sizeof(Jmeno promenne)
|
|
* @param Promenna pro odeslani
|
|
* @param sizeof(Promenna)
|
|
* @param sign (zda je unsigned = 0, nebo signed = 1)
|
|
*/
|
|
void MONITOR_VarSendInt(UART_HandleTypeDef *huart, char *name, int name_size, int var, uint8_t size, uint8_t sign, int *pointer){
|
|
uint8_t isNegative = 0;
|
|
int varAbs = abs(var);
|
|
if(var < 0){
|
|
isNegative = 1;
|
|
}
|
|
uint8_t ValueOfVariableSize = (uint8_t)log10(varAbs)+1+isNegative;
|
|
char ValueOfVariableTemp[11];
|
|
char ValueOfVariable[ValueOfVariableSize];
|
|
sprintf(ValueOfVariableTemp, "%d", var);
|
|
|
|
for(int i = 0; i < ValueOfVariableSize; i++){
|
|
ValueOfVariable[i] = ValueOfVariableTemp[i];
|
|
}
|
|
|
|
int dataStrSize;
|
|
|
|
if(sign == 0){
|
|
if(size == 1){
|
|
dataStrSize = 9;
|
|
}
|
|
else{
|
|
dataStrSize = 10;
|
|
}
|
|
}
|
|
else{
|
|
if(size == 1){
|
|
dataStrSize = 8;
|
|
}
|
|
else{
|
|
dataStrSize = 9;
|
|
}
|
|
}
|
|
char varType[dataStrSize];
|
|
|
|
if(sign == 0){
|
|
if(size == 1){
|
|
strcpy(varType,"uint8_t,");
|
|
}
|
|
else if(size == 2){
|
|
strcpy(varType,"uint16_t,");
|
|
}
|
|
else{
|
|
strcpy(varType,"uint32_t,");
|
|
}
|
|
}
|
|
else{
|
|
if(size == 1){
|
|
strcpy(varType,"int8_t,");
|
|
}
|
|
else if(size == 2){
|
|
strcpy(varType,"int16_t,");
|
|
}
|
|
else{
|
|
strcpy(varType,"int32_t,");
|
|
}
|
|
}
|
|
//HAL_UART_Transmit(huart, (uint8_t *)&ValueOfVariable, 3, 0xFFFF);
|
|
char msg[sizeof(ValueOfVariable)+dataStrSize+name_size+2];
|
|
|
|
|
|
|
|
strcpy(msg, "V,");
|
|
strcat(msg, varType);
|
|
strcat(msg, name);
|
|
strcat(msg, ",");
|
|
strcat(msg, ValueOfVariable);
|
|
//strcat(msg, "\n");
|
|
|
|
HAL_UART_Transmit(huart, (uint8_t *)&msg, sizeof(msg), 0xFFFF);
|
|
char pointerArr[10];
|
|
sprintf(pointerArr, "%p", pointer);
|
|
HAL_UART_Transmit(huart, (uint8_t *)&",", 1, 0xFFFF);
|
|
HAL_UART_Transmit(huart, (uint8_t *)&pointerArr, sizeof(pointerArr), 0xFFFF);
|
|
HAL_UART_Transmit(huart, (uint8_t *)&"\n", 1, 0xFFFF);
|
|
|
|
//int *pointer = &var;
|
|
|
|
}
|
|
|
|
/**
|
|
* @brief Posilani promenne
|
|
* @param UART type
|
|
* @param <string> Jmeno promenne
|
|
* @param sizeof(Jmeno promenne)
|
|
* @param Promenna pro odeslani
|
|
*/
|
|
void MONITOR_VarSendFloat(UART_HandleTypeDef *huart, char *name, int name_size, float var, int *pointer){
|
|
uint8_t isNegative = 0;
|
|
int varAbs = abs(var);
|
|
if(var < 0){
|
|
isNegative = 1;
|
|
}
|
|
uint8_t ValueOfVariableSize = (uint8_t)log10(varAbs)+4+isNegative;
|
|
//char ValueOfVariableTemp[11];
|
|
char ValueOfVariable[ValueOfVariableSize];
|
|
sprintf(ValueOfVariable, "%.3f", var);
|
|
|
|
//for(int i = 0; i < ValueOfVariableSize; i++){
|
|
// ValueOfVariable[i] = ValueOfVariableTemp[i];
|
|
//}
|
|
|
|
char varType[] = "float,";
|
|
char msg[sizeof(ValueOfVariable)+sizeof(varType)+name_size+2];
|
|
|
|
strcpy(msg, "V,");
|
|
strcat(msg, varType);
|
|
strcat(msg, name);
|
|
strcat(msg, ",");
|
|
strcat(msg, ValueOfVariable);
|
|
//msg[sizeof(msg)-1] = '\n';
|
|
//strcat(msg, "\n");
|
|
|
|
HAL_UART_Transmit(huart, (uint8_t *)&msg, sizeof(msg), 0xFFFF);
|
|
|
|
char pointerArr[10];
|
|
sprintf(pointerArr, "%p", pointer);
|
|
HAL_UART_Transmit(huart, (uint8_t *)&",", 1, 0xFFFF);
|
|
HAL_UART_Transmit(huart, (uint8_t *)&pointerArr, sizeof(pointerArr), 0xFFFF);
|
|
HAL_UART_Transmit(huart, (uint8_t *)&"\n", 1, 0xFFFF);
|
|
}
|
|
|
|
/**
|
|
* @brief Posilani promenne
|
|
* @param UART type
|
|
* @param <string> Jmeno registru
|
|
* @param sizeof(Jmeno registru)
|
|
* @param registr
|
|
*/
|
|
void MONITOR_VarSendReg(UART_HandleTypeDef *huart, char *name, int name_size, uint32_t reg, int *pointer){
|
|
uint8_t ValueOfVariableSize = (uint8_t)log10(reg)+1;
|
|
char ValueOfVariable[ValueOfVariableSize];
|
|
sprintf(ValueOfVariable, "%lu", reg);
|
|
|
|
char varType[] = "reg,";
|
|
char msg[sizeof(ValueOfVariable)+sizeof(varType)+name_size+2];
|
|
|
|
strcpy(msg, "R,");
|
|
strcat(msg, varType);
|
|
strcat(msg, name);
|
|
strcat(msg, ",");
|
|
strcat(msg, ValueOfVariable);
|
|
//msg[sizeof(msg)-1] = '\n';
|
|
//strcat(msg, "\n");
|
|
|
|
HAL_UART_Transmit(huart, (uint8_t *)&msg, sizeof(msg), 0xFFFF);
|
|
|
|
char pointerArr[10];
|
|
sprintf(pointerArr, "%p", pointer);
|
|
HAL_UART_Transmit(huart, (uint8_t *)&",", 1, 0xFFFF);
|
|
HAL_UART_Transmit(huart, (uint8_t *)&pointerArr, sizeof(pointerArr), 0xFFFF);
|
|
HAL_UART_Transmit(huart, (uint8_t *)&"\n", 1, 0xFFFF);
|
|
}
|
|
|
|
/**
|
|
* @brief Posilani promenne
|
|
* @param typ promenne 0: uint8_t, 1:int8_t, 2:uint16_t, 3:int16_t, 4:uint32_t, 5:int32_t, 6:float, 7:register
|
|
* @param adresa promenne
|
|
* @param string hodnota
|
|
*/
|
|
|
|
|
|
void MONITOR_Update(uint8_t *buffer, int bufferSize){
|
|
|
|
//void Update(uint8_t type, int address, char *value){
|
|
uint type;
|
|
int address;
|
|
char lineBuffer[bufferSize];
|
|
int lineLen = 0;
|
|
for(int i = 0; i < bufferSize; i++){
|
|
if(buffer[i] == MSG_PREFIX){
|
|
HAL_GPIO_TogglePin(GPIOB,LED_OK_Pin);
|
|
for(int j = 0; j < bufferSize; j++){
|
|
if(buffer[i+j+1] != MSG_LINE_END){
|
|
lineBuffer[j] = buffer[i+j+1];
|
|
lineLen ++;
|
|
}
|
|
else{
|
|
break;
|
|
}
|
|
}
|
|
type = lineBuffer[0]-'0';
|
|
|
|
char addrBuff[10];
|
|
for(int j = 0; j < 10; j++){
|
|
addrBuff[j] = lineBuffer[j+1];
|
|
GaddrBuff[j] = addrBuff[j];
|
|
}
|
|
sscanf(GaddrBuff, "%X", &address);
|
|
|
|
Gaddress = address;
|
|
|
|
char value[lineLen-11];
|
|
for(int j = 0; j < sizeof(value); j++){
|
|
value[j] = lineBuffer[j+11];
|
|
}
|
|
if(type == 0){
|
|
uint data;
|
|
sscanf(value, "%u", &data);
|
|
*(uint8_t*)address = data;
|
|
}
|
|
else if(type == 1){
|
|
int data;
|
|
sscanf(value, "%d", &data);
|
|
*(int8_t*)address = data;
|
|
}
|
|
else if(type == 2){
|
|
uint data;
|
|
sscanf(value, "%u", &data);
|
|
*(uint16_t*)address = data;
|
|
}
|
|
else if(type == 3){
|
|
int data;
|
|
sscanf(value, "%d", &data);
|
|
*(int16_t*)address = data;
|
|
}
|
|
else if(type == 4){
|
|
uint data;
|
|
sscanf(value, "%u", &data);
|
|
*(uint32_t*)address = data;
|
|
}
|
|
else if(type == 5){
|
|
int data;
|
|
sscanf(value, "%d", &data);
|
|
*(int32_t*)address = data;
|
|
}
|
|
else if(type == 6){
|
|
float data;
|
|
sscanf(value, "%f", &data);
|
|
*(float*)address = data;
|
|
}
|
|
else if(type == 7){
|
|
uint data;
|
|
sscanf(value, "%u", &data);
|
|
*(uint32_t*)address = data;
|
|
}
|
|
else;
|
|
|
|
for(int j = 0; j < lineLen; j++){
|
|
buffer[i+j] = 0;
|
|
}
|
|
|
|
i += lineLen;
|
|
lineLen = 0;
|
|
}
|
|
else{
|
|
buffer[i] = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
|