Skip to content
This repository was archived by the owner on Oct 10, 2022. It is now read-only.

Commit d3746ec

Browse files
authored
Restore QHY Driver (#80)
* Add CMake function to easily download SDK into source code * Add QHY SDK downloader * Remove unnecessary libusb include * Install correct udev rules and fxload binary on Linux for QHY firmware loading * Fix ASI SDK Path Fix QHY windows includes
1 parent dd43962 commit d3746ec

418 files changed

Lines changed: 37313 additions & 2754 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

cmake/functions.cmake

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,3 +63,80 @@ function(external_project_download IN_FILE OUT_DIR)
6363
endif()
6464
endfunction()
6565

66+
function(add_sdk)
67+
# Sets the following variables into cache:
68+
# ${NAME}_SDK_DIR
69+
# ${NAME}_SDK_VERSION
70+
# ${NAME}_SDK_URL
71+
72+
set(options "")
73+
set(oneValueArgs NAME MAJOR MINOR PATCH SUB URL HASH HASH_ALGO)
74+
set(multiValueArgs "")
75+
cmake_parse_arguments(add_sdk "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
76+
set(SDK_VERSION "${add_sdk_MAJOR}.${add_sdk_MINOR}.${add_sdk_PATCH}${add_sdk_SUB}")
77+
set(SDK_DIR "${CMAKE_CURRENT_SOURCE_DIR}/${add_sdk_NAME}_v${SDK_VERSION}")
78+
set(${add_sdk_NAME}_SDK_DIR "${SDK_DIR}" CACHE STRING "${add_sdk_NAME} SDK Directory")
79+
set(${add_sdk_NAME}_SDK_VERSION "${SDK_VERSION}" CACHE STRING "${add_sdk_NAME} SDK Version")
80+
81+
string(CONFIGURE "${add_sdk_URL}" SDK_URL)
82+
83+
set(${add_sdk_NAME}_SDK_URL ${SDK_URL} CACHE STRING "${add_sdk_NAME} SDK URL")
84+
get_filename_component(SDK_ARCHIVE "${SDK_URL}" NAME)
85+
set(SDK_ARCHIVE "${CMAKE_CURRENT_BINARY_DIR}/${SDK_ARCHIVE}")
86+
87+
message("Adding `${add_sdk_NAME}` SDK: `${SDK_DIR}` `${SDK_URL}` `${SDK_ARCHIVE}`")
88+
89+
if("${SDK_ARCHIVE}" MATCHES ".tar.bz2$")
90+
set(EXTRACT_COMMAND tar)
91+
set(EXTRACT_COMMAND_ARGS xjf ${SDK_ARCHIVE})
92+
elseif("${SDK_ARCHIVE}" MATCHES ".tar.gz$" OR "${SDK_ARCHIVE}" MATCHES ".tgz$")
93+
set(EXTRACT_COMMAND tar)
94+
set(EXTRACT_COMMAND_ARGS xzf ${SDK_ARCHIVE})
95+
elseif("${SDK_ARCHIVE}" MATCHES ".zip$")
96+
set(EXTRACT_COMMAND unzip)
97+
set(EXTRACT_COMMAND_ARGS ${SDK_ARCHIVE})
98+
else()
99+
message(FATAL_ERROR "${SDK_ARCHIVE}: Unrecognized archive format")
100+
endif()
101+
102+
if(NOT EXISTS ${SDK_DIR})
103+
message(STATUS "Downloading ${add_sdk_NAME} SDK v${SDK_VERSION}")
104+
file(DOWNLOAD
105+
"${SDK_URL}"
106+
"${SDK_ARCHIVE}"
107+
EXPECTED_HASH ${add_sdk_HASH_ALGO}=${add_sdk_HASH}
108+
SHOW_PROGRESS LOG SDK_DOWNLOAD_LOG STATUS SDK_DOWNLOAD_STATUS
109+
)
110+
111+
list(LENGTH SDK_DOWNLOAD_STATUS SDK_DOWNLOAD_STATUS_LENGTH)
112+
list(GET SDK_DOWNLOAD_STATUS 0 SDK_DOWNLOAD_STATUS_CODE)
113+
list(GET SDK_DOWNLOAD_STATUS 1 SDK_DOWNLOAD_STATUS_MESSAGE)
114+
if(${SDK_DOWNLOAD_STATUS_CODE})
115+
message(FATAL_ERROR "Error while downloading ${add_sdk_NAME} SDK: ${SDK_DOWNLOAD_STATUS_MESSAGE}(code: ${SDK_DOWNLOAD_STATUS_MESSAGE}. Full log: ${SDK_DOWNLOAD_LOG}")
116+
endif()
117+
file(MAKE_DIRECTORY "${SDK_DIR}")
118+
execute_process(COMMAND ${EXTRACT_COMMAND} ${EXTRACT_COMMAND_ARGS} WORKING_DIRECTORY ${SDK_DIR} RESULT_VARIABLE UNPACK_ERROR)
119+
if(NOT ${UNPACK_ERROR} EQUAL 0)
120+
file(REMOVE_RECURSE ${SDK_DIR})
121+
message(FATAL_ERROR "Error unpacking ${add_sdk_NAME} SDK: ${UNPACK_ERROR}")
122+
endif()
123+
124+
file(GLOB SDK_DIR_LIST "${SDK_DIR}/*" LIST_DIRECTORIES TRUE)
125+
list(LENGTH SDK_DIR_LIST SDK_DIR_LIST_LEN)
126+
127+
if(SDK_DIR_LIST_LEN EQUAL 1)
128+
list(GET SDK_DIR_LIST 0 SDK_SUBDIR)
129+
if(IS_DIRECTORY "${SDK_SUBDIR}")
130+
file(GLOB SDK_SUBDIR_CONTENT "${SDK_SUBDIR}/*" LIST_DIRECTORIES TRUE)
131+
foreach(ITEM ${SDK_SUBDIR_CONTENT})
132+
get_filename_component(FILENAME ${ITEM} NAME)
133+
message("Moving ${ITEM} to ${SDK_DIR}/${FILENAME}")
134+
file(RENAME ${ITEM} ${SDK_DIR}/${FILENAME})
135+
endforeach()
136+
file(REMOVE_RECURSE "${SDK_SUBDIR}")
137+
endif()
138+
endif()
139+
endif()
140+
141+
142+
endfunction()

src/drivers/qhy/CMakeLists.txt

Lines changed: 35 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1,71 +1,47 @@
1-
#TODO replace this script invokation
2-
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
3-
set(QHY_INCLUDE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/QHYCCD_Windows_SDK_x64_LatestVersion/x64/include)
4-
set(QHY_DLL_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/QHYCCD_Windows_SDK_x64_LatestVersion/x64/dll)
5-
include_directories(${QHY_INCLUDE_DIRECTORY})
6-
else()
7-
external_project_download(QHYCCD.cmake.in QHYCCD_Linux)
8-
set(QHY_INCLUDE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/QHYCCD_Linux)
9-
set(QHY_LIBS_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/QHYCCD_Linux)
10-
endif()
11-
execute_process(COMMAND ${CMAKE_SOURCE_DIR}/scripts/qhy_errors_to_map ${QHY_INCLUDE_DIRECTORY}/qhyccderr.h OUTPUT_VARIABLE qhy_error_codes)
12-
13-
add_custom_command(
14-
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/qhyccdstruct.h
15-
COMMAND python ${CMAKE_CURRENT_SOURCE_DIR}/qhy_fix_libusb_include.py ${QHY_INCLUDE_DIRECTORY}/qhyccdstruct.h ${CMAKE_CURRENT_BINARY_DIR}/qhyccdstruct.h
16-
)
17-
add_custom_target(qhyccdstruct DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/qhyccdstruct.h )
18-
19-
if(NOT CMAKE_SYSTEM_NAME STREQUAL "Windows")
20-
configure_file(${QHY_INCLUDE_DIRECTORY}/qhyccd.h ${CMAKE_CURRENT_BINARY_DIR}/ COPYONLY)
21-
configure_file(${QHY_INCLUDE_DIRECTORY}/qhyccdcamdef.h ${CMAKE_CURRENT_BINARY_DIR}/ COPYONLY)
22-
configure_file(${QHY_INCLUDE_DIRECTORY}/qhyccderr.h ${CMAKE_CURRENT_BINARY_DIR}/ COPYONLY)
23-
include_directories(${CMAKE_CURRENT_BINARY_DIR})
24-
endif()
25-
26-
# TODO automatically get from QHYCCD CMakeLists.txt
27-
set(LIBQHY_VERSION "0.1.8")
28-
set(LIBQHY_SOVERSION "0")
29-
30-
#TODO replace this script invokation
31-
1+
add_sdk(NAME QHY_Windows MAJOR 5 MINOR 0 PATCH 7 URL "http://www.qhyccd.com/file/repository/latestSoftAndDirver/SDK/V5.0.7/WINDOWS_qhyccd_V20190527_0.zip" HASH_ALGO MD5 HASH 342e063e31f662efe0d16448c7a4a696)
2+
add_sdk(NAME QHY_Linux_x86_64 MAJOR 5 MINOR 0 PATCH 7 URL "http://www.qhyccd.com/file/repository/latestSoftAndDirver/SDK/V5.0.7/LINUX_X64_qhyccd_V20190527_0.tgz" HASH_ALGO MD5 HASH b599eae3a4a017321df0a8ccfd19f812)
3+
add_sdk(NAME QHY_Mac_x86_64 MAJOR 5 MINOR 0 PATCH 7 URL "http://www.qhyccd.com/file/repository/latestSoftAndDirver/SDK/V5.0.7/MACOS_X64_qhyccd_V20190527_0.tgz" HASH_ALGO MD5 HASH 7bed1c9171c7731ff1ccb8f7cda66c19)
324

33-
set(qhy_SOURCES qhyccdimager.cpp qhydriver.cpp qhyimagingworker.cpp qhyexception.cpp qhycontrol.cpp)
34-
35-
set(QHY_LIBRARY_armv6 ${QHY_LIBS_DIRECTORY}/libqhy_arm_v6.bin)
36-
set(QHY_LIBRARY_armv7 ${QHY_LIBS_DIRECTORY}/libqhy_arm_v7.bin)
37-
set(QHY_LIBRARY_x86_64 ${QHY_LIBS_DIRECTORY}/libqhy_64.bin)
38-
set(QHY_LIBRARY_i686 ${QHY_LIBS_DIRECTORY}/libqhy_32.bin)
39-
40-
set(QHY_LIBRARY ${QHY_LIBRARY_${PlanetaryImager_ARCH}})
41-
42-
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
5+
if(CMAKE_SYSTEM_NAME STREQUAL Windows)
6+
set(QHY_INCLUDE_DIRECTORY ${QHY_Windows_SDK_DIR}/include)
7+
set(QHY_DLL_DIRECTORY ${QHY_Windows_SDK_DIR}/x64)
438
set(QHY_LIBRARY ${QHY_DLL_DIRECTORY}/qhyccd.dll)
44-
endif()
45-
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
46-
set(QHY_LIBRARY ${QHY_LIBS_DIRECTORY}/libqhy_osx.a)
9+
# fix for windows case insensitive includes when cross compiled
10+
configure_file(${QHY_INCLUDE_DIRECTORY}/CyAPI.h ${CMAKE_CURRENT_BINARY_DIR}/qhy_includes/cyapi.h COPYONLY)
11+
configure_file(${QHY_INCLUDE_DIRECTORY}/CyUSB30_def.h ${CMAKE_CURRENT_BINARY_DIR}/qhy_includes/cyusb30_def.h COPYONLY)
12+
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/qhy_includes/chatty.h "")
13+
set(QHY_INCLUDE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/qhy_includes ${QHY_INCLUDE_DIRECTORY})
14+
elseif(CMAKE_SYSTEM_NAME STREQUAL Darwin)
15+
set(QHY_INCLUDE_DIRECTORY ${QHY_Mac_x86_64_SDK_DIR}/usr/local/include)
16+
set(QHY_LIBS_DIRECTORY ${QHY_Mac_x86_64_SDK_DIR}/usr/local/lib)
17+
set(QHY_LIBRARY ${QHY_LIBS_DIRECTORY}/libqhyccd.a)
4718
set(QHY_EXTRA_LIBRARIES usb-1.0 "-framework CoreFoundation" "-framework IOKit" objc)
19+
elseif(CMAKE_SYSTEM_NAME STREQUAL Linux)
20+
set(QHY_INCLUDE_DIRECTORY ${QHY_Linux_x86_64_SDK_DIR}/usr/local/include)
21+
set(QHY_LIBS_DIRECTORY ${QHY_Linux_x86_64_SDK_DIR}/usr/local/lib)
22+
set(QHY_LIBRARY ${QHY_LIBS_DIRECTORY}/libqhyccd.a)
23+
file(READ ${QHY_Linux_x86_64_SDK_DIR}/etc/udev/rules.d/85-qhyccd.rules QHY_UDEV_RULES)
24+
string(REPLACE "/sbin/fxload" "${CMAKE_INSTALL_PREFIX}/bin/fxload_planetaryimager" QHY_UDEV_RULES "${QHY_UDEV_RULES}")
25+
string(REPLACE "/lib/firmware/qhy" "/lib/firmware/qhy_planetaryimager" QHY_UDEV_RULES "${QHY_UDEV_RULES}")
26+
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/qhyccd.rules" "${QHY_UDEV_RULES}")
4827
endif()
4928

29+
include_directories(${QHY_INCLUDE_DIRECTORY})
5030

51-
# if(ADD_DRIVERS_BUILD_DIRECTORY)
52-
# get_filename_component(QHY_LIBRARY_NAME ${QHY_LIBRARY} NAME)
53-
# file(COPY ${QHY_LIBRARY} DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
54-
# file(RENAME ${CMAKE_CURRENT_BINARY_DIR}/${QHY_LIBRARY_NAME} ${CMAKE_CURRENT_BINARY_DIR}/libqhy.so.${LIBQHY_VERSION})
55-
# endif()
31+
execute_process(COMMAND ${CMAKE_SOURCE_DIR}/scripts/qhy_errors_to_map ${QHY_INCLUDE_DIRECTORY}/qhyccderr.h OUTPUT_VARIABLE qhy_error_codes)
5632

57-
add_driver(NAME qhy OS Linux Windows Darwin SRCS ${qhy_SOURCES} ${qhy_GENERATED_SOURCES} LINK ${QHY_LIBRARY} ${QHY_EXTRA_LIBRARIES})
33+
set(qhy_SOURCES qhyccdimager.cpp qhydriver.cpp qhyimagingworker.cpp qhyexception.cpp qhycontrol.cpp)
34+
add_driver(NAME qhy OS Linux Windows Darwin DEFAULT_ON SRCS ${qhy_SOURCES} ${qhy_GENERATED_SOURCES} LINK ${QHY_LIBRARY} ${QHY_EXTRA_LIBRARIES})
5835

5936
if(BUILD_DRIVER_qhy)
60-
add_dependencies(qhy qhyccdstruct)
61-
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
62-
install(FILES QHYCCD_Linux/85-qhy.rules DESTINATION ${UDEVRULES_INSTALL_DIR})
63-
install(FILES ${QHY_LIBRARY} DESTINATION ${drivers_destination} RENAME libqhy.so.${LIBQHY_VERSION})
64-
65-
file(GLOB QHY_FIRMWARE_FILES QHYCCD_Linux/firmware/*)
66-
install(FILES ${QHY_FIRMWARE_FILES} DESTINATION ${FIRMWARE_INSTALL_BASEDIR}/qhy)
37+
if(CMAKE_SYSTEM_NAME STREQUAL Linux)
38+
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/qhyccd.rules DESTINATION ${UDEVRULES_INSTALL_DIR} RENAME 80-qhyccd_planetaryimager.rules)
39+
file(GLOB QHY_FIRMWARE_FILES ${QHY_Linux_x86_64_SDK_DIR}/lib/firmware/qhy/*)
40+
install(FILES ${QHY_FIRMWARE_FILES} DESTINATION ${FIRMWARE_INSTALL_BASEDIR}/qhy_planetaryimager)
41+
install(PROGRAMS ${QHY_Linux_x86_64_SDK_DIR}/sbin/fxload DESTINATION ${CMAKE_INSTALL_PREFIX}/bin RENAME fxload_planetaryimager)
6742
endif()
68-
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
69-
install(FILES ${QHY_LIBRARY} DESTINATION .)
43+
if(CMAKE_SYSTEM_NAME STREQUAL Windows)
44+
file(GLOB QHY_WINDOWS_LIBRARIES ${QHY_DLL_DIRECTORY}/*.dll)
45+
install(FILES ${QHY_WINDOWS_LIBRARIES} DESTINATION .)
7046
endif()
7147
endif()

src/drivers/qhy/QHYCCD_Windows_SDK_x64_LatestVersion/changelog.txt

Lines changed: 0 additions & 141 deletions
This file was deleted.
Binary file not shown.

0 commit comments

Comments
 (0)