My Project
Классы | Открытые члены | Полный список членов класса
Класс mbeeWithCallbacks

Этот класс может быть использован вместо класса MBee и позволяет самостоятельно создавать функции, которые будут автоматически вызываться при получении пакетов от радиомодуля. Подробнее...

#include <MBee.h>

Граф наследования:mbeeWithCallbacks:
MBee

Открытые члены

void onPacketError (void(*func)(uint8_t, uintptr_t), uintptr_t data=0)
 Регистрация callback-функции для события ошибки чтения пакета. Подробнее...
 
void onResponse (void(*func)(XBeeResponse &, uintptr_t), uintptr_t data=0)
 Регистрация callback-функции для события приема пакета от модуля. Подробнее...
 
void onOtherResponse (void(*func)(XBeeResponse &, uintptr_t), uintptr_t data=0)
 Регистрация callback-функции для события приема пакета от модуля. Подробнее...
 
void onZBTxStatusResponse (void(*func)(ZBTxStatusResponse &, uintptr_t), uintptr_t data=0)
 
void onZBRxResponse (void(*func)(ZBRxResponse &, uintptr_t), uintptr_t data=0)
 
void onZBExplicitRxResponse (void(*func)(ZBExplicitRxResponse &, uintptr_t), uintptr_t data=0)
 
void onZBRxIoSampleResponse (void(*func)(ZBRxIoSampleResponse &, uintptr_t), uintptr_t data=0)
 
void onTxStatusResponse (void(*func)(TxStatusResponse &, uintptr_t), uintptr_t data=0)
 
void onRx16Response (void(*func)(Rx16Response &, uintptr_t), uintptr_t data=0)
 
void onRx64Response (void(*func)(Rx64Response &, uintptr_t), uintptr_t data=0)
 
void onRx16IoSampleResponse (void(*func)(Rx16IoSampleResponse &, uintptr_t), uintptr_t data=0)
 
void onRx64IoSampleResponse (void(*func)(Rx64IoSampleResponse &, uintptr_t), uintptr_t data=0)
 
void onModemStatusResponse (void(*func)(ModemStatusResponse &, uintptr_t), uintptr_t data=0)
 
void onAtCommandResponse (void(*func)(AtCommandResponse &, uintptr_t), uintptr_t data=0)
 
void onRemoteAtCommandResponse (void(*func)(RemoteAtCommandResponse &, uintptr_t), uintptr_t data=0)
 
void loop ()
 Главный цикл. Подробнее...
 
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)
 Wait for a API response of the given type, optionally filtered by the given match function. Подробнее...
 
uint8_t sendAndWait (XBeeRequest &request, uint16_t timeout)
 Sends a XBeeRequest (TX packet) out the serial port, and wait for a status response API frame (up until the given timeout). Подробнее...
 
uint8_t waitForStatus (uint8_t frameId, uint16_t timeout)
 Wait for a status API response with the given frameId and return the status from the packet (for ZB_TX_STATUS_RESPONSE, this returns just the delivery status, not the routing status). Подробнее...
 
- Открытые члены унаследованные от MBee
virtual void readPacket ()=0
 Чтение всех байт, имеющихся в приемном буфере UART. Подробнее...
 
virtual bool readPacket (int timeout)=0
 Ожидает приема пакета от модуля в течение timeout миллисекунд. Подробнее...
 
virtual void readPacketUntilAvailable ()=0
 Ожидает приема пакета до тех пор, пока он не будет получен или не произойдет какая-либо ошибка. Подробнее...
 
virtual void send (void *)=0
 Передача данных модулю или удаленному узлу. Подробнее...
 
void begin (Stream &serial)
 Инициализирует соединение с радиомодулем на заданном COM-порте.
 
void setSerial (Stream &serial)
 Назначает последовательный порт. Подробнее...
 
bool available ()
 Проверяет наличие принятых данных в буфере UART.
 
uint8_t read ()
 Считывает 1 байт из входного буфера UART.
 
void write (uint8_t val)
 Передает 1 байт по UART.
 

Дополнительные унаследованные члены

- Открытые атрибуты унаследованные от MBee
Stream * _serial
 

Подробное описание

Этот класс может быть использован вместо класса MBee и позволяет самостоятельно создавать функции, которые будут автоматически вызываться при получении пакетов от радиомодуля.

Такой подход значительно упрощает процесс программирования. При использовании этого класса, прежде всего необходимо зарегистрировать свою callback функцию, с помощью метода onXxx. Каждый метод имеет аргумент uintptr_t, который может быть использован для передачи произвольных данных в callback-функцию. Такой подход является полезным при регистрации одной и той же callback-функции для нескольких событий, либо в случае, если функция должна выполнять разные действия в разных обстоятельствах. Обработка этих данных внутри функции является опциональной, однако присутствие их в списке аргументов callback-функции является обязательным. Если их обработка не предполагается, то данные можно просто проигнорировать. Тип uintptr_t является целым. Размер его должен быть достаточен для хранения указателя, характерного для данной платформы Arduino. Например, его длина для плат, использующих AVR, должна быть не менее 16 бит, а для устройств на основе ARM - не менее 32. Для каждого события может быть зарегистрирована только одна функция. Таким образом, повторная регистрации функции для одного и того же события перепишет ранее зарегистрированную. Для отмены регистрации callback-функции, необходимо передать ей NULL вкачестве аргумента. Для того, чтобы callback-функции работали, необходимо регулярно вызывать метод этого класса loop(). Проще всего поместить вызов этого метода в главный цикл скетча - loop{}. Этот метод автоматически вызывает функции readPacket() и getResponse() и некторых других из класса MBee. Таким образом, вызывать их непосредственно из скетча не требуется (хотя, если это сделать то ничего страшного не произойдет, тем не менее некоторые callback-функции могут не сработать). Внутри callback-функции не допускаются блокировки в виде задержек или ожиданий. Дело в том, что callback-функции вызываются изнутри функции waitFor() или других дружественных функций, и если быстро не вернуться из callback, то в функции waitFor() может произойти таймаут. Отправка пакетов внутри callback-функции вполне допустима,однако вызов фукнций, связанных с приемом пакетов не допустим. К таким функциям относятся readPacket() waitFor() и т.п. Вызов таких функций перепишет принятое сообщение, что заблокирует вызов callback-функций для всех ожидающих событий.

См. определение в файле MBee.h строка 186

Методы

◆ loop()

void mbeeWithCallbacks::loop ( )

Главный цикл.

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

◆ onOtherResponse()

void mbeeWithCallbacks::onOtherResponse ( void(*)(XBeeResponse &, uintptr_t)  func,
uintptr_t  data = 0 
)
inline

Регистрация callback-функции для события приема пакета от модуля.

Зарегистрированная функция будет вызываться всегда при любом успешном приеме пакета по UART если специфическая callback-функция для данного типа пакета не зарегистрирована. В качестве аргумента передается ссылка на принятый пакет. Данные, содержащиеся в принятом размещаются по указателю, переданному в качестве аргумента при регистрации данной callback-функции.

См. определение в файле MBee.h строка 224

◆ onPacketError()

void mbeeWithCallbacks::onPacketError ( void(*)(uint8_t, uintptr_t)  func,
uintptr_t  data = 0 
)
inline

Регистрация callback-функции для события ошибки чтения пакета.

Зарегистрированная функция будет вызываться каждый раз при возникновении ошибки разбора пакета, полученного от радиомодуля. Аргументом при вызове будет являться код ошибки, аналогичный получаемому при вызове MBeeResponse::getErrorCode() и помещенный по указателю data, объявленному при регистрации callback-функции.

См. определение в файле MBee.h строка 197

◆ onResponse()

void mbeeWithCallbacks::onResponse ( void(*)(XBeeResponse &, uintptr_t)  func,
uintptr_t  data = 0 
)
inline

Регистрация callback-функции для события приема пакета от модуля.

Зарегистрированная функция будет вызываться всегда при любом успешном приеме пакета по UART перед тем, как будет вызвана специфическая для принятого пакета callback-функция или функция onOtherResponse(), если специфическая функция не зарегистрирована. В качестве аргумента передается ссылка на принятый пакет. Данные, содержащиеся в принятом размещаются по указателю, переданному в качестве аргумента при регистрации данной callback-функции.

См. определение в файле MBee.h строка 211

◆ sendAndWait()

uint8_t mbeeWithCallbacks::sendAndWait ( XBeeRequest &  request,
uint16_t  timeout 
)
inline

Sends a XBeeRequest (TX packet) out the serial port, and wait for a status response API frame (up until the given timeout).

Essentially this just calls send() and waitForStatus(). See waitForStatus for the meaning of the return value and more details.

См. определение в файле MBee.h строка 308

◆ waitFor()

template<typename Response >
uint8_t mbeeWithCallbacks::waitFor ( Response &  response,
uint16_t  timeout,
bool(*)(Response &, uintptr_t)  func = NULL,
uintptr_t  data = 0,
int16_t  frameId = -1 
)
inline

Wait for a API response of the given type, optionally filtered by the given match function.

If a match function is given it is called for every response of the right type received, passing the response and the data parameter passed to this method. If the function returns true (or if no function was passed), waiting stops and this method returns 0. If the function returns false, waiting continues. After the given timeout passes, this method returns XBEE_WAIT_TIMEOUT.

If a valid frameId is passed (e.g. 0-255 inclusive) and a status API response frame is received while waiting, that has a non-zero status, waiting stops and that status is received. This is intended for when a TX packet was sent and you are waiting for an RX reply, which will most likely never arrive when TX failed. However, since the status reply is not guaranteed to arrive before the RX reply (a remote module can send a reply before the ACK), first calling waitForStatus() and then waitFor() can sometimes miss the reply RX packet.

Note that when the intended response is received before the status reply, the latter will not be processed by this method and will be subsequently processed by e.g. loop() normally.

While waiting, any other responses received are passed to the relevant callbacks, just as if calling loop() continuously (except for the response sought, that one is only passed to the OnResponse handler and no others).

After this method returns, the response itself can still be retrieved using getResponse() as normal.

См. определение в файле MBee.h строка 296

◆ waitForStatus()

uint8_t mbeeWithCallbacks::waitForStatus ( uint8_t  frameId,
uint16_t  timeout 
)

Wait for a status API response with the given frameId and return the status from the packet (for ZB_TX_STATUS_RESPONSE, this returns just the delivery status, not the routing status).

If the timeout is reached before reading the response, XBEE_WAIT_TIMEOUT is returned instead.

While waiting, any other responses received are passed to the relevant callbacks, just as if calling loop() continuously (except for the status response sought, that one is only passed to the OnResponse handler and no others).

After this method returns, the response itself can still be retrieved using getResponse() as normal.


Объявления и описания членов класса находятся в файле: