MRPT  1.9.9
rp::standalone::rplidar::RPlidarDriverSerialImpl Class Reference

Detailed Description

Definition at line 41 of file rplidar_driver_serial.h.

#include <rplidar/src/rplidar_driver_serial.h>

Inheritance diagram for rp::standalone::rplidar::RPlidarDriverSerialImpl:

Public Types

enum  { MAX_SCAN_NODES = 2048 }
 
enum  { LEGACY_SAMPLE_DURATION = 476 }
 
enum  { DEFAULT_TIMEOUT = 2000 }
 
enum  { DRIVER_TYPE_SERIALPORT = 0x0 }
 

Public Member Functions

 RPlidarDriverSerialImpl ()
 
 ~RPlidarDriverSerialImpl () override
 
u_result connect (const char *port_path, _u32 baudrate, _u32 flag) override
 Open the specified serial port and connect to a target RPLIDAR device. More...
 
void disconnect () override
 Disconnect with the RPLIDAR and close the serial port. More...
 
bool isConnected () override
 Returns TRUE when the connection has been established. More...
 
u_result reset (_u32 timeout=DEFAULT_TIMEOUT) override
 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. More...
 
u_result getHealth (rplidar_response_device_health_t &, _u32 timeout=DEFAULT_TIMEOUT) override
 Retrieve the health status of the RPLIDAR The host system can use this operation to check whether RPLIDAR is in the self-protection mode. More...
 
u_result getDeviceInfo (rplidar_response_device_info_t &, _u32 timeout=DEFAULT_TIMEOUT) override
 Get the device information of the RPLIDAR include the serial number, firmware version, device model etc. More...
 
u_result getSampleDuration_uS (rplidar_response_sample_rate_t &rateInfo, _u32 timeout=DEFAULT_TIMEOUT) override
 Get the sample duration information of the RPLIDAR. More...
 
u_result setMotorPWM (_u16 pwm) override
 Set the RPLIDAR's motor pwm when using accessory board, currently valid for A2 only. More...
 
u_result startMotor () override
 Start RPLIDAR's motor when using accessory board. More...
 
u_result stopMotor () override
 Stop RPLIDAR's motor when using accessory board. More...
 
u_result checkMotorCtrlSupport (bool &support, _u32 timeout=DEFAULT_TIMEOUT) override
 Check whether the device support motor control. More...
 
u_result getFrequency (bool inExpressMode, size_t count, float &frequency, bool &is4kmode) override
 Calcuate RPLIDAR's current scanning frequency from the given scan data Please refer to the application note doc for details Remark: the calcuation will be incorrect if the specified scan data doesn't contains enough data. More...
 
u_result startScan (bool force=false, bool autoExpressMode=true) override
 Ask the RPLIDAR core system to enter the scan mode(Normal/Express, Express mode is 4k mode) A background thread will be created by the RPLIDAR driver to fetch the scan data continuously. More...
 
u_result startScanNormal (bool force, _u32 timeout=DEFAULT_TIMEOUT) override
 
u_result startScanExpress (bool fixedAngle, _u32 timeout=DEFAULT_TIMEOUT) override
 
u_result checkExpressScanSupported (bool &support, _u32 timeout=DEFAULT_TIMEOUT) override
 Check whether the device support express mode. More...
 
u_result stop (_u32 timeout=DEFAULT_TIMEOUT) override
 Ask the RPLIDAR core system to stop the current scan operation and enter idle state. More...
 
u_result grabScanData (rplidar_response_measurement_node_t *nodebuffer, size_t &count, _u32 timeout=DEFAULT_TIMEOUT) override
 Wait and grab a complete 0-360 degree scan data previously received. More...
 
u_result ascendScanData (rplidar_response_measurement_node_t *nodebuffer, size_t count) override
 Ascending the scan data according to the angle value in the scan. More...
 

Static Public Member Functions

static RPlidarDriverCreateDriver (_u32 drivertype=DRIVER_TYPE_SERIALPORT)
 Create an RPLIDAR Driver Instance This interface should be invoked first before any other operations. More...
 
static void DisposeDriver (RPlidarDriver *drv)
 Dispose the RPLIDAR Driver Instance specified by the drv parameter Applications should invoke this interface when the driver instance is no longer used in order to free memory. More...
 

Protected Member Functions

u_result _waitNode (rplidar_response_measurement_node_t *node, _u32 timeout=DEFAULT_TIMEOUT)
 
u_result _waitScanData (rplidar_response_measurement_node_t *nodebuffer, size_t &count, _u32 timeout=DEFAULT_TIMEOUT)
 
u_result _cacheScanData ()
 
void _capsuleToNormal (const rplidar_response_capsule_measurement_nodes_t &capsule, rplidar_response_measurement_node_t *nodebuffer, size_t &nodeCount)
 
u_result _waitCapsuledNode (rplidar_response_capsule_measurement_nodes_t &node, _u32 timeout=DEFAULT_TIMEOUT)
 
u_result _cacheCapsuledScanData ()
 
u_result _sendCommand (_u8 cmd, const void *payload=nullptr, size_t payloadsize=0)
 
u_result _waitResponseHeader (rplidar_ans_header_t *header, _u32 timeout=DEFAULT_TIMEOUT)
 
u_result _waitSampleRate (rplidar_response_sample_rate_t *res, _u32 timeout=DEFAULT_TIMEOUT)
 
void _disableDataGrabbing ()
 

Protected Attributes

bool _isConnected {false}
 
bool _isScanning {false}
 
bool _isSupportingMotorCtrl {false}
 
rp::hal::Locker _lock
 
rp::hal::Event _dataEvt
 
rp::hal::serial_rxtx_rxtx
 
rplidar_response_measurement_node_t _cached_scan_node_buf [2048]
 
size_t _cached_scan_node_count
 
_u16 _cached_sampleduration_std
 
_u16 _cached_sampleduration_express
 
rplidar_response_capsule_measurement_nodes_t _cached_previous_capsuledata
 
bool _is_previous_capsuledataRdy
 
rp::hal::Thread _cachethread
 

Member Enumeration Documentation

◆ anonymous enum

anonymous enum
inherited
Enumerator
DEFAULT_TIMEOUT 

Definition at line 45 of file rplidar_driver.h.

◆ anonymous enum

anonymous enum
inherited
Enumerator
DRIVER_TYPE_SERIALPORT 

Definition at line 50 of file rplidar_driver.h.

◆ anonymous enum

anonymous enum
Enumerator
MAX_SCAN_NODES 

Definition at line 44 of file rplidar_driver_serial.h.

◆ anonymous enum

anonymous enum
Enumerator
LEGACY_SAMPLE_DURATION 

Definition at line 49 of file rplidar_driver_serial.h.

Constructor & Destructor Documentation

◆ RPlidarDriverSerialImpl()

rp::standalone::rplidar::RPlidarDriverSerialImpl::RPlidarDriverSerialImpl ( )

Definition at line 63 of file rplidar_driver.cpp.

References _cached_sampleduration_express, _cached_sampleduration_std, _cached_scan_node_count, _rxtx, rp::hal::serial_rxtx::CreateRxTx(), and LEGACY_SAMPLE_DURATION.

Here is the call graph for this function:

◆ ~RPlidarDriverSerialImpl()

rp::standalone::rplidar::RPlidarDriverSerialImpl::~RPlidarDriverSerialImpl ( )
override

Definition at line 72 of file rplidar_driver.cpp.

References _rxtx, disconnect(), and rp::hal::serial_rxtx::ReleaseRxTx().

Here is the call graph for this function:

Member Function Documentation

◆ _cacheCapsuledScanData()

u_result rp::standalone::rplidar::RPlidarDriverSerialImpl::_cacheCapsuledScanData ( )
protected

Definition at line 536 of file rplidar_driver.cpp.

References _cached_scan_node_buf, _cached_scan_node_count, _capsuleToNormal(), _countof, _dataEvt, _isScanning, _lock, _waitCapsuledNode(), IS_FAIL, rp::hal::Locker::lock(), MAX_SCAN_NODES, mrpt::system::os::memcpy(), RESULT_INVALID_DATA, RESULT_OK, RESULT_OPERATION_FAIL, RESULT_OPERATION_TIMEOUT, RPLIDAR_RESP_MEASUREMENT_SYNCBIT, rp::hal::Event::set(), sync_quality, and rp::hal::Locker::unlock().

Referenced by startScanExpress().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ _cacheScanData()

u_result rp::standalone::rplidar::RPlidarDriverSerialImpl::_cacheScanData ( )
protected

Definition at line 406 of file rplidar_driver.cpp.

References _cached_scan_node_buf, _cached_scan_node_count, _countof, _dataEvt, _isScanning, _lock, _waitScanData(), IS_FAIL, rp::hal::Locker::lock(), MAX_SCAN_NODES, mrpt::system::os::memcpy(), RESULT_OK, RESULT_OPERATION_FAIL, RESULT_OPERATION_TIMEOUT, RPLIDAR_RESP_MEASUREMENT_SYNCBIT, rp::hal::Event::set(), sync_quality, and rp::hal::Locker::unlock().

Referenced by startScanNormal().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ _capsuleToNormal()

void rp::standalone::rplidar::RPlidarDriverSerialImpl::_capsuleToNormal ( const rplidar_response_capsule_measurement_nodes_t &  capsule,
rplidar_response_measurement_node_t *  nodebuffer,
size_t &  nodeCount 
)
protected

Definition at line 459 of file rplidar_driver.cpp.

References _cached_previous_capsuledata, _is_previous_capsuledataRdy, and RPLIDAR_RESP_MEASUREMENT_QUALITY_SHIFT.

Referenced by _cacheCapsuledScanData().

Here is the caller graph for this function:

◆ _disableDataGrabbing()

void rp::standalone::rplidar::RPlidarDriverSerialImpl::_disableDataGrabbing ( )
protected

Definition at line 1016 of file rplidar_driver.cpp.

References _cachethread, _isScanning, and rp::hal::Thread::join().

Referenced by checkMotorCtrlSupport(), getDeviceInfo(), getHealth(), getSampleDuration_uS(), and stop().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ _sendCommand()

u_result rp::standalone::rplidar::RPlidarDriverSerialImpl::_sendCommand ( _u8  cmd,
const void payload = nullptr,
size_t  payloadsize = 0 
)
protected

Definition at line 914 of file rplidar_driver.cpp.

References _isConnected, _rxtx, mrpt::obs::gnss::header, RESULT_OK, RESULT_OPERATION_FAIL, RPLIDAR_CMD_SYNC_BYTE, RPLIDAR_CMDFLAG_HAS_PAYLOAD, and rp::hal::serial_rxtx::senddata().

Referenced by checkMotorCtrlSupport(), getDeviceInfo(), getHealth(), getSampleDuration_uS(), reset(), setMotorPWM(), startScanExpress(), startScanNormal(), and stop().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ _waitCapsuledNode()

u_result rp::standalone::rplidar::RPlidarDriverSerialImpl::_waitCapsuledNode ( rplidar_response_capsule_measurement_nodes_t &  node,
_u32  timeout = DEFAULT_TIMEOUT 
)
protected

Definition at line 815 of file rplidar_driver.cpp.

References _is_previous_capsuledataRdy, _rxtx, rp::hal::serial_rxtx::ANS_DEV_ERR, rp::hal::serial_rxtx::ANS_TIMEOUT, getms, offsetof, rp::hal::serial_rxtx::recvdata(), RESULT_INVALID_DATA, RESULT_OK, RESULT_OPERATION_FAIL, RESULT_OPERATION_TIMEOUT, RPLIDAR_RESP_MEASUREMENT_EXP_SYNC_1, RPLIDAR_RESP_MEASUREMENT_EXP_SYNC_2, RPLIDAR_RESP_MEASUREMENT_EXP_SYNCBIT, start_angle_sync_q6, and rp::hal::serial_rxtx::waitfordata().

Referenced by _cacheCapsuledScanData().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ _waitNode()

u_result rp::standalone::rplidar::RPlidarDriverSerialImpl::_waitNode ( rplidar_response_measurement_node_t *  node,
_u32  timeout = DEFAULT_TIMEOUT 
)
protected

Definition at line 715 of file rplidar_driver.cpp.

References _rxtx, rp::hal::serial_rxtx::ANS_DEV_ERR, rp::hal::serial_rxtx::ANS_TIMEOUT, getms, rp::hal::serial_rxtx::recvdata(), RESULT_OK, RESULT_OPERATION_FAIL, RESULT_OPERATION_TIMEOUT, RPLIDAR_RESP_MEASUREMENT_CHECKBIT, and rp::hal::serial_rxtx::waitfordata().

