diff --git a/.gitmodules b/.gitmodules index b5392ad..9ef067d 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,9 @@ [submodule "src/libdivecomputer"] path = src/libdivecomputer url = https://github.com/libdivecomputer/libdivecomputer.git +[submodule "src/hidapi"] + path = src/hidapi + url = https://github.com/libusb/hidapi.git +[submodule "src/libusb"] + path = src/libusb + url = https://github.com/libusb/libusb.git diff --git a/README.md b/README.md index db05c05..9736e44 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,14 @@ This plugin automatically spawns its own isolate for communication with the dive Please refer to the example app for a minimalistic example usage. +# macOS + +This plugin supports USB and Serial connection on macOS. On macOS you need to make sure the app has access to the USB connection granted. To do so add the following snippet to info.plist and make sure you grant USB access in xcode via `Signing & Capabilities -> Hardware -> USB`. +``` +NSUSBPeripheralUsageDescription +Your explanation here +``` + --- ### Acknowledgements diff --git a/android/CMakeLists.txt b/android/CMakeLists.txt index e6fa839..e12e34c 100644 --- a/android/CMakeLists.txt +++ b/android/CMakeLists.txt @@ -20,6 +20,8 @@ add_library(dive_computer SHARED "../src/libdivecomputer/src/timer.c" "../src/libdivecomputer/src/parser.c" "../src/libdivecomputer/src/serial_posix.c" + "../src/libdivecomputer/src/usb.c" + "../src/libdivecomputer/src/usbhid.c" "../src/libdivecomputer/src/atomics_cobalt.c" "../src/libdivecomputer/src/atomics_cobalt_parser.c" diff --git a/example/macos/Podfile.lock b/example/macos/Podfile.lock index 7ae66da..f554fd3 100644 --- a/example/macos/Podfile.lock +++ b/example/macos/Podfile.lock @@ -14,9 +14,9 @@ EXTERNAL SOURCES: :path: Flutter/ephemeral SPEC CHECKSUMS: - dive_computer: d73377c895d5cc0bdb48eb85667b314cf47841d9 + dive_computer: e512b5b2b343092ee9551c845b8f84ad38a019c7 FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24 PODFILE CHECKSUM: 236401fc2c932af29a9fcf0e97baeeb2d750d367 -COCOAPODS: 1.14.3 +COCOAPODS: 1.15.2 diff --git a/example/macos/Runner.xcodeproj/project.pbxproj b/example/macos/Runner.xcodeproj/project.pbxproj index 92de8c5..4b0ff07 100644 --- a/example/macos/Runner.xcodeproj/project.pbxproj +++ b/example/macos/Runner.xcodeproj/project.pbxproj @@ -29,8 +29,8 @@ 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; CDF727C5C51DE46A62037ED3 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8833DC8D350DF77B2F889694 /* Pods_RunnerTests.framework */; }; - D85A387C2B49ED9F0078351E /* libdivecomputer.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D85A387B2B49ED9F0078351E /* libdivecomputer.0.dylib */; settings = {ATTRIBUTES = (Weak, ); }; }; - D85A387D2B49EDA50078351E /* libdivecomputer.0.dylib in Bundle Framework */ = {isa = PBXBuildFile; fileRef = D85A387B2B49ED9F0078351E /* libdivecomputer.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + D85A387C2B49ED9F0078351E /* (null) in Frameworks */ = {isa = PBXBuildFile; settings = {ATTRIBUTES = (Weak, ); }; }; + D85A387D2B49EDA50078351E /* (null) in Bundle Framework */ = {isa = PBXBuildFile; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -57,7 +57,7 @@ dstPath = ""; dstSubfolderSpec = 10; files = ( - D85A387D2B49EDA50078351E /* libdivecomputer.0.dylib in Bundle Framework */, + D85A387D2B49EDA50078351E /* (null) in Bundle Framework */, ); name = "Bundle Framework"; runOnlyForDeploymentPostprocessing = 0; @@ -107,7 +107,7 @@ buildActionMask = 2147483647; files = ( 262E412DF37AA4627DE9CE94 /* Pods_Runner.framework in Frameworks */, - D85A387C2B49ED9F0078351E /* libdivecomputer.0.dylib in Frameworks */, + D85A387C2B49ED9F0078351E /* (null) in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -205,7 +205,6 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - D85A387B2B49ED9F0078351E /* libdivecomputer.0.dylib */, 866168B11938ECFE46CFB139 /* Pods_Runner.framework */, 8833DC8D350DF77B2F889694 /* Pods_RunnerTests.framework */, ); @@ -574,6 +573,7 @@ CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; + DEVELOPMENT_TEAM = ""; INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited)"; LIBRARY_SEARCH_PATHS = ( @@ -703,6 +703,7 @@ CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; + DEVELOPMENT_TEAM = ""; INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited)"; LIBRARY_SEARCH_PATHS = ( @@ -726,6 +727,7 @@ CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; + DEVELOPMENT_TEAM = ""; INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited)"; LIBRARY_SEARCH_PATHS = ( diff --git a/example/macos/Runner/DebugProfile.entitlements b/example/macos/Runner/DebugProfile.entitlements index dddb8a3..2357acf 100644 --- a/example/macos/Runner/DebugProfile.entitlements +++ b/example/macos/Runner/DebugProfile.entitlements @@ -6,6 +6,8 @@ com.apple.security.cs.allow-jit + com.apple.security.device.usb + com.apple.security.network.server diff --git a/example/macos/Runner/Info.plist b/example/macos/Runner/Info.plist index 4789daa..b8e6710 100644 --- a/example/macos/Runner/Info.plist +++ b/example/macos/Runner/Info.plist @@ -28,5 +28,7 @@ MainMenu NSPrincipalClass NSApplication + NSUSBPeripheralUsageDescription + Your explanation here diff --git a/example/macos/Runner/Release.entitlements b/example/macos/Runner/Release.entitlements index 852fa1a..127cfcd 100644 --- a/example/macos/Runner/Release.entitlements +++ b/example/macos/Runner/Release.entitlements @@ -4,5 +4,7 @@ com.apple.security.app-sandbox + com.apple.security.device.usb + diff --git a/ffigen.yaml b/ffigen.yaml index 0721be8..13ef9be 100644 --- a/ffigen.yaml +++ b/ffigen.yaml @@ -11,6 +11,8 @@ headers: - 'src/libdivecomputer/include/libdivecomputer/iterator.h' - 'src/libdivecomputer/include/libdivecomputer/serial.h' - 'src/libdivecomputer/include/libdivecomputer/parser.h' + - 'src/libdivecomputer/include/libdivecomputer/usb.h' + - 'src/libdivecomputer/include/libdivecomputer/usbhid.h' preamble: | // ignore_for_file: always_specify_types, unused_field, unused_element // ignore_for_file: camel_case_types diff --git a/ios/Classes/array.c b/ios/Classes/array.c deleted file mode 100644 index b3428fc..0000000 --- a/ios/Classes/array.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/array.c" \ No newline at end of file diff --git a/ios/Classes/atomics_cobalt.c b/ios/Classes/atomics_cobalt.c deleted file mode 100644 index 1410ceb..0000000 --- a/ios/Classes/atomics_cobalt.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/atomics_cobalt.c" \ No newline at end of file diff --git a/ios/Classes/atomics_cobalt_parser.c b/ios/Classes/atomics_cobalt_parser.c deleted file mode 100644 index dbaaaec..0000000 --- a/ios/Classes/atomics_cobalt_parser.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/atomics_cobalt_parser.c" \ No newline at end of file diff --git a/ios/Classes/citizen_aqualand.c b/ios/Classes/citizen_aqualand.c deleted file mode 100644 index 8b5bf59..0000000 --- a/ios/Classes/citizen_aqualand.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/citizen_aqualand.c" \ No newline at end of file diff --git a/ios/Classes/citizen_aqualand_parser.c b/ios/Classes/citizen_aqualand_parser.c deleted file mode 100644 index c7e33cd..0000000 --- a/ios/Classes/citizen_aqualand_parser.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/citizen_aqualand_parser.c" \ No newline at end of file diff --git a/ios/Classes/cochran_commander.c b/ios/Classes/cochran_commander.c deleted file mode 100644 index 057a1ef..0000000 --- a/ios/Classes/cochran_commander.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/cochran_commander.c" \ No newline at end of file diff --git a/ios/Classes/cochran_commander_parser.c b/ios/Classes/cochran_commander_parser.c deleted file mode 100644 index 8e81f55..0000000 --- a/ios/Classes/cochran_commander_parser.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/cochran_commander_parser.c" \ No newline at end of file diff --git a/ios/Classes/cressi_ady_parser.c b/ios/Classes/cressi_ady_parser.c deleted file mode 100644 index 6147aef..0000000 --- a/ios/Classes/cressi_ady_parser.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/cressi_edy_parser.c" \ No newline at end of file diff --git a/ios/Classes/cressi_edy.c b/ios/Classes/cressi_edy.c deleted file mode 100644 index 5b19646..0000000 --- a/ios/Classes/cressi_edy.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/cressi_edy.c" \ No newline at end of file diff --git a/ios/Classes/cressi_goa.c b/ios/Classes/cressi_goa.c deleted file mode 100644 index 713069b..0000000 --- a/ios/Classes/cressi_goa.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/cressi_goa.c" \ No newline at end of file diff --git a/ios/Classes/cressi_goa_parser.c b/ios/Classes/cressi_goa_parser.c deleted file mode 100644 index 1b86aaa..0000000 --- a/ios/Classes/cressi_goa_parser.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/cressi_goa_parser.c" \ No newline at end of file diff --git a/ios/Classes/cressi_leonardo.c b/ios/Classes/cressi_leonardo.c deleted file mode 100644 index b3a0a6b..0000000 --- a/ios/Classes/cressi_leonardo.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/cressi_leonardo.c" \ No newline at end of file diff --git a/ios/Classes/cressi_leonardo_parser.c b/ios/Classes/cressi_leonardo_parser.c deleted file mode 100644 index 99eae10..0000000 --- a/ios/Classes/cressi_leonardo_parser.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/cressi_leonardo_parser.c" \ No newline at end of file diff --git a/ios/Classes/deepblu_cosmiq.c b/ios/Classes/deepblu_cosmiq.c deleted file mode 100644 index d547a03..0000000 --- a/ios/Classes/deepblu_cosmiq.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/deepblu_cosmiq.c" \ No newline at end of file diff --git a/ios/Classes/deepblu_cosmiq_parser.c b/ios/Classes/deepblu_cosmiq_parser.c deleted file mode 100644 index aaa95d3..0000000 --- a/ios/Classes/deepblu_cosmiq_parser.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/deepblu_cosmiq_parser.c" \ No newline at end of file diff --git a/ios/Classes/deepsix_excursion.c b/ios/Classes/deepsix_excursion.c deleted file mode 100644 index 38ccb2b..0000000 --- a/ios/Classes/deepsix_excursion.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/deepsix_excursion.c" \ No newline at end of file diff --git a/ios/Classes/deepsix_excursion_parser.c b/ios/Classes/deepsix_excursion_parser.c deleted file mode 100644 index e2ff8ae..0000000 --- a/ios/Classes/deepsix_excursion_parser.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/deepsix_excursion_parser.c" \ No newline at end of file diff --git a/ios/Classes/dive_computer.c b/ios/Classes/dive_computer.c deleted file mode 100644 index 7b64af6..0000000 --- a/ios/Classes/dive_computer.c +++ /dev/null @@ -1,16 +0,0 @@ -#include "../../src/libdivecomputer/src/context.c" -#include "../../src/libdivecomputer/src/device.c" -#include "../../src/libdivecomputer/src/iterator.c" -#include "../../src/libdivecomputer/src/buffer.c" -#include "../../src/libdivecomputer/src/descriptor.c" -#include "../../src/libdivecomputer/src/iostream.c" -#include "../../src/libdivecomputer/src/checksum.c" -#include "../../src/libdivecomputer/src/ringbuffer.c" -#include "../../src/libdivecomputer/src/rbstream.c" -#include "../../src/libdivecomputer/src/common.c" -#include "../../src/libdivecomputer/src/datetime.c" -#include "../../src/libdivecomputer/src/packet.c" -#include "../../src/libdivecomputer/src/aes.c" -#include "../../src/libdivecomputer/src/platform.c" -#include "../../src/libdivecomputer/src/timer.c" -#include "../../src/libdivecomputer/src/parser.c" \ No newline at end of file diff --git a/ios/Classes/diverite_nitekq.c b/ios/Classes/diverite_nitekq.c deleted file mode 100644 index 371f8b2..0000000 --- a/ios/Classes/diverite_nitekq.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/diverite_nitekq.c" \ No newline at end of file diff --git a/ios/Classes/diverite_nitekq_parser.c b/ios/Classes/diverite_nitekq_parser.c deleted file mode 100644 index 9e6ac58..0000000 --- a/ios/Classes/diverite_nitekq_parser.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/diverite_nitekq_parser.c" \ No newline at end of file diff --git a/ios/Classes/divesoft_freedom.c b/ios/Classes/divesoft_freedom.c deleted file mode 100644 index bcb0d05..0000000 --- a/ios/Classes/divesoft_freedom.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/divesoft_freedom.c" \ No newline at end of file diff --git a/ios/Classes/divesoft_freedom_parser.c b/ios/Classes/divesoft_freedom_parser.c deleted file mode 100644 index 227f42e..0000000 --- a/ios/Classes/divesoft_freedom_parser.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/divesoft_freedom_parser.c" \ No newline at end of file diff --git a/ios/Classes/divesystem_idive.c b/ios/Classes/divesystem_idive.c deleted file mode 100644 index 4abf220..0000000 --- a/ios/Classes/divesystem_idive.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/divesystem_idive.c" \ No newline at end of file diff --git a/ios/Classes/divesystem_idive_parser.c b/ios/Classes/divesystem_idive_parser.c deleted file mode 100644 index 40d6df6..0000000 --- a/ios/Classes/divesystem_idive_parser.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/divesystem_idive_parser.c" \ No newline at end of file diff --git a/ios/Classes/hdlc.c b/ios/Classes/hdlc.c deleted file mode 100644 index c06045b..0000000 --- a/ios/Classes/hdlc.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/hdlc.c" \ No newline at end of file diff --git a/ios/Classes/hw_frog.c b/ios/Classes/hw_frog.c deleted file mode 100644 index f2333f7..0000000 --- a/ios/Classes/hw_frog.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/hw_frog.c" \ No newline at end of file diff --git a/ios/Classes/hw_ostc.c b/ios/Classes/hw_ostc.c deleted file mode 100644 index 98d5107..0000000 --- a/ios/Classes/hw_ostc.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/hw_ostc.c" \ No newline at end of file diff --git a/ios/Classes/hw_ostc3.c b/ios/Classes/hw_ostc3.c deleted file mode 100644 index df360a0..0000000 --- a/ios/Classes/hw_ostc3.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/hw_ostc3.c" \ No newline at end of file diff --git a/ios/Classes/hw_ostc_parser.c b/ios/Classes/hw_ostc_parser.c deleted file mode 100644 index 60bd08b..0000000 --- a/ios/Classes/hw_ostc_parser.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/hw_ostc_parser.c" \ No newline at end of file diff --git a/ios/Classes/ihex.c b/ios/Classes/ihex.c deleted file mode 100644 index 65b617a..0000000 --- a/ios/Classes/ihex.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/ihex.c" \ No newline at end of file diff --git a/ios/Classes/liquivision_lynx.c b/ios/Classes/liquivision_lynx.c deleted file mode 100644 index 3f7245b..0000000 --- a/ios/Classes/liquivision_lynx.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/liquivision_lynx.c" \ No newline at end of file diff --git a/ios/Classes/liquivision_lynx_parser.c b/ios/Classes/liquivision_lynx_parser.c deleted file mode 100644 index 54fee4c..0000000 --- a/ios/Classes/liquivision_lynx_parser.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/liquivision_lynx_parser.c" \ No newline at end of file diff --git a/ios/Classes/mares_common.c b/ios/Classes/mares_common.c deleted file mode 100644 index c394c9e..0000000 --- a/ios/Classes/mares_common.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/mares_common.c" \ No newline at end of file diff --git a/ios/Classes/mares_darwin.c b/ios/Classes/mares_darwin.c deleted file mode 100644 index 1368967..0000000 --- a/ios/Classes/mares_darwin.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/mares_darwin.c" \ No newline at end of file diff --git a/ios/Classes/mares_darwin_parser.c b/ios/Classes/mares_darwin_parser.c deleted file mode 100644 index d287a04..0000000 --- a/ios/Classes/mares_darwin_parser.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/mares_darwin_parser.c" \ No newline at end of file diff --git a/ios/Classes/mares_iconhd.c b/ios/Classes/mares_iconhd.c deleted file mode 100644 index e80b4f9..0000000 --- a/ios/Classes/mares_iconhd.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/mares_iconhd.c" \ No newline at end of file diff --git a/ios/Classes/mares_iconhd_parser.c b/ios/Classes/mares_iconhd_parser.c deleted file mode 100644 index 07b213b..0000000 --- a/ios/Classes/mares_iconhd_parser.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/mares_iconhd_parser.c" \ No newline at end of file diff --git a/ios/Classes/mares_nemo.c b/ios/Classes/mares_nemo.c deleted file mode 100644 index baab10f..0000000 --- a/ios/Classes/mares_nemo.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/mares_nemo.c" \ No newline at end of file diff --git a/ios/Classes/mares_nemo_parser.c b/ios/Classes/mares_nemo_parser.c deleted file mode 100644 index dcfbabb..0000000 --- a/ios/Classes/mares_nemo_parser.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/mares_nemo_parser.c" \ No newline at end of file diff --git a/ios/Classes/mares_puck.c b/ios/Classes/mares_puck.c deleted file mode 100644 index b37e5b5..0000000 --- a/ios/Classes/mares_puck.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/mares_puck.c" \ No newline at end of file diff --git a/ios/Classes/mclean_extreme.c b/ios/Classes/mclean_extreme.c deleted file mode 100644 index a02269f..0000000 --- a/ios/Classes/mclean_extreme.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/mclean_extreme.c" \ No newline at end of file diff --git a/ios/Classes/mclean_extreme_parser.c b/ios/Classes/mclean_extreme_parser.c deleted file mode 100644 index 5f4dca5..0000000 --- a/ios/Classes/mclean_extreme_parser.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/mclean_extreme_parser.c" \ No newline at end of file diff --git a/ios/Classes/oceanic_atom2.c b/ios/Classes/oceanic_atom2.c deleted file mode 100644 index bac46ca..0000000 --- a/ios/Classes/oceanic_atom2.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/oceanic_atom2.c" \ No newline at end of file diff --git a/ios/Classes/oceanic_atom2_parser.c b/ios/Classes/oceanic_atom2_parser.c deleted file mode 100644 index 168fb51..0000000 --- a/ios/Classes/oceanic_atom2_parser.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/oceanic_atom2_parser.c" \ No newline at end of file diff --git a/ios/Classes/oceanic_common.c b/ios/Classes/oceanic_common.c deleted file mode 100644 index f21c599..0000000 --- a/ios/Classes/oceanic_common.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/oceanic_common.c" \ No newline at end of file diff --git a/ios/Classes/oceanic_veo250.c b/ios/Classes/oceanic_veo250.c deleted file mode 100644 index 2120a07..0000000 --- a/ios/Classes/oceanic_veo250.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/oceanic_veo250.c" \ No newline at end of file diff --git a/ios/Classes/oceanic_veo250_parser.c b/ios/Classes/oceanic_veo250_parser.c deleted file mode 100644 index cd5a8d6..0000000 --- a/ios/Classes/oceanic_veo250_parser.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/oceanic_veo250_parser.c" \ No newline at end of file diff --git a/ios/Classes/oceans_s1.c b/ios/Classes/oceans_s1.c deleted file mode 100644 index 6f187ce..0000000 --- a/ios/Classes/oceans_s1.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/oceans_s1.c" \ No newline at end of file diff --git a/ios/Classes/oceans_s1_common.c b/ios/Classes/oceans_s1_common.c deleted file mode 100644 index 608b839..0000000 --- a/ios/Classes/oceans_s1_common.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/oceans_s1_common.c" \ No newline at end of file diff --git a/ios/Classes/oceans_s1_parser.c b/ios/Classes/oceans_s1_parser.c deleted file mode 100644 index 121ee18..0000000 --- a/ios/Classes/oceans_s1_parser.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/oceans_s1_parser.c" \ No newline at end of file diff --git a/ios/Classes/ocenic_vtpro.c b/ios/Classes/ocenic_vtpro.c deleted file mode 100644 index 4afeaa9..0000000 --- a/ios/Classes/ocenic_vtpro.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/oceanic_vtpro.c" \ No newline at end of file diff --git a/ios/Classes/ocenic_vtpro_parser.c b/ios/Classes/ocenic_vtpro_parser.c deleted file mode 100644 index a9bf6e9..0000000 --- a/ios/Classes/ocenic_vtpro_parser.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/oceanic_vtpro_parser.c" \ No newline at end of file diff --git a/ios/Classes/reefnet_sensus.c b/ios/Classes/reefnet_sensus.c deleted file mode 100644 index b46912d..0000000 --- a/ios/Classes/reefnet_sensus.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/reefnet_sensus.c" \ No newline at end of file diff --git a/ios/Classes/reefnet_sensus_parser.c b/ios/Classes/reefnet_sensus_parser.c deleted file mode 100644 index 2f1e642..0000000 --- a/ios/Classes/reefnet_sensus_parser.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/reefnet_sensus_parser.c" \ No newline at end of file diff --git a/ios/Classes/reefnet_sensuspro.c b/ios/Classes/reefnet_sensuspro.c deleted file mode 100644 index a5348e6..0000000 --- a/ios/Classes/reefnet_sensuspro.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/reefnet_sensuspro.c" \ No newline at end of file diff --git a/ios/Classes/reefnet_sensuspro_parser.c b/ios/Classes/reefnet_sensuspro_parser.c deleted file mode 100644 index 261f20b..0000000 --- a/ios/Classes/reefnet_sensuspro_parser.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/reefnet_sensuspro_parser.c" \ No newline at end of file diff --git a/ios/Classes/reefnet_sensusultra.c b/ios/Classes/reefnet_sensusultra.c deleted file mode 100644 index 33059e9..0000000 --- a/ios/Classes/reefnet_sensusultra.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/reefnet_sensusultra.c" \ No newline at end of file diff --git a/ios/Classes/reefnet_sensusultra_parser.c b/ios/Classes/reefnet_sensusultra_parser.c deleted file mode 100644 index 1684d35..0000000 --- a/ios/Classes/reefnet_sensusultra_parser.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/reefnet_sensusultra_parser.c" \ No newline at end of file diff --git a/ios/Classes/seac_screen.c b/ios/Classes/seac_screen.c deleted file mode 100644 index 19f4752..0000000 --- a/ios/Classes/seac_screen.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/seac_screen.c" \ No newline at end of file diff --git a/ios/Classes/seac_screen_parser.c b/ios/Classes/seac_screen_parser.c deleted file mode 100644 index 2611342..0000000 --- a/ios/Classes/seac_screen_parser.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/seac_screen_parser.c" \ No newline at end of file diff --git a/ios/Classes/serial_posix.c b/ios/Classes/serial_posix.c deleted file mode 100644 index d0a4bff..0000000 --- a/ios/Classes/serial_posix.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/serial_posix.c" \ No newline at end of file diff --git a/ios/Classes/shearwater_common.c b/ios/Classes/shearwater_common.c deleted file mode 100644 index 8388a65..0000000 --- a/ios/Classes/shearwater_common.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/shearwater_common.c" \ No newline at end of file diff --git a/ios/Classes/shearwater_petrel.c b/ios/Classes/shearwater_petrel.c deleted file mode 100644 index d74919b..0000000 --- a/ios/Classes/shearwater_petrel.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/shearwater_petrel.c" \ No newline at end of file diff --git a/ios/Classes/shearwater_predator.c b/ios/Classes/shearwater_predator.c deleted file mode 100644 index 244093a..0000000 --- a/ios/Classes/shearwater_predator.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/shearwater_predator.c" \ No newline at end of file diff --git a/ios/Classes/shearwater_predator_parser.c b/ios/Classes/shearwater_predator_parser.c deleted file mode 100644 index ea1927b..0000000 --- a/ios/Classes/shearwater_predator_parser.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/shearwater_predator_parser.c" \ No newline at end of file diff --git a/ios/Classes/sporasub_sp2.c b/ios/Classes/sporasub_sp2.c deleted file mode 100644 index 0ce5dc0..0000000 --- a/ios/Classes/sporasub_sp2.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/sporasub_sp2.c" \ No newline at end of file diff --git a/ios/Classes/sporasub_sp2_parser.c b/ios/Classes/sporasub_sp2_parser.c deleted file mode 100644 index 7d29eac..0000000 --- a/ios/Classes/sporasub_sp2_parser.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/sporasub_sp2_parser.c" \ No newline at end of file diff --git a/ios/Classes/suunto_common.c b/ios/Classes/suunto_common.c deleted file mode 100644 index 2b39f55..0000000 --- a/ios/Classes/suunto_common.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/suunto_common.c" \ No newline at end of file diff --git a/ios/Classes/suunto_common2.c b/ios/Classes/suunto_common2.c deleted file mode 100644 index 9c7331f..0000000 --- a/ios/Classes/suunto_common2.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/suunto_common2.c" \ No newline at end of file diff --git a/ios/Classes/suunto_d9.c b/ios/Classes/suunto_d9.c deleted file mode 100644 index 5d0eb4d..0000000 --- a/ios/Classes/suunto_d9.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/suunto_d9.c" \ No newline at end of file diff --git a/ios/Classes/suunto_d9_parser.c b/ios/Classes/suunto_d9_parser.c deleted file mode 100644 index 11b6f00..0000000 --- a/ios/Classes/suunto_d9_parser.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/suunto_d9_parser.c" \ No newline at end of file diff --git a/ios/Classes/suunto_eon.c b/ios/Classes/suunto_eon.c deleted file mode 100644 index 8e0e22b..0000000 --- a/ios/Classes/suunto_eon.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/suunto_eon.c" \ No newline at end of file diff --git a/ios/Classes/suunto_eon_parser.c b/ios/Classes/suunto_eon_parser.c deleted file mode 100644 index 2ec736a..0000000 --- a/ios/Classes/suunto_eon_parser.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/suunto_eon_parser.c" \ No newline at end of file diff --git a/ios/Classes/suunto_eonsteel.c b/ios/Classes/suunto_eonsteel.c deleted file mode 100644 index 9782220..0000000 --- a/ios/Classes/suunto_eonsteel.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/suunto_eonsteel.c" \ No newline at end of file diff --git a/ios/Classes/suunto_eonsteel_parser.c b/ios/Classes/suunto_eonsteel_parser.c deleted file mode 100644 index dd64af3..0000000 --- a/ios/Classes/suunto_eonsteel_parser.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/suunto_eonsteel_parser.c" \ No newline at end of file diff --git a/ios/Classes/suunto_solution.c b/ios/Classes/suunto_solution.c deleted file mode 100644 index e8b08ab..0000000 --- a/ios/Classes/suunto_solution.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/suunto_solution.c" \ No newline at end of file diff --git a/ios/Classes/suunto_solution_parser.c b/ios/Classes/suunto_solution_parser.c deleted file mode 100644 index e11cf32..0000000 --- a/ios/Classes/suunto_solution_parser.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/suunto_solution_parser.c" \ No newline at end of file diff --git a/ios/Classes/suunto_vyper.c b/ios/Classes/suunto_vyper.c deleted file mode 100644 index 71eb701..0000000 --- a/ios/Classes/suunto_vyper.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/suunto_vyper.c" \ No newline at end of file diff --git a/ios/Classes/suunto_vyper2.c b/ios/Classes/suunto_vyper2.c deleted file mode 100644 index 0f9c9cf..0000000 --- a/ios/Classes/suunto_vyper2.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/suunto_vyper2.c" \ No newline at end of file diff --git a/ios/Classes/suunto_vyper_parser.c b/ios/Classes/suunto_vyper_parser.c deleted file mode 100644 index d12fe81..0000000 --- a/ios/Classes/suunto_vyper_parser.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/suunto_vyper_parser.c" \ No newline at end of file diff --git a/ios/Classes/tecdiving_divecomputereu.c b/ios/Classes/tecdiving_divecomputereu.c deleted file mode 100644 index 890deda..0000000 --- a/ios/Classes/tecdiving_divecomputereu.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/tecdiving_divecomputereu.c" \ No newline at end of file diff --git a/ios/Classes/tecdiving_divecomputereu_parser.c b/ios/Classes/tecdiving_divecomputereu_parser.c deleted file mode 100644 index a7bbb1f..0000000 --- a/ios/Classes/tecdiving_divecomputereu_parser.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/tecdiving_divecomputereu_parser.c" \ No newline at end of file diff --git a/ios/Classes/uwatec_aladin.c b/ios/Classes/uwatec_aladin.c deleted file mode 100644 index e24ecc2..0000000 --- a/ios/Classes/uwatec_aladin.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/uwatec_aladin.c" \ No newline at end of file diff --git a/ios/Classes/uwatec_memomouse.c b/ios/Classes/uwatec_memomouse.c deleted file mode 100644 index acca0b1..0000000 --- a/ios/Classes/uwatec_memomouse.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/uwatec_memomouse.c" \ No newline at end of file diff --git a/ios/Classes/uwatec_memomouse_parser.c b/ios/Classes/uwatec_memomouse_parser.c deleted file mode 100644 index 9771ce9..0000000 --- a/ios/Classes/uwatec_memomouse_parser.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/uwatec_memomouse_parser.c" \ No newline at end of file diff --git a/ios/Classes/uwatec_smart.c b/ios/Classes/uwatec_smart.c deleted file mode 100644 index bc90947..0000000 --- a/ios/Classes/uwatec_smart.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/uwatec_smart.c" \ No newline at end of file diff --git a/ios/Classes/uwatec_smart_parser.c b/ios/Classes/uwatec_smart_parser.c deleted file mode 100644 index 64e4eb4..0000000 --- a/ios/Classes/uwatec_smart_parser.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/uwatec_smart_parser.c" \ No newline at end of file diff --git a/ios/Classes/zeagle_n2ition3.c b/ios/Classes/zeagle_n2ition3.c deleted file mode 100644 index 9d51888..0000000 --- a/ios/Classes/zeagle_n2ition3.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../src/libdivecomputer/src/zeagle_n2ition3.c" \ No newline at end of file diff --git a/ios/dive_computer.podspec b/ios/dive_computer.podspec index e93c199..989935f 100644 --- a/ios/dive_computer.podspec +++ b/ios/dive_computer.podspec @@ -26,8 +26,7 @@ DiveComputer FFI plugin for Flutter. s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'i386', - 'HEADER_SEARCH_PATHS' => '"${PODS_TARGET_SRCROOT}/../src/libdivecomputer/include"', } - + s.swift_version = '5.0' end diff --git a/lib/framework/dive_computer_ffi.dart b/lib/framework/dive_computer_ffi.dart index 990ab29..1c12124 100644 --- a/lib/framework/dive_computer_ffi.dart +++ b/lib/framework/dive_computer_ffi.dart @@ -1,16 +1,18 @@ -import 'dart:async'; import 'dart:ffi' as ffi; import 'dart:io'; import 'dart:developer' as developer; -import 'package:dive_computer/framework/utils/transports_bitmask.dart'; -import 'package:dive_computer/types/computer.dart'; -import 'package:dive_computer/types/dive.dart'; import 'package:ffi/ffi.dart'; import 'package:flutter/foundation.dart'; import 'package:logging/logging.dart' as logging; -import 'dive_computer_ffi_bindings_generated.dart'; +import './utils/transports_bitmask.dart'; +import './utils/utils.dart'; +import '../types/computer.dart'; +import '../types/dive.dart'; + +import './dive_computer_ffi_bindings_generated.dart'; +import './interfaces/dive_computer_interfaces.dart'; final log = logging.Logger('DiveComputerFfi'); @@ -63,25 +65,28 @@ class DiveComputerFfi { static Function(List)? divesCallback; + static final _interfaces = + Interfaces(bindings: _bindings, context: context, log: log); + static void enableDebugLogging([logging.Level level = logging.Level.INFO]) { log.level = level; } static void openConnection() { - _handleResult( + handleResult( _bindings.dc_context_new(context), 'context creation', ); - _handleResult( + handleResult( _bindings.dc_context_set_loglevel( context.value, - dc_loglevel_t.DC_LOGLEVEL_WARNING, + dc_loglevel_t.DC_LOGLEVEL_ALL, ), 'log level setting', ); - _handleResult( + handleResult( _bindings.dc_context_set_logfunc( context.value, ffi.Pointer.fromFunction(_log), @@ -92,7 +97,7 @@ class DiveComputerFfi { } static void closeConnection() { - _handleResult( + handleResult( _bindings.dc_context_free(context.value), 'context freeing', ); @@ -107,7 +112,7 @@ class DiveComputerFfi { final iterator = calloc>(); - _handleResult( + handleResult( _bindings.dc_descriptor_iterator(iterator), 'iterator creation', ); @@ -133,9 +138,9 @@ class DiveComputerFfi { computers.add(computer); _computerDescriptorCache.addEntries([MapEntry(computer, desc.value)]); } - _handleResult(result, 'iterator next'); + handleResult(result, 'iterator next'); - _handleResult( + handleResult( _bindings.dc_iterator_free(iterator.value), 'iterator freeing', ); @@ -150,18 +155,12 @@ class DiveComputerFfi { ]) { final computerDescriptor = _computerDescriptorCache[computer]!; - final ffi.Pointer iostream; - switch (transport) { - case ComputerTransport.serial: - iostream = _connectSerial(computerDescriptor); - break; - default: - throw UnimplementedError(); - } + final ffi.Pointer iostream = + _interfaces.connect(transport, computerDescriptor); final device = calloc>(); try { - _handleResult( + handleResult( _bindings.dc_device_open( device, context.value, @@ -177,7 +176,7 @@ class DiveComputerFfi { lastFingerprint?.toNativeUtf8() ?? ffi.nullptr; _divesCache.clear(); - _handleResult( + handleResult( _bindings.dc_device_foreach( device.value, ffi.Pointer.fromFunction(_dive_callback, 0), @@ -191,68 +190,18 @@ class DiveComputerFfi { } divesCallback?.call(_divesCache); - _handleResult( + handleResult( _bindings.dc_device_close(device.value), 'device close', ); } finally { - _handleResult( + handleResult( _bindings.dc_iostream_close(iostream), 'iostream close', ); } } - static ffi.Pointer _connectSerial( - ffi.Pointer computer) { - final iterator = calloc>(); - - _handleResult( - _bindings.dc_serial_iterator_new(iterator, context.value, computer), - 'serial connection', - ); - - final names = >[]; - - int result; - final desc = calloc>(); - while ((result = _bindings.dc_iterator_next(iterator.value, desc.cast())) == - dc_status_t.DC_STATUS_SUCCESS) { - final ffi.Pointer name = - _bindings.dc_serial_device_get_name(desc.value).cast(); - names.add(name); - - _bindings.dc_serial_device_free(desc.value); - } - _handleResult(result, 'iterator next'); - log.info( - 'Serial devices: ${names.map((e) => e.toDartString()).join(', ')}', - ); - - _handleResult( - _bindings.dc_iterator_free(iterator.value), - 'iterator freeing', - ); - - if (names.isEmpty) { - _handleResult(dc_status_t.DC_STATUS_NODEVICE); - } - - // ### Connecting to the device ### // - final iostream = calloc>(); - - _handleResult( - _bindings.dc_serial_open( - iostream, - context.value, - names[0].cast(), - ), - 'serial open', - ); - - return iostream.value; - } - // ignore: non_constant_identifier_names static int _dive_callback( ffi.Pointer data, @@ -292,7 +241,7 @@ class DiveComputerFfi { final parser = malloc>(); - _handleResult(_bindings.dc_parser_new( + handleResult(_bindings.dc_parser_new( parser, device, data, @@ -346,7 +295,7 @@ class DiveComputerFfi { } final dateTimePointer = malloc(); - _handleResult( + handleResult( _bindings.dc_parser_get_datetime(parser.value, dateTimePointer), ); final dateTime = DateTime( @@ -360,7 +309,7 @@ class DiveComputerFfi { try { _samplesCache.clear(); - _handleResult( + handleResult( _bindings.dc_parser_samples_foreach( parser.value, ffi.Pointer.fromFunction(_sample_callback), @@ -390,7 +339,7 @@ class DiveComputerFfi { log.info(dive); _divesCache.add(dive); - _handleResult(_bindings.dc_parser_destroy(parser.value)); + handleResult(_bindings.dc_parser_destroy(parser.value)); } static T? _parseField( @@ -421,7 +370,7 @@ class DiveComputerFfi { } try { - _handleResult(_bindings.dc_parser_get_field( + handleResult(_bindings.dc_parser_get_field( parser, fieldType, flags, @@ -577,40 +526,6 @@ class DiveComputerFfi { log.fine('[native] ${message.cast().toDartString()}'); } - static void _handleResult(int result, [String operation = '']) { - switch (result) { - case dc_status_t.DC_STATUS_SUCCESS: - if (operation.isNotEmpty) { - log.finer('$operation successful'); - } - case dc_status_t.DC_STATUS_DONE: - if (operation.isNotEmpty) { - log.finer('$operation done'); - } - break; - case dc_status_t.DC_STATUS_UNSUPPORTED: - throw UnsupportedError('Unsupported'); - case dc_status_t.DC_STATUS_INVALIDARGS: - throw ArgumentError('Invalid arguments'); - case dc_status_t.DC_STATUS_TIMEOUT: - throw TimeoutException("Timeout"); - case dc_status_t.DC_STATUS_NOMEMORY: - throw const OutOfMemoryError(); - case dc_status_t.DC_STATUS_NODEVICE: - throw Exception("No device"); - case dc_status_t.DC_STATUS_NOACCESS: - throw Exception("No access"); - case dc_status_t.DC_STATUS_IO: - throw Exception("IO"); - case dc_status_t.DC_STATUS_PROTOCOL: - throw Exception("Protocol"); - case dc_status_t.DC_STATUS_DATAFORMAT: - throw Exception("Data format"); - case dc_status_t.DC_STATUS_CANCELLED: - throw Exception("Cancelled"); - } - } - static String _buildFingerprintHash( ffi.Pointer fingerprint, int fsize) { final ascii = '0123456789ABCDEF'.codeUnits; diff --git a/lib/framework/dive_computer_ffi_bindings_generated.dart b/lib/framework/dive_computer_ffi_bindings_generated.dart index 517a95f..e231185 100644 --- a/lib/framework/dive_computer_ffi_bindings_generated.dart +++ b/lib/framework/dive_computer_ffi_bindings_generated.dart @@ -1508,6 +1508,229 @@ class DiveComputerFfiBindings { 'dc_parser_destroy'); late final _dc_parser_destroy = _dc_parser_destroyPtr .asFunction)>(); + + /// Get the vendor id (VID) of the USB device. + /// + /// @param[in] device A valid USB device. + int dc_usb_device_get_vid( + ffi.Pointer device, + ) { + return _dc_usb_device_get_vid( + device, + ); + } + + late final _dc_usb_device_get_vidPtr = _lookup< + ffi.NativeFunction< + ffi.UnsignedInt Function( + ffi.Pointer)>>('dc_usb_device_get_vid'); + late final _dc_usb_device_get_vid = _dc_usb_device_get_vidPtr + .asFunction)>(); + + /// Get the product id (PID) of the USB device. + /// + /// @param[in] device A valid USB device. + int dc_usb_device_get_pid( + ffi.Pointer device, + ) { + return _dc_usb_device_get_pid( + device, + ); + } + + late final _dc_usb_device_get_pidPtr = _lookup< + ffi.NativeFunction< + ffi.UnsignedInt Function( + ffi.Pointer)>>('dc_usb_device_get_pid'); + late final _dc_usb_device_get_pid = _dc_usb_device_get_pidPtr + .asFunction)>(); + + /// Destroy the USB device and free all resources. + /// + /// @param[in] device A valid USB device. + void dc_usb_device_free( + ffi.Pointer device, + ) { + return _dc_usb_device_free( + device, + ); + } + + late final _dc_usb_device_freePtr = _lookup< + ffi.NativeFunction)>>( + 'dc_usb_device_free'); + late final _dc_usb_device_free = _dc_usb_device_freePtr + .asFunction)>(); + + /// Create an iterator to enumerate the USB devices. + /// + /// @param[out] iterator A location to store the iterator. + /// @param[in] context A valid context object. + /// @param[in] descriptor A valid device descriptor or NULL. + /// @returns #DC_STATUS_SUCCESS on success, or another #dc_status_t code + /// on failure. + int dc_usb_iterator_new( + ffi.Pointer> iterator, + ffi.Pointer context, + ffi.Pointer descriptor, + ) { + return _dc_usb_iterator_new( + iterator, + context, + descriptor, + ); + } + + late final _dc_usb_iterator_newPtr = _lookup< + ffi.NativeFunction< + ffi.Int32 Function( + ffi.Pointer>, + ffi.Pointer, + ffi.Pointer)>>('dc_usb_iterator_new'); + late final _dc_usb_iterator_new = _dc_usb_iterator_newPtr.asFunction< + int Function(ffi.Pointer>, + ffi.Pointer, ffi.Pointer)>(); + + /// Open a USB connection. + /// + /// @param[out] iostream A location to store the USB connection. + /// @param[in] context A valid context object. + /// @param[in] device A valid USB device. + /// @returns #DC_STATUS_SUCCESS on success, or another #dc_status_t code + /// on failure. + int dc_usb_open( + ffi.Pointer> iostream, + ffi.Pointer context, + ffi.Pointer device, + ) { + return _dc_usb_open( + iostream, + context, + device, + ); + } + + late final _dc_usb_openPtr = _lookup< + ffi.NativeFunction< + ffi.Int32 Function( + ffi.Pointer>, + ffi.Pointer, + ffi.Pointer)>>('dc_usb_open'); + late final _dc_usb_open = _dc_usb_openPtr.asFunction< + int Function(ffi.Pointer>, + ffi.Pointer, ffi.Pointer)>(); + + /// Get the vendor id (VID) of the USB HID device. + /// + /// @param[in] device A valid USB HID device. + int dc_usbhid_device_get_vid( + ffi.Pointer device, + ) { + return _dc_usbhid_device_get_vid( + device, + ); + } + + late final _dc_usbhid_device_get_vidPtr = _lookup< + ffi.NativeFunction< + ffi.UnsignedInt Function( + ffi.Pointer)>>('dc_usbhid_device_get_vid'); + late final _dc_usbhid_device_get_vid = _dc_usbhid_device_get_vidPtr + .asFunction)>(); + + /// Get the product id (PID) of the USB HID device. + /// + /// @param[in] device A valid USB HID device. + int dc_usbhid_device_get_pid( + ffi.Pointer device, + ) { + return _dc_usbhid_device_get_pid( + device, + ); + } + + late final _dc_usbhid_device_get_pidPtr = _lookup< + ffi.NativeFunction< + ffi.UnsignedInt Function( + ffi.Pointer)>>('dc_usbhid_device_get_pid'); + late final _dc_usbhid_device_get_pid = _dc_usbhid_device_get_pidPtr + .asFunction)>(); + + /// Destroy the USB HID device and free all resources. + /// + /// @param[in] device A valid USB HID device. + void dc_usbhid_device_free( + ffi.Pointer device, + ) { + return _dc_usbhid_device_free( + device, + ); + } + + late final _dc_usbhid_device_freePtr = _lookup< + ffi + .NativeFunction)>>( + 'dc_usbhid_device_free'); + late final _dc_usbhid_device_free = _dc_usbhid_device_freePtr + .asFunction)>(); + + /// Create an iterator to enumerate the USB HID devices. + /// + /// @param[out] iterator A location to store the iterator. + /// @param[in] context A valid context object. + /// @param[in] descriptor A valid device descriptor or NULL. + /// @returns #DC_STATUS_SUCCESS on success, or another #dc_status_t code + /// on failure. + int dc_usbhid_iterator_new( + ffi.Pointer> iterator, + ffi.Pointer context, + ffi.Pointer descriptor, + ) { + return _dc_usbhid_iterator_new( + iterator, + context, + descriptor, + ); + } + + late final _dc_usbhid_iterator_newPtr = _lookup< + ffi.NativeFunction< + ffi.Int32 Function( + ffi.Pointer>, + ffi.Pointer, + ffi.Pointer)>>('dc_usbhid_iterator_new'); + late final _dc_usbhid_iterator_new = _dc_usbhid_iterator_newPtr.asFunction< + int Function(ffi.Pointer>, + ffi.Pointer, ffi.Pointer)>(); + + /// Open a USB HID connection. + /// + /// @param[out] iostream A location to store the USB HID connection. + /// @param[in] context A valid context object. + /// @param[in] device A valid USB HID device. + /// @returns #DC_STATUS_SUCCESS on success, or another #dc_status_t code + /// on failure. + int dc_usbhid_open( + ffi.Pointer> iostream, + ffi.Pointer context, + ffi.Pointer device, + ) { + return _dc_usbhid_open( + iostream, + context, + device, + ); + } + + late final _dc_usbhid_openPtr = _lookup< + ffi.NativeFunction< + ffi.Int32 Function( + ffi.Pointer>, + ffi.Pointer, + ffi.Pointer)>>('dc_usbhid_open'); + late final _dc_usbhid_open = _dc_usbhid_openPtr.asFunction< + int Function(ffi.Pointer>, + ffi.Pointer, ffi.Pointer)>(); } abstract class dc_status_t { @@ -1644,23 +1867,16 @@ abstract class dc_loglevel_t { static const int DC_LOGLEVEL_ALL = 5; } -typedef dc_logfunc_t = ffi.Pointer>; -typedef dc_logfunc_tFunction = ffi.Void Function( - ffi.Pointer context, - ffi.Int32 loglevel, - ffi.Pointer file, - ffi.UnsignedInt line, - ffi.Pointer function, - ffi.Pointer message, - ffi.Pointer userdata); -typedef Dartdc_logfunc_tFunction = void Function( - ffi.Pointer context, - int loglevel, - ffi.Pointer file, - int line, - ffi.Pointer function, - ffi.Pointer message, - ffi.Pointer userdata); +typedef dc_logfunc_t = ffi.Pointer< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer context, + ffi.Int32 loglevel, + ffi.Pointer file, + ffi.UnsignedInt line, + ffi.Pointer function, + ffi.Pointer message, + ffi.Pointer userdata)>>; final class dc_iterator_t extends ffi.Opaque {} @@ -1860,7 +2076,6 @@ final class dc_datetime_t extends ffi.Struct { } typedef dc_ticks_t = ffi.LongLong; -typedef Dartdc_ticks_t = int; abstract class dc_event_type_t { static const int DC_EVENT_WAITING = 1; @@ -1906,38 +2121,20 @@ final class dc_event_vendor_t extends ffi.Struct { external int size; } -typedef dc_cancel_callback_t - = ffi.Pointer>; -typedef dc_cancel_callback_tFunction = ffi.Int Function( - ffi.Pointer userdata); -typedef Dartdc_cancel_callback_tFunction = int Function( - ffi.Pointer userdata); -typedef dc_event_callback_t - = ffi.Pointer>; -typedef dc_event_callback_tFunction = ffi.Void Function( - ffi.Pointer device, - ffi.Int32 event, - ffi.Pointer data, - ffi.Pointer userdata); -typedef Dartdc_event_callback_tFunction = void Function( - ffi.Pointer device, - int event, - ffi.Pointer data, - ffi.Pointer userdata); -typedef dc_dive_callback_t - = ffi.Pointer>; -typedef dc_dive_callback_tFunction = ffi.Int Function( - ffi.Pointer data, - ffi.UnsignedInt size, - ffi.Pointer fingerprint, - ffi.UnsignedInt fsize, - ffi.Pointer userdata); -typedef Dartdc_dive_callback_tFunction = int Function( - ffi.Pointer data, - int size, - ffi.Pointer fingerprint, - int fsize, - ffi.Pointer userdata); +typedef dc_cancel_callback_t = ffi.Pointer< + ffi.NativeFunction userdata)>>; +typedef dc_event_callback_t = ffi.Pointer< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer device, ffi.Int32 event, + ffi.Pointer data, ffi.Pointer userdata)>>; +typedef dc_dive_callback_t = ffi.Pointer< + ffi.NativeFunction< + ffi.Int Function( + ffi.Pointer data, + ffi.UnsignedInt size, + ffi.Pointer fingerprint, + ffi.UnsignedInt fsize, + ffi.Pointer userdata)>>; final class dc_serial_device_t extends ffi.Opaque {} @@ -2276,12 +2473,72 @@ final class UnnamedStruct6 extends ffi.Struct { final class dc_parser_t extends ffi.Opaque {} -typedef dc_sample_callback_t - = ffi.Pointer>; -typedef dc_sample_callback_tFunction = ffi.Void Function(ffi.Int32 type, - ffi.Pointer value, ffi.Pointer userdata); -typedef Dartdc_sample_callback_tFunction = void Function(int type, - ffi.Pointer value, ffi.Pointer userdata); +typedef dc_sample_callback_t = ffi.Pointer< + ffi.NativeFunction< + ffi.Void Function(ffi.Int32 type, ffi.Pointer value, + ffi.Pointer userdata)>>; + +/// USB control transfer. +final class dc_usb_control_t extends ffi.Struct { + @ffi.UnsignedChar() + external int bmRequestType; + + @ffi.UnsignedChar() + external int bRequest; + + @ffi.UnsignedShort() + external int wValue; + + @ffi.UnsignedShort() + external int wIndex; + + @ffi.UnsignedShort() + external int wLength; +} + +/// Endpoint direction bits of the USB control transfer. +abstract class dc_usb_endpoint_t { + static const int DC_USB_ENDPOINT_OUT = 0; + static const int DC_USB_ENDPOINT_IN = 128; +} + +/// Request type bits of the USB control transfer. +abstract class dc_usb_request_t { + static const int DC_USB_REQUEST_STANDARD = 0; + static const int DC_USB_REQUEST_CLASS = 32; + static const int DC_USB_REQUEST_VENDOR = 64; + static const int DC_USB_REQUEST_RESERVED = 96; +} + +/// Recipient bits of the USB control transfer. +abstract class dc_usb_recipient_t { + static const int DC_USB_RECIPIENT_DEVICE = 0; + static const int DC_USB_RECIPIENT_INTERFACE = 1; + static const int DC_USB_RECIPIENT_ENDPOINT = 2; + static const int DC_USB_RECIPIENT_OTHER = 3; +} + +/// USB device descriptor. +final class dc_usb_desc_t extends ffi.Struct { + @ffi.UnsignedShort() + external int vid; + + @ffi.UnsignedShort() + external int pid; +} + +final class dc_usb_device_t extends ffi.Opaque {} + +/// USB HID device descriptor. +final class dc_usbhid_desc_t extends ffi.Struct { + @ffi.UnsignedShort() + external int vid; + + @ffi.UnsignedShort() + external int pid; +} + +final class dc_usbhid_device_t extends ffi.Opaque {} const int __DARWIN_ONLY_64_BIT_INO_T = 1; @@ -2602,3 +2859,7 @@ const int DC_DIVEMODE_CC = 3; const int DC_SENSOR_NONE = 4294967295; const int DC_GASMIX_UNKNOWN = 4294967295; + +const int DC_IOCTL_USB_CONTROL_READ = 1073771776; + +const int DC_IOCTL_USB_CONTROL_WRITE = 2147513600; diff --git a/lib/framework/interfaces/dive_computer_interfaces.dart b/lib/framework/interfaces/dive_computer_interfaces.dart new file mode 100644 index 0000000..467f8ea --- /dev/null +++ b/lib/framework/interfaces/dive_computer_interfaces.dart @@ -0,0 +1,183 @@ +import 'dart:ffi' as ffi; +import 'package:ffi/ffi.dart'; +import 'package:logging/logging.dart' as logging; + +import '../utils/utils.dart'; +import '../dive_computer_ffi_bindings_generated.dart'; +import '../../types/computer.dart'; + +class Interfaces { + final DiveComputerFfiBindings bindings; + final ffi.Pointer> context; + final logging.Logger log; + + Interfaces({ + required this.bindings, + required this.context, + required this.log, + }); + + ffi.Pointer connect( + ComputerTransport transport, ffi.Pointer computer) { + switch (transport) { + case ComputerTransport.serial: + return _connectSerial(computer); + case ComputerTransport.usb: + return _connectUsb(computer); + case ComputerTransport.usbhid: + return _connectUsbHid(computer); + default: + throw UnimplementedError(); + } + } + + ffi.Pointer _connectSerial( + ffi.Pointer computer) { + final iterator = calloc>(); + + handleResult( + bindings.dc_serial_iterator_new(iterator, context.value, computer), + 'serial connection', + ); + + final names = >[]; + + int result; + final desc = calloc>(); + while ((result = bindings.dc_iterator_next(iterator.value, desc.cast())) == + dc_status_t.DC_STATUS_SUCCESS) { + final ffi.Pointer name = + bindings.dc_serial_device_get_name(desc.value).cast(); + names.add(name); + + bindings.dc_serial_device_free(desc.value); + } + handleResult(result, 'iterator next'); + log.info( + 'Serial devices: ${names.map((e) => e.toDartString()).join(', ')}', + ); + + handleResult( + bindings.dc_iterator_free(iterator.value), + 'iterator freeing', + ); + + if (names.isEmpty) { + handleResult(dc_status_t.DC_STATUS_NODEVICE); + } + + // ### Connecting to the device ### // + final iostream = calloc>(); + + handleResult( + bindings.dc_serial_open( + iostream, + context.value, + names[0].cast(), + ), + 'serial open', + ); + + return iostream.value; + } + + ffi.Pointer _connectUsb( + ffi.Pointer computer) { + final iterator = calloc>(); + + handleResult( + bindings.dc_usb_iterator_new(iterator, context.value, computer), + 'usb connection', + ); + + final desc = calloc>(); + while (bindings.dc_iterator_next(iterator.value, desc.cast()) == + dc_status_t.DC_STATUS_SUCCESS) { + break; + } + + handleResult( + bindings.dc_iterator_free(iterator.value), + 'iterator freeing', + ); + + if (desc.value == ffi.nullptr) { + handleResult(dc_status_t.DC_STATUS_NODEVICE); + } + + String vidHex = bindings + .dc_usb_device_get_vid(desc.value) + .toRadixString(16) + .padLeft(4, '0'); + String pidHex = bindings + .dc_usb_device_get_pid(desc.value) + .toRadixString(16) + .padLeft(4, '0'); + + log.info('Opening USB device for $vidHex:$pidHex'); + + final iostream = calloc>(); + handleResult( + bindings.dc_usb_open( + iostream, + context.value, + desc.value, + ), + 'usbhid open', + ); + + bindings.dc_usb_device_free(desc.value); + + return iostream.value; + } + + ffi.Pointer _connectUsbHid( + ffi.Pointer computer) { + final iterator = calloc>(); + + handleResult( + bindings.dc_usbhid_iterator_new(iterator, context.value, computer), + 'usbhid connection', + ); + + final desc = calloc>(); + while (bindings.dc_iterator_next(iterator.value, desc.cast()) == + dc_status_t.DC_STATUS_SUCCESS) { + break; + } + + handleResult( + bindings.dc_iterator_free(iterator.value), + 'iterator freeing', + ); + + if (desc.value == ffi.nullptr) { + handleResult(dc_status_t.DC_STATUS_NODEVICE); + } + + String vidHex = bindings + .dc_usbhid_device_get_vid(desc.value) + .toRadixString(16) + .padLeft(4, '0'); + String pidHex = bindings + .dc_usbhid_device_get_pid(desc.value) + .toRadixString(16) + .padLeft(4, '0'); + + log.info('Opening USB HID device for $vidHex:$pidHex'); + + final iostream = calloc>(); + handleResult( + bindings.dc_usbhid_open( + iostream, + context.value, + desc.value, + ), + 'usbhid open', + ); + + bindings.dc_usbhid_device_free(desc.value); + + return iostream.value; + } +} diff --git a/lib/framework/utils/utils.dart b/lib/framework/utils/utils.dart new file mode 100644 index 0000000..4e31c32 --- /dev/null +++ b/lib/framework/utils/utils.dart @@ -0,0 +1,76 @@ +import 'dart:async'; +import 'package:logging/logging.dart' as logging; + +import '../dive_computer_ffi_bindings_generated.dart'; + +final log = logging.Logger('DiveComputerFfi'); + +void handleResult(int result, [String operation = '']) { + switch (result) { + case dc_status_t.DC_STATUS_SUCCESS: + if (operation.isNotEmpty) { + log.finer('$operation successful'); + } + break; + case dc_status_t.DC_STATUS_DONE: + if (operation.isNotEmpty) { + log.finer('$operation done'); + } + break; + case dc_status_t.DC_STATUS_UNSUPPORTED: + if (operation.isNotEmpty) { + log.finer('$operation Unsupported'); + } + throw UnsupportedError('Unsupported'); + case dc_status_t.DC_STATUS_INVALIDARGS: + if (operation.isNotEmpty) { + log.finer('$operation Invalid arguments'); + } + throw ArgumentError('Invalid arguments'); + case dc_status_t.DC_STATUS_TIMEOUT: + if (operation.isNotEmpty) { + log.finer('$operation Timeout'); + } + throw TimeoutException("Timeout"); + case dc_status_t.DC_STATUS_NOMEMORY: + if (operation.isNotEmpty) { + log.finer('$operation Out of memory'); + } + throw const OutOfMemoryError(); + case dc_status_t.DC_STATUS_NODEVICE: + if (operation.isNotEmpty) { + log.finer('$operation No device'); + } + throw Exception("No device"); + case dc_status_t.DC_STATUS_NOACCESS: + if (operation.isNotEmpty) { + log.finer('$operation No access'); + } + throw Exception("No access"); + case dc_status_t.DC_STATUS_IO: + if (operation.isNotEmpty) { + log.finer('$operation IO'); + } + throw Exception("IO"); + case dc_status_t.DC_STATUS_PROTOCOL: + if (operation.isNotEmpty) { + log.finer('$operation Protocol'); + } + throw Exception("Protocol"); + case dc_status_t.DC_STATUS_DATAFORMAT: + if (operation.isNotEmpty) { + log.finer('$operation Data format'); + } + throw Exception("Data format"); + case dc_status_t.DC_STATUS_CANCELLED: + if (operation.isNotEmpty) { + log.finer('$operation Cancelled'); + } + throw Exception("Cancelled"); + default: + if (operation.isNotEmpty) { + log.finer('$operation Unknown'); + } + throw Exception("Unknown error"); + } +} diff --git a/macos/Classes/array.c b/macos/Classes/array.c index b3428fc..11aac65 100644 --- a/macos/Classes/array.c +++ b/macos/Classes/array.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/array.c" \ No newline at end of file diff --git a/macos/Classes/atomics_cobalt.c b/macos/Classes/atomics_cobalt.c index 1410ceb..ac50521 100644 --- a/macos/Classes/atomics_cobalt.c +++ b/macos/Classes/atomics_cobalt.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/atomics_cobalt.c" \ No newline at end of file diff --git a/macos/Classes/atomics_cobalt_parser.c b/macos/Classes/atomics_cobalt_parser.c index dbaaaec..5dbd71f 100644 --- a/macos/Classes/atomics_cobalt_parser.c +++ b/macos/Classes/atomics_cobalt_parser.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/atomics_cobalt_parser.c" \ No newline at end of file diff --git a/macos/Classes/citizen_aqualand.c b/macos/Classes/citizen_aqualand.c index 8b5bf59..d762fc3 100644 --- a/macos/Classes/citizen_aqualand.c +++ b/macos/Classes/citizen_aqualand.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/citizen_aqualand.c" \ No newline at end of file diff --git a/macos/Classes/citizen_aqualand_parser.c b/macos/Classes/citizen_aqualand_parser.c index c7e33cd..4dae348 100644 --- a/macos/Classes/citizen_aqualand_parser.c +++ b/macos/Classes/citizen_aqualand_parser.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/citizen_aqualand_parser.c" \ No newline at end of file diff --git a/macos/Classes/cochran_commander.c b/macos/Classes/cochran_commander.c index 057a1ef..15e3903 100644 --- a/macos/Classes/cochran_commander.c +++ b/macos/Classes/cochran_commander.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/cochran_commander.c" \ No newline at end of file diff --git a/macos/Classes/cochran_commander_parser.c b/macos/Classes/cochran_commander_parser.c index 8e81f55..7ee3478 100644 --- a/macos/Classes/cochran_commander_parser.c +++ b/macos/Classes/cochran_commander_parser.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/cochran_commander_parser.c" \ No newline at end of file diff --git a/macos/Classes/config.h b/macos/Classes/config.h new file mode 100644 index 0000000..58a46dd --- /dev/null +++ b/macos/Classes/config.h @@ -0,0 +1,158 @@ +/* config.h. Generated from config.h.in by configure. */ +/* config.h.in. Generated from configure.ac by autoheader. */ + +#define HAVE_CONFIG_H 1 + +/* Enable logging. */ +#define ENABLE_LOGGING 1 + +/* Enable pseudo terminal support. */ +/* #undef ENABLE_PTY */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_AF_IRDA_H */ + +/* BlueZ library */ +/* #undef HAVE_BLUEZ */ + +/* Define to 1 if you have the 'clock_gettime' function. */ +#define HAVE_CLOCK_GETTIME 1 + +/* Define to 1 if you have the declaration of 'optreset', and to 0 if you + don't. */ +#define HAVE_DECL_OPTRESET 1 + +/* Define to 1 if you have the declaration of 'strerror_r', and to 0 if you + don't. */ +#define HAVE_DECL_STRERROR_R 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_DLFCN_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_GETOPT_H 1 + +/* Define to 1 if you have the 'getopt_long' function. */ +#define HAVE_GETOPT_LONG 1 + +/* Define to 1 if you have the 'gmtime_r' function. */ +#define HAVE_GMTIME_R 1 + +/* hidapi library */ +#define HAVE_HIDAPI 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_INTTYPES_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_IOKIT_SERIAL_IOSS_H 1 + +/* libusb library */ +#define HAVE_LIBUSB 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_LINUX_IRDA_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_LINUX_SERIAL_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_LINUX_TYPES_H */ + +/* Define to 1 if you have the 'localtime_r' function. */ +#define HAVE_LOCALTIME_R 1 + +/* Define to 1 if you have the 'mach_absolute_time' function. */ +#define HAVE_MACH_ABSOLUTE_TIME 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_MACH_MACH_TIME_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_PTHREAD_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDINT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDIO_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDLIB_H 1 + +/* Define if you have 'strerror_r'. */ +#define HAVE_STRERROR_R 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRINGS_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRING_H 1 + +/* Define to 1 if 'tm_gmtoff' is a member of 'struct tm'. */ +#define HAVE_STRUCT_TM_TM_GMTOFF 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_PARAM_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_SOCKET_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have the 'timegm' function. */ +#define HAVE_TIMEGM 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_UNISTD_H 1 + +/* Define if a version suffix is present. */ +#define HAVE_VERSION_SUFFIX 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_WINSOCK2_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_WS2BTH_H */ + +/* Define to 1 if you have the '_mkgmtime' function. */ +/* #undef HAVE__MKGMTIME */ + +/* Define to the sub-directory where libtool stores uninstalled libraries. */ +#define LT_OBJDIR ".libs/" + +/* Name of package */ +#define PACKAGE "libdivecomputer" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "libdivecomputer" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "libdivecomputer 0.9.0-devel" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "libdivecomputer" + +/* Define to the home page for this package. */ +#define PACKAGE_URL "" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "0.9.0-devel" + +/* Define to 1 if all of the C89 standard headers exist (not just the ones + required in a freestanding environment). This macro is provided for + backward compatibility; new code need not use it. */ +#define STDC_HEADERS 1 + +/* Define to 1 if strerror_r returns char *. */ +/* #undef STRERROR_R_CHAR_P */ + +/* Version number of package */ +#define VERSION "0.9.0-devel" diff --git a/macos/Classes/cressi_ady_parser.c b/macos/Classes/cressi_ady_parser.c index 6147aef..2bcd171 100644 --- a/macos/Classes/cressi_ady_parser.c +++ b/macos/Classes/cressi_ady_parser.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/cressi_edy_parser.c" \ No newline at end of file diff --git a/macos/Classes/cressi_edy.c b/macos/Classes/cressi_edy.c index 5b19646..fad1d26 100644 --- a/macos/Classes/cressi_edy.c +++ b/macos/Classes/cressi_edy.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/cressi_edy.c" \ No newline at end of file diff --git a/macos/Classes/cressi_goa.c b/macos/Classes/cressi_goa.c index 713069b..16804db 100644 --- a/macos/Classes/cressi_goa.c +++ b/macos/Classes/cressi_goa.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/cressi_goa.c" \ No newline at end of file diff --git a/macos/Classes/cressi_goa_parser.c b/macos/Classes/cressi_goa_parser.c index 1b86aaa..0249645 100644 --- a/macos/Classes/cressi_goa_parser.c +++ b/macos/Classes/cressi_goa_parser.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/cressi_goa_parser.c" \ No newline at end of file diff --git a/macos/Classes/cressi_leonardo.c b/macos/Classes/cressi_leonardo.c index b3a0a6b..0920e12 100644 --- a/macos/Classes/cressi_leonardo.c +++ b/macos/Classes/cressi_leonardo.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/cressi_leonardo.c" \ No newline at end of file diff --git a/macos/Classes/cressi_leonardo_parser.c b/macos/Classes/cressi_leonardo_parser.c index 99eae10..c059391 100644 --- a/macos/Classes/cressi_leonardo_parser.c +++ b/macos/Classes/cressi_leonardo_parser.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/cressi_leonardo_parser.c" \ No newline at end of file diff --git a/macos/Classes/deepblu_cosmiq.c b/macos/Classes/deepblu_cosmiq.c index d547a03..0560d94 100644 --- a/macos/Classes/deepblu_cosmiq.c +++ b/macos/Classes/deepblu_cosmiq.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/deepblu_cosmiq.c" \ No newline at end of file diff --git a/macos/Classes/deepblu_cosmiq_parser.c b/macos/Classes/deepblu_cosmiq_parser.c index aaa95d3..9bd2470 100644 --- a/macos/Classes/deepblu_cosmiq_parser.c +++ b/macos/Classes/deepblu_cosmiq_parser.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/deepblu_cosmiq_parser.c" \ No newline at end of file diff --git a/macos/Classes/deepsix_excursion.c b/macos/Classes/deepsix_excursion.c index 38ccb2b..34830f7 100644 --- a/macos/Classes/deepsix_excursion.c +++ b/macos/Classes/deepsix_excursion.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/deepsix_excursion.c" \ No newline at end of file diff --git a/macos/Classes/deepsix_excursion_parser.c b/macos/Classes/deepsix_excursion_parser.c index e2ff8ae..3be7ed2 100644 --- a/macos/Classes/deepsix_excursion_parser.c +++ b/macos/Classes/deepsix_excursion_parser.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/deepsix_excursion_parser.c" \ No newline at end of file diff --git a/macos/Classes/dive_computer.c b/macos/Classes/dive_computer.c index 7b64af6..d3075c4 100644 --- a/macos/Classes/dive_computer.c +++ b/macos/Classes/dive_computer.c @@ -1,3 +1,4 @@ +#include "config.h" #include "../../src/libdivecomputer/src/context.c" #include "../../src/libdivecomputer/src/device.c" #include "../../src/libdivecomputer/src/iterator.c" diff --git a/macos/Classes/diverite_nitekq.c b/macos/Classes/diverite_nitekq.c index 371f8b2..055442e 100644 --- a/macos/Classes/diverite_nitekq.c +++ b/macos/Classes/diverite_nitekq.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/diverite_nitekq.c" \ No newline at end of file diff --git a/macos/Classes/diverite_nitekq_parser.c b/macos/Classes/diverite_nitekq_parser.c index 9e6ac58..993af29 100644 --- a/macos/Classes/diverite_nitekq_parser.c +++ b/macos/Classes/diverite_nitekq_parser.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/diverite_nitekq_parser.c" \ No newline at end of file diff --git a/macos/Classes/divesoft_freedom.c b/macos/Classes/divesoft_freedom.c index bcb0d05..d1912c9 100644 --- a/macos/Classes/divesoft_freedom.c +++ b/macos/Classes/divesoft_freedom.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/divesoft_freedom.c" \ No newline at end of file diff --git a/macos/Classes/divesoft_freedom_parser.c b/macos/Classes/divesoft_freedom_parser.c index 227f42e..a425ce2 100644 --- a/macos/Classes/divesoft_freedom_parser.c +++ b/macos/Classes/divesoft_freedom_parser.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/divesoft_freedom_parser.c" \ No newline at end of file diff --git a/macos/Classes/divesystem_idive.c b/macos/Classes/divesystem_idive.c index 4abf220..eecf385 100644 --- a/macos/Classes/divesystem_idive.c +++ b/macos/Classes/divesystem_idive.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/divesystem_idive.c" \ No newline at end of file diff --git a/macos/Classes/divesystem_idive_parser.c b/macos/Classes/divesystem_idive_parser.c index 40d6df6..db9909a 100644 --- a/macos/Classes/divesystem_idive_parser.c +++ b/macos/Classes/divesystem_idive_parser.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/divesystem_idive_parser.c" \ No newline at end of file diff --git a/macos/Classes/hdlc.c b/macos/Classes/hdlc.c index c06045b..86f4f40 100644 --- a/macos/Classes/hdlc.c +++ b/macos/Classes/hdlc.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/hdlc.c" \ No newline at end of file diff --git a/macos/Classes/hid.c b/macos/Classes/hid.c new file mode 100644 index 0000000..afa0c25 --- /dev/null +++ b/macos/Classes/hid.c @@ -0,0 +1 @@ +#include "../../src/hidapi/mac/hid.c" diff --git a/macos/Classes/hw_frog.c b/macos/Classes/hw_frog.c index f2333f7..0cf425a 100644 --- a/macos/Classes/hw_frog.c +++ b/macos/Classes/hw_frog.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/hw_frog.c" \ No newline at end of file diff --git a/macos/Classes/hw_ostc.c b/macos/Classes/hw_ostc.c index 98d5107..75e9ad9 100644 --- a/macos/Classes/hw_ostc.c +++ b/macos/Classes/hw_ostc.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/hw_ostc.c" \ No newline at end of file diff --git a/macos/Classes/hw_ostc3.c b/macos/Classes/hw_ostc3.c index df360a0..e95c6e7 100644 --- a/macos/Classes/hw_ostc3.c +++ b/macos/Classes/hw_ostc3.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/hw_ostc3.c" \ No newline at end of file diff --git a/macos/Classes/hw_ostc_parser.c b/macos/Classes/hw_ostc_parser.c index 60bd08b..219de9f 100644 --- a/macos/Classes/hw_ostc_parser.c +++ b/macos/Classes/hw_ostc_parser.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/hw_ostc_parser.c" \ No newline at end of file diff --git a/macos/Classes/ihex.c b/macos/Classes/ihex.c index 65b617a..7160ec4 100644 --- a/macos/Classes/ihex.c +++ b/macos/Classes/ihex.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/ihex.c" \ No newline at end of file diff --git a/macos/Classes/liquivision_lynx.c b/macos/Classes/liquivision_lynx.c index 3f7245b..25d9b3a 100644 --- a/macos/Classes/liquivision_lynx.c +++ b/macos/Classes/liquivision_lynx.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/liquivision_lynx.c" \ No newline at end of file diff --git a/macos/Classes/liquivision_lynx_parser.c b/macos/Classes/liquivision_lynx_parser.c index 54fee4c..c3a5d40 100644 --- a/macos/Classes/liquivision_lynx_parser.c +++ b/macos/Classes/liquivision_lynx_parser.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/liquivision_lynx_parser.c" \ No newline at end of file diff --git a/macos/Classes/mares_common.c b/macos/Classes/mares_common.c index c394c9e..98bd71e 100644 --- a/macos/Classes/mares_common.c +++ b/macos/Classes/mares_common.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/mares_common.c" \ No newline at end of file diff --git a/macos/Classes/mares_darwin.c b/macos/Classes/mares_darwin.c index 1368967..4df7462 100644 --- a/macos/Classes/mares_darwin.c +++ b/macos/Classes/mares_darwin.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/mares_darwin.c" \ No newline at end of file diff --git a/macos/Classes/mares_darwin_parser.c b/macos/Classes/mares_darwin_parser.c index d287a04..00b1387 100644 --- a/macos/Classes/mares_darwin_parser.c +++ b/macos/Classes/mares_darwin_parser.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/mares_darwin_parser.c" \ No newline at end of file diff --git a/macos/Classes/mares_iconhd.c b/macos/Classes/mares_iconhd.c index e80b4f9..a65c583 100644 --- a/macos/Classes/mares_iconhd.c +++ b/macos/Classes/mares_iconhd.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/mares_iconhd.c" \ No newline at end of file diff --git a/macos/Classes/mares_iconhd_parser.c b/macos/Classes/mares_iconhd_parser.c index 07b213b..e1f81c7 100644 --- a/macos/Classes/mares_iconhd_parser.c +++ b/macos/Classes/mares_iconhd_parser.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/mares_iconhd_parser.c" \ No newline at end of file diff --git a/macos/Classes/mares_nemo.c b/macos/Classes/mares_nemo.c index baab10f..5073887 100644 --- a/macos/Classes/mares_nemo.c +++ b/macos/Classes/mares_nemo.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/mares_nemo.c" \ No newline at end of file diff --git a/macos/Classes/mares_nemo_parser.c b/macos/Classes/mares_nemo_parser.c index dcfbabb..4db5af1 100644 --- a/macos/Classes/mares_nemo_parser.c +++ b/macos/Classes/mares_nemo_parser.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/mares_nemo_parser.c" \ No newline at end of file diff --git a/macos/Classes/mares_puck.c b/macos/Classes/mares_puck.c index b37e5b5..4e8607c 100644 --- a/macos/Classes/mares_puck.c +++ b/macos/Classes/mares_puck.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/mares_puck.c" \ No newline at end of file diff --git a/macos/Classes/mclean_extreme.c b/macos/Classes/mclean_extreme.c index a02269f..0dbabd5 100644 --- a/macos/Classes/mclean_extreme.c +++ b/macos/Classes/mclean_extreme.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/mclean_extreme.c" \ No newline at end of file diff --git a/macos/Classes/mclean_extreme_parser.c b/macos/Classes/mclean_extreme_parser.c index 5f4dca5..d17a471 100644 --- a/macos/Classes/mclean_extreme_parser.c +++ b/macos/Classes/mclean_extreme_parser.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/mclean_extreme_parser.c" \ No newline at end of file diff --git a/macos/Classes/oceanic_atom2.c b/macos/Classes/oceanic_atom2.c index bac46ca..794c001 100644 --- a/macos/Classes/oceanic_atom2.c +++ b/macos/Classes/oceanic_atom2.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/oceanic_atom2.c" \ No newline at end of file diff --git a/macos/Classes/oceanic_atom2_parser.c b/macos/Classes/oceanic_atom2_parser.c index 168fb51..33695b7 100644 --- a/macos/Classes/oceanic_atom2_parser.c +++ b/macos/Classes/oceanic_atom2_parser.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/oceanic_atom2_parser.c" \ No newline at end of file diff --git a/macos/Classes/oceanic_common.c b/macos/Classes/oceanic_common.c index f21c599..359abd4 100644 --- a/macos/Classes/oceanic_common.c +++ b/macos/Classes/oceanic_common.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/oceanic_common.c" \ No newline at end of file diff --git a/macos/Classes/oceanic_veo250.c b/macos/Classes/oceanic_veo250.c index 2120a07..e195327 100644 --- a/macos/Classes/oceanic_veo250.c +++ b/macos/Classes/oceanic_veo250.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/oceanic_veo250.c" \ No newline at end of file diff --git a/macos/Classes/oceanic_veo250_parser.c b/macos/Classes/oceanic_veo250_parser.c index cd5a8d6..abb9492 100644 --- a/macos/Classes/oceanic_veo250_parser.c +++ b/macos/Classes/oceanic_veo250_parser.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/oceanic_veo250_parser.c" \ No newline at end of file diff --git a/macos/Classes/oceans_s1.c b/macos/Classes/oceans_s1.c index 6f187ce..4f6106a 100644 --- a/macos/Classes/oceans_s1.c +++ b/macos/Classes/oceans_s1.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/oceans_s1.c" \ No newline at end of file diff --git a/macos/Classes/oceans_s1_common.c b/macos/Classes/oceans_s1_common.c index 608b839..1ef9fcb 100644 --- a/macos/Classes/oceans_s1_common.c +++ b/macos/Classes/oceans_s1_common.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/oceans_s1_common.c" \ No newline at end of file diff --git a/macos/Classes/oceans_s1_parser.c b/macos/Classes/oceans_s1_parser.c index 121ee18..870a5c8 100644 --- a/macos/Classes/oceans_s1_parser.c +++ b/macos/Classes/oceans_s1_parser.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/oceans_s1_parser.c" \ No newline at end of file diff --git a/macos/Classes/ocenic_vtpro.c b/macos/Classes/ocenic_vtpro.c index 4afeaa9..5313627 100644 --- a/macos/Classes/ocenic_vtpro.c +++ b/macos/Classes/ocenic_vtpro.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/oceanic_vtpro.c" \ No newline at end of file diff --git a/macos/Classes/ocenic_vtpro_parser.c b/macos/Classes/ocenic_vtpro_parser.c index a9bf6e9..8c33ecd 100644 --- a/macos/Classes/ocenic_vtpro_parser.c +++ b/macos/Classes/ocenic_vtpro_parser.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/oceanic_vtpro_parser.c" \ No newline at end of file diff --git a/macos/Classes/reefnet_sensus.c b/macos/Classes/reefnet_sensus.c index b46912d..17ad4f3 100644 --- a/macos/Classes/reefnet_sensus.c +++ b/macos/Classes/reefnet_sensus.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/reefnet_sensus.c" \ No newline at end of file diff --git a/macos/Classes/reefnet_sensus_parser.c b/macos/Classes/reefnet_sensus_parser.c index 2f1e642..1ad60dd 100644 --- a/macos/Classes/reefnet_sensus_parser.c +++ b/macos/Classes/reefnet_sensus_parser.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/reefnet_sensus_parser.c" \ No newline at end of file diff --git a/macos/Classes/reefnet_sensuspro.c b/macos/Classes/reefnet_sensuspro.c index a5348e6..18a7641 100644 --- a/macos/Classes/reefnet_sensuspro.c +++ b/macos/Classes/reefnet_sensuspro.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/reefnet_sensuspro.c" \ No newline at end of file diff --git a/macos/Classes/reefnet_sensuspro_parser.c b/macos/Classes/reefnet_sensuspro_parser.c index 261f20b..c312291 100644 --- a/macos/Classes/reefnet_sensuspro_parser.c +++ b/macos/Classes/reefnet_sensuspro_parser.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/reefnet_sensuspro_parser.c" \ No newline at end of file diff --git a/macos/Classes/reefnet_sensusultra.c b/macos/Classes/reefnet_sensusultra.c index 33059e9..4f12834 100644 --- a/macos/Classes/reefnet_sensusultra.c +++ b/macos/Classes/reefnet_sensusultra.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/reefnet_sensusultra.c" \ No newline at end of file diff --git a/macos/Classes/reefnet_sensusultra_parser.c b/macos/Classes/reefnet_sensusultra_parser.c index 1684d35..8144fd2 100644 --- a/macos/Classes/reefnet_sensusultra_parser.c +++ b/macos/Classes/reefnet_sensusultra_parser.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/reefnet_sensusultra_parser.c" \ No newline at end of file diff --git a/macos/Classes/seac_screen.c b/macos/Classes/seac_screen.c index 19f4752..d6af7e0 100644 --- a/macos/Classes/seac_screen.c +++ b/macos/Classes/seac_screen.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/seac_screen.c" \ No newline at end of file diff --git a/macos/Classes/seac_screen_parser.c b/macos/Classes/seac_screen_parser.c index 2611342..267f566 100644 --- a/macos/Classes/seac_screen_parser.c +++ b/macos/Classes/seac_screen_parser.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/seac_screen_parser.c" \ No newline at end of file diff --git a/macos/Classes/serial_posix.c b/macos/Classes/serial_posix.c index d0a4bff..5a909d9 100644 --- a/macos/Classes/serial_posix.c +++ b/macos/Classes/serial_posix.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/serial_posix.c" \ No newline at end of file diff --git a/macos/Classes/shearwater_common.c b/macos/Classes/shearwater_common.c index 8388a65..5386313 100644 --- a/macos/Classes/shearwater_common.c +++ b/macos/Classes/shearwater_common.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/shearwater_common.c" \ No newline at end of file diff --git a/macos/Classes/shearwater_petrel.c b/macos/Classes/shearwater_petrel.c index d74919b..2e8e3dc 100644 --- a/macos/Classes/shearwater_petrel.c +++ b/macos/Classes/shearwater_petrel.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/shearwater_petrel.c" \ No newline at end of file diff --git a/macos/Classes/shearwater_predator.c b/macos/Classes/shearwater_predator.c index 244093a..8e08581 100644 --- a/macos/Classes/shearwater_predator.c +++ b/macos/Classes/shearwater_predator.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/shearwater_predator.c" \ No newline at end of file diff --git a/macos/Classes/shearwater_predator_parser.c b/macos/Classes/shearwater_predator_parser.c index ea1927b..8d63c24 100644 --- a/macos/Classes/shearwater_predator_parser.c +++ b/macos/Classes/shearwater_predator_parser.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/shearwater_predator_parser.c" \ No newline at end of file diff --git a/macos/Classes/sporasub_sp2.c b/macos/Classes/sporasub_sp2.c index 0ce5dc0..dfe9acb 100644 --- a/macos/Classes/sporasub_sp2.c +++ b/macos/Classes/sporasub_sp2.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/sporasub_sp2.c" \ No newline at end of file diff --git a/macos/Classes/sporasub_sp2_parser.c b/macos/Classes/sporasub_sp2_parser.c index 7d29eac..6702d88 100644 --- a/macos/Classes/sporasub_sp2_parser.c +++ b/macos/Classes/sporasub_sp2_parser.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/sporasub_sp2_parser.c" \ No newline at end of file diff --git a/macos/Classes/suunto_common.c b/macos/Classes/suunto_common.c index 2b39f55..7b401c2 100644 --- a/macos/Classes/suunto_common.c +++ b/macos/Classes/suunto_common.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/suunto_common.c" \ No newline at end of file diff --git a/macos/Classes/suunto_common2.c b/macos/Classes/suunto_common2.c index 9c7331f..7948a4b 100644 --- a/macos/Classes/suunto_common2.c +++ b/macos/Classes/suunto_common2.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/suunto_common2.c" \ No newline at end of file diff --git a/macos/Classes/suunto_d9.c b/macos/Classes/suunto_d9.c index 5d0eb4d..65df56d 100644 --- a/macos/Classes/suunto_d9.c +++ b/macos/Classes/suunto_d9.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/suunto_d9.c" \ No newline at end of file diff --git a/macos/Classes/suunto_d9_parser.c b/macos/Classes/suunto_d9_parser.c index 11b6f00..ed62ced 100644 --- a/macos/Classes/suunto_d9_parser.c +++ b/macos/Classes/suunto_d9_parser.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/suunto_d9_parser.c" \ No newline at end of file diff --git a/macos/Classes/suunto_eon.c b/macos/Classes/suunto_eon.c index 8e0e22b..358a872 100644 --- a/macos/Classes/suunto_eon.c +++ b/macos/Classes/suunto_eon.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/suunto_eon.c" \ No newline at end of file diff --git a/macos/Classes/suunto_eon_parser.c b/macos/Classes/suunto_eon_parser.c index 2ec736a..ae8f88a 100644 --- a/macos/Classes/suunto_eon_parser.c +++ b/macos/Classes/suunto_eon_parser.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/suunto_eon_parser.c" \ No newline at end of file diff --git a/macos/Classes/suunto_eonsteel.c b/macos/Classes/suunto_eonsteel.c index 9782220..de3d35e 100644 --- a/macos/Classes/suunto_eonsteel.c +++ b/macos/Classes/suunto_eonsteel.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/suunto_eonsteel.c" \ No newline at end of file diff --git a/macos/Classes/suunto_eonsteel_parser.c b/macos/Classes/suunto_eonsteel_parser.c index dd64af3..e833e48 100644 --- a/macos/Classes/suunto_eonsteel_parser.c +++ b/macos/Classes/suunto_eonsteel_parser.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/suunto_eonsteel_parser.c" \ No newline at end of file diff --git a/macos/Classes/suunto_solution.c b/macos/Classes/suunto_solution.c index e8b08ab..c5e2d14 100644 --- a/macos/Classes/suunto_solution.c +++ b/macos/Classes/suunto_solution.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/suunto_solution.c" \ No newline at end of file diff --git a/macos/Classes/suunto_solution_parser.c b/macos/Classes/suunto_solution_parser.c index e11cf32..b30fdf8 100644 --- a/macos/Classes/suunto_solution_parser.c +++ b/macos/Classes/suunto_solution_parser.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/suunto_solution_parser.c" \ No newline at end of file diff --git a/macos/Classes/suunto_vyper.c b/macos/Classes/suunto_vyper.c index 71eb701..c50becb 100644 --- a/macos/Classes/suunto_vyper.c +++ b/macos/Classes/suunto_vyper.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/suunto_vyper.c" \ No newline at end of file diff --git a/macos/Classes/suunto_vyper2.c b/macos/Classes/suunto_vyper2.c index 0f9c9cf..1e9e3a4 100644 --- a/macos/Classes/suunto_vyper2.c +++ b/macos/Classes/suunto_vyper2.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/suunto_vyper2.c" \ No newline at end of file diff --git a/macos/Classes/suunto_vyper_parser.c b/macos/Classes/suunto_vyper_parser.c index d12fe81..0089749 100644 --- a/macos/Classes/suunto_vyper_parser.c +++ b/macos/Classes/suunto_vyper_parser.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/suunto_vyper_parser.c" \ No newline at end of file diff --git a/macos/Classes/sync.c b/macos/Classes/sync.c new file mode 100644 index 0000000..780e780 --- /dev/null +++ b/macos/Classes/sync.c @@ -0,0 +1,9 @@ +#include "../../src/libusb_config/config.h" +#include "../../src/libusb/libusb/os/threads_posix.c" +#include "../../src/libusb/libusb/os/darwin_usb.c" +#include "../../src/libusb/libusb/os/events_posix.c" +#include "../../src/libusb/libusb/hotplug.c" +#include "../../src/libusb/libusb/io.c" +#include "../../src/libusb/libusb/core.c" +#include "../../src/libusb/libusb/descriptor.c" +#include "../../src/libusb/libusb/sync.c" diff --git a/macos/Classes/tecdiving_divecomputereu.c b/macos/Classes/tecdiving_divecomputereu.c index 890deda..d872b71 100644 --- a/macos/Classes/tecdiving_divecomputereu.c +++ b/macos/Classes/tecdiving_divecomputereu.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/tecdiving_divecomputereu.c" \ No newline at end of file diff --git a/macos/Classes/tecdiving_divecomputereu_parser.c b/macos/Classes/tecdiving_divecomputereu_parser.c index a7bbb1f..0fa0ddc 100644 --- a/macos/Classes/tecdiving_divecomputereu_parser.c +++ b/macos/Classes/tecdiving_divecomputereu_parser.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/tecdiving_divecomputereu_parser.c" \ No newline at end of file diff --git a/macos/Classes/usb.c b/macos/Classes/usb.c new file mode 100644 index 0000000..6dacd7a --- /dev/null +++ b/macos/Classes/usb.c @@ -0,0 +1,2 @@ +#include "config.h" +#include "../../src/libdivecomputer/src/usb.c" \ No newline at end of file diff --git a/macos/Classes/usbhid.c b/macos/Classes/usbhid.c new file mode 100644 index 0000000..b9a8a95 --- /dev/null +++ b/macos/Classes/usbhid.c @@ -0,0 +1,2 @@ +#include "config.h" +#include "../../src/libdivecomputer/src/usbhid.c" \ No newline at end of file diff --git a/macos/Classes/uwatec_aladin.c b/macos/Classes/uwatec_aladin.c index e24ecc2..a0a1df6 100644 --- a/macos/Classes/uwatec_aladin.c +++ b/macos/Classes/uwatec_aladin.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/uwatec_aladin.c" \ No newline at end of file diff --git a/macos/Classes/uwatec_memomouse.c b/macos/Classes/uwatec_memomouse.c index acca0b1..0f0b6ef 100644 --- a/macos/Classes/uwatec_memomouse.c +++ b/macos/Classes/uwatec_memomouse.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/uwatec_memomouse.c" \ No newline at end of file diff --git a/macos/Classes/uwatec_memomouse_parser.c b/macos/Classes/uwatec_memomouse_parser.c index 9771ce9..8abab6d 100644 --- a/macos/Classes/uwatec_memomouse_parser.c +++ b/macos/Classes/uwatec_memomouse_parser.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/uwatec_memomouse_parser.c" \ No newline at end of file diff --git a/macos/Classes/uwatec_smart.c b/macos/Classes/uwatec_smart.c index bc90947..9a0d225 100644 --- a/macos/Classes/uwatec_smart.c +++ b/macos/Classes/uwatec_smart.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/uwatec_smart.c" \ No newline at end of file diff --git a/macos/Classes/uwatec_smart_parser.c b/macos/Classes/uwatec_smart_parser.c index 64e4eb4..92e2f1e 100644 --- a/macos/Classes/uwatec_smart_parser.c +++ b/macos/Classes/uwatec_smart_parser.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/uwatec_smart_parser.c" \ No newline at end of file diff --git a/macos/Classes/zeagle_n2ition3.c b/macos/Classes/zeagle_n2ition3.c index 9d51888..4905c58 100644 --- a/macos/Classes/zeagle_n2ition3.c +++ b/macos/Classes/zeagle_n2ition3.c @@ -1 +1,2 @@ +#include "config.h" #include "../../src/libdivecomputer/src/zeagle_n2ition3.c" \ No newline at end of file diff --git a/macos/dive_computer.podspec b/macos/dive_computer.podspec index f447c45..9656505 100644 --- a/macos/dive_computer.podspec +++ b/macos/dive_computer.podspec @@ -25,7 +25,7 @@ DiveComputer FFI plugin for Flutter. s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', - 'HEADER_SEARCH_PATHS' => '"${PODS_TARGET_SRCROOT}/../src/libdivecomputer/include"', + 'HEADER_SEARCH_PATHS' => '"${PODS_TARGET_SRCROOT}/../src/libdivecomputer/include" "${PODS_TARGET_SRCROOT}/../src/libdivecomputer_config" "${PODS_TARGET_SRCROOT}/../src/hidapi/hidapi" "${PODS_TARGET_SRCROOT}/../src/hidapi_config" "${PODS_TARGET_SRCROOT}/../src/libusb/libusb" "${PODS_TARGET_SRCROOT}/../src/libusb_config"', 'GCC_WARN_INHIBIT_ALL_WARNINGS' => 'YES', } diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 6c20068..106c6a3 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -3,9 +3,63 @@ # the plugin to fail to compile for some customers of the plugin. cmake_minimum_required(VERSION 3.10) -project(dive_computer_library VERSION 0.0.1 LANGUAGES C) +project(libdivecomputer VERSION 0.0.1 LANGUAGES C) -add_library(dive_computer SHARED +add_subdirectory(hidapi hidapi) +add_subdirectory(libusb libusb) + +add_compile_definitions(ENABLE_LOGGING=1) +add_compile_definitions(HAVE_CLOCK_GETTIME=1) +add_compile_definitions(HAVE_DECL_OPTRESET=1) +add_compile_definitions(HAVE_DECL_STRERROR_R=1) +add_compile_definitions(HAVE_DLFCN_H=1) +add_compile_definitions(HAVE_GETOPT_H=1) +add_compile_definitions(HAVE_GETOPT_LONG=1) +add_compile_definitions(HAVE_GMTIME_R=1) +add_compile_definitions(HAVE_HIDAPI=1) +add_compile_definitions(HAVE_INTTYPES_H=1) +add_compile_definitions(HAVE_IOKIT_SERIAL_IOSS_H=1) +add_compile_definitions(HAVE_LIBUSB=1) +add_compile_definitions(HAVE_LOCALTIME_R=1) +add_compile_definitions(HAVE_MACH_ABSOLUTE_TIME=1) +add_compile_definitions(HAVE_MACH_MACH_TIME_H=1) +add_compile_definitions(HAVE_PTHREAD_H=1) +add_compile_definitions(HAVE_STDINT_H=1) +add_compile_definitions(HAVE_STDIO_H=1) +add_compile_definitions(HAVE_STDLIB_H=1) +add_compile_definitions(HAVE_STRERROR_R=1) +add_compile_definitions(HAVE_STRINGS_H=1) +add_compile_definitions(HAVE_STRING_H=1) +add_compile_definitions(HAVE_STRUCT_TM_TM_GMTOFF=1) +add_compile_definitions(HAVE_SYS_PARAM_H=1) +add_compile_definitions(HAVE_SYS_SOCKET_H=1) +add_compile_definitions(HAVE_SYS_STAT_H=1) +add_compile_definitions(HAVE_SYS_TYPES_H=1) +add_compile_definitions(HAVE_TIMEGM=1) +add_compile_definitions(HAVE_UNISTD_H=1) +add_compile_definitions(HAVE_VERSION_SUFFIX=1) +add_compile_definitions(LT_OBJDIR=".libs/") +add_compile_definitions(PACKAGE="libdivecomputer") +add_compile_definitions(PACKAGE_BUGREPORT="") +add_compile_definitions(PACKAGE_NAME="libdivecomputer") +add_compile_definitions(PACKAGE_STRING="libdivecomputer 0.9.0-devel") +add_compile_definitions(PACKAGE_TARNAME="libdivecomputer") +add_compile_definitions(PACKAGE_URL="") +add_compile_definitions(PACKAGE_VERSION="0.9.0-devel") +add_compile_definitions(STDC_HEADERS=1) +add_compile_definitions(VERSION="0.9.0-devel") + +# add_compile_definitions(__APPLE__=1) +# add_compile_definitions(HAVE_HIDAPI=1) +# add_compile_definitions(HAVE_PTHREAD_H=1) + +include_directories( + "libdivecomputer/include" + "hidapi/hidapi" + "libusb/libusb" +) + +add_library(libdivecomputer SHARED "libdivecomputer/src/context.c" "libdivecomputer/src/device.c" "libdivecomputer/src/iterator.c" @@ -24,6 +78,9 @@ add_library(dive_computer SHARED "libdivecomputer/src/ihex.c" "libdivecomputer/src/timer.c" "libdivecomputer/src/parser.c" + "libdivecomputer/src/serial_posix.c" + "libdivecomputer/src/usb.c" + "libdivecomputer/src/usbhid.c" "libdivecomputer/src/atomics_cobalt.c" "libdivecomputer/src/atomics_cobalt_parser.c" @@ -111,11 +168,12 @@ add_library(dive_computer SHARED "libdivecomputer/src/zeagle_n2ition3.c" ) -include_directories("libdivecomputer/include") +target_link_libraries(libdivecomputer PRIVATE hidapi::hidapi) +target_link_libraries(libdivecomputer PRIVATE libusb) -set_target_properties(dive_computer PROPERTIES +set_target_properties(libdivecomputer PROPERTIES PUBLIC_HEADER dive_computer.h - OUTPUT_NAME "dive_computer" + OUTPUT_NAME "libdivecomputer" ) -target_compile_definitions(dive_computer PUBLIC DART_SHARED_LIB) +target_compile_definitions(libdivecomputer PUBLIC DART_SHARED_LIB) diff --git a/src/hidapi b/src/hidapi new file mode 160000 index 0000000..7011fa9 --- /dev/null +++ b/src/hidapi @@ -0,0 +1 @@ +Subproject commit 7011fa98af2dde00c298105735e470de800288c7 diff --git a/src/libusb b/src/libusb new file mode 160000 index 0000000..d52e355 --- /dev/null +++ b/src/libusb @@ -0,0 +1 @@ +Subproject commit d52e355daa09f17ce64819122cb067b8a2ee0d4b diff --git a/src/libusb_config/config.h b/src/libusb_config/config.h new file mode 100644 index 0000000..f9fcc19 --- /dev/null +++ b/src/libusb_config/config.h @@ -0,0 +1,160 @@ +/* config.h. Generated from config.h.in by configure. */ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* Define to the attribute for default visibility. */ +#define DEFAULT_VISIBILITY __attribute__ ((visibility ("default"))) + +/* Define to 1 to start with debug message logging enabled. */ +/* #undef ENABLE_DEBUG_LOGGING */ + +/* Define to 1 to enable message logging. */ +#define ENABLE_LOGGING 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_ASM_TYPES_H */ + +/* Define to 1 if you have the 'clock_gettime' function. */ +/* #undef HAVE_CLOCK_GETTIME */ + +/* Define to 1 if you have the declaration of 'EFD_CLOEXEC', and to 0 if you + don't. */ +/* #undef HAVE_DECL_EFD_CLOEXEC */ + +/* Define to 1 if you have the declaration of 'EFD_NONBLOCK', and to 0 if you + don't. */ +/* #undef HAVE_DECL_EFD_NONBLOCK */ + +/* Define to 1 if you have the declaration of 'TFD_CLOEXEC', and to 0 if you + don't. */ +/* #undef HAVE_DECL_TFD_CLOEXEC */ + +/* Define to 1 if you have the declaration of 'TFD_NONBLOCK', and to 0 if you + don't. */ +/* #undef HAVE_DECL_TFD_NONBLOCK */ + +/* Define to 1 if you have the header file. */ +#define HAVE_DLFCN_H 1 + +/* Define to 1 if the system has eventfd functionality. */ +/* #undef HAVE_EVENTFD */ + +/* Define to 1 if you have the header file. */ +#define HAVE_INTTYPES_H 1 + +/* Define to 1 if you have the header + file. */ +#define HAVE_IOKIT_USB_IOUSBHOSTFAMILYDEFINITIONS_H 1 + +/* Define to 1 if you have the 'udev' library (-ludev). */ +/* #undef HAVE_LIBUDEV */ + +/* Define to 1 if the system has the type 'nfds_t'. */ +#define HAVE_NFDS_T 1 + +/* Define to 1 if you have the 'pipe2' function. */ +/* #undef HAVE_PIPE2 */ + +/* Define to 1 if you have the 'pthread_condattr_setclock' function. */ +/* #undef HAVE_PTHREAD_CONDATTR_SETCLOCK */ + +/* Define to 1 if you have the 'pthread_setname_np' function. */ +/* #undef HAVE_PTHREAD_SETNAME_NP */ + +/* Define to 1 if you have the 'pthread_threadid_np' function. */ +#define HAVE_PTHREAD_THREADID_NP 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDINT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDIO_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDLIB_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRINGS_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRING_H 1 + +/* Define to 1 if the system has the type 'struct timespec'. */ +/* #undef HAVE_STRUCT_TIMESPEC */ + +/* Define to 1 if you have the 'syslog' function. */ +/* #undef HAVE_SYSLOG */ + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TIME_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TYPES_H 1 + +/* Define to 1 if the system has timerfd functionality. */ +/* #undef HAVE_TIMERFD */ + +/* Define to 1 if you have the header file. */ +#define HAVE_UNISTD_H 1 + +/* Define to the sub-directory where libtool stores uninstalled libraries. */ +#define LT_OBJDIR ".libs/" + +/* Name of package */ +#define PACKAGE "libusb-1.0" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "libusb-devel@lists.sourceforge.net" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "libusb-1.0" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "libusb-1.0 1.0.27" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "libusb-1.0" + +/* Define to the home page for this package. */ +#define PACKAGE_URL "https://libusb.info" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "1.0.27" + +/* Define to 1 if compiling for a POSIX platform. */ +#define PLATFORM_POSIX 1 + +/* Define to 1 if compiling for a Windows platform. */ +/* #undef PLATFORM_WINDOWS */ + +/* Define to the attribute for enabling parameter checks on printf-like + functions. */ +#define PRINTF_FORMAT(a, b) __attribute__ ((__format__ (__printf__, a, b))) + +/* Define to 1 if all of the C89 standard headers exist (not just the ones + required in a freestanding environment). This macro is provided for + backward compatibility; new code need not use it. */ +#define STDC_HEADERS 1 + +/* UMockdev hotplug code is not racy */ +/* #undef UMOCKDEV_HOTPLUG */ + +/* Define to 1 to output logging messages to the systemwide log. */ +/* #undef USE_SYSTEM_LOGGING_FACILITY */ + +/* Version number of package */ +#define VERSION "1.0.27" + +/* Enable GNU extensions. */ +#define _GNU_SOURCE 1 + +/* Define to the oldest supported Windows version. */ +/* #undef _WIN32_WINNT */ + +/* Define to '__inline__' or '__inline' if that's what the C compiler + calls it, or to nothing if 'inline' is not supported under any name. */ +#ifndef __cplusplus +/* #undef inline */ +#endif