Apollo 10.0
自动驾驶开放平台
apollo::drivers::gnss::SerialStream类 参考
类 apollo::drivers::gnss::SerialStream 继承关系图:
apollo::drivers::gnss::SerialStream 的协作图:

Public 成员函数

 SerialStream (const char *device_name, speed_t baud_rate, uint32_t timeout_usec)
 
 ~SerialStream ()
 
virtual bool Connect ()
 
virtual bool Disconnect ()
 
virtual size_t read (uint8_t *buffer, size_t max_length)
 
virtual size_t write (const uint8_t *data, size_t length)
 
- Public 成员函数 继承自 apollo::drivers::gnss::Stream
virtual ~Stream ()
 
Status get_status () const
 
void RegisterLoginData (const std::vector< std::string > login_data)
 
void Login ()
 
size_t write (const std::string &buffer)
 

额外继承的成员函数

- Public 类型 继承自 apollo::drivers::gnss::Stream
enum class  Status { DISCONNECTED , CONNECTED , ERROR }
 
- 静态 Public 成员函数 继承自 apollo::drivers::gnss::Stream
static Streamcreate_tcp (const char *address, uint16_t port, uint32_t timeout_usec=1000000)
 
static Streamcreate_udp (const char *address, uint16_t port, uint32_t timeout_usec=1000000)
 
static Streamcreate_serial (const char *device_name, uint32_t baud_rate, uint32_t timeout_usec=0)
 
static Streamcreate_ntrip (const std::string &address, uint16_t port, const std::string &mountpoint, const std::string &user, const std::string &passwd, uint32_t timeout_s=30)
 
static Streamcreate_can (const apollo::drivers::canbus::CANCardParameter &parameter)
 
- 静态 Public 属性 继承自 apollo::drivers::gnss::Stream
static constexpr size_t NUM_STATUS
 
- Protected 成员函数 继承自 apollo::drivers::gnss::Stream
 Stream ()
 
- Protected 属性 继承自 apollo::drivers::gnss::Stream
Status status_ = Status::DISCONNECTED
 

详细描述

在文件 serial_stream.cc62 行定义.

构造及析构函数说明

◆ SerialStream()

apollo::drivers::gnss::SerialStream::SerialStream ( const char *  device_name,
speed_t  baud_rate,
uint32_t  timeout_usec 
)

在文件 serial_stream.cc96 行定义.

98 : device_name_(device_name),
99 baud_rate_(baud_rate),
100 bytesize_(8),
101 parity_(0),
102 stopbits_(1),
103 flowcontrol_(0),
104 timeout_usec_(timeout_usec),
105 fd_(-1),
106 errno_(0),
107 is_open_(false) {
108 if (device_name_.empty()) {
110 }
111}

◆ ~SerialStream()

apollo::drivers::gnss::SerialStream::~SerialStream ( )

在文件 serial_stream.cc113 行定义.

113{ this->close(); }

成员函数说明

◆ Connect()

bool apollo::drivers::gnss::SerialStream::Connect ( )
virtual

实现了 apollo::drivers::gnss::Stream.

在文件 serial_stream.cc222 行定义.

222 {
223 if (!is_open_) {
224 this->open();
225 if (!is_open_) {
227 errno_ = errno;
228 return false;
229 }
230 }
231
233 return true;
234 }
235
237 Login();
238 return true;
239}

◆ Disconnect()

bool apollo::drivers::gnss::SerialStream::Disconnect ( )
virtual

实现了 apollo::drivers::gnss::Stream.

在文件 serial_stream.cc250 行定义.

250 {
251 if (!is_open_) {
252 // not open
253 return false;
254 }
255
256 this->close();
257 return true;
258}

◆ read()

size_t apollo::drivers::gnss::SerialStream::read ( uint8_t *  buffer,
size_t  max_length 
)
virtual

实现了 apollo::drivers::gnss::Stream.

在文件 serial_stream.cc276 行定义.

276 {
277 if (!is_open_) {
278 if (!Connect()) {
279 return 0;
280 }
281 AINFO << "Connect " << device_name_ << " success.";
282 }
283
284 ssize_t bytes_read = 0;
285 ssize_t bytes_current_read = 0;
286
287 wait_readable(10000); // wait 10ms
288
289 while (max_length > 0) {
290 bytes_current_read = ::read(fd_, buffer, max_length);
291 if (bytes_current_read < 0) {
292 switch (errno) {
293 case EAGAIN:
294 case EINVAL:
295 bytes_current_read = 0;
296 break;
297
298 case EBADF:
299 case EIO:
300 AERROR << "Serial stream read data failed, error: "
301 << strerror(errno);
302 Disconnect();
303 if (Connect()) {
304 AINFO << "Reconnect " << device_name_ << " success.";
305 bytes_current_read = 0;
306 break; // has recoverable
307 }
308
309 default:
310 AERROR << "Serial stream read data failed, error: " << strerror(errno)
311 << ", errno: " << errno;
313 errno_ = errno;
314 return bytes_read;
315 }
316 }
317
318 if (bytes_current_read == 0) {
319 if (!bytes_read) {
320 check_remove();
321 return 0;
322 }
323 return bytes_read;
324 }
325 max_length -= bytes_current_read;
326 buffer += bytes_current_read;
327 bytes_read += bytes_current_read;
328 }
329
330 return bytes_read;
331}
virtual size_t read(uint8_t *buffer, size_t max_length)
#define AERROR
Definition log.h:44
#define AINFO
Definition log.h:42

◆ write()

size_t apollo::drivers::gnss::SerialStream::write ( const uint8_t *  data,
size_t  length 
)
virtual

实现了 apollo::drivers::gnss::Stream.

在文件 serial_stream.cc333 行定义.

333 {
334 if (!is_open_) {
335 if (!Connect()) {
336 return 0;
337 }
338 AINFO << "Connect " << device_name_ << " success.";
339 }
340
341 size_t total_nsent = 0;
342 size_t delay_times = 0;
343
344 while ((length > 0) && (delay_times < 5)) {
345 ssize_t nsent = ::write(fd_, data, length);
346 if (nsent < 0) {
347 AERROR << "Serial stream write data failed, error: " << strerror(errno);
348 switch (errno) {
349 case EAGAIN:
350 case EINVAL:
351 nsent = 0;
352 break;
353
354 case EBADF:
355 case EIO:
356 Disconnect();
357 if (Connect()) {
358 AINFO << "Reconnect " << device_name_ << "success.";
359 nsent = 0;
360 break; // has recoverable
361 }
362
363 default:
365 errno_ = errno;
366 return total_nsent;
367 }
368 }
369
370 if (nsent == 0) {
371 if (!wait_writable(byte_time_us_)) {
372 break;
373 }
374 ++delay_times;
375 continue;
376 }
377
378 total_nsent += nsent;
379 length -= nsent;
380 data += nsent;
381 }
382
383 return total_nsent;
384}
virtual size_t write(const uint8_t *data, size_t length)

该类的文档由以下文件生成: