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