diff --git a/CMakeLists.txt b/CMakeLists.txt
index 843a2c1..c177ac4 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,4 +1,10 @@
cmake_minimum_required(VERSION 3.5.1)
+
+find_program(CCACHE_PROGRAM ccache)
+if(CCACHE_PROGRAM)
+ set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CCACHE_PROGRAM}")
+endif()
+
project(openauto CXX)
set(CMAKE_AUTOMOC ON)
@@ -22,10 +28,15 @@ set(Boost_USE_STATIC_RUNTIME OFF)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/cmake_modules/")
SET(CMAKE_CXX_STANDARD 14)
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS_INIT} -Wall -pedantic -fPIC")
+
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS_INIT} -Wall -pedantic")
set(CMAKE_CXX_FLAGS_DEBUG "-g -O0")
set(CMAKE_CXX_FLAGS_RELEASE "-g -O3")
+if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 6.3)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-psabi")
+endif()
+
add_definitions(-DBOOST_ALL_DYN_LINK)
find_package(Boost REQUIRED COMPONENTS system log OPTIONAL_COMPONENTS unit_test_framework)
@@ -34,6 +45,8 @@ find_package(Qt5 COMPONENTS Multimedia MultimediaWidgets Bluetooth Qml Quick Qui
find_package(Protobuf REQUIRED)
find_package(OpenSSL REQUIRED)
find_package(rtaudio REQUIRED)
+find_package(aasdk REQUIRED)
+find_package(ZLIB REQUIRED)
find_package(GObject)
if(WIN32)
@@ -73,12 +86,9 @@ include_directories(${CMAKE_CURRENT_BINARY_DIR}
${Qt5Bluetooth_INCLUDE_DIRS}
${QTGSTREAMER_INCLUDE_DIR}
${Boost_INCLUDE_DIRS}
- ${LIBUSB_1_INCLUDE_DIRS}
${PROTOBUF_INCLUDE_DIR}
${OPENSSL_INCLUDE_DIR}
${RTAUDIO_INCLUDE_DIRS}
- ${AASDK_PROTO_INCLUDE_DIRS}
- ${AASDK_INCLUDE_DIRS}
${BCM_HOST_INCLUDE_DIRS}
${ILCLIENT_INCLUDE_DIRS}
${GST_INCLUDE_DIRS}
@@ -94,26 +104,20 @@ file(GLOB_RECURSE autoapp_source_files ${autoapp_sources_directory}/*.ui ${autoa
add_executable(autoapp ${autoapp_source_files})
-file(GLOB_RECURSE autoapp_lib_source_files ${autoapp_sources_directory}/App.cpp ${autoapp_sources_directory}/Configuration/*.cpp ${autoapp_sources_directory}/Projection/*.cpp ${autoapp_sources_directory}/Service/*.cpp)
-file(GLOB_RECURSE autoapp_lib_inlcude_files ${autoapp_include_directory}/App.hpp ${autoapp_include_directory}/Configuration/*.hpp ${autoapp_include_directory}/Projection/*.hpp ${autoapp_include_directory}/Service/*.hpp)
-add_library(auto SHARED ${autoapp_lib_source_files} ${autoapp_lib_inlcude_files})
message(STATUS "${GST_LIBRARIES}")
-
-target_link_libraries(autoapp
+target_link_libraries(autoapp aasdk libusb
${GST_LIBRARIES}
${Boost_LIBRARIES}
${Qt5Multimedia_LIBRARIES}
${Qt5MultimediaWidgets_LIBRARIES}
${Qt5QuickWidgets_LIBRARIES}
${Qt5Bluetooth_LIBRARIES}
- ${LIBUSB_1_LIBRARIES}
${PROTOBUF_LIBRARIES}
+ ${ZLIB_LIBRARIES}
${BCM_HOST_LIBRARIES}
${ILCLIENT_LIBRARIES}
${WINSOCK2_LIBRARIES}
${RTAUDIO_LIBRARIES}
- ${AASDK_PROTO_LIBRARIES}
- ${AASDK_LIBRARIES}
${QTGLIB_LIBRARY}
${QTGLIB_LIBRARIES}
${QTGSTREAMER_LIBRARY}
@@ -122,7 +126,8 @@ target_link_libraries(autoapp
${QTGSTREAMER_UI_LIBRARIES}
${QTGSTREAMER_QUICK_LIBRARIES}
${QTGSTREAMER_QUICK_LIBRARY}
- ${GOBJECT_LIBRARIES})
+ ${GOBJECT_LIBRARIES}
+ )
set(btservice_sources_directory ${sources_directory}/btservice)
set(btservice_include_directory ${include_directory}/f1x/openauto/btservice)
@@ -135,4 +140,7 @@ target_link_libraries(btservice
${Qt5Bluetooth_LIBRARIES}
${Qt5MultimediaWidgets_LIBRARIES}
${PROTOBUF_LIBRARIES}
- ${AASDK_PROTO_LIBRARIES})
+)
+
+install(TARGETS autoapp btservice
+ RUNTIME DESTINATION bin)
diff --git a/Readme.md b/Readme.md
index d9db82d..ec2b073 100644
--- a/Readme.md
+++ b/Readme.md
@@ -1,15 +1,6 @@
# OpenAuto
-### Support project
-[](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=R4HXE5ESDR4U4)
-
-**OpenAuto Pro version** provides features like brightness control, volume control, support of Kodi and integration with the Raspberry PI OS (Raspbian Desktop). [See how it works at OpenAuto Pro overview video](https://www.youtube.com/watch?v=9sTOMI1qTiA)
-
-If you are looking for the car power supply with ignition state detection [go to the Blue Wave Studio page](https://bluewavestudio.io/index.php/bluewave-shop)
-
-For support of other platforms please contact me at f1xstudiopl@gmail.com
-
### Community
[](https://gitter.im/openauto_androidauto/Lobby)
@@ -18,6 +9,28 @@ OpenAuto is an AndroidAuto(tm) headunit emulator based on aasdk library and Qt l
[See demo video](https://www.youtube.com/watch?v=k9tKRqIkQs8)
+### Build Guide
+#### Local build instructions for Raspberry Pi
+
+Having aasdk built and install first is a prequisite for this task. Please complete the necessary aasdk steps before proceeding here.
+
+```sudo apt-get update
+sudo apt-get -y install cmake build-essential git
+
+sudo apt-get install libboost-all-dev libusb-1.0.0-dev libssl-dev cmake libprotobuf-dev protobuf-c-compiler protobuf-compiler libqt5multimedia5 libqt5multimedia5-plugins libqt5multimediawidgets5 qtmultimedia5-dev libqt5bluetooth5 libqt5bluetooth5-bin qtconnectivity5-dev pulseaudio librtaudio-dev
+
+git clone https://github.com/OpenDsh/openauto
+
+mkdir openauto_build; cd openauto_build
+
+cmake -DCMAKE_BUILD_TYPE=Release -DRPI3_BUILD=TRUE -DAASDK_INCLUDE_DIRS="../aasdk/include" -DAASDK_LIBRARIES="../aasdk/lib/libaasdk.so" -DAASDK_PROTO_INCLUDE_DIRS="../aasdk" -DAASDK_PROTO_LIBRARIES="../aasdk/lib/libaasdk_proto.so" ../openauto
+
+make -j2
+sudo make install
+```
+
+The executable binary can then be found at ~/openauto/bin/autoapp
+
### Supported functionalities
- 480p, 720p and 1080p with 30 or 60 FPS
- RaspberryPI 3 hardware acceleration support to decode video stream (up to 1080p@60!)
@@ -53,4 +66,4 @@ Copyrights (c) 2018 f1x.studio (Michal Szwaj)
- OpenMAX IL API
### Remarks
-**This software is not certified by Google Inc. It is created for R&D purposes and may not work as expected by the original authors. Do not use while driving. You use this software at your own risk.**
+**This software is not certified by Google Inc. It is created for R&D purposes and may not work as expected by the original authors. Do not use while driving. You use this software at your own risk.**
\ No newline at end of file
diff --git a/cmake_modules/Findaasdk.cmake b/cmake_modules/Findaasdk.cmake
new file mode 100644
index 0000000..e254703
--- /dev/null
+++ b/cmake_modules/Findaasdk.cmake
@@ -0,0 +1,43 @@
+set (AASDK_DIR ~/aasdk)
+
+find_path(AASDK_INCLUDE_DIR
+ f1x/aasdk/Version.hpp
+ PATHS ${AASDK_DIR}
+ PATH_SUFFIXES include
+)
+
+find_path(AASDK_PROTO_INCLUDE_DIR
+ aasdk_proto/AbsoluteInputEventData.pb.h
+ PATHS ${AASDK_DIR}
+)
+
+find_path(AASDK_LIB_DIR
+ libaasdk.so
+ PATHS ${AASDK_DIR}
+ PATH_SUFFIXES lib
+)
+
+if (AASDK_INCLUDE_DIR AND AASDK_PROTO_INCLUDE_DIR AND AASDK_LIB_DIR)
+ set(AASDK_FOUND TRUE)
+endif()
+
+if (AASDK_FOUND)
+ if (NOT aasdk_FIND_QUIETLY)
+ message(STATUS "Found aasdk:")
+ message(STATUS " - Includes: ${AASDK_INCLUDE_DIR}")
+ message(STATUS " - Libraries: ${AASDK_LIBRARIES}")
+ endif()
+ add_library(aasdk INTERFACE)
+ target_include_directories(aasdk INTERFACE ${AASDK_INCLUDE_DIR} ${AASDK_PROTO_INCLUDE_DIR})
+ target_link_libraries(aasdk INTERFACE ${AASDK_LIB_DIR}/libaasdk.so ${AASDK_LIB_DIR}/libaasdk_proto.so)
+else()
+ if (aasdk_FIND_REQUIRED)
+ if(AASDK_INCLUDE_DIR AND NOT AASDK_PROTO_INCLUDE_DIR)
+ message(FATAL_ERROR "aasdk was found but not built. Perform an in-source build.")
+ else()
+ message(FATAL_ERROR "Could not find aasdk")
+ endif()
+ endif()
+endif()
+
+mark_as_advanced(AASDK_INCLUDE_DIRS AASDK_LIBRARIES)
diff --git a/cmake_modules/Findlibomx.cmake b/cmake_modules/Findlibomx.cmake
new file mode 100644
index 0000000..278831e
--- /dev/null
+++ b/cmake_modules/Findlibomx.cmake
@@ -0,0 +1,67 @@
+set (OMX_DIR /opt/vc/)
+
+find_path(BCM_HOST_INCLUDE_DIR
+ bcm_host.h
+ PATHS
+ ${OMX_DIR}
+ PATH_SUFFIXES
+ include
+)
+
+find_path(BCM_HOST_LIB_DIR
+ libbcm_host.so
+ PATHS
+ ${OMX_DIR}
+ PATH_SUFFIXES
+ lib
+)
+
+find_path(ILCLIENT_INCLUDE_DIR
+ ilclient.h
+ PATHS
+ ${OMX_DIR}
+ PATH_SUFFIXES
+ src/hello_pi/libs/ilclient
+)
+
+find_path(ILCLIENT_LIB_DIR
+ libilclient.a
+ PATHS
+ ${OMX_DIR}
+ PATH_SUFFIXES
+ src/hello_pi/libs/ilclient
+)
+
+if (BCM_HOST_INCLUDE_DIR AND ILCLIENT_INCLUDE_DIR AND BCM_HOST_LIB_DIR AND ILCLIENT_LIB_DIR)
+ set(libomx_FOUND TRUE)
+endif()
+
+if (libomx_FOUND)
+ if (NOT libomx_FIND_QUIETLY)
+ message(STATUS "Found omx:")
+ message(STATUS " - Bcm Host: ${BCM_HOST_INCLUDE_DIR}")
+ message(STATUS " - ilclient: ${ILCLIENT_INCLUDE_DIR}")
+ endif()
+
+ add_library(omx INTERFACE)
+
+ target_include_directories(omx SYSTEM INTERFACE
+ ${BCM_HOST_INCLUDE_DIR}
+ ${ILCLIENT_INCLUDE_DIR}
+ )
+
+ target_link_libraries(omx INTERFACE
+ ${BCM_HOST_LIB_DIR}/libbcm_host.so
+ ${ILCLIENT_LIB_DIR}/libilclient.a
+ ${BCM_HOST_LIB_DIR}/libvcos.so
+ ${BCM_HOST_LIB_DIR}/libvcilcs.a
+ ${BCM_HOST_LIB_DIR}/libvchiq_arm.so
+ )
+
+ target_compile_definitions(omx INTERFACE
+ -DUSE_OMX
+ -DOMX_SKIP64BIT
+ -DRASPBERRYPI3
+ )
+
+endif()
diff --git a/cmake_modules/Findlibusb-1.0.cmake b/cmake_modules/Findlibusb-1.0.cmake
index ec40055..8c52b20 100644
--- a/cmake_modules/Findlibusb-1.0.cmake
+++ b/cmake_modules/Findlibusb-1.0.cmake
@@ -83,8 +83,11 @@ else (LIBUSB_1_LIBRARIES AND LIBUSB_1_INCLUDE_DIRS)
if (LIBUSB_1_FOUND)
if (NOT libusb_1_FIND_QUIETLY)
message(STATUS "Found libusb-1.0:")
- message(STATUS " - Includes: ${LIBUSB_1_INCLUDE_DIRS}")
- message(STATUS " - Libraries: ${LIBUSB_1_LIBRARIES}")
+ message(STATUS " - Includes: ${LIBUSB_1_INCLUDE_DIRS}")
+ message(STATUS " - Libraries: ${LIBUSB_1_LIBRARIES}")
+ add_library(libusb INTERFACE)
+ target_include_directories(libusb SYSTEM INTERFACE ${LIBUSB_1_INCLUDE_DIR})
+ target_link_libraries(libusb INTERFACE ${LIBUSB_1_LIBRARY})
endif (NOT libusb_1_FIND_QUIETLY)
else (LIBUSB_1_FOUND)
if (libusb_1_FIND_REQUIRED)
diff --git a/src/autoapp/Projection/OMXVideoOutput.cpp b/src/autoapp/Projection/OMXVideoOutput.cpp
index 9bc9f49..6be68e7 100644
--- a/src/autoapp/Projection/OMXVideoOutput.cpp
+++ b/src/autoapp/Projection/OMXVideoOutput.cpp
@@ -269,19 +269,19 @@ void OMXVideoOutput::setDestRect(DestRect destRect)
bool OMXVideoOutput::createComponents()
{
- if(ilclient_create_component(client_, &components_[VideoComponent::DECODER], "video_decode", static_cast(ILCLIENT_DISABLE_ALL_PORTS | ILCLIENT_ENABLE_INPUT_BUFFERS)) != 0)
+ if(ilclient_create_component(client_, &components_[VideoComponent::DECODER], const_cast("video_decode"), static_cast(ILCLIENT_DISABLE_ALL_PORTS | ILCLIENT_ENABLE_INPUT_BUFFERS)) != 0)
{
OPENAUTO_LOG(error) << "[OMXVideoOutput] video decode component creation failed.";
return false;
}
- if(ilclient_create_component(client_, &components_[VideoComponent::RENDERER], "video_render", ILCLIENT_DISABLE_ALL_PORTS) != 0)
+ if(ilclient_create_component(client_, &components_[VideoComponent::RENDERER], const_cast("video_render"), ILCLIENT_DISABLE_ALL_PORTS) != 0)
{
OPENAUTO_LOG(error) << "[OMXVideoOutput] video renderer component creation failed.";
return false;
}
- if(ilclient_create_component(client_, &components_[VideoComponent::CLOCK], "clock", ILCLIENT_DISABLE_ALL_PORTS) != 0)
+ if(ilclient_create_component(client_, &components_[VideoComponent::CLOCK], const_cast("clock"), ILCLIENT_DISABLE_ALL_PORTS) != 0)
{
OPENAUTO_LOG(error) << "[OMXVideoOutput] clock component creation failed.";
return false;
@@ -293,7 +293,7 @@ bool OMXVideoOutput::createComponents()
return false;
}
- if(ilclient_create_component(client_, &components_[VideoComponent::SCHEDULER], "video_scheduler", ILCLIENT_DISABLE_ALL_PORTS) != 0)
+ if(ilclient_create_component(client_, &components_[VideoComponent::SCHEDULER], const_cast("video_scheduler"), ILCLIENT_DISABLE_ALL_PORTS) != 0)
{
OPENAUTO_LOG(error) << "[OMXVideoOutput] video scheduler component creation failed.";
return false;