#include <rplidar_driver_serial.h>
Public Types | |
enum | { MAX_SCAN_NODES = 2048 } |
Public Member Functions | |
virtual u_result | ascendScanData (rplidar_response_measurement_node_t *nodebuffer, size_t count) |
virtual u_result | connect (const char *port_path, _u32 baudrate, _u32 flag) |
virtual void | disconnect () |
Disconnect with the RPLIDAR and close the serial port. | |
virtual u_result | getDeviceInfo (rplidar_response_device_info_t &, _u32 timeout=DEFAULT_TIMEOUT) |
virtual u_result | getFrequency (rplidar_response_measurement_node_t *nodebuffer, size_t count, float &frequency) |
virtual u_result | getHealth (rplidar_response_device_health_t &, _u32 timeout=DEFAULT_TIMEOUT) |
virtual u_result | grabScanData (rplidar_response_measurement_node_t *nodebuffer, size_t &count, _u32 timeout=DEFAULT_TIMEOUT) |
virtual bool | isConnected () |
Returns TRUE when the connection has been established. | |
virtual u_result | reset (_u32 timeout=DEFAULT_TIMEOUT) |
RPlidarDriverSerialImpl () | |
virtual u_result | startMotor () |
virtual u_result | startScan (bool force, _u32 timeout=DEFAULT_TIMEOUT) |
virtual u_result | stop (_u32 timeout=DEFAULT_TIMEOUT) |
virtual u_result | stopMotor () |
virtual | ~RPlidarDriverSerialImpl () |
Protected Member Functions | |
u_result | _cacheScanData () |
void | _disableDataGrabbing () |
u_result | _sendCommand (_u8 cmd, const void *payload=NULL, size_t payloadsize=0) |
u_result | _waitNode (rplidar_response_measurement_node_t *node, _u32 timeout) |
u_result | _waitResponseHeader (rplidar_ans_header_t *header, _u32 timeout) |
u_result | _waitScanData (rplidar_response_measurement_node_t *nodebuffer, size_t &count, _u32 timeout=DEFAULT_TIMEOUT) |
Protected Attributes | |
rplidar_response_measurement_node_t | _cached_scan_node_buf [2048] |
size_t | _cached_scan_node_count |
rp::hal::Thread | _cachethread |
rp::hal::Event | _dataEvt |
bool | _isConnected |
bool | _isScanning |
rp::hal::Locker | _lock |
rp::hal::serial_rxtx * | _rxtx |
Definition at line 41 of file rplidar_driver_serial.h.
anonymous enum |
Definition at line 45 of file rplidar_driver_serial.h.
Definition at line 72 of file rplidar_driver.cpp.
Definition at line 80 of file rplidar_driver.cpp.
Definition at line 258 of file rplidar_driver.cpp.
void rp::standalone::rplidar::RPlidarDriverSerialImpl::_disableDataGrabbing | ( | ) | [protected] |
Definition at line 603 of file rplidar_driver.cpp.
u_result rp::standalone::rplidar::RPlidarDriverSerialImpl::_sendCommand | ( | _u8 | cmd, |
const void * | payload = NULL , |
||
size_t | payloadsize = 0 |
||
) | [protected] |
Definition at line 509 of file rplidar_driver.cpp.
u_result rp::standalone::rplidar::RPlidarDriverSerialImpl::_waitNode | ( | rplidar_response_measurement_node_t * | node, |
_u32 | timeout | ||
) | [protected] |
Definition at line 425 of file rplidar_driver.cpp.
u_result rp::standalone::rplidar::RPlidarDriverSerialImpl::_waitResponseHeader | ( | rplidar_ans_header_t * | header, |
_u32 | timeout | ||
) | [protected] |
Definition at line 552 of file rplidar_driver.cpp.
u_result rp::standalone::rplidar::RPlidarDriverSerialImpl::_waitScanData | ( | rplidar_response_measurement_node_t * | nodebuffer, |
size_t & | count, | ||
_u32 | timeout = DEFAULT_TIMEOUT |
||
) | [protected] |
Definition at line 483 of file rplidar_driver.cpp.
u_result rp::standalone::rplidar::RPlidarDriverSerialImpl::ascendScanData | ( | rplidar_response_measurement_node_t * | nodebuffer, |
size_t | count | ||
) | [virtual] |
Ascending the scan data according to the angle value in the scan.
nodebuffer | Buffer provided by the caller application to do the reorder. Should be retrived from the grabScanData |
count | The caller must initialize this parameter to set the max data count of the provided buffer (in unit of rplidar_response_measurement_node_t). Once the interface returns, this parameter will store the actual received data count. The interface will return RESULT_OPERATION_FAIL when all the scan data is invalid. |
Implements rp::standalone::rplidar::RPlidarDriver.
Definition at line 328 of file rplidar_driver.cpp.
u_result rp::standalone::rplidar::RPlidarDriverSerialImpl::connect | ( | const char * | port_path, |
_u32 | baudrate, | ||
_u32 | flag | ||
) | [virtual] |
Open the specified serial port and connect to a target RPLIDAR device
port_path | the device path of the serial port e.g. on Windows, it may be com3 or \. on Unix-Like OS, it may be /dev/ttyS1, /dev/ttyUSB2, etc |
baudrate | the baudrate used For most RPLIDAR models, the baudrate should be set to 115200 |
flag | other flags Reserved for future use, always set to Zero |
Implements rp::standalone::rplidar::RPlidarDriver.
Definition at line 88 of file rplidar_driver.cpp.
void rp::standalone::rplidar::RPlidarDriverSerialImpl::disconnect | ( | ) | [virtual] |
Disconnect with the RPLIDAR and close the serial port.
Implements rp::standalone::rplidar::RPlidarDriver.
Definition at line 106 of file rplidar_driver.cpp.
u_result rp::standalone::rplidar::RPlidarDriverSerialImpl::getDeviceInfo | ( | rplidar_response_device_info_t & | info, |
_u32 | timeout = DEFAULT_TIMEOUT |
||
) | [virtual] |
Get the device information of the RPLIDAR include the serial number, firmware version, device model etc.
info | The device information returned from the RPLIDAR |
timeout | The operation timeout value (in millisecond) for the serial port communication |
Implements rp::standalone::rplidar::RPlidarDriver.
Definition at line 164 of file rplidar_driver.cpp.
u_result rp::standalone::rplidar::RPlidarDriverSerialImpl::getFrequency | ( | rplidar_response_measurement_node_t * | nodebuffer, |
size_t | count, | ||
float & | frequency | ||
) | [virtual] |
Calculate RPLIDAR's current scanning frequency from the given scan data Please refer to the application note doc for details Remark: the calculation will be incorrect if the specified scan data doesn't contain enough data
nodebuffer | The buffer belongs to a 360degress scan data |
count | The number of sample nodes inside the given buffer |
Implements rp::standalone::rplidar::RPlidarDriver.
Definition at line 201 of file rplidar_driver.cpp.
u_result rp::standalone::rplidar::RPlidarDriverSerialImpl::getHealth | ( | rplidar_response_device_health_t & | health, |
_u32 | timeout = DEFAULT_TIMEOUT |
||
) | [virtual] |
Retrieve the health status of the RPLIDAR The host system can use this operation to check whether RPLIDAR is in the self-protection mode.
health | The health status info returned from the RPLIDAR |
timeout | The operation timeout value (in millisecond) for the serial port communication |
Implements rp::standalone::rplidar::RPlidarDriver.
Definition at line 128 of file rplidar_driver.cpp.
u_result rp::standalone::rplidar::RPlidarDriverSerialImpl::grabScanData | ( | rplidar_response_measurement_node_t * | nodebuffer, |
size_t & | count, | ||
_u32 | timeout = DEFAULT_TIMEOUT |
||
) | [virtual] |
Wait and grab a complete 0-360 degree scan data previously received. The grabbed scan data returned by this interface always has the following charactistics:
1) The first node of the grabbed data array (nodebuffer[0]) must be the first sample of a scan, i.e. the start_bit == 1 2) All data nodes are belong to exactly ONE complete 360-degrees's scan 3) Note, the angle data in one scan may not be ascending. You can use API ascendScanData to reorder the nodebuffer.
nodebuffer | Buffer provided by the caller application to store the scan data |
count | The caller must initialize this parameter to set the max data count of the provided buffer (in unit of rplidar_response_measurement_node_t). Once the interface returns, this parameter will store the actual received data count. |
timeout | Max duration allowed to wait for a complete scan data, nothing will be stored to the nodebuffer if a complete 360-degrees' scan data cannot to be ready timely. |
The interface will return RESULT_OPERATION_TIMEOUT to indicate that no complete 360-degrees' scan can be retrieved withing the given timeout duration.
caller application can set the timeout value to Zero(0) to make this interface always returns immediately to achieve non-block operation.
Implements rp::standalone::rplidar::RPlidarDriver.
Definition at line 301 of file rplidar_driver.cpp.
bool rp::standalone::rplidar::RPlidarDriverSerialImpl::isConnected | ( | ) | [virtual] |
Returns TRUE when the connection has been established.
Implements rp::standalone::rplidar::RPlidarDriver.
Definition at line 113 of file rplidar_driver.cpp.
u_result rp::standalone::rplidar::RPlidarDriverSerialImpl::reset | ( | _u32 | timeout = DEFAULT_TIMEOUT | ) | [virtual] |
Ask the RPLIDAR core system to reset it self The host system can use the Reset operation to help RPLIDAR escape the self-protection mode.
Implements rp::standalone::rplidar::RPlidarDriver.
Definition at line 119 of file rplidar_driver.cpp.
Implements rp::standalone::rplidar::RPlidarDriver.
Definition at line 417 of file rplidar_driver.cpp.
u_result rp::standalone::rplidar::RPlidarDriverSerialImpl::startScan | ( | bool | force, |
_u32 | timeout = DEFAULT_TIMEOUT |
||
) | [virtual] |
Ask the RPLIDAR core system to enter the scan mode A background thread will be created by the RPLIDAR driver to fetch the scan data continuously. User Application can use the grabScanData() interface to retrieved the scan data cached previous by this background thread.
force | Force the core system to output scan data regardless whether the scanning motor is rotating or not. |
timeout | The operation timeout value (in millisecond) for the serial port communication |
Implements rp::standalone::rplidar::RPlidarDriver.
Definition at line 215 of file rplidar_driver.cpp.
u_result rp::standalone::rplidar::RPlidarDriverSerialImpl::stop | ( | _u32 | timeout = DEFAULT_TIMEOUT | ) | [virtual] |
Ask the RPLIDAR core system to stop the current scan operation and enter idle state. The background thread will be terminated
timeout | The operation timeout value (in millisecond) for the serial port communication |
Implements rp::standalone::rplidar::RPlidarDriver.
Definition at line 251 of file rplidar_driver.cpp.
Implements rp::standalone::rplidar::RPlidarDriver.
Definition at line 410 of file rplidar_driver.cpp.
rplidar_response_measurement_node_t rp::standalone::rplidar::RPlidarDriverSerialImpl::_cached_scan_node_buf[2048] [protected] |
Definition at line 87 of file rplidar_driver_serial.h.
size_t rp::standalone::rplidar::RPlidarDriverSerialImpl::_cached_scan_node_count [protected] |
Definition at line 88 of file rplidar_driver_serial.h.
Definition at line 89 of file rplidar_driver_serial.h.
Definition at line 85 of file rplidar_driver_serial.h.
bool rp::standalone::rplidar::RPlidarDriverSerialImpl::_isConnected [protected] |
Definition at line 81 of file rplidar_driver_serial.h.
bool rp::standalone::rplidar::RPlidarDriverSerialImpl::_isScanning [protected] |
Definition at line 82 of file rplidar_driver_serial.h.
Definition at line 84 of file rplidar_driver_serial.h.
Definition at line 86 of file rplidar_driver_serial.h.