MBee Arduino library
Открытые члены | Полный список членов класса
Класс SerialStar

Класс для проекта SerialStar диапазона 868 МГц. Подробнее...

#include <SerialStar.h>

Граф наследования:SerialStar:
MBee868 MBee SerialStarWithCallbacks

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

void readPacket ()
 Чтение всех байт, имеющихся в приемном буфере UART. Подробнее...
 
bool readPacket (int timeout)
 Ожидает приема пакета от модуля в течение timeout миллисекунд. Подробнее...
 
void readPacketUntilAvailable ()
 Ожидает приема пакета до тех пор, пока он не будет получен или не произойдет какая-либо ошибка. Подробнее...
 
void send (void *)
 Передача данных модулю или удаленному узлу. Подробнее...
 
void send (MBeeRequest &request)
 
MBeeResponsegetResponse ()
 
- Открытые члены унаследованные от MBee
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
 

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

Класс для проекта SerialStar диапазона 868 МГц.

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

Методы

◆ readPacket() [1/2]

void SerialStar::readPacket ( )
virtual

Чтение всех байт, имеющихся в приемном буфере UART.

Выполняется до тех пор, пока пакет не будет разобран полностью, не опустошится буфер или не произойдет какая-либо ошибка. Вы можете вызывать MBee.getResponse().isAvailable() после вызова этой функции, для того, чтобы определить был ли принят пакет. Для получения информации об ошибках при приеме пакета пользуйтесь методом MBee.getResponse().isError().

Функция работает быстро, потому что не ждет получения данных по UART, а работает с байтами, имеющимися в буфере на момент вызова.

ВНИМАНИЕ! Вызов этой функции очищает буфер принятого сообщения, следовательно перед ее вызовом предыдущее сообщение должно быть полностью обработано. Метод является чисто виртуальным (pure virtual), поэтому используется присваивание = 0;

Замещает MBee.

См. определение в файле SerialStar.cpp строка 1044

1045 {
1046  if(_response.isAvailable() || _response.isError())
1047  resetResponse(); //Сброс предыдущих сообщений.
1048  while(available())
1049  {
1050  b = read();
1051  if(_pos > 0 && b == START_BYTE && ATAP == 2)
1052  {
1053  //Обнаружен стартовый байт до окончания обработки предыдущего пакета. Сбрасываем предыдущее сообщение и начинаем разбор заново.
1054  _response.setErrorCode(UNEXPECTED_START_BYTE);
1055  return;
1056  }
1057  if(_pos > 0 && b == ESCAPE)
1058  {
1059  if(available())
1060  {
1061  b = read();
1062  b = 0x20 ^ b; //Извлекаем символ из escape-последовательности.
1063  }
1064  else
1065  {
1066  _escape = true; //Ставим флаг того, что следующий байт будет являться вторым символом из escape-последовательности.
1067  continue;
1068  }
1069  }
1070  if(_escape == true)
1071  {
1072  b = 0x20 ^ b;
1073  _escape = false; //Предыдущий байт был escape-символом. Извлекаем символ из escape-последовательности.
1074  }
1075  if(_pos >= API_ID_INDEX) //Контрольную сумму считаем начиная с байта типа API-фрейма.
1076  _checksumTotal+= b;
1077 
1078  //Конечный автомат парсера.
1079  switch(_pos)
1080  {
1081  case 0:
1082  if(b == START_BYTE)
1083  _pos++;
1084  break;
1085  case 1:
1086  _response.setMsbLength(b);
1087  _pos++;
1088  break;
1089  case 2:
1090  _response.setLsbLength(b);
1091  _pos++;
1092  break;
1093  case 3:
1094  _response.setApiId(b);
1095  _pos++;
1096  break;
1097  default:
1098  //Далее разбираются байты, следующие за 4-ым.
1099  if(_pos > MAX_FRAME_DATA_SIZE + 4)
1100  {
1101  _response.setErrorCode(PACKET_EXCEEDS_BYTE_ARRAY_LENGTH); //Длина пакета превышает максимально допустимую.
1102  return;
1103  }
1104  //Проверяем, не достигли ли еще конца поля данных.
1105  if(_pos == (_response.getPacketLength() + 3))
1106  {
1107  if((_checksumTotal & 0xff) == 0xff)
1108  {
1109  _response.setChecksum(b);
1110  _response.setAvailable(true);
1111  _response.setErrorCode(NO_ERROR_IN_FRAME);
1112  }
1113  else
1114  _response.setErrorCode(CHECKSUM_FAILURE); //Ошибка контрольной суммы.
1115  _response.setFrameLength(_pos - 4); //Длина поля данных не включает также поле Frame Type.
1116  _pos = 0;
1117  return;
1118  }
1119  else
1120  {
1121  _response.getFrameData()[_pos - 4] = b; //Добавляем считанный символ в поле данных.
1122  _pos++;
1123  }
1124  }
1125  }
1126 }
void setAvailable(bool complete)
Устанавливает признак доступности пакета.
Definition: SerialStar.cpp:187
bool isError()
Возвращает true если при разборе пакета произошли ошибки.
Definition: SerialStar.cpp:192
void setErrorCode(uint8_t errorCode)
Устанавливает код ошибки.
Definition: SerialStar.cpp:202
bool isAvailable()
Возвращает true, если пакет успешно принят.
Definition: SerialStar.cpp:182
uint8_t read()
Считывает 1 байт из входного буфера UART.
Definition: MBee.cpp:60
bool available()
Проверяет наличие принятых данных в буфере UART.
Definition: MBee.cpp:55
uint16_t getPacketLength()
Возвращает длину пакета.
Definition: SerialStar.cpp:101
void setChecksum(uint8_t checksum)
Запись контрольной суммы в соответствующее поле пакета.
Definition: SerialStar.cpp:76
uint8_t * getFrameData()
Возвращает указатель на буфер, который содержит сообщение.
Definition: SerialStar.cpp:96
void setFrameLength(uint8_t frameLength)
Запись поля длины в пакете.
Definition: SerialStar.cpp:86

◆ readPacket() [2/2]

bool SerialStar::readPacket ( int  timeout)
virtual

Ожидает приема пакета от модуля в течение timeout миллисекунд.

Возвращает true, если пакет принят и false, если заданный интервал истек. Метод является чисто виртуальным (pure virtual), поэтому используется присваивание = 0;

Замещает MBee.

См. определение в файле SerialStar.cpp строка 1128

1129 {
1130  if(timeout < 0)
1131  {
1132  return false;
1133  }
1134  unsigned long start = millis();
1135  while(int((millis() - start)) < timeout)
1136  {
1137  readPacket();
1138  if(getResponse().isAvailable())
1139  {
1140  return true;
1141  }
1142  else if(getResponse().isError())
1143  {
1144  return false;
1145  }
1146  }
1147  return false; //Таймаут..
1148 }
void readPacket()
Чтение всех байт, имеющихся в приемном буфере UART.

◆ readPacketUntilAvailable()

void SerialStar::readPacketUntilAvailable ( )
virtual

Ожидает приема пакета до тех пор, пока он не будет получен или не произойдет какая-либо ошибка.

ВНИМАНИЕ! Использовать эту функцию следует осторожно, поскольку Ардуино может зависнуть, если пакет (с ошибками или без) так и не будет принят. Метод является чисто виртуальным (pure virtual), поэтому используется присваивание = 0;

Замещает MBee.

См. определение в файле SerialStar.cpp строка 1150

1151 {
1152  while(!(getResponse().isAvailable() || getResponse().isError()))
1153  {
1154  readPacket();
1155  }
1156 }
void readPacket()
Чтение всех байт, имеющихся в приемном буфере UART.

◆ send()

void SerialStar::send ( void *  )
virtual

Передача данных модулю или удаленному узлу.

Формат пакета зависит от типа объекта (программного обеспечения модуля). См. справку по поддерживаемым методам для конкретного проекта (SerialStar, MB-ZigBee и т.д). Метод является чисто виртуальным (pure virtual), поэтому используется присваивание = 0;

Замещает MBee.

См. определение в файле SerialStar.cpp строка 1158

1159 {
1160  send((MBeeRequest&) buffer);
1161 }
Супер класс для всех пакетов, передаваемых от хоста к модулям MBee-868-x.0 в проекте SerialStar...
Definition: SerialStar.h:705
void send(void *)
Передача данных модулю или удаленному узлу.

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