Referenced by _waitScanData().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ _waitResponseHeader()

u_result rp::standalone::rplidar::RPlidarDriverSerialImpl::_waitResponseHeader ( rplidar_ans_header_t *  header,
_u32  timeout = DEFAULT_TIMEOUT 
)
protected

Definition at line 960 of file rplidar_driver.cpp.

References _rxtx, rp::hal::serial_rxtx::ANS_DEV_ERR, rp::hal::serial_rxtx::ANS_TIMEOUT, getms, mrpt::obs::gnss::header, rp::hal::serial_rxtx::recvdata(), RESULT_OK, RESULT_OPERATION_FAIL, RESULT_OPERATION_TIMEOUT, RPLIDAR_ANS_SYNC_BYTE1, RPLIDAR_ANS_SYNC_BYTE2, and rp::hal::serial_rxtx::waitfordata().

Referenced by checkMotorCtrlSupport(), getDeviceInfo(), getHealth(), getSampleDuration_uS(), startScanExpress(), and startScanNormal().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ _waitSampleRate()

u_result rp::standalone::rplidar::RPlidarDriverSerialImpl::_waitSampleRate ( rplidar_response_sample_rate_t *  res,
_u32  timeout = DEFAULT_TIMEOUT 
)
protected

◆ _waitScanData()

u_result rp::standalone::rplidar::RPlidarDriverSerialImpl::_waitScanData ( rplidar_response_measurement_node_t *  nodebuffer,
size_t &  count,
_u32  timeout = DEFAULT_TIMEOUT 
)
protected

Definition at line 784 of file rplidar_driver.cpp.

References _isConnected, _waitNode(), getms, IS_FAIL, RESULT_OK, RESULT_OPERATION_FAIL, and RESULT_OPERATION_TIMEOUT.

Referenced by _cacheScanData().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ascendScanData()

u_result rp::standalone::rplidar::RPlidarDriverSerialImpl::ascendScanData ( rplidar_response_measurement_node_t *  nodebuffer,
size_t  count 
)
overridevirtual

Ascending the scan data according to the angle value in the scan.

Parameters
nodebufferBuffer provided by the caller application to do the reorder. Should be retrived from the grabScanData
countThe 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 629 of file rplidar_driver.cpp.

References angle_q6_checkbit, distance_q2, RESULT_OK, RESULT_OPERATION_FAIL, RPLIDAR_RESP_MEASUREMENT_ANGLE_SHIFT, and RPLIDAR_RESP_MEASUREMENT_CHECKBIT.

◆ checkExpressScanSupported()

u_result rp::standalone::rplidar::RPlidarDriverSerialImpl::checkExpressScanSupported ( bool &  support,
_u32  timeout = DEFAULT_TIMEOUT 
)
overridevirtual

Check whether the device support express mode.

Parameters
supportReturn the result.
timeoutThe operation timeout value (in millisecond) for the serial port communication.

Implements rp::standalone::rplidar::RPlidarDriver.

Definition at line 291 of file rplidar_driver.cpp.

References _cached_sampleduration_express, _cached_sampleduration_std, getDeviceInfo(), getSampleDuration_uS(), IS_FAIL, and RESULT_OK.

Referenced by startScan().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ checkMotorCtrlSupport()

u_result rp::standalone::rplidar::RPlidarDriverSerialImpl::checkMotorCtrlSupport ( bool &  support,
_u32  timeout = DEFAULT_TIMEOUT 
)
overridevirtual

Check whether the device support motor control.

Note: this API will disable grab.

Parameters
supportReturn the result.
timeoutThe operation timeout value (in millisecond) for the serial port communication.

Implements rp::standalone::rplidar::RPlidarDriver.

Definition at line 1080 of file rplidar_driver.cpp.

References _disableDataGrabbing(), _lock, _rxtx, _sendCommand(), _waitResponseHeader(), rp::hal::serial_rxtx::ANS_OK, IS_FAIL, isConnected(), rp::hal::serial_rxtx::recvdata(), RESULT_INVALID_DATA, RESULT_OK, RESULT_OPERATION_FAIL, RESULT_OPERATION_TIMEOUT, RPLIDAR_ANS_HEADER_SIZE_MASK, RPLIDAR_ANS_TYPE_ACC_BOARD_FLAG, RPLIDAR_CMD_GET_ACC_BOARD_FLAG, RPLIDAR_RESP_ACC_BOARD_FLAG_MOTOR_CTRL_SUPPORT_MASK, and rp::hal::serial_rxtx::waitfordata().

Referenced by connect().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ connect()

u_result rp::standalone::rplidar::RPlidarDriverSerialImpl::connect ( const char *  port_path,
_u32  baudrate,
_u32  flag 
)
overridevirtual

Open the specified serial port and connect to a target RPLIDAR device.

Parameters
port_paththe 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
baudratethe baudrate used For most RPLIDAR models, the baudrate should be set to 115200
flagother flags Reserved for future use, always set to Zero

Implements rp::standalone::rplidar::RPlidarDriver.

Definition at line 80 of file rplidar_driver.cpp.

References _isConnected, _isSupportingMotorCtrl, _lock, _rxtx, rp::hal::serial_rxtx::bind(), checkMotorCtrlSupport(), rp::hal::serial_rxtx::flush(), isConnected(), rp::hal::serial_rxtx::open(), RESULT_ALREADY_DONE, RESULT_INSUFFICIENT_MEMORY, RESULT_INVALID_DATA, RESULT_OK, and stopMotor().

Here is the call graph for this function:

◆ CreateDriver()

RPlidarDriver * rp::standalone::rplidar::RPlidarDriver::CreateDriver ( _u32  drivertype = DRIVER_TYPE_SERIALPORT)
staticinherited

Create an RPLIDAR Driver Instance This interface should be invoked first before any other operations.

Parameters
drivertypethe connection type used by the driver.

Definition at line 49 of file rplidar_driver.cpp.

References rp::standalone::rplidar::RPlidarDriver::DRIVER_TYPE_SERIALPORT.

◆ disconnect()

void rp::standalone::rplidar::RPlidarDriverSerialImpl::disconnect ( )
overridevirtual

Disconnect with the RPLIDAR and close the serial port.

Implements rp::standalone::rplidar::RPlidarDriver.

Definition at line 107 of file rplidar_driver.cpp.

References _isConnected, _rxtx, rp::hal::serial_rxtx::close(), and stop().

Referenced by ~RPlidarDriverSerialImpl().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ DisposeDriver()

void rp::standalone::rplidar::RPlidarDriver::DisposeDriver ( RPlidarDriver drv)
staticinherited

Dispose the RPLIDAR Driver Instance specified by the drv parameter Applications should invoke this interface when the driver instance is no longer used in order to free memory.

Definition at line 60 of file rplidar_driver.cpp.

◆ getDeviceInfo()

u_result rp::standalone::rplidar::RPlidarDriverSerialImpl::getDeviceInfo ( rplidar_response_device_info_t &  info,
_u32  timeout = DEFAULT_TIMEOUT 
)
overridevirtual

Get the device information of the RPLIDAR include the serial number, firmware version, device model etc.

Parameters
infoThe device information returned from the RPLIDAR
timeoutThe operation timeout value (in millisecond) for the serial port communication

Implements rp::standalone::rplidar::RPlidarDriver.

Definition at line 177 of file rplidar_driver.cpp.

References _disableDataGrabbing(), _lock, _rxtx, _sendCommand(), _waitResponseHeader(), rp::hal::serial_rxtx::ANS_OK, IS_FAIL, isConnected(), rp::hal::serial_rxtx::recvdata(), RESULT_INVALID_DATA, RESULT_OK, RESULT_OPERATION_FAIL, RESULT_OPERATION_TIMEOUT, RPLIDAR_ANS_HEADER_SIZE_MASK, RPLIDAR_ANS_TYPE_DEVINFO, RPLIDAR_CMD_GET_DEVICE_INFO, and rp::hal::serial_rxtx::waitfordata().

Referenced by checkExpressScanSupported(), and getSampleDuration_uS().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ getFrequency()

u_result rp::standalone::rplidar::RPlidarDriverSerialImpl::getFrequency ( bool  inExpressMode,
size_t  count,
float &  frequency,
bool &  is4kmode 
)
overridevirtual

Calcuate RPLIDAR's current scanning frequency from the given scan data Please refer to the application note doc for details Remark: the calcuation will be incorrect if the specified scan data doesn't contains enough data.

Parameters
inExpressModeIndicate whether the RPLIDAR is in express mode
countThe number of sample nodes inside the given buffer
frequencyThe scanning frequency (in HZ) calcuated by the interface.
is4kmodeReturn whether the RPLIDAR is working on 4k sample rate mode.

Implements rp::standalone::rplidar::RPlidarDriver.

Definition at line 224 of file rplidar_driver.cpp.

References _cached_sampleduration_express, _cached_sampleduration_std, and RESULT_OK.

◆ getHealth()

u_result rp::standalone::rplidar::RPlidarDriverSerialImpl::getHealth ( rplidar_response_device_health_t &  health,
_u32  timeout = DEFAULT_TIMEOUT 
)
overridevirtual

Retrieve the health status of the RPLIDAR The host system can use this operation to check whether RPLIDAR is in the self-protection mode.

Parameters
healthThe health status info returned from the RPLIDAR
timeoutThe operation timeout value (in millisecond) for the serial port communication

Implements rp::standalone::rplidar::RPlidarDriver.

Definition at line 130 of file rplidar_driver.cpp.

References _disableDataGrabbing(), _lock, _rxtx, _sendCommand(), _waitResponseHeader(), rp::hal::serial_rxtx::ANS_OK, IS_FAIL, isConnected(), rp::hal::serial_rxtx::recvdata(), RESULT_INVALID_DATA, RESULT_OK, RESULT_OPERATION_FAIL, RESULT_OPERATION_TIMEOUT, RPLIDAR_ANS_HEADER_SIZE_MASK, RPLIDAR_ANS_TYPE_DEVHEALTH, RPLIDAR_CMD_GET_DEVICE_HEALTH, and rp::hal::serial_rxtx::waitfordata().

Here is the call graph for this function:

◆ getSampleDuration_uS()

u_result rp::standalone::rplidar::RPlidarDriverSerialImpl::getSampleDuration_uS ( rplidar_response_sample_rate_t &  rateInfo,
_u32  timeout = DEFAULT_TIMEOUT 
)
overridevirtual

Get the sample duration information of the RPLIDAR.

Parameters
rateInfoThe sample duration information returned from the RPLIDAR
timeoutThe operation timeout value (in millisecond) for the serial port communication

Implements rp::standalone::rplidar::RPlidarDriver.

Definition at line 1022 of file rplidar_driver.cpp.

References _cached_sampleduration_express, _cached_sampleduration_std, _disableDataGrabbing(), _lock, _rxtx, _sendCommand(), _waitResponseHeader(), rp::hal::serial_rxtx::ANS_OK, getDeviceInfo(), IS_FAIL, isConnected(), rp::hal::serial_rxtx::recvdata(), RESULT_INVALID_DATA, RESULT_OK, RESULT_OPERATION_FAIL, RESULT_OPERATION_TIMEOUT, RPLIDAR_ANS_HEADER_SIZE_MASK, RPLIDAR_ANS_TYPE_SAMPLE_RATE, RPLIDAR_CMD_GET_SAMPLERATE, and rp::hal::serial_rxtx::waitfordata().

Referenced by checkExpressScanSupported().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ grabScanData()

u_result rp::standalone::rplidar::RPlidarDriverSerialImpl::grabScanData ( rplidar_response_measurement_node_t *  nodebuffer,
size_t &  count,
_u32  timeout = DEFAULT_TIMEOUT 
)
overridevirtual

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.

Parameters
nodebufferBuffer provided by the caller application to store the scan data
countThe 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.
timeoutMax 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 597 of file rplidar_driver.cpp.

References _cached_scan_node_buf, _cached_scan_node_count, _dataEvt, _lock, rp::hal::Event::EVENT_OK, rp::hal::Event::EVENT_TIMEOUT, mrpt::system::os::memcpy(), min, RESULT_OK, RESULT_OPERATION_FAIL, RESULT_OPERATION_TIMEOUT, and rp::hal::Event::wait().

Here is the call graph for this function:

◆ isConnected()

bool rp::standalone::rplidar::RPlidarDriverSerialImpl::isConnected ( )
overridevirtual

Returns TRUE when the connection has been established.

Implements rp::standalone::rplidar::RPlidarDriver.

Definition at line 114 of file rplidar_driver.cpp.

References _isConnected.

Referenced by checkMotorCtrlSupport(), connect(), getDeviceInfo(), getHealth(), getSampleDuration_uS(), startScanExpress(), and startScanNormal().

Here is the caller graph for this function:

◆ reset()

u_result rp::standalone::rplidar::RPlidarDriverSerialImpl::reset ( _u32  timeout = DEFAULT_TIMEOUT)
overridevirtual

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 115 of file rplidar_driver.cpp.

References _lock, _sendCommand(), IS_FAIL, RESULT_OK, and RPLIDAR_CMD_RESET.

Here is the call graph for this function:

◆ setMotorPWM()

u_result rp::standalone::rplidar::RPlidarDriverSerialImpl::setMotorPWM ( _u16  pwm)
overridevirtual

Set the RPLIDAR's motor pwm when using accessory board, currently valid for A2 only.

Parameters
pwmThe motor pwm value would like to set

Implements rp::standalone::rplidar::RPlidarDriver.

Definition at line 1140 of file rplidar_driver.cpp.

References _lock, _sendCommand(), IS_FAIL, RESULT_OK, and RPLIDAR_CMD_SET_MOTOR_PWM.

Referenced by startMotor(), and stopMotor().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ startMotor()

u_result rp::standalone::rplidar::RPlidarDriverSerialImpl::startMotor ( )
overridevirtual

Start RPLIDAR's motor when using accessory board.

Implements rp::standalone::rplidar::RPlidarDriver.

Definition at line 1161 of file rplidar_driver.cpp.

References _isSupportingMotorCtrl, _lock, _rxtx, rp::hal::serial_rxtx::clearDTR(), DEFAULT_MOTOR_PWM, delay, RESULT_OK, and setMotorPWM().

Here is the call graph for this function:

◆ startScan()

u_result rp::standalone::rplidar::RPlidarDriverSerialImpl::startScan ( bool  force = false,
bool  autoExpressMode = true 
)
overridevirtual

