ComIntCmd_PowerManager/ComIntPowerManagerGet.c

138 lines
4.6 KiB
C

//
// Created by zemon on 24.07.24.
//
#include "ComIntPowerManager.h"
#include "string.h"
uint16_t XfcProtMethod_GetVoltsBoardVar(tXfcArray *request, tXfcArray *response, tXfcPower *env, char *paramValueID_text, uint8_t paramValueID_len) {
// Текстовый вид ID
XFC_CMD_TX_ADD_RAW(paramValueID_len);
XFC_CMD_TX_ADD_ARR(paramValueID_text, paramValueID_len);
if (memcmp(paramValueID_text, "VOLTAGE", sizeof("VOLTAGE") - 1) == 0) {
uint8_t len = 2;
// Размер данных
XFC_CMD_TX_ADD_RAW(len);
// Данные
uint16_t value;
if((*env->fl_telematicaIsActive == true)||(*env->fl_telematicaServerIsActive == true)) {
value = env->powerManagement->powerSusystem->boardPower.currentBoardVoltageOfSerbisePO;
} else {
value = 65000;
}
XFC_CMD_TX_ADD_ARR(&value, len);
return true;
}
return false;
}
uint16_t XfcProtMethod_GetVoltsBatVar(tXfcArray *request, tXfcArray *response, tXfcPower *env, char *paramValueID_text, uint8_t paramValueID_len) {
// Текстовый вид ID
XFC_CMD_TX_ADD_RAW(paramValueID_len);
XFC_CMD_TX_ADD_ARR(paramValueID_text, paramValueID_len);
if (memcmp(paramValueID_text, "VOLTAGE", sizeof("VOLTAGE") - 1) == 0) {
uint8_t len = 2;
// Размер данных
XFC_CMD_TX_ADD_RAW(len);
// Данные
uint16_t value = env->powerManagement->powerSusystem->battery.currentBatVoltage;
XFC_CMD_TX_ADD_ARR(&value, len);
return true;
}
return false;
}
uint16_t XfcProtMethod_BoardVoltageGet(tXfcArray *request, tXfcArray *response, tXfcPower *env){
// Чтение всех параметров
if (XfcArrayGetDataSize(request) == 0) {
uint16_t paramCount = 1;
// Количество параметров
XFC_CMD_TX_ADD_RAW(paramCount);
uint8_t paramValueID_len;
char paramValueID_text[20];
paramValueID_len = sizeof("VOLTAGE") - 1;
paramValueID_text[0] = '\0';
strcat(paramValueID_text, "VOLTAGE");
if (!XfcProtMethod_GetVoltsBoardVar(request, response, env, paramValueID_text, paramValueID_len)) {
return XFC_TRANSPORT_PROTOCOL_RESPONSE_RESULT_EXECUTION_ERROR;
}
return XFC_TRANSPORT_PROTOCOL_RESPONSE_RESULT_OK;
}
// Чтение избранных параметров
uint16_t paramCount;
XFC_CMD_RX_GET_RAW(paramCount);
// Количество параметров
XFC_CMD_TX_ADD_RAW(paramCount);
for (uint16_t count = 0; count < paramCount; ++count) {
// Получение текстового id параметра
uint8_t paramValueID_len;
XFC_CMD_RX_GET_RAW(paramValueID_len);
char paramValueID_text[paramValueID_len];
XFC_CMD_RX_GET_ARR(paramValueID_text, paramValueID_len);
if(!XfcProtMethod_GetVoltsBoardVar(request, response, env, paramValueID_text, paramValueID_len)) {
return XFC_TRANSPORT_PROTOCOL_RESPONSE_RESULT_EXECUTION_ERROR;
}
}
return XFC_TRANSPORT_PROTOCOL_RESPONSE_RESULT_OK;
}
uint16_t XfcProtMethod_BattaryVoltageGet(tXfcArray *request, tXfcArray *response, tXfcPower *env){
// Чтение всех параметров
if (XfcArrayGetDataSize(request) == 0) {
uint16_t paramCount = 1;
// Количество параметров
XFC_CMD_TX_ADD_RAW(paramCount);
uint8_t paramValueID_len;
char paramValueID_text[20];
paramValueID_len = sizeof("VOLTAGE") - 1;
paramValueID_text[0] = '\0';
strcat(paramValueID_text, "VOLTAGE");
if (!XfcProtMethod_GetVoltsBatVar(request, response, env, paramValueID_text, paramValueID_len)) {
return XFC_TRANSPORT_PROTOCOL_RESPONSE_RESULT_EXECUTION_ERROR;
}
return XFC_TRANSPORT_PROTOCOL_RESPONSE_RESULT_OK;
}
// Чтение избранных параметров
uint16_t paramCount;
XFC_CMD_RX_GET_RAW(paramCount);
// Количество параметров
XFC_CMD_TX_ADD_RAW(paramCount);
for (uint16_t count = 0; count < paramCount; ++count) {
// Получение текстового id параметра
uint8_t paramValueID_len;
XFC_CMD_RX_GET_RAW(paramValueID_len);
char paramValueID_text[paramValueID_len];
XFC_CMD_RX_GET_ARR(paramValueID_text, paramValueID_len);
if(!XfcProtMethod_GetVoltsBatVar(request, response, env, paramValueID_text, paramValueID_len)) {
return XFC_TRANSPORT_PROTOCOL_RESPONSE_RESULT_EXECUTION_ERROR;
}
}
return XFC_TRANSPORT_PROTOCOL_RESPONSE_RESULT_OK;
}