www.open-tager.ru

открытый лазертаг форум
Текущее время: 27 апр 2024, 17:50

Часовой пояс: UTC + 3 часа [ Летнее время ]


Реклама

Правила форума


В разделе запрещены - обсуждение оборудования не поддерживающего открытых протоколов, реклама и ссылки на готовые продукты лазертага, обсуждение политики производителей и самих производителей. Виден всем.



Начать новую тему Ответить на тему  [ Сообщений: 1076 ]  На страницу Пред.  1 ... 102, 103, 104, 105, 106, 107, 108  След.
Автор Сообщение
 Заголовок сообщения: Re: Система Caustic
СообщениеДобавлено: 15 фев 2017, 22:59 
Не в сети
Старожил

Зарегистрирован: 18 мар 2015, 13:19
Сообщений: 574
Откуда: Нижний Новгород
Pingvin писал(а):
Пакеты по 32 байта гонять научился.
Давайте обсудим структуру пакета.
Цитата:
RCSP-сообщения
...

Тут какой уровень описан?
Не вижу ни адреса отправителя, ни адреса получателя...


Это что-то вроде "прикладного уровня". То есть, уже полезная нагрузка пакета. Или содержимое файла, или RFID-карты, да чего угодно. Сетевой уровень подробно опишу в ближайшем будущем.

Если кратко, то вот тут описание заголовока пакета: https://github.com/DAlexis/caustic-lase ... er.hpp#L40 . Он состоит из адресов отправителя и получателя, а также структуры PackageDetails, в которой, в свою очередь, уникальный идентификатор пакета (генерируется случайно и нужен, например, чтобы 2 раза не принять одно и то же), TTL и флаг запроса на подтверждение. Обратите внимание, используется относительно малоизвестная возможность языка C - битовые поля (про неё в этой статье есть: https://habrahabr.ru/post/142662/ )


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Система Caustic
СообщениеДобавлено: 16 фев 2017, 06:17 
Не в сети
Аксакал форума
Аватар пользователя

Зарегистрирован: 12 авг 2011, 16:55
Сообщений: 7514
Откуда: Барнаул, Алтайский край (не путать с республикой Алтай) :-)
Хорошо, а адреса устройств откуда берутся?

И вот в этом месте
Код:
struct PackageDetails
{
PackageDetails(uint16_t id, uint8_t ack = 0, uint16_t ttl = 0) :
packageId(id),
TTL(ttl),
needAck(ack)
{}
PackageDetails()
{
TTL = 0;
needAck = 0;
}
PackageId packageId;
uint8_t TTL : 7;
uint8_t needAck : 1;
};



что означает объявление
Код:
PackageDetails(uint16_t id, uint8_t ack = 0, uint16_t ttl = 0) :
packageId(id),
TTL(ttl),
needAck(ack)
{}



Функция, как поле структуры?
Что означает двоеточие?

Ну тут понятно
Код:
uint8_t TTL : 7;

это значит размер поля 4 бита.


Опять же
Код:
packageId(id),
TTL(ttl),
needAck(ack)

это вызов функций?
В структуре?
Ничего не понятно...

_________________
Ваше оружие становиться значительно эффективней, если его снять с предохранителя!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Система Caustic
СообщениеДобавлено: 16 фев 2017, 10:56 
Не в сети
Старожил

Зарегистрирован: 18 мар 2015, 13:19
Сообщений: 574
Откуда: Нижний Новгород
Pingvin писал(а):
Хорошо, а адреса устройств откуда берутся?

Адреса устройств берутся из конфига каждого устройства с SD-карты и назначаются при запуске. Все, что связано с сетью, лежит в папке network (она есть в include и в src)
Pingvin писал(а):
И вот в этом месте
что означает объявление
Код:
PackageDetails(uint16_t id, uint8_t ack = 0, uint16_t ttl = 0) :
packageId(id),
TTL(ttl),
needAck(ack)
{}

это вызов функций?
В структуре?
Ничего не понятно...

Это прямая инициализации членов класса (или структуры) в конструкторе. Почитайте, как работают конструкторы классов в C++, например в MSDN: https://msdn.microsoft.com/ru-ru/library/s16xw1a8.aspx . Это основы C++.

Если кратко, это то же самое, как внутри конструктора написать
Код:
packageId = id;
TTL = ttl;
needAck = ack;

но правильней в силу некоторых причин.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Система Caustic
СообщениеДобавлено: 16 фев 2017, 11:37 
Не в сети
Аксакал форума
Аватар пользователя

Зарегистрирован: 12 авг 2011, 16:55
Сообщений: 7514
Откуда: Барнаул, Алтайский край (не путать с республикой Алтай) :-)
Что такое конструкторы и деструкторы я знаю.
Но я не знал, что это применимо и к структурам.

