C-Libs/Monitor.c
2021-07-01 11:55:32 +00:00

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;
}
}
}