ComIntCmd_Vars/Src/ComIntCmd/VarsGet.c

100 lines
3.3 KiB
C

//
// Created by cfif on 04.10.2022.
//
#include "ComIntCmd/Vars.h"
#include <BaseTypes.h>
#include <string.h>
uint8_t XfcProtMethod_VarsGetVar(tXfcArray *request, tXfcArray *response, tVariableDescriptor *var) {
// id параметра
//XFC_CMD_TX_ADD_RAW(id);
// Текстовый вид ID
XFC_CMD_TX_ADD_RAW(var->name.length);
XFC_CMD_TX_ADD_ARR(var->name.str, var->name.length);
// if (varsTab->items[id].typeId == VARIABLE_TYPE_STRING) {
// tString128 *str = (tString128 *) varsTab->items[id].addr;
// // Длина строки
// XFC_CMD_TX_ADD_RAW( varsTab->items[id]);
// // Строка
// XFC_CMD_TX_ADD_ARR(str->data, str->length);
// } else {
//
//
// }
// uint16_t typeLen16 = variablesTypeLength[varsTab->items[id].typeId];
uint8_t len = VariablesTable_GetVarLength(var);
// Размер данных
XFC_CMD_TX_ADD_RAW(len);
// Данные
XFC_CMD_TX_ADD_ARR(var->addr, len);
return true;
}
uint8_t XfcProtMethod_VarsGet(tXfcArray *request, tXfcArray *response, tVariablesTable *varsTab) {
// Чтение всех параметров
if (XfcArrayGetDataSize(request) == 0) {
// Количество параметров
XFC_CMD_TX_ADD_RAW(varsTab->count);
for (uint16_t id = 0; id < varsTab->count; ++id) {
if (!XfcProtMethod_VarsGetVar(request, response, varsTab->items + id)) {
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 параметра
//XFC_CMD_RX_GET_RAW(paramValueID);
// Получение текстового 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);
tVariableDescriptor *var = VariablesTable_GetByName(varsTab, paramValueID_text, paramValueID_len);
if (!var) {
return XFC_TRANSPORT_PROTOCOL_RESPONSE_RESULT_EXECUTION_ERROR;
}
if (!XfcProtMethod_VarsGetVar(request, response, var)) {
return XFC_TRANSPORT_PROTOCOL_RESPONSE_RESULT_EXECUTION_ERROR;
}
// if (varsTab->items[paramValueID].typeId == VARIABLE_TYPE_STRING) {
// tString *str = (tString *) varsTab->items[paramValueID].addr;
// XFC_CMD_TX_ADD_RAW(str->length);
// XFC_CMD_TX_ADD_ARR(str->str, str->length);
// } else {
// uint16_t len = variablesTypeLength[varsTab->items[paramValueID].typeId];
// uint8_t typeLen8 = len;
//
// // Размер данных
// XFC_CMD_TX_ADD_RAW(typeLen8);
// // Считывание данных по адресу в буфер на передачу
// XFC_CMD_TX_ADD_ARR(varsTab->items[paramValueID].addr, len);
// }
}
return XFC_TRANSPORT_PROTOCOL_RESPONSE_RESULT_OK;
}