Перейти к содержанию
    

Изменение настроек через http/ajax

Всем привет.

Есть устройство, в котором есть настройки, которые храняться с формате структур C.

Например, вот описание небольшого кусочка настроек:

typedef struct _CTRL_ITEM
{
  char obj_idx;
  enum
  {
    MORE=0,
    LESS,
    EQU,
    NEQU,
    RISING,
    FALLING,
    CHANGED
  }condition;
  struct
  {
    union
    {
      unsigned int val_u;
      float val_f;
    };
    char state; 
  }ctrl_val;
}CTRL_ITEM;

Далее для примера может использоваться массив такого блока настроек:
  struct
  {
    char enable;
    struct
    {
      CTRL_ITEM ctrl_item[PROG_BLOCK_LENGTH];
      ACT_ITEM act_item;
    }ControlBlock[PROG_LOGIC_BLOCKS];
  }ProgrammingSettings;

 

Сейчас изменение настроек осуществляется через telnet командную строку.

На устройстве также есть самописный HTTP сервер с тестовой страницей на js+jquery, визуализирующей состояние прибора.

Сейчас размышляю над тем, как организовать полноценное взаимодействие с html страницей для возможности не только визуализации но и полноценной настройки прибора, чтобы полностью отказаться от терминального меню.

Основное затруднение в следующем. Когда мы используем терминальное командное меню или терминальную псевдографику нет проблем с идентификацией переменной, значение которой мы выводим на экран или получаем в результате ввода пользователем. В каждый конкретный момент времени у нас есть активный item, однозначно идентифицируемый своим адресом в памяти.

Когда же нам требуется передать набор настроек на html страницу а потом обратно, возникает необходимость идентификации сущностей, которые мы выгружаем на страницу, а потом измененные выгружаем со страницы на сервер.

В классическом случае это реализуется хранением настроек в виде xml json yaml и тому подобных форматах.

Мне же для экономии ресурсов не хотелось бы отказываться от структурированного хранения. Но при этом возникает вопрос идентификации элементов.

Ничего элегантного мне пока придумать не удалось, поэтому обращаюсь за советом, как лучше всего организовать такое взаимодействие. Пока в голову пришла только одна мысль. Сделать движок, который бы на html страницу выгружал для каждого параметра набор адрес или смещение параметра в блоке настроек, значение параметра, тип параметра. После манипуляций со значением параметра на html странице скриптом выгружать аналогичный набор обратно в устройство(на сервер), где движок производит запись значения в память по принятому адресу или смещению.

Это решение не кажется мне эффективным и элегантным, хотя возможно я и ошибаюсь.

Прошу совета гуру. Вопрос серьезный, хочется сделать правильно и масштабируемо.

 

В распоряжении TnKernel TNnet LPC2387 (96RAM 512FLASH). Настройки хранятся во внешней 8Mbit flash.

Изменено пользователем grinux

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сейчас размышляю над тем, как организовать полноценное взаимодействие с html страницей для возможности не только визуализации но и полноценной настройки прибора, чтобы полностью отказаться от терминального меню.

 

Т.е сейчас весь ваш "сервер" может только работать как плеер, загружать файлы с диска или что у вас там для хранения и передавать их по сети в браузер? Никакого SSI\CGI взаимодействия с программой нет?

 

Когда же нам требуется передать набор настроек на html страницу а потом обратно, возникает необходимость идентификации сущностей, которые мы выгружаем на страницу, а потом измененные выгружаем со страницы на сервер.

 

Вот ведь как написали, я даже не понял :biggrin:

Т.е. создаете страницу с нужными данными и загружаете на диск, с которого потом считывет веб-сервер?

Изменено пользователем mantech

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Т.е сейчас весь ваш "сервер" может только работать как плеер, загружать файлы с диска или что у вас там для хранения и передавать их по сети в браузер? Никакого SSI\CGI взаимодействия с программой нет?

 

 

 

Вот ведь как написали, я даже не понял :biggrin:

