Начало
This commit is contained in:
		
						commit
						870d84908e
					
				|  | @ -0,0 +1,20 @@ | |||
| //
 | ||||
| // Created by xemon on 10.11.22.
 | ||||
| //
 | ||||
| 
 | ||||
| #ifndef UVEOS_ON_NATION_VARIABLES_H | ||||
| #define UVEOS_ON_NATION_VARIABLES_H | ||||
| 
 | ||||
| #include <VariablesTable.h> | ||||
| #include "XfcProtProcessorUtilDefines.h" | ||||
| 
 | ||||
| 
 | ||||
| void XfcProtMethodsAdd_Vars(tXfcProtTable *protTab, tVariablesTable *varsTab); | ||||
| 
 | ||||
| uint8_t XfcProtMethod_VarsTable(tXfcArray *request, tXfcArray *response, tVariablesTable *varsTab); | ||||
| 
 | ||||
| uint8_t XfcProtMethod_VarsGet(tXfcArray *request, tXfcArray *response, tVariablesTable *varsTab); | ||||
| 
 | ||||
| uint8_t XfcProtMethod_VarsSet(tXfcArray *request, tXfcArray *response, tVariablesTable *varsTab); | ||||
| 
 | ||||
| #endif //UVEOS_ON_NATION_VARIABLES_H
 | ||||
|  | @ -0,0 +1,16 @@ | |||
| 
 | ||||
| обычный транспортный протокол XfcTransportProtocol: | ||||
| Прописать в modular.json: | ||||
|     { | ||||
|       "type": "git", | ||||
|       "provider": "ficom_modules", | ||||
|       "repo": "XfcTransportProtocol" | ||||
|     }, | ||||
| 
 | ||||
| Расширеный транспортный протокол XfcTransportProtocol_Extended. | ||||
| Прописать в modular.json: | ||||
|     { | ||||
|       "type": "git", | ||||
|       "provider": "ficom_modules", | ||||
|       "repo": "XfcTransportProtocol_Extended" | ||||
|     }, | ||||
|  | @ -0,0 +1,11 @@ | |||
| //
 | ||||
| // Created by xemon on 10.11.22.
 | ||||
| //
 | ||||
| 
 | ||||
| #include "ComIntCmd/Vars.h" | ||||
| 
 | ||||
| void XfcProtMethodsAdd_Vars(tXfcProtTable *protTab, tVariablesTable *varsTab) { | ||||
|     XfcProtTable_AddStatic(protTab, "VARS_TABLE", XfcProtMethod_VarsTable, varsTab); | ||||
|     XfcProtTable_AddStatic(protTab, "GET_VARS", XfcProtMethod_VarsGet, varsTab); | ||||
|     XfcProtTable_AddStatic(protTab, "SET_VARS", XfcProtMethod_VarsSet, varsTab); | ||||
| } | ||||
|  | @ -0,0 +1,99 @@ | |||
| //
 | ||||
| // 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; | ||||
| } | ||||
|  | @ -0,0 +1,81 @@ | |||
| //
 | ||||
| // Created by cfif on 04.10.2022.
 | ||||
| //
 | ||||
| 
 | ||||
| #include "ComIntCmd/Vars.h" | ||||
| #include <BaseTypes.h> | ||||
| 
 | ||||
| 
 | ||||
| static uint8_t XfcProtMethod_VarsSetChange(tXfcArray *request, tXfcArray *response, tVariablesTable *varsTab) { | ||||
|     // Запись избранных параметров
 | ||||
|     uint16_t paramCount = 0; | ||||
|     uint8_t paramValueID_len = 0; | ||||
|     uint8_t paramValueID_text[64]; | ||||
| 
 | ||||
|     XFC_CMD_RX_GET_RAW(paramCount); | ||||
| 
 | ||||
|     if (!paramCount) { | ||||
|         return XFC_TRANSPORT_PROTOCOL_RESPONSE_RESULT_OK; | ||||
|     } | ||||
| 
 | ||||
|     for (uint16_t count = 0; count < paramCount; ++count) { | ||||
| 
 | ||||
| 
 | ||||
|         // Получение текстового id параметра
 | ||||
|         XFC_CMD_RX_GET_RAW(paramValueID_len); | ||||
|         XFC_CMD_RX_GET_ARR(paramValueID_text, paramValueID_len); | ||||
| 
 | ||||
| 
 | ||||
|         //достаем переменную из таблицы
 | ||||
|         tVariableDescriptor *var = VariablesTable_GetByName(varsTab, (char *) paramValueID_text, paramValueID_len); | ||||
| 
 | ||||
| 
 | ||||
|         //проверяем есть ли она (если по названию ее найти не удалось, то ее не будет)
 | ||||
|         if (!var) { | ||||
|             return XFC_TRANSPORT_PROTOCOL_RESPONSE_RESULT_EXECUTION_ERROR; | ||||
|         } | ||||
| 
 | ||||
|         //проверяем можно ли ее еще писать (если есть счетчик разрешения записи то не пустой ли он)
 | ||||
|         if (!VariablesTable_IsVariableChangeAllowed(var)) { | ||||
|             return XFC_TRANSPORT_PROTOCOL_RESPONSE_RESULT_EXECUTION_ERROR; | ||||
|         } | ||||
| 
 | ||||
|         //получаем размер для типа данных переменно, если размер типа равен 0 то размер не статичен
 | ||||
|         uint8_t typeLen = VariablesTable_GetVarTypeLength(var); | ||||
| 
 | ||||
|         uint8_t dataLen; | ||||
|         XFC_CMD_RX_GET_RAW(dataLen); | ||||
| 
 | ||||
|         //проверяем совпадает ли размер типа данных(если он есть) с переданным от клината размером
 | ||||
|         if (typeLen && (typeLen != dataLen)) { | ||||
|             return XFC_TRANSPORT_PROTOCOL_RESPONSE_RESULT_EXECUTION_ERROR; | ||||
|         } | ||||
| 
 | ||||
|         //собственно, получаем dataLen байт переменной
 | ||||
|         XFC_CMD_RX_GET_ARR(var->addr, dataLen); | ||||
|         if (var->len) { | ||||
|             *(uint8_t *) var->len = dataLen; | ||||
|         } | ||||
| 
 | ||||
|         //и самое главное сообщаем что переменная была изменена иначе будет неизветно что и где нужно обновить
 | ||||
|         VariablesTable_VariableChanged(varsTab, var); | ||||
|     } | ||||
| 
 | ||||
|     return XFC_TRANSPORT_PROTOCOL_RESPONSE_RESULT_OK; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| uint8_t XfcProtMethod_VarsSet(tXfcArray *request, tXfcArray *response, tVariablesTable *varsTab) { | ||||
| 
 | ||||
|     //запрашиваем доступ на изменение настроек
 | ||||
|     if (!VariablesTable_RequireChange(varsTab, 10)) { | ||||
|         return XFC_TRANSPORT_PROTOCOL_RESPONSE_RESULT_EXECUTION_ERROR; | ||||
|     } | ||||
| 
 | ||||
|     uint8_t result = XfcProtMethod_VarsSetChange(request, response, varsTab); | ||||
| 
 | ||||
|     //осовбождаем доступ к измененению настроек
 | ||||
|     VariablesTable_ReleaseChange(varsTab); | ||||
| 
 | ||||
|     return result; | ||||
| } | ||||
|  | @ -0,0 +1,28 @@ | |||
| //
 | ||||
| // Created by cfif on 04.10.2022.
 | ||||
| //
 | ||||
| 
 | ||||
| #include "ComIntCmd/Vars.h" | ||||
| 
 | ||||
| uint8_t XfcProtMethod_VarsTable(tXfcArray *request, tXfcArray *response, tVariablesTable *varsTab) { | ||||
| 
 | ||||
|     XFC_CMD_TX_ADD_RAW(varsTab->count); | ||||
| 
 | ||||
|     for (uint16_t count = 0; count < varsTab->count; ++count) { | ||||
| 
 | ||||
|         XFC_CMD_TX_ADD_RAW(varsTab->items[count].name.length); | ||||
|         XFC_CMD_TX_ADD_ARR(varsTab->items[count].name.str, | ||||
|                            varsTab->items[count].name.length); | ||||
| 
 | ||||
|         // Описание переменной
 | ||||
|         uint8_t zero = 0; | ||||
|         XFC_CMD_TX_ADD_RAW(zero); | ||||
| 
 | ||||
|         // Тип переменной
 | ||||
|         uint16_t type = varsTab->items[count].typeId; | ||||
|         XFC_CMD_TX_ADD_RAW(type); | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
|     return XFC_TRANSPORT_PROTOCOL_RESPONSE_RESULT_OK; | ||||
| } | ||||
|  | @ -0,0 +1,27 @@ | |||
| { | ||||
|   "dep": [ | ||||
|     { | ||||
|       "type": "git", | ||||
|       "provider": "HVAC_DEV", | ||||
|       "repo": "XfcTransportProtocol" | ||||
|     }, | ||||
|     { | ||||
|       "type": "git", | ||||
|       "provider": "HVAC_DEV", | ||||
|       "repo": "BaseTypes" | ||||
|     }, | ||||
|     { | ||||
|       "type": "git", | ||||
|       "provider": "HVAC_DEV", | ||||
|       "repo": "VariablesTable" | ||||
|     } | ||||
|   ], | ||||
|   "cmake": { | ||||
|     "inc_dirs": [ | ||||
|       "Inc" | ||||
|     ], | ||||
|     "srcs": [ | ||||
|       "Src/**.c" | ||||
|     ] | ||||
|   } | ||||
| } | ||||
		Loading…
	
		Reference in New Issue