Implemented wifi_mapping example on Mac OS X

This commit is contained in:
matlabbe
2015-03-26 06:58:31 -04:00
parent 2cc853b507
commit 9097c3c1ad
6 changed files with 90 additions and 9 deletions
+9 -1
View File
@@ -138,7 +138,7 @@ ENDIF()
####### OSX BUNDLE CMAKE_INSTALL_PREFIX ####### ####### OSX BUNDLE CMAKE_INSTALL_PREFIX #######
IF(APPLE AND BUILD_AS_BUNDLE) IF(APPLE AND BUILD_AS_BUNDLE)
IF(QT4_FOUND AND QT_QTCORE_FOUND AND QT_QTGUI_FOUND) IF(Qt5_FOUND OR (QT4_FOUND AND QT_QTCORE_FOUND AND QT_QTGUI_FOUND))
# Required when packaging, and set CMAKE_INSTALL_PREFIX to "/". # Required when packaging, and set CMAKE_INSTALL_PREFIX to "/".
SET(CMAKE_INSTALL_PREFIX "/") SET(CMAKE_INSTALL_PREFIX "/")
@@ -341,4 +341,12 @@ ELSE()
MESSAGE(STATUS " With g2o = NO (g2o not found)") MESSAGE(STATUS " With g2o = NO (g2o not found)")
ENDIF() ENDIF()
IF(QT4_FOUND)
MESSAGE(STATUS " With Qt = YES (version 4)")
ELSEIF(Qt5_FOUND)
MESSAGE(STATUS " With Qt = YES (version 5)")
ELSE()
MESSAGE(STATUS " With Qt = NO (Qt not found, to use Qt5 you should set -DRTABMAP_QT_VERSION=5)")
ENDIF()
MESSAGE(STATUS "--------------------------------------------") MESSAGE(STATUS "--------------------------------------------")
-5
View File
@@ -3,12 +3,7 @@ ADD_SUBDIRECTORY( BOWMapping )
IF(TARGET rtabmap_gui) IF(TARGET rtabmap_gui)
ADD_SUBDIRECTORY( RGBDMapping ) ADD_SUBDIRECTORY( RGBDMapping )
# Only on Linux and Windows
IF(NOT APPLE)
ADD_SUBDIRECTORY( WifiMapping ) ADD_SUBDIRECTORY( WifiMapping )
ENDIF(NOT APPLE)
ELSE() ELSE()
MESSAGE(STATUS "RTAB-Map GUI lib is not built, the RGBDMapping and WifiMapping examples will not be built...") MESSAGE(STATUS "RTAB-Map GUI lib is not built, the RGBDMapping and WifiMapping examples will not be built...")
ENDIF() ENDIF()
+16 -1
View File
@@ -1,4 +1,7 @@
SET(srcs
main.cpp)
SET(INCLUDE_DIRS SET(INCLUDE_DIRS
${PROJECT_SOURCE_DIR}/utilite/include ${PROJECT_SOURCE_DIR}/utilite/include
${PROJECT_SOURCE_DIR}/corelib/include ${PROJECT_SOURCE_DIR}/corelib/include
@@ -25,8 +28,20 @@ ELSE()
QT5_WRAP_CPP(moc_srcs ../RGBDMapping/MapBuilder.h MapBuilderWifi.h) QT5_WRAP_CPP(moc_srcs ../RGBDMapping/MapBuilder.h MapBuilderWifi.h)
ENDIF() ENDIF()
ADD_EXECUTABLE(wifi_mapping main.cpp ${moc_srcs}) IF(APPLE)
FIND_LIBRARY(CoreWLAN_LIBRARY CoreWLAN)
MARK_AS_ADVANCED(CoreWLAN_LIBRARY)
SET(LIBRARIES
${LIBRARIES}
${CoreWLAN_LIBRARY}
)
SET(srcs
${srcs}
WifiOSX.mm
)
ENDIF(APPLE)
ADD_EXECUTABLE(wifi_mapping ${srcs} ${moc_srcs})
TARGET_LINK_LIBRARIES(wifi_mapping rtabmap_core rtabmap_gui rtabmap_utilite ${LIBRARIES}) TARGET_LINK_LIBRARIES(wifi_mapping rtabmap_core rtabmap_gui rtabmap_utilite ${LIBRARIES})
SET_TARGET_PROPERTIES( wifi_mapping SET_TARGET_PROPERTIES( wifi_mapping
+25
View File
@@ -0,0 +1,25 @@
/*
* WifiOSX.h
*
* Created on: Mar 26, 2015
* Author: mathieu
*/
#ifndef WIFIOSX_H_
#define WIFIOSX_H_
#include <string>
#include <vector>
struct AccessPoint
{
std::string ssid;
std::string bssid;
int rssi;
};
int getRssi(const std::string& interfaceName);
std::vector<AccessPoint> scanAir(const std::string& interfaceName);
#endif /* WIFIOSX_H_ */
+34
View File
@@ -0,0 +1,34 @@
#import <CoreWLAN/CoreWLAN.h>
#include "WifiOSX.h"
int getRssi(const std::string& interfaceName)
{
NSString* ifName = [NSString stringWithUTF8String:interfaceName.c_str()];
CWInterface* interface = [CWInterface interfaceWithName:ifName];
return interface.rssiValue;
}
std::vector<AccessPoint> scanAir(const std::string& interfaceName)
{
NSString* ifName = [NSString stringWithUTF8String:interfaceName.c_str()];
CWInterface* interface = [CWInterface interfaceWithName:ifName];
NSError* error = nil;
NSArray* scanResult = [[interface scanForNetworksWithSSID:nil error:&error] allObjects];
if (error)
{
NSLog(@"%@ (%ld)", [error localizedDescription], [error code]);
}
std::vector<AccessPoint> result;
for (CWNetwork* network in scanResult)
{
AccessPoint ap;
ap.ssid = std::string([[network ssid] UTF8String]);
ap.bssid = std::string([[network bssid] UTF8String]);
ap.rssi = [network rssiValue];
result.push_back(ap);
}
return result;
}
+4
View File
@@ -45,6 +45,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// Need to link with Wlanapi.lib and Ole32.lib // Need to link with Wlanapi.lib and Ole32.lib
#pragma comment(lib, "wlanapi.lib") #pragma comment(lib, "wlanapi.lib")
#pragma comment(lib, "ole32.lib") #pragma comment(lib, "ole32.lib")
#elif __APPLE__
#include "WifiOSX.h"
#else #else
#include <sys/socket.h> #include <sys/socket.h>
#include <linux/wireless.h> #include <linux/wireless.h>
@@ -159,6 +161,8 @@ private:
WlanFreeMemory(pIfList); WlanFreeMemory(pIfList);
pIfList = NULL; pIfList = NULL;
} }
#elif __APPLE__
dBm = getRssi(interfaceName_);
#else #else
// Code inspired from http://blog.ajhodges.com/2011/10/using-ioctl-to-gather-wifi-information.html // Code inspired from http://blog.ajhodges.com/2011/10/using-ioctl-to-gather-wifi-information.html