From e240433fb4c9324116b95eb656abe550b9567050 Mon Sep 17 00:00:00 2001 From: Tony Huang Date: Sun, 5 May 2019 11:48:58 +0800 Subject: [PATCH] RPLIDAR SDK v1.11.0 - [new feature] support 256000 baudrate on macOS - [improvement] better support for S1 in framegrabber - [improvement] default tty device is set to /dev/tty.SLAB_USBtoUART instead of /dev/ttyUSB0 --- README.md | 5 ++--- docs/ReleaseNote.v1.10.0.md | 1 + docs/ReleaseNote.v1.11.0.md | 6 ++++++ sdk/app/Makefile | 2 +- sdk/app/frame_grabber/MainFrm.cpp | 14 +++++++++++-- sdk/app/frame_grabber/MainFrm.h | 6 +++++- sdk/app/frame_grabber/SerialSelDlg.cpp | 5 ++--- sdk/app/ultra_simple/main.cpp | 2 ++ sdk/sdk/include/rplidar.h | 2 +- sdk/sdk/src/arch/macOS/net_serial.cpp | 27 ++++++++++++-------------- 10 files changed, 44 insertions(+), 26 deletions(-) create mode 100644 docs/ReleaseNote.v1.11.0.md diff --git a/README.md b/README.md index 111043e..4f7e66d 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,7 @@ The demo applications are licensed under GPLv3 license. Release Notes ------------- +* [v1.11.0](https://github.com/slamtec/rplidar_sdk/blob/master/docs/ReleaseNote.v1.10.0.md) * [v1.10.0](https://github.com/slamtec/rplidar_sdk/blob/master/docs/ReleaseNote.v1.10.0.md) * [v1.9.1](https://github.com/slamtec/rplidar_sdk/blob/master/docs/ReleaseNote.v1.9.1.md) * [v1.9.0](https://github.com/slamtec/rplidar_sdk/blob/master/docs/ReleaseNote.v1.9.0.md) @@ -36,7 +37,7 @@ RPLIDAR SDK supports Windows, macOS and Linux by using Visual Studio 2010 projec | ---------------------- | ------- | ----- | ------| | A1 | Yes | Yes | Yes | | A2 | Yes | Yes | Yes | -| A3 | Yes | No | Yes | +| A3 | Yes | Yes | Yes | Quick Start ----------- @@ -47,8 +48,6 @@ If you have Microsoft Visual Studio 2010 installed, just open sdk/workspaces/vc1 ### On macOS and Linux -> Note: RPLIDAR A3 is not supported on macOS yet, because macOS doens't support the baudrate used by RPLIDAR A3, which is 256000 - Please make sure you have make and g++ installed, and then just invoke make in the root directory, you can get the compiled result at `output/$PLATFORM/$SCHEME`, such as `output/Linux/Release`. make diff --git a/docs/ReleaseNote.v1.10.0.md b/docs/ReleaseNote.v1.10.0.md index 8791b85..7626dba 100644 --- a/docs/ReleaseNote.v1.10.0.md +++ b/docs/ReleaseNote.v1.10.0.md @@ -1,3 +1,4 @@ RPLIDAR Public SDK v1.10.0 Release Note ====================================== + - [new feature] support Rplidar S1 diff --git a/docs/ReleaseNote.v1.11.0.md b/docs/ReleaseNote.v1.11.0.md new file mode 100644 index 0000000..5a4ed56 --- /dev/null +++ b/docs/ReleaseNote.v1.11.0.md @@ -0,0 +1,6 @@ +RPLIDAR Public SDK v1.11.0 Release Note +====================================== + +- [new feature] support 256000 baudrate on macOS +- [improvement] better support for S1 in framegrabber +- [improvement] default tty device is set to /dev/tty.SLAB_USBtoUART instead of /dev/ttyUSB0 diff --git a/sdk/app/Makefile b/sdk/app/Makefile index e68816f..71906ce 100644 --- a/sdk/app/Makefile +++ b/sdk/app/Makefile @@ -1,6 +1,6 @@ #/* # * Copyright (C) 2014 RoboPeak -# * Copyright (C) 2014 - 2018 Shanghai Slamtec Co., Ltd. +# * Copyright (C) 2014 - 2019 Shanghai Slamtec Co., Ltd. # * # * This program is free software: you can redistribute it and/or modify # * it under the terms of the GNU General Public License as published by diff --git a/sdk/app/frame_grabber/MainFrm.cpp b/sdk/app/frame_grabber/MainFrm.cpp index fb49389..0b099f3 100644 --- a/sdk/app/frame_grabber/MainFrm.cpp +++ b/sdk/app/frame_grabber/MainFrm.cpp @@ -303,6 +303,7 @@ void CMainFrame::onUpdateTitle() { char titleMsg[200]; const char * workingmodeDesc; + char deviceDesc[10]; switch (workingMode) { case WORKING_MODE_IDLE: workingmodeDesc = "IDLE"; @@ -314,8 +315,17 @@ void CMainFrame::onUpdateTitle() assert(!"should not come here"); } - sprintf(titleMsg, "[%s] Model: %d FW: %d.%02d HW: %d Serial: " + if((devInfo.model>>4)>RPLIDAR_T_SERIES_MINUM_MAJOR_ID){ + sprintf(deviceDesc,"T%d",(devInfo.model>>4)-RPLIDAR_T_SERIES_MINUM_MAJOR_ID) ; + }else if((devInfo.model>>4)>RPLIDAR_S_SERIES_MINUM_MAJOR_ID){ + sprintf(deviceDesc,"S%d",(devInfo.model>>4)-RPLIDAR_S_SERIES_MINUM_MAJOR_ID) ; + }else{ + sprintf(deviceDesc,"A%d",devInfo.model>>4) ; + } + sprintf(titleMsg, "[%s] Model: %sM%d(%d) FW: %d.%02d HW: %d Serial: " , workingmodeDesc + , deviceDesc + , devInfo.model&0xf , devInfo.model , devInfo.firmware_version>>8 , devInfo.firmware_version & 0xFF, devInfo.hardware_version); @@ -343,12 +353,12 @@ void CMainFrame::onSwitchMode(int newMode) // stop the previous operation LidarMgr::GetInstance().lidar_drv->stop(); LidarMgr::GetInstance().lidar_drv->stopMotor(); - UISetCheck(ID_CMD_STOP, 1); UISetCheck(ID_CMD_GRAB_PEAK, 0); UISetCheck(ID_CMD_GRAB_FRAME, 0); UISetCheck(ID_CMD_SCAN, 0); UISetCheck(ID_CMD_GRABFRAMENONEDIFF, 0); + LidarMgr::GetInstance().lidar_drv->clearNetSerialRxCache(); } break; case WORKING_MODE_SCAN: diff --git a/sdk/app/frame_grabber/MainFrm.h b/sdk/app/frame_grabber/MainFrm.h index 05d12f8..32d6031 100644 --- a/sdk/app/frame_grabber/MainFrm.h +++ b/sdk/app/frame_grabber/MainFrm.h @@ -44,7 +44,11 @@ class CMainFrame : WORKING_MODE_IDLE = 0, WORKING_MODE_SCAN = 3, }; - + enum { + RPLIDAR_A_SERIES_MINUM_MAJOR_ID = 0, + RPLIDAR_S_SERIES_MINUM_MAJOR_ID = 5, + RPLIDAR_T_SERIES_MINUM_MAJOR_ID = 8, + }; DECLARE_FRAME_WND_CLASS(NULL, IDR_MAINFRAME) CScanView m_scanview; diff --git a/sdk/app/frame_grabber/SerialSelDlg.cpp b/sdk/app/frame_grabber/SerialSelDlg.cpp index b747772..001eede 100644 --- a/sdk/app/frame_grabber/SerialSelDlg.cpp +++ b/sdk/app/frame_grabber/SerialSelDlg.cpp @@ -33,10 +33,9 @@ #include "SerialSelDlg.h" static const int baudRateLists[] = { - 115200, - 256000, 57600, - 1382400 + 115200, + 256000 }; CSerialSelDlg::CSerialSelDlg() diff --git a/sdk/app/ultra_simple/main.cpp b/sdk/app/ultra_simple/main.cpp index ee62bb8..f920cca 100644 --- a/sdk/app/ultra_simple/main.cpp +++ b/sdk/app/ultra_simple/main.cpp @@ -106,6 +106,8 @@ int main(int argc, const char * argv[]) { #ifdef _WIN32 // use default com port opt_com_path = "\\\\.\\com3"; +#elif __APPLE__ + opt_com_path = "/dev/tty.SLAB_USBtoUART"; #else opt_com_path = "/dev/ttyUSB0"; #endif diff --git a/sdk/sdk/include/rplidar.h b/sdk/sdk/include/rplidar.h index 4e14aa0..eba5e89 100644 --- a/sdk/sdk/include/rplidar.h +++ b/sdk/sdk/include/rplidar.h @@ -41,4 +41,4 @@ #include "rplidar_driver.h" -#define RPLIDAR_SDK_VERSION "1.10.0" +#define RPLIDAR_SDK_VERSION "1.11.0" diff --git a/sdk/sdk/src/arch/macOS/net_serial.cpp b/sdk/sdk/src/arch/macOS/net_serial.cpp index f645a1f..edf60a0 100644 --- a/sdk/sdk/src/arch/macOS/net_serial.cpp +++ b/sdk/sdk/src/arch/macOS/net_serial.cpp @@ -36,6 +36,7 @@ #include "arch/macOS/net_serial.h" #include #include +#include namespace rp{ namespace arch{ namespace net{ @@ -79,16 +80,8 @@ bool raw_serial::open(const char * portname, uint32_t baudrate, uint32_t flags) tcgetattr(serial_fd, &oldopt); bzero(&options,sizeof(struct termios)); - _u32 termbaud = getTermBaudBitmap(baudrate); + cfsetspeed(&options, B19200); - if (termbaud == (_u32)-1) { - fprintf(stderr, "Baudrate %d is not supported on macOS\r\n", baudrate); - close(); - return false; - } - cfsetispeed(&options, termbaud); - cfsetospeed(&options, termbaud); - // enable rx and tx options.c_cflag |= (CLOCAL | CREAD); @@ -111,19 +104,23 @@ bool raw_serial::open(const char * portname, uint32_t baudrate, uint32_t flags) options.c_oflag &= ~OPOST; tcflush(serial_fd,TCIFLUSH); -/* - if (fcntl(serial_fd, F_SETFL, FNDELAY)) + + if (tcsetattr(serial_fd, TCSANOW, &options)) { close(); return false; } -*/ - if (tcsetattr(serial_fd, TCSANOW, &options)) - { + + printf("Setting serial port baudrate...\n"); + + speed_t speed = (speed_t)baudrate; + if (ioctl(serial_fd, IOSSIOSPEED, &speed)== -1) { + printf("Error calling ioctl(..., IOSSIOSPEED, ...) %s - %s(%d).\n", + portname, strerror(errno), errno); close(); return false; } - + _is_serial_opened = true; //Clear the DTR bit to let the motor spin