sl_serial_channel.cpp
Go to the documentation of this file.
1 /*
2  * Slamtec LIDAR SDK
3  *
4  * Copyright (c) 2014 - 2020 Shanghai Slamtec Co., Ltd.
5  * http://www.slamtec.com
6  *
7  */
8  /*
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions are met:
11  *
12  * 1. Redistributions of source code must retain the above copyright notice,
13  * this list of conditions and the following disclaimer.
14  *
15  * 2. Redistributions in binary form must reproduce the above copyright notice,
16  * this list of conditions and the following disclaimer in the documentation
17  * and/or other materials provided with the distribution.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
23  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
26  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
27  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
28  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
29  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30  *
31  */
32 
33 #include "sl_lidar_driver.h"
34 #include "hal/abs_rxtx.h"
35 #include "hal/socket.h"
36 
37 
38 namespace sl {
39 
41  {
42  public:
43  SerialPortChannel(const std::string& device, int baudrate) :_rxtxSerial(rp::hal::serial_rxtx::CreateRxTx())
44  {
45  _device = device;
46  _baudrate = baudrate;
47  }
48 
50  {
51  if (_rxtxSerial)
52  delete _rxtxSerial;
53  }
54 
55  bool bind(const std::string& device, sl_s32 baudrate)
56  {
57  _closePending = false;
58  return _rxtxSerial->bind(device.c_str(), baudrate);
59  }
60 
61  bool open()
62  {
63  if(!bind(_device, _baudrate))
64  return false;
65  return _rxtxSerial->open();
66  }
67 
68  void close()
69  {
70  _closePending = true;
72  _rxtxSerial->close();
73  }
74  void flush()
75  {
76  _rxtxSerial->flush(0);
77  }
78 
79  sl_result waitForDataExt(size_t& size_hint, sl_u32 timeoutInMs)
80  {
82  size_t size_holder;
83  size_hint = 0;
84 
86 
87  if (!_rxtxSerial->isOpened()) {
88  return RESULT_OPERATION_FAIL;
89  }
90 
91  result = _rxtxSerial->waitfordata(1, timeoutInMs, &size_holder);
92  size_hint = size_holder;
94  return RESULT_OPERATION_FAIL;
97 
98  return RESULT_OK;
99  }
100 
101  bool waitForData(size_t size, sl_u32 timeoutInMs, size_t* actualReady)
102  {
103  if (_closePending) return false;
104  return (_rxtxSerial->waitfordata(size, timeoutInMs, actualReady) == rp::hal::serial_rxtx::ANS_OK);
105  }
106 
107  int write(const void* data, size_t size)
108  {
109  return _rxtxSerial->senddata((const sl_u8 * )data, size);
110  }
111 
112  int read(void* buffer, size_t size)
113  {
114  size_t lenRec = 0;
115  lenRec = _rxtxSerial->recvdata((sl_u8 *)buffer, size);
116  return (int)lenRec;
117  }
118 
120  {
121 
122  }
123 
124  void setDTR(bool dtr)
125  {
126  dtr ? _rxtxSerial->setDTR() : _rxtxSerial->clearDTR();
127  }
128 
131  }
132 
133  private:
136  std::string _device;
138 
139  };
140 
141  Result<IChannel*> createSerialPortChannel(const std::string& device, int baudrate)
142  {
143  return new SerialPortChannel(device, baudrate);
144  }
145 
146 }
rp::hal::serial_rxtx::clearDTR
virtual void clearDTR()=0
sl::SerialPortChannel::bind
bool bind(const std::string &device, sl_s32 baudrate)
Definition: sl_serial_channel.cpp:55
sl::SerialPortChannel::open
bool open()
Definition: sl_serial_channel.cpp:61
rp::hal::serial_rxtx::recvdata
virtual int recvdata(unsigned char *data, size_t size)=0
rp::hal::serial_rxtx::flush
virtual void flush(_u32 flags)=0
sl::SerialPortChannel::_rxtxSerial
rp::hal::serial_rxtx * _rxtxSerial
Definition: sl_serial_channel.cpp:134
rp::hal::serial_rxtx::isOpened
virtual bool isOpened()
Definition: abs_rxtx.h:76
rp::hal::serial_rxtx::close
virtual void close()=0
RESULT_OK
#define RESULT_OK
Definition: rptypes.h:102
sl::SerialPortChannel::setDTR
void setDTR(bool dtr)
Definition: sl_serial_channel.cpp:124
sl::SerialPortChannel
Definition: sl_serial_channel.cpp:40
sl::SerialPortChannel::SerialPortChannel
SerialPortChannel(const std::string &device, int baudrate)
Definition: sl_serial_channel.cpp:43
rp::hal::serial_rxtx::open
virtual bool open()=0
size
sl_u8 size
Definition: sl_lidar_protocol.h:4
sl::SerialPortChannel::close
void close()
Definition: sl_serial_channel.cpp:68
result
sl_u32 result
Definition: sl_lidar_cmd.h:3
sl::createSerialPortChannel
Result< IChannel * > createSerialPortChannel(const std::string &device, int baudrate)
Definition: sl_serial_channel.cpp:141
sl::SerialPortChannel::waitForData
bool waitForData(size_t size, sl_u32 timeoutInMs, size_t *actualReady)
Definition: sl_serial_channel.cpp:101
sl::SerialPortChannel::waitForDataExt
sl_result waitForDataExt(size_t &size_hint, sl_u32 timeoutInMs)
Definition: sl_serial_channel.cpp:79
RESULT_OPERATION_TIMEOUT
#define RESULT_OPERATION_TIMEOUT
Definition: rptypes.h:107
sl
Definition: sl_crc.h:38
sl::SerialPortChannel::_closePending
bool _closePending
Definition: sl_serial_channel.cpp:135
sl::CHANNEL_TYPE_SERIALPORT
@ CHANNEL_TYPE_SERIALPORT
Definition: sl_lidar_driver.h:284
rp::hal::serial_rxtx::bind
virtual bool bind(const char *portname, _u32 baudrate, _u32 flags=0)=0
rp::hal::serial_rxtx::ANS_TIMEOUT
@ ANS_TIMEOUT
Definition: abs_rxtx.h:46
sl::SerialPortChannel::~SerialPortChannel
~SerialPortChannel()
Definition: sl_serial_channel.cpp:49
sl::SerialPortChannel::clearReadCache
void clearReadCache()
Definition: sl_serial_channel.cpp:119
_word_size_t
typedef _word_size_t(THREAD_PROC *thread_proc_t)(void *)
sl::SerialPortChannel::_device
std::string _device
Definition: sl_serial_channel.cpp:136
abs_rxtx.h
rp::hal::serial_rxtx::ANS_DEV_ERR
@ ANS_DEV_ERR
Definition: abs_rxtx.h:47
rp::hal::serial_rxtx::cancelOperation
virtual void cancelOperation()
Definition: abs_rxtx.h:74
sl::ISerialPortChannel
Definition: sl_lidar_driver.h:243
RESULT_OPERATION_FAIL
#define RESULT_OPERATION_FAIL
Definition: rptypes.h:106
sl::SerialPortChannel::getChannelType
int getChannelType()
Definition: sl_serial_channel.cpp:129
socket.h
sl_result
uint32_t sl_result
Definition: sl_types.h:69
rp::hal::serial_rxtx
Definition: abs_rxtx.h:41
rp::hal::serial_rxtx::waitfordata
virtual int waitfordata(size_t data_count, _u32 timeout=-1, size_t *returned_size=NULL)=0
sl::Result
Definition: sl_lidar_driver.h:92
rp
Definition: rplidar_driver.h:43
sl::SerialPortChannel::read
int read(void *buffer, size_t size)
Definition: sl_serial_channel.cpp:112
sl::SerialPortChannel::_baudrate
int _baudrate
Definition: sl_serial_channel.cpp:137
rp::hal::serial_rxtx::setDTR
virtual void setDTR()=0
data
sl_u8 data[0]
Definition: sl_lidar_protocol.h:5
sl::SerialPortChannel::flush
void flush()
Definition: sl_serial_channel.cpp:74
rp::hal::serial_rxtx::ANS_OK
@ ANS_OK
Definition: abs_rxtx.h:45
sl::SerialPortChannel::write
int write(const void *data, size_t size)
Definition: sl_serial_channel.cpp:107
sl_lidar_driver.h
rp::hal::serial_rxtx::senddata
virtual int senddata(const unsigned char *data, size_t size)=0


rplidar_ros
Author(s):
autogenerated on Fri Aug 2 2024 08:42:14