// // Created by cfif on 04.10.2022. // #include "ComIntCmd/Vars.h" #include #include 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; }