_________________
Ваше оружие становиться значительно эффективней, если его снять с предохранителя!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Система Caustic
СообщениеДобавлено: 16 фев 2017, 12:02 
Не в сети
Старожил

Зарегистрирован: 18 мар 2015, 13:19
Сообщений: 574
Откуда: Нижний Новгород
Pingvin писал(а):
Что такое конструкторы и деструкторы я знаю.
Но я не знал, что это применимо и к структурам.

Структуры и классы в С++ - полностью одно и то же, за исключением того, что в классе по-умолчанию все поля private (если не указать явно иное), а в структуре - public. Все остальное, включая принципы наследования и полиморфизма - идентично. Структура и класс могут наследоваться друг от друга в любой комбинации.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Система Caustic
СообщениеДобавлено: 16 фев 2017, 13:39 
Не в сети
Аксакал форума
Аватар пользователя

Зарегистрирован: 12 авг 2011, 16:55
Сообщений: 7514
Откуда: Барнаул, Алтайский край (не путать с республикой Алтай) :-)
Код:
PackageDetails(uint16_t id, uint8_t ack = 0, uint16_t ttl = 0) :
packageId(id),
TTL(ttl),
needAck(ack)
{}
PackageDetails()
{
TTL = 0;
needAck = 0;
}


Два конструктора, что ли?
Код:
PackageDetails()
{
TTL = 0;
needAck = 0;
}


Это тоже конструктор, что ли?
Это если структура создается без указания параметров?

_________________
Ваше оружие становиться значительно эффективней, если его снять с предохранителя!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Система Caustic
СообщениеДобавлено: 16 фев 2017, 14:10 
Не в сети
Старожил

Зарегистрирован: 18 мар 2015, 13:19
Сообщений: 574
Откуда: Нижний Новгород
Pingvin писал(а):
Это тоже конструктор, что ли?
Это если структура создается без указания параметров?

Конечно. Обычная перегрузка конструктора.
Причем я уже не помню, зачем сделал второй конструктор без параметров. Возможно он нужен для каких-то операций с контейнерами... А может его можно убрать.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Система Caustic
СообщениеДобавлено: 17 фев 2017, 07:10 
Не в сети
Аксакал форума
Аватар пользователя

Зарегистрирован: 12 авг 2011, 16:55
Сообщений: 7514
Откуда: Барнаул, Алтайский край (не путать с республикой Алтай) :-)
Мне бы структуру заголовка и всего пакета в простом наглядном виде - как Си структуры.

_________________
Ваше оружие становиться значительно эффективней, если его снять с предохранителя!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Система Caustic
СообщениеДобавлено: 17 фев 2017, 15:15 
Не в сети
Старожил

Зарегистрирован: 18 мар 2015, 13:19
Сообщений: 574
Откуда: Нижний Новгород
Pingvin писал(а):
Мне бы структуру заголовка и всего пакета в простом наглядном виде - как Си структуры.

Так я же Вам эти структуры показал: https://github.com/DAlexis/caustic-lase ... er.hpp#L40 , там все, как есть.

Поля пакета - это структура-адрес отправителя, структура-адрес получателя, структура-заголовок и массив с данными. Структура-заголовок описана прям в этом же файле, структура-адрес - в https://github.com/DAlexis/caustic-lase ... -types.hpp . Если нужно найти, в каком файле что определено, и у вас не настроена среда, можно воспользоваться
Код:
grep -rnI "строка"


Вот я максимально упростил код - все константы и методы убраны. Тут все должно быть ясно:
Код:
struct DeviceAddress
{
   uint8_t address[3];
};

struct PackageDetails
{
   PackageId packageId;
   uint8_t TTL : 7;
   uint8_t needAck : 1;
};
struct Package
{
   DeviceAddress sender;
   DeviceAddress target;
   PackageDetails details;
   uint8_t payload[23];
};


Чтобы было совсем сишно, нужно struct заменить на typedef struct, и имя в конец :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Система Caustic
СообщениеДобавлено: 17 фев 2017, 16:56 
Не в сети
Аксакал форума
Аватар пользователя

Зарегистрирован: 12 авг 2011, 16:55
Сообщений: 7514
Откуда: Барнаул, Алтайский край (не путать с республикой Алтай) :-)
Так понятней.
PackageId - это uint16_t ?
Значит "полезная нагрузка" - 23 байта?

_________________
Ваше оружие становиться значительно эффективней, если его снять с предохранителя!


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 1076 ]  На страницу Пред.  1 ... 102, 103, 104, 105, 106, 107, 108  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 18


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB