From d211cdb3749f0d241449c1e37b6912be845c60e6 Mon Sep 17 00:00:00 2001 From: Nikita Date: Wed, 3 Jan 2024 14:33:03 +0300 Subject: [PATCH] Added common CMakeLists file --- CMakeLists.txt | 52 +++++ example/LabVIEW/RF60X_UDP_measure.vi | Bin 24273 -> 16709 bytes .../DotNet/rf60Xsdk/rf60Xsdk/rf60Xsdk.cpp | 67 +++++- .../DotNet/rf60Xsdk/rf60Xsdk/rf60Xsdk.vcxproj | 23 +- .../DotNet/rf60Xsdk/rf60Xsdk/rf60XsdkNet.h | 45 +++- wrappers/LabVIEW/rf60Xsdk/CMakeLists.txt | 6 +- wrappers/LabVIEW/rf60Xsdk/rf60x.cpp | 205 ++++++++++-------- wrappers/LabVIEW/rf60Xsdk/rf60x.h | 43 ++-- wrappers/LabVIEW/rf60Xsdk/rf60xtypes_c.h | 53 ++--- 9 files changed, 343 insertions(+), 151 deletions(-) create mode 100644 CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..af4cdf0 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,52 @@ +cmake_minimum_required(VERSION 3.13) + + + +################################################################################ +## PROJECT +## name and version +################################################################################ +project(rf60Xsdk) + + +################################################################################ +## SETTINGS +## basic project settings before use +################################################################################ +# If this project is used as a submodule, the variable should be overridden +# to "OFF" in the top-level application (to disable forced cache rewriting) +option(${PARENT}_SUBMODULE_CACHE_OVERWRITE "Enable forced cache rewriting" ON) +if (${PARENT}_SUBMODULE_CACHE_OVERWRITE) + SET(REWRITE_FORCE "FORCE") +else() + SET(REWRITE_FORCE "") +endif() + + + +################################################################################ +## CONFIGURATION +## project configuration +################################################################################ +# Select a wrapper programming language (C, C++) +SET(${PARENT}_WRAPPER_LANGUAGE "C++" CACHE STRING "" ${REWRITE_FORCE}) + + + + +################################################################################ +## INCLUDING SUBDIRECTORIES +## Adding subdirectories according to the configuration +################################################################################ +# Add sdk-library +if(${${PARENT}_WRAPPER_LANGUAGE} STREQUAL "C") + add_subdirectory(wrappers/C/rf60Xsdk) +endif() +if(${${PARENT}_WRAPPER_LANGUAGE} STREQUAL "C++") + add_subdirectory(wrappers/Cpp/rf60Xsdk) + +endif() + + + + diff --git a/example/LabVIEW/RF60X_UDP_measure.vi b/example/LabVIEW/RF60X_UDP_measure.vi index 4b64aa2b3ab11b91f6f1e81618ea08dc796b2f87..919f07257e454e6b2c6252ed75abbb3d87c0b208 100644 GIT binary patch delta 14453 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 delta 22034 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 wUeNwX1_lOeconnect(); } +bool rf60Xsdk::rf60XsdkNet::test_connect(const std::string %hostAddress, uint32_t port) +{ + return _rf60x->test_connect_udp(hostAddress, port); +} + bool rf60Xsdk::rf60XsdkNet::get_measure_udp(udp_measure_net_t% clone) { @@ -126,11 +131,71 @@ bool rf60Xsdk::rf60XsdkNet::get_measure_udp(udp_measure_net_t% clone) } +bool rf60Xsdk::rf60XsdkNet::test_get_measure_udp(udp_measure_net_t% clone) +{ + udp_measure_t measure; + + bool result = 0; + + result = _rf60x->test_get_measure_udp(measure); + + if (!result) + return false; + + clone.deviceBaseDistance = measure.deviceBaseDistance; + clone.deviceMeasureRange = measure.deviceMeasureRange; + clone.deviceSerial = measure.deviceSerial; + clone.packCount = measure.packCount; + clone.packetControlSumm = measure.packetControlSumm; + + for (Byte i = 0; i < 168; ++i) { + clone.Array[i].status = measure.rf60xValArray[i].status; + clone.Array[i].value = measure.rf60xValArray[i].value; + + } + + return result; +} + +bool rf60Xsdk::rf60XsdkNet::test_get_measure_udp(binocular_udp_measure_net_t% clone) +{ + binocular_udp_measure_t measure; + + bool result = 0; + + result = _rf60x->test_get_measure_udp(measure); + + if (!result) + return false; + + + clone.deviceBaseDistance = measure.deviceBaseDistance; + clone.deviceMeasureRange = measure.deviceMeasureRange; + clone.deviceSerial = measure.deviceSerial; + clone.packCount = measure.packCount; + clone.packetControlSumm = measure.packetControlSumm; + + for (Byte i = 0; i < 1000; ++i) { + clone.rf60xBValArray[i].status = measure.rf60xBValArray[i].status; + clone.rf60xBValArray[i].measure = measure.rf60xBValArray[i].measure; + clone.rf60xBValArray[i].exposition = measure.rf60xBValArray[i].exposition; + + } + + + return result; +} + bool rf60Xsdk::rf60XsdkNet::disconnect() { return _rf60x->disconnect(); } +void rf60Xsdk::rf60XsdkNet::test_disconnect() +{ + return _rf60x->test_disconnect_udp(); +} + bool rf60Xsdk::rf60XsdkNet::open_port_uart() { return _rf60x->open_port_uart(); diff --git a/wrappers/DotNet/rf60Xsdk/rf60Xsdk/rf60Xsdk.vcxproj b/wrappers/DotNet/rf60Xsdk/rf60Xsdk/rf60Xsdk.vcxproj index d77b9ea..6ed6353 100644 --- a/wrappers/DotNet/rf60Xsdk/rf60Xsdk/rf60Xsdk.vcxproj +++ b/wrappers/DotNet/rf60Xsdk/rf60Xsdk/rf60Xsdk.vcxproj @@ -21,37 +21,37 @@ 15.0 {8EADAEA9-C0AF-49A2-A70B-359A9138904E} - v4.8 ManagedCProj rf60Xsdk - 10.0 + 10.0.22621.0 + v4.6.2 DynamicLibrary true - v142 + v143 true Unicode DynamicLibrary false - v142 + v143 true Unicode DynamicLibrary true - v142 + v143 true Unicode DynamicLibrary false - v142 + v143 true Unicode @@ -124,10 +124,19 @@ pch.h Level3 WIN32;NDEBUG;%(PreprocessorDefinitions) + D:\Gitlab\RF60X-SDK\RF60X-SDK\wrappers\Cpp\rf60Xsdk;%(AdditionalIncludeDirectories) + MultiThreadedDLL - + rf60Xsdk.lib;%(AdditionalDependencies) + D:\Gitlab\RF60X-SDK\RF60X-SDK\wrappers\Cpp\rf60Xsdk\out\build\x86-release\lib;D:\Gitlab\RF60X-SDK\RF60X-SDK\wrappers\Cpp\rf60Xsdk\out\build\x86-release\bin;%(AdditionalLibraryDirectories) + rf60Xsdk.lib + /FORCE:MULTIPLE %(AdditionalOptions) + $(OutDir)$(TargetName)Net$(TargetExt) + + true + diff --git a/wrappers/DotNet/rf60Xsdk/rf60Xsdk/rf60XsdkNet.h b/wrappers/DotNet/rf60Xsdk/rf60Xsdk/rf60XsdkNet.h index 2feadaa..7a47b7f 100644 --- a/wrappers/DotNet/rf60Xsdk/rf60Xsdk/rf60XsdkNet.h +++ b/wrappers/DotNet/rf60Xsdk/rf60Xsdk/rf60XsdkNet.h @@ -190,6 +190,42 @@ namespace rf60Xsdk { }; + + [StructLayout(LayoutKind::Sequential, Pack = 1)] + public value struct binocular_udp_value_t + { + unsigned short measure; + unsigned short exposition; + unsigned char status; + }; + + + [StructLayout(LayoutKind::Sequential, Pack = 1)] + public value struct binocular_udp_measure_net_t { + + private: + static bool intiliaze; + + public: + [MarshalAs(UnmanagedType::ByValArray, SizeConst = 100)] + array^ rf60xBValArray; + unsigned short reserved; + unsigned short reserved2; + unsigned short deviceSerial; + unsigned short deviceBaseDistance; + unsigned short deviceMeasureRange; + unsigned char packCount; + unsigned char packetControlSumm; + + void intiliazeArrays(UInt16 sizePoints, UInt16 sizePixels) { + + if (intiliaze) return; + rf60xBValArray = gcnew array(100); + intiliaze = true; + } + + }; + public ref class rf60XsdkNet { @@ -205,13 +241,18 @@ namespace rf60Xsdk { static int sdk_version(); //Ethernet - bool connect(); + bool connect_1(); + bool test_connect(const std::string% hostAddress, uint32_t port); bool get_measure_udp(udp_measure_net_t% clone); //TODO сделать ближе к истине. + bool test_get_measure_udp(udp_measure_net_t% clone); + bool test_get_measure_udp(binocular_udp_measure_net_t% clone); + + bool disconnect(); - + void test_disconnect(); //UART diff --git a/wrappers/LabVIEW/rf60Xsdk/CMakeLists.txt b/wrappers/LabVIEW/rf60Xsdk/CMakeLists.txt index 947b5ce..6c76f0c 100644 --- a/wrappers/LabVIEW/rf60Xsdk/CMakeLists.txt +++ b/wrappers/LabVIEW/rf60Xsdk/CMakeLists.txt @@ -16,6 +16,7 @@ set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) set(BINARY_DIR "${CMAKE_BINARY_DIR}") set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${BINARY_DIR}/bin") set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${BINARY_DIR}/lib") +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${BINARY_DIR}/lib") # set rf60Xcore path variable @@ -35,14 +36,15 @@ set (SOURCES ${CPP_FILES} ${H_FILES}) ## TARGET ## create target and add include path ## -add_library(${PROJECT_NAME} SHARED ${SOURCES}) +add_library(${PROJECT_NAME} ${SOURCES}) set_target_properties(${PROJECT_NAME} PROPERTIES PREFIX "") +target_compile_definitions(${PROJECT_NAME} PRIVATE NEW_API) target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/ ) -target_link_libraries(${PROJECT_NAME} rf60Xsdk) +target_link_libraries(${PROJECT_NAME} PRIVATE rf60Xsdk) #if(MINGW) # target_link_libraries(${PROJECT_NAME} ws2_32) # target_link_libraries(${PROJECT_NAME} iphlpapi) diff --git a/wrappers/LabVIEW/rf60Xsdk/rf60x.cpp b/wrappers/LabVIEW/rf60Xsdk/rf60x.cpp index 7b19e85..994b2e2 100644 --- a/wrappers/LabVIEW/rf60Xsdk/rf60x.cpp +++ b/wrappers/LabVIEW/rf60Xsdk/rf60x.cpp @@ -12,78 +12,105 @@ struct rf60x_c { void *obj; }; -rf60x_t *rf60x_create( - const namespace_struct_wrapper::config_base_information_rf60x_t - config_params_device) { +void *rf60x_create( + void + *config_params_device) { if (!sdk_init()) return NULL; + config_base_information_rf60x_t inner_config_params_device; rf60x_t *m; rf60x *obj; - switch (config_params_device.baud_rate) { - case namespace_struct_wrapper::BAUR_RATE_UART::Baud9600: { + switch (static_cast(config_params_device)->baud_rate) { + case BAUR_RATE_UART::Baud9600: { inner_config_params_device.baud_rate = BAUR_RATE_UART::Baud9600; break; } - case namespace_struct_wrapper::BAUR_RATE_UART::Baud230400: { + case BAUR_RATE_UART::Baud230400: { inner_config_params_device.baud_rate = BAUR_RATE_UART::Baud230400; break; } - case namespace_struct_wrapper::BAUR_RATE_UART::Baud460800: { + case BAUR_RATE_UART::Baud460800: { inner_config_params_device.baud_rate = BAUR_RATE_UART::Baud460800; break; } - case namespace_struct_wrapper::BAUR_RATE_UART::Baud115200: { + case BAUR_RATE_UART::Baud115200: { inner_config_params_device.baud_rate = BAUR_RATE_UART::Baud115200; break; } - case namespace_struct_wrapper::BAUR_RATE_UART::Baud921600: { + case BAUR_RATE_UART::Baud921600: { inner_config_params_device.baud_rate = BAUR_RATE_UART::Baud921600; break; } } inner_config_params_device.network_address = - config_params_device.network_address; - inner_config_params_device.number_serial_port = - config_params_device.number_serial_port; + static_cast(config_params_device)->network_address; + // inner_config_params_device.number_serial_port = + // static_cast(config_params_device)->number_serial_port; m = (decltype(m))malloc(sizeof(*m)); obj = new rf60x(inner_config_params_device); m->obj = obj; - return m; + return static_cast(m); } -void rf60x_destroy(rf60x_t *m) { +void rf60x_destroy(void *m) { if (m == NULL) return; - delete static_cast(m->obj); + delete static_cast(reinterpret_cast(m)->obj); free(m); sdk_cleanup(); } +#ifdef NEW_API +unsigned int rf60x_connect(void *dev, char* hostAddress, unsigned int port) +#else +unsigned int rf60x_connect(rf60x_t *dev) +#endif +{ +#ifdef NEW_API + return static_cast(reinterpret_cast(dev)->obj)->test_connect_udp(hostAddress,port); +#else + return static_cast(dev->obj)->connect(); +#endif + +} -bool rf60x_connect(rf60x_t *dev) { - return static_cast(dev->obj)->connect(); +unsigned int rf60x_disconnect(void *dev) { +#ifdef NEW_API + static_cast(reinterpret_cast(dev)->obj)->test_disconnect_udp(); + return true; +#else + return static_cast(dev->obj)->disconnect(); +#endif } -bool rf60x_disconnect(rf60x_t *dev) { - return static_cast(dev->obj)->disconnect(); +unsigned int rf60x_get_measure_udp(void *dev, void *measure) { +#ifdef NEW_API + return static_cast(reinterpret_cast(dev)->obj)->test_get_measure_udp(*static_cast(measure)); +#else + return static_cast(reinterpret_cast(dev)->obj)->get_measure_udp(measure); +#endif } -bool rf60x_get_measure_udp(rf60x_t *dev, void *measure) { - return static_cast(dev->obj)->get_measure_udp(measure); +unsigned int rf60x_bino_get_measure_udp(void *dev, void *measure) { +#ifdef NEW_API + return static_cast(reinterpret_cast(dev)->obj)->test_get_measure_udp(*static_cast(measure)); +#else + return static_cast(reinterpret_cast(dev)->obj)->get_measure_udp(measure); +#endif } -bool rf60x_open_port_uart(rf60x_t *dev) { - return static_cast(dev->obj)->open_port_uart(); +unsigned int rf60x_open_port_uart(void *dev) { + return static_cast(reinterpret_cast(dev)->obj)->open_port_uart(); } -namespace_struct_wrapper::uart_hello_t rf60x_hello_msg_uart(rf60x_t *dev) { - auto uartHello = static_cast(dev->obj)->hello_msg_uart(); +uart_hello_t_c rf60x_hello_msg_uart(void *dev) { + auto uartHello = static_cast(reinterpret_cast(dev)->obj)->hello_msg_uart(); - namespace_struct_wrapper::uart_hello_t wrapperUartHello; + uart_hello_t_c wrapperUartHello; wrapperUartHello.deviceMaxDistance = uartHello.deviceMaxDistance; wrapperUartHello.deviceModificaton = uartHello.deviceModificaton; @@ -94,109 +121,101 @@ namespace_struct_wrapper::uart_hello_t rf60x_hello_msg_uart(rf60x_t *dev) { return wrapperUartHello; } -void rf60x_change_config_port_uart(rf60x_t *dev) { - static_cast(dev->obj)->open_port_uart(); +void rf60x_change_config_port_uart(void *dev) { + static_cast(reinterpret_cast(dev)->obj)->open_port_uart(); } -void rf60x_close_port_uart(rf60x_t *dev) { - static_cast(dev->obj)->close_port_uart(); +void rf60x_close_port_uart(void *dev) { + static_cast(reinterpret_cast(dev)->obj)->close_port_uart(); } -bool rf60x_get_measure_uart( - rf60x_t *dev, void *measure, - namespace_struct_wrapper::PROTOCOL_MEASURE_UART type) { +unsigned int rf60x_get_measure_uart( + unsigned int *dev, void *measure, + unsigned int type) { switch (type) { - case namespace_struct_wrapper::PROTOCOL_MEASURE_UART::UART_STREAM_MEASURE_T: - return static_cast(dev->obj)->get_measure_uart( + case 4: + return static_cast(reinterpret_cast(dev)->obj)->get_measure_uart( measure, PROTOCOL_MEASURE_UART::UART_STREAM_MEASURE_T); - break; - case namespace_struct_wrapper::PROTOCOL_MEASURE_UART:: - UART_STREAM_ADVANCED_MEASURE_T: - return static_cast(dev->obj)->get_measure_uart( + case 6: + return static_cast(reinterpret_cast(dev)->obj)->get_measure_uart( measure, PROTOCOL_MEASURE_UART::UART_STREAM_ADVANCED_MEASURE_T); - break; - case namespace_struct_wrapper::PROTOCOL_MEASURE_UART:: - UART_STREAM_MODIFIED_MEASURE_T: - return static_cast(dev->obj)->get_measure_uart( + case 10: + return static_cast(reinterpret_cast(dev)->obj)->get_measure_uart( measure, PROTOCOL_MEASURE_UART::UART_STREAM_MODIFIED_MEASURE_T); - break; - - case namespace_struct_wrapper::PROTOCOL_MEASURE_UART:: - UART_RESULT_WITH_ENCODER_T: - return static_cast(dev->obj)->get_measure_uart( + case 12: + return static_cast(reinterpret_cast(dev)->obj)->get_measure_uart( measure, PROTOCOL_MEASURE_UART::UART_RESULT_WITH_ENCODER_T); - break; + default: + return false; } } -bool rf60x_get_single_measure(rf60x_t *dev, unsigned char address, +unsigned int rf60x_get_single_measure(void *dev, unsigned char address, void *measure) { - return static_cast(dev->obj)->get_single_measure(address, measure); + return static_cast(reinterpret_cast(dev)->obj)->get_single_measure(address, measure); } -bool rf60x_send_command_modbus( - rf60x_t *dev, const namespace_struct_wrapper::modbus_rtu_command &command) { +unsigned int rf60x_send_command_modbus( + void *dev, modbus_rtu_command *command) { modbus_rtu_command innerCommand; - innerCommand.id = command.id; + innerCommand.id = command->id; - innerCommand.command = command.command; + innerCommand.command = command->command; - innerCommand.address = command.address; + innerCommand.address = command->address; - innerCommand.count_or_value = command.count_or_value; + innerCommand.count_or_value = command->count_or_value; - innerCommand.crc = command.crc; + innerCommand.crc = command->crc; - return static_cast(dev->obj)->send_command_modbus(innerCommand); + return static_cast(reinterpret_cast(dev)->obj)->send_command_modbus(innerCommand); } -bool rf60x_receive_data_modbus(rf60x_t *dev, unsigned short *buffer) { - return static_cast(dev->obj)->receive_data_modbus(buffer); +unsigned int rf60x_receive_data_modbus(void *dev, unsigned short *buffer) { + return static_cast(reinterpret_cast(dev)->obj)->receive_data_modbus(buffer); } -bool rf60x_read_params_uart(rf60x_t *dev) { - return static_cast(dev->obj)->read_params_uart(); +unsigned int rf60x_read_params_uart(void *dev) { + return static_cast(reinterpret_cast(dev)->obj)->read_params_uart(); } -bool rf60x_write_params_uart(rf60x_t *dev) { - return static_cast(dev->obj)->write_params_uart(); +unsigned int rf60x_write_params_uart(void *dev) { + return static_cast(reinterpret_cast(dev)->obj)->write_params_uart(); } -bool rf60x_send_command(rf60x_t *dev, - namespace_struct_wrapper::COMMAND_UART CMD) { +unsigned int rf60x_send_command(void *dev, + unsigned int CMD) { switch (CMD) { - case namespace_struct_wrapper::COMMAND_UART::GETRESULT: - return static_cast(dev->obj)->send_command( + case 0x06: + return static_cast(reinterpret_cast(dev)->obj)->send_command( COMMAND_UART::GETRESULT); - break; - case namespace_struct_wrapper::COMMAND_UART::SAVETOFLASH: - return static_cast(dev->obj)->send_command( + + case 0x04: + return static_cast(reinterpret_cast(dev)->obj)->send_command( COMMAND_UART::SAVETOFLASH); - break; - case namespace_struct_wrapper::COMMAND_UART::START_STREAM: - return static_cast(dev->obj)->send_command( + + case 0x07: + return static_cast(reinterpret_cast(dev)->obj)->send_command( COMMAND_UART::START_STREAM); - break; - case namespace_struct_wrapper::COMMAND_UART::START_STREAM_ADVANCED: - return static_cast(dev->obj)->send_command( + + case 0x0C: + return static_cast(reinterpret_cast(dev)->obj)->send_command( COMMAND_UART::START_STREAM_ADVANCED); - break; - case namespace_struct_wrapper::COMMAND_UART::START_STREAM_MODIFIED: - return static_cast(dev->obj)->send_command( + case 0x0D: + return static_cast(reinterpret_cast(dev)->obj)->send_command( COMMAND_UART::START_STREAM_MODIFIED); - break; - case namespace_struct_wrapper::COMMAND_UART::STOP_STREAM: - return static_cast(dev->obj)->send_command( + case 0x08: + return static_cast(reinterpret_cast(dev)->obj)->send_command( COMMAND_UART::STOP_STREAM); - break; - case namespace_struct_wrapper::COMMAND_UART::WRITEPARAM: - return static_cast(dev->obj)->send_command( + case 0x03: + return static_cast(reinterpret_cast(dev)->obj)->send_command( COMMAND_UART::WRITEPARAM); - break; + default: + return false; } } @@ -204,13 +223,13 @@ bool rf60x_send_command(rf60x_t *dev, // param_t *rf60x_get_param(rf60x_t *dev, PARAM_NAME_KEY param_name) {} -// bool rf60x_set_param(rf60x_t *dev, param_t *param) {} +// unsigned int rf60x_set_param(rf60x_t *dev, param_t *param) {} -// bool rf60x_set_param(rf60x_t *dev, const char *param_name) {} +// unsigned int rf60x_set_param(rf60x_t *dev, const char *param_name) {} -// bool rf60x_set_param(rf60x_t *dev, int param_id) {} +// unsigned int rf60x_set_param(rf60x_t *dev, int param_id) {} -bool r60x_restore_params(rf60x_t *dev) { - return static_cast(dev->obj)->send_command( +unsigned int r60x_restore_params(void *dev) { + return static_cast(reinterpret_cast(dev)->obj)->send_command( COMMAND_UART::RESTOREFORMFLASH); } diff --git a/wrappers/LabVIEW/rf60Xsdk/rf60x.h b/wrappers/LabVIEW/rf60Xsdk/rf60x.h index 346cab8..bd9e831 100644 --- a/wrappers/LabVIEW/rf60Xsdk/rf60x.h +++ b/wrappers/LabVIEW/rf60Xsdk/rf60x.h @@ -19,45 +19,48 @@ extern "C" { struct rf60x_c; typedef struct rf60x_c rf60x_t; -rf60x_t *rf60x_create(const namespace_struct_wrapper::config_base_information_rf60x_t config_params_device); -void rf60x_destroy(rf60x_t *m); +void *rf60x_create(void* config_params_device); +void rf60x_destroy(void *m); -bool rf60x_connect(rf60x_t *dev); +//unsigned int rf60x_connect(unsigned int *dev); +unsigned int rf60x_connect(void *dev, char* hostAddress, unsigned int port); -bool rf60x_disconnect(rf60x_t *dev); +unsigned int rf60x_disconnect(void *dev); -bool rf60x_get_measure_udp(rf60x_t *dev, void *measure); +unsigned int rf60x_get_measure_udp(void *dev, void *measure); -bool rf60x_open_port_uart(rf60x_t *dev); +unsigned int rf60x_bino_get_measure_udp(void *dev, void *measure); -namespace_struct_wrapper::uart_hello_t rf60x_hello_msg_uart(rf60x_t *dev); +unsigned int rf60x_open_port_uart(void *dev); -void rf60x_change_config_port_uart(rf60x_t *dev); +uart_hello_t_c rf60x_hello_msg_uart(void *dev); -void rf60x_close_port_uart(rf60x_t *dev); +void rf60x_change_config_port_uart(void *dev); -bool rf60x_get_measure_uart(rf60x_t *dev, void *measure, namespace_struct_wrapper::PROTOCOL_MEASURE_UART type); +void rf60x_close_port_uart(void *dev); -bool rf60x_get_single_measure(rf60x_t *dev, unsigned char address, void *measure); +unsigned int rf60x_get_measure_uart(void *dev, void *measure, unsigned int type); -bool rf60x_send_command_modbus(rf60x_t *dev, const namespace_struct_wrapper::modbus_rtu_command &command); +unsigned int rf60x_get_single_measure(void *dev, unsigned char address, void *measure); -bool rf60x_receive_data_modbus(rf60x_t *dev, unsigned short *buffer); +unsigned int rf60x_send_command_modbus(void *dev, modbus_rtu_command_c *command); -bool rf60x_read_params_uart(rf60x_t *dev); +unsigned int rf60x_receive_data_modbus(void *dev, unsigned short *buffer); -bool rf60x_write_params_uart(rf60x_t *dev); +unsigned int rf60x_read_params_uart(void *dev); -bool r60x_restore_params(rf60x_t *dev); +unsigned int rf60x_write_params_uart(void *dev); -bool rf60x_send_command(rf60x_t *dev, namespace_struct_wrapper::COMMAND_UART CMD); +unsigned int r60x_restore_params(void *dev); + +unsigned int rf60x_send_command(void *dev, unsigned int CMD); //param_t *rf60x_get_param(rf60x_t, char *param_name); //param_t *rf60x_get_param(rf60x_t, PARAM_NAME_KEY param_name); -//bool rf60x_set_param(rf60x_t, param_t *param); -//bool rf60x_set_param(rf60x_t, const char *param_name, ...); -//bool rf60x_set_param(rf60x_t, int param_id, ...); +//unsigned int rf60x_set_param(rf60x_t, param_t *param); +//unsigned int rf60x_set_param(rf60x_t, const char *param_name, ...); +//unsigned int rf60x_set_param(rf60x_t, int param_id, ...); #ifdef __cplusplus } diff --git a/wrappers/LabVIEW/rf60Xsdk/rf60xtypes_c.h b/wrappers/LabVIEW/rf60Xsdk/rf60xtypes_c.h index 4fd8376..4940a0a 100644 --- a/wrappers/LabVIEW/rf60Xsdk/rf60xtypes_c.h +++ b/wrappers/LabVIEW/rf60Xsdk/rf60xtypes_c.h @@ -1,40 +1,41 @@ #ifndef RF60XTYPES_C_H #define RF60XTYPES_C_H -typedef struct { +#pragma pack(push, 1) +//typedef struct { typedef struct { unsigned short measure; unsigned short rotationMarks; unsigned short encoderValue; - } uart_result_with_encoder_t; + } uart_result_with_encoder_t_c; typedef struct { unsigned short value; unsigned char status; - } udp_value_t; + } udp_value_t_c; typedef struct { - udp_value_t rf60xValArray[168]; + udp_value_t_c rf60xValArray[168]; unsigned short deviceSerial; unsigned short deviceBaseDistance; unsigned short deviceMeasureRange; unsigned char packCount; unsigned char packetControlSumm; - } udp_measure_t; + } udp_measure_t_c; typedef struct { unsigned short value; unsigned char count; unsigned char status; unsigned char reserverd; - } uart_stream_measure_t; + } uart_stream_measure_t_c; typedef struct { unsigned short value; unsigned char status; unsigned char dir; unsigned char cnt; - } uart_stream_advanced_measure_t; + } uart_stream_advanced_measure_t_c; typedef struct { unsigned short value; @@ -42,16 +43,16 @@ typedef struct { unsigned char dir; unsigned char cnt; unsigned short cnt_stream; - } uart_stream_modified_measure_t; + } uart_stream_modified_measure_t_c; typedef struct { unsigned short measure; unsigned short exposition; unsigned char status; - } binocular_udp_value_t; + } binocular_udp_value_t_c; typedef struct { - binocular_udp_value_t rf60xBValArray[100]; + binocular_udp_value_t_c rf60xBValArray[100]; unsigned short reserved; unsigned short reserved2; unsigned short deviceSerial; @@ -59,7 +60,7 @@ typedef struct { unsigned short deviceMeasureRange; unsigned char packCount; unsigned char packetControlSumm; - } binocular_udp_measure_t; + } binocular_udp_measure_t_c; typedef struct { unsigned char deviceType; @@ -68,7 +69,7 @@ typedef struct { unsigned short deviceMaxDistance; unsigned short deviceRange; - } uart_hello_t; + } uart_hello_t_c; typedef struct { unsigned char id; @@ -76,11 +77,11 @@ typedef struct { unsigned short address; unsigned short count_or_value; unsigned short crc; - } modbus_rtu_command; + } modbus_rtu_command_c; +#pragma pack(pop) + enum SCANNER_TYPE_C { RF60x = 1, RF60xHS = 2, RF60xB = 3 }; - enum SCANNER_TYPE { RF60x = 1, RF60xHS = 2, RF60xB = 3 }; - - enum PROTOCOLS { + enum PROTOCOLS_C { RIFTEK_BIN_PROTOCOL = 1, ASCII = 2, MODBUS_RTU = 3, @@ -135,7 +136,7 @@ typedef struct { "auto_of_the_stream", "protocols_interface", };*/ - enum PARAM_NAME_KEY { + enum PARAM_NAME_KEY_C { USER_POWER = 0, POWER_ANALOG_OUTPUT, CONTROL_OF_AVERAGING, @@ -185,7 +186,7 @@ typedef struct { PROTOCOLS_INTERFACE }; - enum PARAM_VALUE_TYPE { + enum PARAM_VALUE_TYPE_C { UNKN_PARAM_TYPE = 0, UINT8_PARAM_TYPE, UINT_PARAM_TYPE, @@ -203,7 +204,7 @@ typedef struct { STRING_PARAM_TYPE }; - enum BAUR_RATE_UART { + enum BAUR_RATE_UART_C { Baud9600 = 0x04, Baud115200 = 0x30, Baud230400 = 0x60, @@ -212,7 +213,7 @@ typedef struct { }; - enum COMMAND_UART { + enum COMMAND_UART_C { WRITEPARAM = 0x03, SAVETOFLASH = 0x04, RESTOREFORMFLASH = 0x04, @@ -223,7 +224,7 @@ typedef struct { STOP_STREAM = 0x08 }; - enum PROTOCOL_MEASURE_UART { + enum PROTOCOL_MEASURE_UART_C { UART_STREAM_MEASURE_T = 4, UART_STREAM_ADVANCED_MEASURE_T = 6, UART_STREAM_MODIFIED_MEASURE_T = 10, @@ -232,13 +233,13 @@ typedef struct { }; typedef struct { - SCANNER_TYPE type; - BAUR_RATE_UART baud_rate; + SCANNER_TYPE_C type; + BAUR_RATE_UART_C baud_rate; unsigned char network_address; char* number_serial_port; - PROTOCOLS protocol; + PROTOCOLS_C protocol; char* recv_ip_addrs; - } config_base_information_rf60x_t; -}namespace_struct_wrapper; + } config_base_information_rf60x_t_c; +//}namespace_struct_wrapper; #endif // RF60XTYPES_C_H -- GitLab