Т.е. создаете страницу с нужными данными и загружаете на диск, с которого потом считывет веб-сервер?

 

Да, сейчас есть только обработка GET.

Страница статически прилинковывается к образу прошивки в виде

/* Contents of file index.html */

const long int index_html_size = 106876;

const unsigned char index_html[106876] = {

0x3C, 0x21, 0x44, 0x4F, 0x43, 0x54, 0x59......}

Никаких файлов и дисков нет и не планируется.

Изменено пользователем grinux

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

для json есть весьма компактные реализации.

собирайте-разбирайте строки от HTTP-сервера на лету, заодно выполняя их валидацию, иначе кто-нибудь додумается записать вам GET-запросом в параметр по смещению абракадабру, после чего будет весьма неприятно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, сейчас есть только обработка GET.

Страница статически прилинковывается к образу прошивки в виде

/* Contents of file index.html */

const long int index_html_size = 106876;

const unsigned char index_html[106876] = {

0x3C, 0x21, 0x44, 0x4F, 0x43, 0x54, 0x59......}

Никаких файлов и дисков нет и не планируется.

 

Да файлы и диски не суть, в примерах от СТ на плату дискавери 407 была неплохая демка, как просто использовать взаимодействие с http страницей...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А что мешает сделать страницу (или несколько) с нужными параметрами (настройками) и читать/сохранять их через GET/POST запросы (можно и одним GET обойтись) ?

Можно конечно и json/xml и прочее, но кода больше надо для обработки.

Страница/страницы статические с js кодом и красотой нужной.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 11/8/2017 at 2:55 PM, x893 said:

Страница/страницы статические с js кодом и красотой нужной

Чувствуется , имеется ПРАКТИЧЕСКИЙ опыт в данном вопросе у Вас! Не могли бы поделится как сделать полноценный обмен между железкой и компом через html. Крайне интересно было бы глянуть) На данный момент пытаюсь использовать mongoose и даже как-бы работает "что-то" но не совсем то ...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

12 minutes ago, backa said:

Не могли бы поделится как сделать полноценный обмен между железкой и компом через html

Посмотрите на обмен между Chrome и любым роутером при просмотре/изменении параметров последнего.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это само собой)) Я пытался с "наскока" что-то сделать под себя используя чужой рабочий пример, но все уперлось или в знание JS или WEB-технологий ((

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 10/20/2017 at 11:57 PM, grinux said:

Но при этом возникает вопрос идентификации элементов.

По индексу. Индекс в ControlBlock + индекс в ctrl_item (или один для act_item)

Передаёте на вашу html страницу и включаете его же в ответ. Передавать через ajax, а для этого организовать 2х стороннее общение с web с участием динамически генерируемых данных (как вам уже тут предлагали)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 часа назад, xvr сказал:

Передаёте на вашу html страницу и включаете его же в ответ.

Зачем все эти индексы? Неужели так сложно распарсить JSON и сопоставить его элементы переменным в памяти?

У меня так делается, структура конфига достаточно объёмная: больше сотни элементов. Просто JSON (без костылей индексов), а в памяти МК - таблица привязки элементов JSON членам конфигурационной структуры. Парсер проходит принятый JSON, на всю глубину вложенных объектов/массивов, на ходу сопоставляя встречаемые элементы переменным структуры.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

12 minutes ago, jcxz said:

Неужели так сложно распарсить JSON

Можно и без всякого JSON

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 минуты назад, x893 сказал:

Можно и без всякого JSON

Можно. Просто это стандартизованный формат обмена информацией, а лучше пользоваться стандартным, если возможно.

 

PS: Плюс такого подхода: можно JSON-сообщение (содержащее хоть весь конфиг) загрузить в любой онлайн-просмотрщик JSON и удобно его просмотреть (с расцветкой, развёртывание/свёртыванием объектов/структур). Да и проверить синтаксис тоже так можно (при отладке).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

25 minutes ago, jcxz said:

Можно

Да никто и не спорит. Можно по всякому. Главное, что бы работало.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...