Добавлены интерфейсы и драйверы
This commit is contained in:
commit
baeb4aa0bc
|
|
@ -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_M7",
|
||||||
|
"repo": "XfcTransportProtocol"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "git",
|
||||||
|
"provider": "HVAC_M7",
|
||||||
|
"repo": "BaseTypes"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "git",
|
||||||
|
"provider": "HVAC_M7",
|
||||||
|
"repo": "VariablesTable"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"cmake": {
|
||||||
|
"inc_dirs": [
|
||||||
|
"Inc"
|
||||||
|
],
|
||||||
|
"srcs": [
|
||||||
|
"Src/**.c"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue