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