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

Public 成员函数

 UdpStream (const char *address, uint16_t port, uint32_t timeout_usec)
 
 ~UdpStream ()
 
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
 

详细描述

在文件 udp_stream.cc33 行定义.

构造及析构函数说明

◆ UdpStream()

apollo::drivers::gnss::UdpStream::UdpStream ( const char *  address,
uint16_t  port,
uint32_t  timeout_usec 
)

在文件 udp_stream.cc62 行定义.

63 : sockfd_(-1), errno_(0) {
64 peer_addr_ = inet_addr(address);
65 peer_port_ = htons(port);
66 timeout_usec_ = timeout_usec;
67 // call open or call open in connect later
68}

◆ ~UdpStream()

apollo::drivers::gnss::UdpStream::~UdpStream ( )

在文件 udp_stream.cc70 行定义.

70{ this->close(); }

成员函数说明

◆ Connect()

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

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

在文件 udp_stream.cc155 行定义.

155 {
156 if (sockfd_ < 0) {
157 this->open();
158 if (sockfd_ < 0) {
159 return false;
160 }
161 }
162
164 return true;
165 }
166
167 // upper layer support ping method ??
168 // Login();
170 return true;
171}

◆ Disconnect()

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

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

在文件 udp_stream.cc173 行定义.

173 {
174 if (sockfd_ < 0) {
175 // not open
176 return false;
177 }
178
179 this->close();
180 return true;
181}

◆ read()

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

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

在文件 udp_stream.cc183 行定义.

183 {
184 ssize_t ret = 0;
185 struct sockaddr_in peer_sockaddr;
186 socklen_t socklenth = sizeof(peer_sockaddr);
187 bzero(&peer_sockaddr, sizeof(peer_sockaddr));
188 peer_sockaddr.sin_family = AF_INET;
189 peer_sockaddr.sin_port = peer_port_;
190 peer_sockaddr.sin_addr.s_addr = htonl(INADDR_ANY);
191
192 while ((ret = ::recvfrom(sockfd_, buffer, max_length, 0,
193 (struct sockaddr*)&peer_sockaddr,
194 reinterpret_cast<socklen_t*>(&socklenth))) < 0) {
195 if (errno == EINTR) {
196 continue;
197 } else {
198 // error
199 if (errno != EAGAIN) {
201 errno_ = errno;
202 }
203 }
204
205 return 0;
206 }
207
208 return ret;
209}

◆ write()

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

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

在文件 udp_stream.cc211 行定义.

211 {
212 size_t total_nsent = 0;
213 struct sockaddr_in peer_sockaddr;
214 bzero(&peer_sockaddr, sizeof(peer_sockaddr));
215 peer_sockaddr.sin_family = AF_INET;
216 peer_sockaddr.sin_port = peer_port_;
217 peer_sockaddr.sin_addr.s_addr = peer_addr_;
218
219 while (length > 0) {
220 ssize_t nsent =
221 ::sendto(sockfd_, data, length, 0, (struct sockaddr*)&peer_sockaddr,
222 (socklen_t)sizeof(peer_sockaddr));
223 if (nsent < 0) { // error
224 if (errno == EINTR) {
225 continue;
226 } else {
227 // error
228 if (errno == EPIPE || errno == ECONNRESET) {
230 errno_ = errno;
231 } else if (errno != EAGAIN) {
233 errno_ = errno;
234 }
235 return total_nsent;
236 }
237 }
238
239 total_nsent += nsent;
240 length -= nsent;
241 data += nsent;
242 }
243
244 return total_nsent;
245}

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