Ask the RPLIDAR core system to enter the scan mode(Normal/Express, Express mode is 4k 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.

Parameters
forceForce the core system to output scan data regardless whether the scanning motor is rotating or not.
autoExpressModeForce the core system to trying express mode first, if the system does not support express mode, it will use normal mode.
timeoutThe operation timeout value (in millisecond) for the serial port communication.

Implements rp::standalone::rplidar::RPlidarDriver.

Definition at line 369 of file rplidar_driver.cpp.

References checkExpressScanSupported(), IS_FAIL, startScanExpress(), and startScanNormal().

Here is the call graph for this function:

◆ startScanExpress()

u_result rp::standalone::rplidar::RPlidarDriverSerialImpl::startScanExpress ( bool  fixedAngle,
_u32  timeout = DEFAULT_TIMEOUT 
)
overridevirtual

Implements rp::standalone::rplidar::RPlidarDriver.

Definition at line 313 of file rplidar_driver.cpp.

References _cacheCapsuledScanData(), _cachethread, _isScanning, _lock, _sendCommand(), _waitResponseHeader(), CLASS_THREAD, rp::hal::Thread::getHandle(), IS_FAIL, isConnected(), RESULT_ALREADY_DONE, RESULT_INVALID_DATA, RESULT_OK, RESULT_OPERATION_FAIL, RPLIDAR_ANS_HEADER_SIZE_MASK, RPLIDAR_ANS_TYPE_MEASUREMENT_CAPSULED, RPLIDAR_CMD_EXPRESS_SCAN, RPLIDAR_EXPRESS_SCAN_MODE_FIXANGLE, RPLIDAR_EXPRESS_SCAN_MODE_NORMAL, and stop().

Referenced by startScan().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ startScanNormal()

u_result rp::standalone::rplidar::RPlidarDriverSerialImpl::startScanNormal ( bool  force,
_u32  timeout = DEFAULT_TIMEOUT 
)
overridevirtual

Implements rp::standalone::rplidar::RPlidarDriver.

Definition at line 243 of file rplidar_driver.cpp.

References _cacheScanData(), _cachethread, _isScanning, _lock, _sendCommand(), _waitResponseHeader(), CLASS_THREAD, rp::hal::Thread::getHandle(), IS_FAIL, isConnected(), RESULT_ALREADY_DONE, RESULT_INVALID_DATA, RESULT_OK, RESULT_OPERATION_FAIL, RPLIDAR_ANS_HEADER_SIZE_MASK, RPLIDAR_ANS_TYPE_MEASUREMENT, RPLIDAR_CMD_FORCE_SCAN, RPLIDAR_CMD_SCAN, and stop().

Referenced by startScan().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ stop()

u_result rp::standalone::rplidar::RPlidarDriverSerialImpl::stop ( _u32  timeout = DEFAULT_TIMEOUT)
overridevirtual

Ask the RPLIDAR core system to stop the current scan operation and enter idle state.

The background thread will be terminated

Parameters
timeoutThe operation timeout value (in millisecond) for the serial port communication

Implements rp::standalone::rplidar::RPlidarDriver.

Definition at line 389 of file rplidar_driver.cpp.

References _disableDataGrabbing(), _lock, _sendCommand(), IS_FAIL, RESULT_OK, and RPLIDAR_CMD_STOP.

Referenced by disconnect(), startScanExpress(), and startScanNormal().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ stopMotor()

u_result rp::standalone::rplidar::RPlidarDriverSerialImpl::stopMotor ( )
overridevirtual

Stop RPLIDAR's motor when using accessory board.

Implements rp::standalone::rplidar::RPlidarDriver.

Definition at line 1178 of file rplidar_driver.cpp.

References _isSupportingMotorCtrl, _lock, _rxtx, delay, RESULT_OK, rp::hal::serial_rxtx::setDTR(), and setMotorPWM().

Referenced by connect().

Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ _cached_previous_capsuledata

rplidar_response_capsule_measurement_nodes_t rp::standalone::rplidar::RPlidarDriverSerialImpl::_cached_previous_capsuledata
protected

Definition at line 136 of file rplidar_driver_serial.h.

Referenced by _capsuleToNormal().

◆ _cached_sampleduration_express

_u16 rp::standalone::rplidar::RPlidarDriverSerialImpl::_cached_sampleduration_express
protected

◆ _cached_sampleduration_std

_u16 rp::standalone::rplidar::RPlidarDriverSerialImpl::_cached_sampleduration_std
protected

◆ _cached_scan_node_buf

rplidar_response_measurement_node_t rp::standalone::rplidar::RPlidarDriverSerialImpl::_cached_scan_node_buf[2048]
protected

Definition at line 130 of file rplidar_driver_serial.h.

Referenced by _cacheCapsuledScanData(), _cacheScanData(), and grabScanData().

◆ _cached_scan_node_count

size_t rp::standalone::rplidar::RPlidarDriverSerialImpl::_cached_scan_node_count
protected

◆ _cachethread

rp::hal::Thread rp::standalone::rplidar::RPlidarDriverSerialImpl::_cachethread
protected

◆ _dataEvt

rp::hal::Event rp::standalone::rplidar::RPlidarDriverSerialImpl::_dataEvt
protected

Definition at line 128 of file rplidar_driver_serial.h.

Referenced by _cacheCapsuledScanData(), _cacheScanData(), and grabScanData().

◆ _is_previous_capsuledataRdy

bool rp::standalone::rplidar::RPlidarDriverSerialImpl::_is_previous_capsuledataRdy
protected

Definition at line 137 of file rplidar_driver_serial.h.

Referenced by _capsuleToNormal(), and _waitCapsuledNode().

◆ _isConnected

bool rp::standalone::rplidar::RPlidarDriverSerialImpl::_isConnected {false}
protected

◆ _isScanning

bool rp::standalone::rplidar::RPlidarDriverSerialImpl::_isScanning {false}
protected

◆ _isSupportingMotorCtrl

bool rp::standalone::rplidar::RPlidarDriverSerialImpl::_isSupportingMotorCtrl {false}
protected

Definition at line 125 of file rplidar_driver_serial.h.

Referenced by connect(), startMotor(), and stopMotor().

◆ _lock

◆ _rxtx




Page generated by Doxygen 1.8.14 for MRPT 1.9.9 Git: 8fe78517f Sun Jul 14 19:43:28 2019 +0200 at lun oct 28 02:10:00 CET 2019