Чекпоинт. Планы-планы.
Всем привет!
Давно не появлялся в блоге с весомыми новостями, и, к сожалению рассказать о чем-то готовом пока нечего.
По моим оценкам работы с зифи модулем нужно примерно недели три в режиме "час в день". Это на разработку и отладку. Потом натянуть на покрывшийся пылью FTP клиет. Это еще неделю-две.
Но вот прошел месяц, а воз двигается очень неспешно. По разным причинам, казалось бы не зависящим от меня, но, буду честным самим с собой и признаю факт того, что те функции которые остается доделать при мысли о них часто вызывают внутреннюю тоску или тягучее состояние "нуу блин, опяяяяттть".
Так что в этом отношении буду очень раз за мотивационную словесную поддержку от вас. )
Из того, что есть на текущий момент: сформировал бэклог, чтобы видеть конечную цель, починил usb на Еве, получил ESP модули которые пришли один через пол года после заказа, второй через 3 месяца. )
Поизучал поток данных с ESP, чтобы лучше понимать как модуль формирует блоки и оборачивает их в команды. Оказалось что при приеме больших данных модуль сам решет их на блоки. Размер блоков может быть абсолютно любым. Может 1к прилететь, а может 900 байт + 1 байт + 122 байта. Добавил дамп в проект. Речь о работе модуля в режиме мультисоединений.
С моносоединением не вижу смысла связываться. Для того-же самого FTP это не актуально. Ну и задел на перспективу, чтобы модуль можно было делать резидентным в любой ОС и через него общаться с миром. Для этого ввожу callback ф-ции.
Пока все, поезде едет но не так быстро как хотелось бы.
В качестве чекпоинта приложу текущий бэклог.
==
## TODO
- [x] Обработка ситуации с таймаутом
- [x] Работа с реестром подключений (выделение номера, удаление номера)
- [x] Работа с реестром подключений (загрузка данных по ID в указанный буфер)
- [x] Тестирование мультисоединений (открыть 2 или 3 одновременно, отправить запрос)
- [x] Решить что делать с реестром если после приема данных соединение отключилось. Решение: вызвать call-back ф-цию, удалить соединение из реестра.
- [ ] Передавать в ф-цию перекладки данных из UART в целевой буфер размер блока данных исходя из текущего указателя на буфере UART-а. Т е если в UART-е всего 100 байт осталось до конца буфера а в IPD значится 1000 байт на передачу, то передавать 100, а на следующей итерации приема уже понимать что это продолжение уже без IDP.
- [x] Реализовать регистрацию callback процедур реагирующих на:
- - [x] прием данных (пришел блок)
- - [x] переполнение целевого буфера
- - [x] обрыв соединения
- [ ] Реализовать вызов callback процедур реагирующих на:
- - [ ] прием данных (пришел блок)
- - [ ] переполнение целевого буфера
- - [ ] обрыв соединения
- [ ] Также прверять что UART буфер резко не кончится и команда начала данных не потеряется. По-хорошему надо понимать что если встретили IPD, и символов 10, то лучше уж подождать прихода новых данных
- [ ] Проверять на строку 'N,DISCONNECT' на предмет потери соединения
- [x] Оборвать Wifi связь и посмотреть что вернет ESP.
- [ ] При инициализации модуля проверять и сбрасывать активные соединения, если таковые имеются
- [ ] При инициализации отключаться от wifi если соединение установлено. (?) Спорная ф-ция, подумать. Может оставлять соединение как есть.
- [ ] Рефактор таймаута. Текущее определение времени "плавает"
## Тестирование и отладка
- [ ] Проверить что контрольные значения в реестре устанавливаются верно (дескритор и границы буфера)
- [x] Прием данных одного соединения в один буфер. Данные короткие (меньше буфера)
- [x] Прием данных нескольких соединения в один буфер. Данные короткие (меньше буфера)
- [x] Проверить что будет, если придут данные из незарегистрированного соединения
- [x] Проверка как дописываются данные в один буфер если пришло несколько кусков (несколько команд +ipd)
- [x] Проверить что будет если пршли данные > 2k в одном соединение. Что выдаст ESP модуль, разобьет ли на блоки
- [ ] Проверить реакцию на переполнение буфера, когда идут данные большими кусками. Должен класть в бучер ровно столько сколько в него поместится.
- [ ] Оттестировать что когда идут большие блоки в IPD, они корректно принемаются т к в этому случае обработка идет порционно
- [ ] Оттестировать ситуацию когда за блоком данных идет команда IPD которая попала на границу UART буфера
- [ ] Оттестировать вызов callback процедур реагирующих на:
- - [ ] прием данных (пришел блок)
- - [ ] переполнение целевого буфера
- - [ ] обрыв соединения
## Мысли на долгосрок
- [ ] Введение менеджера памяти для управления памятью. Или внедриться в tasis, wc или cli где это уже есть
- [ ] При записи перекладывать данные через DMA
==
Комментарии
Трекбэков
Всего трекбэков 0
Ссылка трекбэка: