diff --git a/interface_lib/CMakeLists.txt b/interface_lib/CMakeLists.txt index a57a905..1fc3449 100644 --- a/interface_lib/CMakeLists.txt +++ b/interface_lib/CMakeLists.txt @@ -11,6 +11,7 @@ add_subdirectory(modules/Fusion/Fusion) add_library( nrealAirLibrary src/crc32.c + src/device.c src/device3.c src/device4.c src/hid_ids.c diff --git a/interface_lib/include/device.h b/interface_lib/include/device.h new file mode 100644 index 0000000..7f2c781 --- /dev/null +++ b/interface_lib/include/device.h @@ -0,0 +1,46 @@ +#pragma once +// +// Created by thejackimonster on 19.12.23. +// +// Copyright (c) 2023 thejackimonster. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#ifndef __cplusplus +#include +#endif + +#ifndef __cplusplus +#include +#else +#include +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +bool device_init(); + +void device_exit(); + +#ifdef __cplusplus +} // extern "C" +#endif diff --git a/interface_lib/src/device.c b/interface_lib/src/device.c new file mode 100644 index 0000000..f6e015b --- /dev/null +++ b/interface_lib/src/device.c @@ -0,0 +1,50 @@ +// +// Created by thejackimonster on 19.12.23. +// +// Copyright (c) 2023 thejackimonster. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#include "device.h" + +#include + +static size_t hid_device_counter = 0; + +bool device_init() { + if (0 != hid_init()) { + return false; + } + + hid_device_counter++; + return true; +} + +void device_exit() { + if (!hid_device_counter) { + return; + } + + hid_device_counter--; + + if (0 == hid_device_counter) { + hid_exit(); + } +} diff --git a/interface_lib/src/device3.c b/interface_lib/src/device3.c index 5119a72..0c8053c 100644 --- a/interface_lib/src/device3.c +++ b/interface_lib/src/device3.c @@ -23,6 +23,7 @@ // #include "device3.h" +#include "device.h" #include #include @@ -198,7 +199,7 @@ device3_error_type device3_open(device3_type* device, device3_event_callback cal device->product_id = 0; device->callback = callback; - if (0 != hid_init()) { + if (!device_init()) { device3_error("Not initialized"); return DEVICE3_ERROR_NOT_INITIALIZED; } @@ -964,7 +965,7 @@ device3_error_type device3_close(device3_type* device) { } memset(device, 0, sizeof(device3_type)); - hid_exit(); + device_exit(); return DEVICE3_ERROR_NO_ERROR; } diff --git a/interface_lib/src/device4.c b/interface_lib/src/device4.c index 34b9eae..3d32dfa 100644 --- a/interface_lib/src/device4.c +++ b/interface_lib/src/device4.c @@ -23,6 +23,7 @@ // #include "device4.h" +#include "device.h" #include #include @@ -177,7 +178,7 @@ device4_error_type device4_open(device4_type* device, device4_event_callback cal device->product_id = 0; device->callback = callback; - if (0 != hid_init()) { + if (!device_init()) { device4_error("Not initialized"); return DEVICE4_ERROR_NOT_INITIALIZED; } @@ -630,7 +631,7 @@ device4_error_type device4_close(device4_type* device) { } memset(device, 0, sizeof(device4_type)); - hid_exit(); + device_exit(); return DEVICE4_ERROR_NO_ERROR; }