www.open-tager.ru https://open-tager.ru/forum/ |
|
API прошивки "Аскета" https://open-tager.ru/forum/viewtopic.php?f=5&t=3909 |
Страница 1 из 1 |
Автор: | Pingvin [ 16 окт 2014, 16:15 ] |
Заголовок сообщения: | API прошивки "Аскета" |
Народ пытается разобраться в прошивке, что меня очень радует. Народ хочет разобраться, но возникают затруднения. Не хочу, чтобы руки опустились у отважившихся, поэтому постараюсь описать основные функции прошивки. Ребята, вам не надо изучать каждую функцию под микроскопом, нужно знаать, что делает та или иная функция, какие параметры ей надо переджать и какие параметры она возвращает. Давайте кратко об общем принципе работы прошивки. У нас есть прерывания, есть главный цикл, который крутиться бесконечно. Основную работу делают прерывания - они фиксируют те или иные события, такие как - прием пакета по ИК каналу (или ошибка приема), нажатие кнопок, прием символов по UART? и ... да и все, в общем то. Как только наступает событие, прерывания информируют об этом главный цикл через глобальные переменные. Основные события системы: События клавиатуры (курка), за них отвечает глобальная переменная keyboard_event может принимать всего два значения - было нажатие на курок, или не было нажатия no_key_pressing, key_pressing, Как только мы нажали на курок и удержали нажатым несколко миллисекунд (защита от дребезка) - сразу прерывание присваивает переменной keyboard_event = key_pressing Главный цикл, поочерёдно опрашивая все переменные-события обнаруживает, что было нажатие на курок и вызывает соответствующие функции, такие как отправка пакета по ИК send_ir_package(); и воспроизведение звука выстрела - но об этом позже расскажу, так акак звук выстрела воспроизводится не так, как остальные звуки. Разумеется, перед этим проверит - а есть ли патроны в магазине. После того, как мы обработали событие, мы должны сделать так keyboard_event=no_key_pressing; Надеюсь, понятно, зачем? Иначе каждый раз, проверяя эту переменную главный цикл будет вызывать вышенвзыванные функции, то есть таг будет палить, пока патроны не закончатся, не зависимо от того - жмете Вы курок или нет. |
Автор: | Pingvin [ 16 окт 2014, 16:40 ] |
Заголовок сообщения: | Re: API прошивки "Аскета" |
Следующея глобальная переменная - событие это reload_key_event Событие кнопки перезаряда. Так же всего два значения (пока, возможно изменю потом) no_key_pressing - не было нажатия key_pressing - было нажатие Расписывать обработчик не буду - сами догадайтесь, что он делает |
Автор: | Pingvin [ 16 окт 2014, 17:00 ] |
Заголовок сообщения: | Re: API прошивки "Аскета" |
Далее rx_event - событие ИК приемника Может принимать значения NOT_EVENT, //нет событий RX_COMPLETE, //принят пакет RX_MESSAGE_COMPLITE,//принято сообщение RX_ERROR //ошибка приема пакета Переменная такого же типа, но отслеживает события блютус-повязки bt_rx_event; Те же самые значения может принимать NOT_EVENT, //нет событий RX_COMPLETE, //принят пакет RX_MESSAGE_COMPLITE,//принято сообщение RX_ERROR //ошибка приема пакета |
Автор: | Pingvin [ 16 окт 2014, 17:05 ] |
Заголовок сообщения: | Re: API прошивки "Аскета" |
Я извиняюсь за грамматику в названиях переменных и описаниях типов - не пинайте сильно, английския язык - единственный предмет по которому у меня за четверть тройка была (единожды). Да и русский не далеко ушел. |
Автор: | Pingvin [ 16 окт 2014, 17:11 ] |
Заголовок сообщения: | Re: API прошивки "Аскета" |
joystick_event Догадались, о чем речь? Конечно - о джойстике. Какие могут быть события? Вот такие: no_pressing, - не было нажатий key_up_pressing, - была нажата клавиша "вверх" key_right_pressing, - была нажата клавиша "вправо" key_down_pressing, - была нажата клавиша "вниз" key_left_pressing, - была нажата клавиша "влево" key_central_pressing - была нажата клавиша "центральная" |
Автор: | Pingvin [ 16 окт 2014, 19:08 ] |
Заголовок сообщения: | Re: API прошивки "Аскета" |
LTagKirov писал(а): Pingvin писал(а): Народ пытается разобраться в прошивке, что меня очень радует. Не хочу, чтобы руки опустились у отважившихся, поэтому постараюсь описать основные функции прошивки. Хорошее начинание: есть предложение добавить в эту тему заметки "как сделать" какую нибудь типовую функцию. Помню были ранее написаны описания как сделать пульт, как сделать новую команду и тд Примерно как в ардуино скетчи народ выкладывает. Примерные темы: - смена сценария поведения оборудования, простейшие примеры: как добавить задержку между нажатием на кнопку огонь и выстрелом ИК(гранатомёт) или как сделать полный цикл перезарядки магазина и тд - поддержка N зон поражения(бронежилет как встроить в логику сценария игры) - работа с АЦП (контроль батарейки как встроить в процесс главного цикла) и тд Писать готовыми эти куски не надо, но хотя-бы с какого места начинать их встраивать и предпочтительный способ как реализовать функцию (как автор-основатель это желал бы видеть) Верно! А две зоны уже работают! Одна - по блютус, вторая - провод! Независимые абсолютно. Но фича - у блютуса большой кольцевой буфер и он может все попадания запомнить и обработать. А проводная зона имеет буфер на одно попадание - следующее затирает предидуще. Батарейка уже контролируется и в главном цикле. Есть прошива, где при разряде Жирик каждую минуту орет - "Батарея разряжена, все!" |
Автор: | Pingvin [ 16 окт 2014, 19:10 ] |
Заголовок сообщения: | Re: API прошивки "Аскета" |
Я предлагаю вопросы и комментаррии к теме вынести в отделбную ветку, чтобы не нарушать целостность повествования. |
Автор: | Pingvin [ 16 окт 2014, 19:14 ] |
Заголовок сообщения: | Re: API прошивки "Аскета" |
Трудящиеся предлагают в настройки добавить выбор количества жизни при старте игры. Обязательно пошагово распишу, как это сделать и как добавить любую настройку. |
Автор: | loner32 [ 16 окт 2014, 23:35 ] |
Заголовок сообщения: | Re: API прошивки "Аскета" |
Pingvin писал(а): Трудящиеся предлагают в настройки добавить выбор количества жизни при старте игры. Обязательно пошагово распишу, как это сделать и как добавить любую настройку. режим огня: одиночный, очередь, автомат. параметр установки длины очереди от 2 до 20. скорость стрельбы. от 250 до 800 длительность перезарядки в секундах. шок при попадании в секундах когда игрок не может управлять оружием и когда в него не могут попасть. |
Автор: | Pingvin [ 17 окт 2014, 05:07 ] |
Заголовок сообщения: | Re: API прошивки "Аскета" |
loner32 писал(а): Pingvin писал(а): Трудящиеся предлагают в настройки добавить выбор количества жизни при старте игры. Обязательно пошагово распишу, как это сделать и как добавить любую настройку. режим огня: одиночный, очередь, автомат. параметр установки длины очереди от 2 до 20. скорость стрельбы. от 250 до 800 длительность перезарядки в секундах. шок при попадании в секундах когда игрок не может управлять оружием и когда в него не могут попасть. Некоторые вещи уже есть (длительность перезарядки), для некоторых придется существенно переписать (дописать) прошивку. Прошивка не совершенна, есть явно "узкие" места. Но вижу - народ заинтересован в её развитии, поэтому, общими усилиями и с Божьей помощью будем дорабатывать. Скорострельность легко добавить, но не в количестве выстрелов в минуту, а в проценте "отсечки" звука. То есть, при стрельбе очередью, воспроизводится звук выстрела на N%, затем следующий выстрел. Меняя процент отсечки от 10 (к примеру) до 99 - будет меняться скорострельность в широких пределах. Это я готов сделать хоть завтра. Не - сделаем это вместе. А игрок сейчас неуязвим и не может стрелять, пока звук ранения воспроизводится. А точнее - если во время воспроизведения было несколько попаданий, то после воспроизведения в буфере останется только последнее попадание. Но легко сделать, чтобы и оно игнорировалось, после play_hit_sound() напишем rx_event = NOT_EVENT Это я о проводе. Блютуска же запомнит все попадания, и я сейчас просто их игнорирую после звука bt_rx_event = NOT_EVENT Не пинайте - так сложилось исторически. Все поправимо (исправимо). |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |