bus — различия между версиями
4epT (обсуждение | вклад) |
4epT (обсуждение | вклад) |
||
Строка 1: | Строка 1: | ||
− | ;bus [<[[References#.D0.B1.D1.83.D0.BB.D0.B5.D0.B2_.D1.84.D0.BB.D0.B0.D0.B3| | + | ;bus [<[[References#.D0.B1.D1.83.D0.BB.D0.B5.D0.B2_.D1.84.D0.BB.D0.B0.D0.B3|булев_флаг]]>] |
:Эта системная переменная определяет, включить ли бус-шину (англ. bus), которая позволяет общаться нескольким экземплярам OpenKore между собой и обеспечивает взаимодействие внешних программ с OpenKore. Если системная переменная bus '''0''', то бус-шина выключена и никаких настроек делать не надо. Если же системная переменная bus '''1''', то бус-шина включена и для общения по ней следует сделать некоторые настройки в файле '''sys.txt'''. | :Эта системная переменная определяет, включить ли бус-шину (англ. bus), которая позволяет общаться нескольким экземплярам OpenKore между собой и обеспечивает взаимодействие внешних программ с OpenKore. Если системная переменная bus '''0''', то бус-шина выключена и никаких настроек делать не надо. Если же системная переменная bus '''1''', то бус-шина включена и для общения по ней следует сделать некоторые настройки в файле '''sys.txt'''. | ||
Версия 18:37, 1 мая 2021
- bus [<булев_флаг>]
- Эта системная переменная определяет, включить ли бус-шину (англ. bus), которая позволяет общаться нескольким экземплярам OpenKore между собой и обеспечивает взаимодействие внешних программ с OpenKore. Если системная переменная bus 0, то бус-шина выключена и никаких настроек делать не надо. Если же системная переменная bus 1, то бус-шина включена и для общения по ней следует сделать некоторые настройки в файле sys.txt.
Содержание
Коротко о бус-шине
Цель бус-шины - позволить различным экземплярам OpenKore легко общаться между собой и позволить внешним программам также легко общаться с запущенной OpenKore.
Бус-шина - это канал связи, который может заниматься широковещательной рассылкой сообщений, также как и рассылкой личных, приватных сообщений своим абонентам. Кто-то сравнил это с улицей, на которой любой может громко прокричать что-либо (это типа широковещательная рассылка), а может подойти и шепнуть на ушко (а это типа приватное сообщение).
Кроме того, бус-шина основана на отдельных, дискретных сообщениях, вместо того, чтобы посылать непрерывную цепочку байт.
Описание протокола
Создатель этого протокола назвал формат сообщений "Simple Serializable Message" (SSM). Формат этих сообщений - двоичный.
Каждое сообщение SSM содержит следующую информацию:
- Идентификатор сообщения - MID. Это строка, в которой может быть написано всё, что угодно.
- Список аргументов. Это может быть либо список пар вида параметр-значение, либо список скалярных значений, то есть массив.
Сообщение сопоставимо с вызовом функции в языках программирования. Представьте себе следующую функцию в C++:
void copyFile(string from, string to); copyFile("foo.txt", "bar.txt");
Проводя аналогию между функцией на C++ и сообщением SSM для бус-шины, можно отметить:
- Идентификатор сообщения был бы строкой copyFile.
- Список аргументов состоял бы из двух пар параметр-значение:
from = foo.txt to = bar.txt
Структура сообщения
Возьмите на заметку, что все целые числа записываются в big-endian. Это означает, что в сообщении старший байт будет записан перед младшим.
Заголовок сообщения
Каждое SSM-сообщение начинается с заголовка struct Header, структура которого описана ниже:
struct { // Header uint32 length; // Длина в байтах всего SSM-сообщения. uint8 options; // Тип SSM-сообщения: 0 = список пар параметр-значение, 1 = список скаляров, массив. uint8 MID_length; // Длина MID - идентификатора сообщения, который является строкой. char MID[MID_length]; // MID - идентификатор сообщения, это строка в UTF-8 кодировке. } Header;
Если в вышеописанном заголовке сообщения поле options = 0, тогда за заголовком следует список структур struct MapEntry, который идёт до самого конца SSM-сообщения. Это список пар параметр-значение.
Если же в заголовке сообщения поле options = 1, тогда за заголовком следует список структур struct ArrayEntry, который идёт до самого конца SSM-сообщения. Это список скаляров, массив.
Структура параметр-значение
struct { uint8 key_length; // Длина имени параметра. char key[key_length]; // Строка - имя параметра в UTF-8 кодировке. uint8 value_type; // Тип значения: 0 = двоичный, 1 = строка в UTF-8 кодировке, 2 = unsigned integer uint24 value_length; // Длина значения параметра. char value[value_length]; // Само значение параметра, длиной value_length символов, байт. } MapEntry;
Структура скаляра
struct { uint8 type; // Тип скаляра: 0 = двоичный, 1 = строка в UTF-8 кодировке, 2 = unsigned integer uint24 length; // Длина значения скаляра. char value[length]; // Само значение скаляра, длиной length символов, байт. } ArrayEntry;