100 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			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;
 | |
| }
 |