![]() |
MBee Arduino library
|
Этот класс может быть использован вместо класса SerialStar и позволяет самостоятельно создавать функции, которые будут автоматически вызываться при получении пакетов от радиомодуля. Подробнее...
#include <SerialStar.h>
Открытые члены | |
void | onPacketError (void(*func)(uint8_t, uintptr_t), uintptr_t data=0) |
Регистрация callback-функции для события ошибки чтения пакета. Подробнее... | |
void | onResponse (void(*func)(MBeeResponse &, uintptr_t), uintptr_t data=0) |
Регистрация callback-функции для события приема пакета от модуля. Подробнее... | |
void | onOtherResponse (void(*func)(MBeeResponse &, uintptr_t), uintptr_t data=0) |
Регистрация callback-функции для события приема пакета от модуля. Подробнее... | |
void | onModemStatusResponse (void(*func)(ModemStatusResponse &, uintptr_t), uintptr_t data=0) |
Регистрация callback-функции, вызываемой при приеме API-фрейма со статусом модема (apiId = 0x8A). | |
void | onTxStatusResponse (void(*func)(TxStatusResponse &, uintptr_t), uintptr_t data=0) |
Регистрация callback-функции, вызываемой при приеме API-фрейма со статусом передачи (apiId = 0x8B). | |
void | onAtCommandResponse (void(*func)(AtCommandResponse &, uintptr_t), uintptr_t data=0) |
Регистрация callback-функции, вызываемой при приеме API-фрейма с ответом на локальную AT-команду (apiId = 0x87, 0x88, 0x89). | |
void | onRemoteAtCommandResponse (void(*func)(RemoteAtCommandResponse &, uintptr_t), uintptr_t data=0) |
Регистрация callback-функции, вызываемой при приеме API-фрейма с ответом на удаленную AT-команду (apiId = 0x97, 0x98). | |
void | onRxAcknowledgeResponse (void(*func)(RxAcknowledgeResponse &, uintptr_t), uintptr_t data=0) |
Регистрация callback-функции, вызываемой при приеме API-фрейма с подтверждением приема пакета от удаленного модема (apiId = 0x8C). | |
void | onRxResponse (void(*func)(RxResponse &, uintptr_t), uintptr_t data=0) |
Регистрация callback-функции, вызываемой при приеме API-фрейма с неструктурированными данными от удаленного модема (apiId = 0x81, 0x82, 0x8F, 0x90). | |
void | onRxIoSampleResponse (void(*func)(RxIoSampleResponse &, uintptr_t), uintptr_t data=0) |
Регистрация callback-функции, вызываемой при приеме API-фрейма с данными о состоянии датчиков удаленного модема (apiId = 0x83, 0x84). | |
void | run () |
Главный цикл. Подробнее... | |
template<typename Response > | |
uint8_t | waitFor (Response &response, uint16_t timeout, bool(*func)(Response &, uintptr_t)=NULL, uintptr_t data=0, int16_t frameId=-1) |
Принимает API-фрейм заданного типа, опционально отфильтрованного с помощью определенной функции проверки. Подробнее... | |
uint8_t | sendAndWait (MBeeRequest &request, uint16_t timeout) |
Передает в UART API-фрейм, предназначенный для передачи по эфиру и ждет ответа со статусом в течение заданного времени. Подробнее... | |
uint8_t | sendAndWaitForAcknowledge (MBeeRequest &request, uint16_t timeout) |
Передает в UART API-фрейм, предназначенный для передачи по эфиру. Подробнее... | |
uint8_t | waitForStatus (uint8_t frameId, uint16_t timeout) |
Ждет приема ответного API-фрейма со статусом после отправки пакета с определенным frameId в течение заданного времени. Подробнее... | |
uint8_t | waitForAcknowledge (uint8_t frameId, uint16_t timeout) |
Ждет API-фрейм c подтверждением приема удаленным модулем пакета с определенным frameId в течение заданного времени. Подробнее... | |
![]() | |
void | readPacket () |
Чтение всех байт, имеющихся в приемном буфере UART. Подробнее... | |
bool | readPacket (int timeout) |
Ожидает приема пакета от модуля в течение timeout миллисекунд. Подробнее... | |
void | readPacketUntilAvailable () |
Ожидает приема пакета до тех пор, пока он не будет получен или не произойдет какая-либо ошибка. Подробнее... | |
void | send (void *) |
Передача данных модулю или удаленному узлу. Подробнее... | |
void | send (MBeeRequest &request) |
MBeeResponse & | getResponse () |
![]() | |
void | begin (Stream &serial) |
Инициализирует соединение с радиомодулем на заданном COM-порте. | |
void | setSerial (Stream &serial) |
Назначает последовательный порт. Подробнее... | |
bool | available () |
Проверяет наличие принятых данных в буфере UART. | |
uint8_t | read () |
Считывает 1 байт из входного буфера UART. | |
void | write (uint8_t val) |
Передает 1 байт по UART. | |
Дополнительные унаследованные члены | |
![]() | |
Stream * | _serial |
Этот класс может быть использован вместо класса SerialStar и позволяет самостоятельно создавать функции, которые будут автоматически вызываться при получении пакетов от радиомодуля.
Такой подход значительно упрощает процесс программирования. При использовании этого класса, прежде всего необходимо зарегистрировать свою callback функцию, с помощью метода onXxx. Каждый метод имеет аргумент uintptr_t, который может быть использован для передачи произвольных данных в callback-функцию. Это оказывается полезным при регистрации одной и той же callback-функции для нескольких событий, либо в случае, если функция должна выполнять разные действия в разных обстоятельствах. Обработка этих данных внутри функции является опциональной, однако присутствие их в списке аргументов callback-функции является обязательным. Если их обработка не предполагается, то данные можно просто проигнорировать. Тип uintptr_t не является указателем, а является целочисленным. Размер его должен быть достаточен для хранения указателя, характерного для данной аппаратной платформы. Например, его длина для плат, использующих AVR, должна быть не менее 16 бит, а для устройств на основе ARM - не менее 32. Для каждого события может быть зарегистрирована только одна функция. Повторная регистрация функции для одного и того же события перепишет ранее зарегистрированную. Для отмены регистрации callback-функции, необходимо передать ей NULL вкачестве аргумента. Для того, чтобы callback-функции работали, необходимо регулярно вызывать метод этого класса run(). Проще всего поместить вызов этого метода в главный цикл программы - loop{}. Этот метод автоматически вызывает функции readPacket() и getResponse() и некоторые других из класса MBee. Таким образом, вызывать их непосредственно из программы не требуется (хотя, если это сделать то ничего страшного не произойдет, тем не менее некоторые callback-функции могут после такого вызова не сработать). Внутри callback-функции не допускаются блокировки в виде задержек или ожиданий. Дело в том, что callback-функции вызываются изнутри функции waitFor() или других дружественных функций, и если быстро не вернуться из callback, то в функции waitFor() может произойти таймаут. Отправка пакетов внутри callback-функции вполне допустима,однако вызов фукнций,связанных с приемом пакетов недопустим. К этим функциям относятся readPacket() waitFor() и т.п. Вызов этих функций перепишет принятое ранее сообщение, что заблокирует вызов callback-функций для всех ожидающих событий.
См. определение в файле SerialStar.h строка 1104
|
inline |
Регистрация callback-функции для события приема пакета от модуля.
Зарегистрированная функция будет вызываться всегда при любом успешном приеме пакета по UART если специфическая callback-функция для данного типа пакета не зарегистрирована. В качестве аргумента передается ссылка на принятый пакет, а также опциональные данные (или указатель на них), определенные при регистрации callback-функции.
См. определение в файле SerialStar.h строка 1133
|
inline |
Регистрация callback-функции для события ошибки чтения пакета.
Зарегистрированная функция будет вызываться каждый раз при возникновении ошибки разбора пакета, полученного от радиомодуля. Аргументом при вызове будет являться код ошибки, аналогичный получаемому при вызове MBeeResponse::getErrorCode(), а также опциональные данные (или указатель на них), определенные при регистрации callback-функции.
См. определение в файле SerialStar.h строка 1112
|
inline |
Регистрация callback-функции для события приема пакета от модуля.
Зарегистрированная функция будет вызываться всегда при любом успешном приеме пакета по UART перед тем, как будет вызвана специфическая для принятого пакета callback-функция или функция onOtherResponse(), если специфическая функция не зарегистрирована. В качестве аргумента передается ссылка на принятый пакет, а также опциональные данные (или указатель на них), определенные при регистрации callback-функции.
См. определение в файле SerialStar.h строка 1123
void SerialStarWithCallbacks::run | ( | ) |
Главный цикл.
Этот метод должен регулярно вызываться для непрерывной обработки данных, поступающих от модуля MBee по последовательному интерфейсу и вызова соответствующих callback-функций.
См. определение в файле SerialStar.cpp строка 1222
|
inline |
Передает в UART API-фрейм, предназначенный для передачи по эфиру и ждет ответа со статусом в течение заданного времени.
Собственно говоря, этот метод просто последовательно вызывает функции send() и waitForStatus(). См. функцию waitForStatus() для более получения более подробной информации о возвращаемых параметрах и деталях.
См. определение в файле SerialStar.h строка 1229
uint8_t SerialStarWithCallbacks::sendAndWaitForAcknowledge | ( | MBeeRequest & | request, |
uint16_t | timeout | ||
) |
Передает в UART API-фрейм, предназначенный для передачи по эфиру.
В течение заданного времени ждет ответа со статусом и подтверждение получения пакета от удаленного модуля. Метод просто последовательно вызывает функции send(), waitForStatus() и waitForAcknowledge(). Ожидание подтверждения приема инициализируется только при удачной отправке пакета в эфир т.е. если вызов waitForStatus() вернул 0. Функция возвращает 0, если принято подтверждение получения и MBEE_WAIT_TIMEOUT(0xFF), если подтверждения так и не дождались. Если сообщение в эфир отправлено не было, то возвращается статус передачи.
См. определение в файле SerialStar.cpp строка 1228
|
inline |
Принимает API-фрейм заданного типа, опционально отфильтрованного с помощью определенной функции проверки.
Если эта функция проверки определена, то она вызывается каждый раз при приеме API-фрейма требуемого типа. В качестве параметров ей передаются ссылка на ответ и указатель на поле данных. Если функция проверки возвращает true (или если такая проверочная функция не определена), то ожидание приема прекращается и осуществляется возврат в вызывающую функцию с параметром 0. Если же проверочная функция возвращает false,то ожидание приема продолжается. По истечении заданного времени ожидания, функция возвращает MBEE_WAIT_TIMEOUT (0xFF). Если фрейм был отправлен с ненулевым frameID, то на него модуль должен получить ответ со статусом. Если статус не равен 0 т.е. имела место какая-либо ошибка, то ожидание прекращается и этот статусный байт передается как результат работы функции. Такое поведение объясняется следующим: если фрейм предназначался для передачи по эфиру, то наличие ошибок при его обработке/отправке(например вследствие занятости частотного канала) приводит к тому, в эфир он не уйдет и, следовательно, ответа на него удаленного узла ждать бессмысленно. Во время ожидания, любой принятый пакет передается в соответствующую callback-функцию также, как бы это происходило при непрерывном вызове run() исключая только те фреймы, которые передаются в OnResponse() и никуда более. После вызова этого метода, пакет может быть получен с помощью обычного вызова getResponse().
См. определение в файле SerialStar.h строка 1219
uint8_t SerialStarWithCallbacks::waitForAcknowledge | ( | uint8_t | frameId, |
uint16_t | timeout | ||
) |
Ждет API-фрейм c подтверждением приема удаленным модулем пакета с определенным frameId в течение заданного времени.
При возникновении таймаута, возвращает MBEE_WAIT_TIMEOUT(0xFF). Во время ожидания, любой принятый пакет передается в соответствующую callback-функцию также, как бы это происходило при непрерывном вызове run() исключая только те фреймы, которые передаются в OnResponse() и никуда более. После вызова этого метода, пакет может быть получен с помощью обычного вызова getResponse().
См. определение в файле SerialStar.cpp строка 1255
uint8_t SerialStarWithCallbacks::waitForStatus | ( | uint8_t | frameId, |
uint16_t | timeout | ||
) |
Ждет приема ответного API-фрейма со статусом после отправки пакета с определенным frameId в течение заданного времени.
При возникновении таймаута, возвращает MBEE_WAIT_TIMEOUT(0xFF). Во время ожидания, любой принятый пакет передается в соответствующую callback-функцию также, как бы это происходило при непрерывном вызове run() исключая только те фреймы, которые передаются в OnResponse() и никуда более. После вызова этого метода, пакет может быть получен с помощью обычного вызова getResponse().
См. определение в файле SerialStar.cpp строка 1239