grinux 0 20 октября, 2017 Опубликовано 20 октября, 2017 (изменено) · Жалоба Всем привет. Есть устройство, в котором есть настройки, которые храняться с формате структур 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. Изменено 20 октября, 2017 пользователем grinux Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 34 28 октября, 2017 Опубликовано 28 октября, 2017 (изменено) · Жалоба Сейчас размышляю над тем, как организовать полноценное взаимодействие с html страницей для возможности не только визуализации но и полноценной настройки прибора, чтобы полностью отказаться от терминального меню. Т.е сейчас весь ваш "сервер" может только работать как плеер, загружать файлы с диска или что у вас там для хранения и передавать их по сети в браузер? Никакого SSI\CGI взаимодействия с программой нет? Когда же нам требуется передать набор настроек на html страницу а потом обратно, возникает необходимость идентификации сущностей, которые мы выгружаем на страницу, а потом измененные выгружаем со страницы на сервер. Вот ведь как написали, я даже не понял Т.е. создаете страницу с нужными данными и загружаете на диск, с которого потом считывет веб-сервер? Изменено 28 октября, 2017 пользователем mantech Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
grinux 0 8 ноября, 2017 Опубликовано 8 ноября, 2017 (изменено) · Жалоба Т.е сейчас весь ваш "сервер" может только работать как плеер, загружать файлы с диска или что у вас там для хранения и передавать их по сети в браузер? Никакого SSI\CGI взаимодействия с программой нет? Вот ведь как написали, я даже не понял Т.е. создаете страницу с нужными данными и загружаете на диск, с которого потом считывет веб-сервер? Да, сейчас есть только обработка 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......} Никаких файлов и дисков нет и не планируется. Изменено 8 ноября, 2017 пользователем grinux Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Бородатый физик 0 8 ноября, 2017 Опубликовано 8 ноября, 2017 · Жалоба для json есть весьма компактные реализации. собирайте-разбирайте строки от HTTP-сервера на лету, заодно выполняя их валидацию, иначе кто-нибудь додумается записать вам GET-запросом в параметр по смещению абракадабру, после чего будет весьма неприятно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 34 8 ноября, 2017 Опубликовано 8 ноября, 2017 · Жалоба Да, сейчас есть только обработка 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 страницей... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 35 8 ноября, 2017 Опубликовано 8 ноября, 2017 · Жалоба А что мешает сделать страницу (или несколько) с нужными параметрами (настройками) и читать/сохранять их через GET/POST запросы (можно и одним GET обойтись) ? Можно конечно и json/xml и прочее, но кода больше надо для обработки. Страница/страницы статические с js кодом и красотой нужной. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
backa 1 19 сентября, 2021 Опубликовано 19 сентября, 2021 · Жалоба On 11/8/2017 at 2:55 PM, x893 said: Страница/страницы статические с js кодом и красотой нужной Чувствуется , имеется ПРАКТИЧЕСКИЙ опыт в данном вопросе у Вас! Не могли бы поделится как сделать полноценный обмен между железкой и компом через html. Крайне интересно было бы глянуть) На данный момент пытаюсь использовать mongoose и даже как-бы работает "что-то" но не совсем то ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 35 19 сентября, 2021 Опубликовано 19 сентября, 2021 · Жалоба 12 minutes ago, backa said: Не могли бы поделится как сделать полноценный обмен между железкой и компом через html Посмотрите на обмен между Chrome и любым роутером при просмотре/изменении параметров последнего. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
backa 1 19 сентября, 2021 Опубликовано 19 сентября, 2021 · Жалоба Это само собой)) Я пытался с "наскока" что-то сделать под себя используя чужой рабочий пример, но все уперлось или в знание JS или WEB-технологий (( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 35 19 сентября, 2021 Опубликовано 19 сентября, 2021 · Жалоба Знания * деньги = const Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 21 сентября, 2021 Опубликовано 21 сентября, 2021 · Жалоба On 10/20/2017 at 11:57 PM, grinux said: Но при этом возникает вопрос идентификации элементов. По индексу. Индекс в ControlBlock + индекс в ctrl_item (или один для act_item) Передаёте на вашу html страницу и включаете его же в ответ. Передавать через ajax, а для этого организовать 2х стороннее общение с web с участием динамически генерируемых данных (как вам уже тут предлагали) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 21 сентября, 2021 Опубликовано 21 сентября, 2021 · Жалоба 3 часа назад, xvr сказал: Передаёте на вашу html страницу и включаете его же в ответ. Зачем все эти индексы? Неужели так сложно распарсить JSON и сопоставить его элементы переменным в памяти? У меня так делается, структура конфига достаточно объёмная: больше сотни элементов. Просто JSON (без костылей индексов), а в памяти МК - таблица привязки элементов JSON членам конфигурационной структуры. Парсер проходит принятый JSON, на всю глубину вложенных объектов/массивов, на ходу сопоставляя встречаемые элементы переменным структуры. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 35 21 сентября, 2021 Опубликовано 21 сентября, 2021 · Жалоба 12 minutes ago, jcxz said: Неужели так сложно распарсить JSON Можно и без всякого JSON Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 21 сентября, 2021 Опубликовано 21 сентября, 2021 · Жалоба 2 минуты назад, x893 сказал: Можно и без всякого JSON Можно. Просто это стандартизованный формат обмена информацией, а лучше пользоваться стандартным, если возможно. PS: Плюс такого подхода: можно JSON-сообщение (содержащее хоть весь конфиг) загрузить в любой онлайн-просмотрщик JSON и удобно его просмотреть (с расцветкой, развёртывание/свёртыванием объектов/структур). Да и проверить синтаксис тоже так можно (при отладке). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 35 21 сентября, 2021 Опубликовано 21 сентября, 2021 · Жалоба 25 minutes ago, jcxz said: Можно Да никто и не спорит. Можно по всякому. Главное, что бы работало. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться