├── .clang-format ├── .editorconfig ├── .github └── workflows │ └── build-binary.yml ├── .gitignore ├── License.md ├── README.md ├── common ├── dap.hpp ├── git_info.cpp ├── git_info.props ├── git_info.vcxproj ├── git_info.vcxproj.filters ├── git_info.vcxproj.user ├── ipc_common.hpp ├── proxy_export.hpp ├── rddi.h ├── rddi_dap.h ├── rddi_dap_cmsis.h ├── rddi_dap_jtag.h └── rddi_dap_swo.h ├── docs ├── elaphureLink_architecture.png ├── proxy_api.md ├── proxy_protocol.html ├── proxy_protocol.md ├── server_providers_document.md └── vendor_command.md ├── elaphureLink.Wpf ├── .gitattributes ├── .gitignore ├── App.config ├── App.xaml ├── App.xaml.cs ├── Config │ └── NLog.config ├── Converters │ ├── BooleanInverseConverter.cs │ ├── BooleanToStatusColorConverter.cs │ ├── BooleanToStringConverter.cs │ ├── ItemCountConverter.cs │ └── MultiBooleanToVisibilityConverter.cs ├── Core │ ├── ContentDialogMaker.cs │ ├── Core.cs │ ├── Driver │ │ ├── DriverInstallHelper │ │ │ ├── App.config │ │ │ ├── DriverInstallHelper.csproj │ │ │ ├── FodyWeavers.xml │ │ │ ├── Program.cs │ │ │ ├── Properties │ │ │ │ └── AssemblyInfo.cs │ │ │ └── packages.config │ │ └── DriverService.cs │ ├── ISettingsService.cs │ ├── Log │ │ ├── DataGridDataItem.cs │ │ └── DataGridDataSource.cs │ ├── SettingsService.cs │ └── WpfUpdate.cs ├── DesignTimeResources.xaml ├── FodyWeavers.xml ├── MainWindow.xaml ├── MainWindow.xaml.cs ├── Messenger │ └── ProxyStatusMessage.cs ├── NLog.config ├── Pages │ ├── ExitConfirmDialog.xaml │ ├── ExitConfirmDialog.xaml.cs │ ├── HomePage.xaml │ ├── HomePage.xaml.cs │ ├── InfoPage.xaml │ ├── InfoPage.xaml.cs │ ├── InstallPathConfirmDialog.xaml │ ├── InstallPathConfirmDialog.xaml.cs │ ├── LogPage.xaml │ ├── LogPage.xaml.cs │ ├── RootPage.xaml │ ├── RootPage.xaml.cs │ ├── SettingPage.xaml │ └── SettingPage.xaml.cs ├── Properties │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ ├── Resources.resx │ ├── Settings.Designer.cs │ ├── Settings.settings │ ├── app.manifest │ └── i18n │ │ ├── lang.Designer.cs │ │ ├── lang.fr-FR.resx │ │ ├── lang.resx │ │ └── lang.zh-CN.resx ├── Resources │ ├── Converter.xaml │ ├── DataGrid.xaml │ ├── Svg.xaml │ └── TextStyles.xaml ├── ViewModel │ ├── HomePageViewModel.cs │ ├── InfoPageViewModel.cs │ └── ViewModelLocator.cs ├── costura64 │ └── .gitignore └── elaphureLink.Wpf.csproj ├── elaphureLink.sln ├── elaphureLinkAGDI ├── .editorconfig ├── AGDI.H ├── AGSI.h ├── ALLOC.H ├── BOM.H ├── COMTYP.H ├── ChangeLog.txt ├── DbgCM │ ├── AGDI.CPP │ ├── BreakResources.cpp │ ├── BreakResources.h │ ├── CCBPropertySheet.cpp │ ├── CCBPropertySheet.h │ ├── COLLECT.H │ ├── CSTF.cpp │ ├── CSTF.h │ ├── CTI.cpp │ ├── CTI.h │ ├── ChangeLog.txt │ ├── DSMonitor.cpp │ ├── DSMonitor.h │ ├── DbgCM.cpp │ ├── DbgCM.def │ ├── DbgCM.h │ ├── DbgCM.rc │ ├── DbgCM.vcxproj │ ├── DbgCM.vcxproj.filters │ ├── DbgCM.vcxproj.user │ ├── Debug.cpp │ ├── Debug.h │ ├── DebugAccess.cpp │ ├── DebugAccess.h │ ├── ELF.cpp │ ├── ELF.h │ ├── ETB.cpp │ ├── ETB.h │ ├── Flash.cpp │ ├── Flash.h │ ├── Flash │ │ └── FlashOS.h │ ├── JTAG.cpp │ ├── JTAG.h │ ├── PDSCDebug.cpp │ ├── PDSCDebug.h │ ├── ReadMe.txt │ ├── SWD.cpp │ ├── SWD.h │ ├── SWV.cpp │ ├── SWV.h │ ├── Setup.cpp │ ├── Setup.h │ ├── SetupDbg.cpp │ ├── SetupDbg.h │ ├── SetupFD.cpp │ ├── SetupFD.h │ ├── SetupPdsc.cpp │ ├── SetupPdsc.h │ ├── SetupTrc.cpp │ ├── SetupTrc.h │ ├── Trace.cpp │ ├── Trace.h │ ├── TraceExc.cpp │ ├── TraceExc.h │ ├── TraceRec.cpp │ ├── TraceRec.h │ ├── TraceTypes.h │ ├── TraceWinConnect.cpp │ ├── TraceWinConnect.h │ ├── dllmodul.cpp │ ├── rddi_dll.cpp │ ├── rddi_dll.hpp │ ├── res │ │ ├── DbgCM.rc2 │ │ └── load.bmp │ ├── resource.h │ ├── stdafx.cpp │ ├── stdafx.h │ └── targetver.h ├── PDSCDebugEngine.h ├── TraceDat.h ├── TracePointDefs.h ├── TraceView │ ├── TraceDataIf.h │ └── TraceDataTypes.h ├── UVSOCK.h └── agdi_types.h ├── elaphureLinkProxy ├── SocketClient.hpp ├── dllmain.cpp ├── elaphureLinkProxy.vcxproj ├── elaphureLinkProxy.vcxproj.filters ├── elaphureLinkProxy.vcxproj.user ├── packages.config ├── pch.cpp ├── pch.h ├── protocol.cpp ├── protocol.hpp └── proxy.cpp ├── elaphureLinkRDDI ├── ElaphureLinkRDDIContext.cpp ├── ElaphureLinkRDDIContext.h ├── dap_jtag.cpp ├── dap_swo.cpp ├── data │ ├── device_jtag_idcode.cpp │ └── device_jtag_idcode.h ├── dllmain.cpp ├── elaphureLinkRDDI.vcxproj ├── elaphureLinkRDDI.vcxproj.filters ├── elaphureLinkRDDI.vcxproj.user ├── framework.h ├── packages.config ├── pch.cpp ├── pch.h └── rddi_dap.cpp ├── test ├── misc │ ├── asio_1 │ │ ├── README.md │ │ ├── UnitTest1 │ │ │ ├── UnitTest1.cpp │ │ │ ├── UnitTest1.vcxproj │ │ │ ├── UnitTest1.vcxproj.filters │ │ │ ├── UnitTest1.vcxproj.user │ │ │ ├── pch.cpp │ │ │ └── pch.h │ │ ├── asio_1.cpp │ │ ├── asio_1.sln │ │ ├── asio_1.vcxproj │ │ ├── asio_1.vcxproj.filters │ │ └── asio_1.vcxproj.user │ └── ipc │ │ ├── .gitignore │ │ ├── ipc-p1 │ │ ├── framework.h │ │ ├── ipc-p1.cpp │ │ ├── ipc-p1.vcxproj │ │ ├── ipc-p1.vcxproj.filters │ │ ├── ipc-p1.vcxproj.user │ │ ├── pch.cpp │ │ └── pch.h │ │ ├── ipc-p2 │ │ ├── framework.h │ │ ├── ipc-p2.cpp │ │ ├── ipc-p2.vcxproj │ │ ├── ipc-p2.vcxproj.filters │ │ ├── ipc-p2.vcxproj.user │ │ ├── pch.cpp │ │ └── pch.h │ │ ├── ipc.sln │ │ ├── ipc_common.h │ │ ├── p1-test │ │ ├── p1-test.cpp │ │ ├── p1-test.vcxproj │ │ ├── p1-test.vcxproj.filters │ │ └── p1-test.vcxproj.user │ │ ├── p2-test │ │ ├── p2-test.cpp │ │ ├── p2-test.vcxproj │ │ ├── p2-test.vcxproj.filters │ │ └── p2-test.vcxproj.user │ │ └── unittest │ │ ├── pch.cpp │ │ ├── pch.h │ │ ├── unittest.cpp │ │ ├── unittest.vcxproj │ │ ├── unittest.vcxproj.filters │ │ └── unittest.vcxproj.user ├── proxy_test │ ├── pch.cpp │ ├── pch.h │ ├── proxy_test.cpp │ ├── proxy_test.vcxproj │ ├── proxy_test.vcxproj.filters │ └── proxy_test.vcxproj.user └── uv_project │ ├── .gitignore │ └── stm32f103c8 │ ├── RTE │ ├── Device │ │ └── STM32F103C8 │ │ │ ├── RTE_Device.h │ │ │ ├── startup_stm32f10x_md.s │ │ │ └── system_stm32f10x.c │ └── _Target_1 │ │ └── RTE_Components.h │ ├── main.c │ ├── minial.uvoptx │ └── minial.uvprojx └── thirdparty └── asio ├── COPYING ├── LICENSE_1_0.txt ├── README └── include ├── asio.hpp └── asio ├── any_io_executor.hpp ├── associated_allocator.hpp ├── associated_cancellation_slot.hpp ├── associated_executor.hpp ├── associator.hpp ├── async_result.hpp ├── awaitable.hpp ├── basic_datagram_socket.hpp ├── basic_deadline_timer.hpp ├── basic_file.hpp ├── basic_io_object.hpp ├── basic_random_access_file.hpp ├── basic_raw_socket.hpp ├── basic_readable_pipe.hpp ├── basic_seq_packet_socket.hpp ├── basic_serial_port.hpp ├── basic_signal_set.hpp ├── basic_socket.hpp ├── basic_socket_acceptor.hpp ├── basic_socket_iostream.hpp ├── basic_socket_streambuf.hpp ├── basic_stream_file.hpp ├── basic_stream_socket.hpp ├── basic_streambuf.hpp ├── basic_streambuf_fwd.hpp ├── basic_waitable_timer.hpp ├── basic_writable_pipe.hpp ├── bind_allocator.hpp ├── bind_cancellation_slot.hpp ├── bind_executor.hpp ├── buffer.hpp ├── buffer_registration.hpp ├── buffered_read_stream.hpp ├── buffered_read_stream_fwd.hpp ├── buffered_stream.hpp ├── buffered_stream_fwd.hpp ├── buffered_write_stream.hpp ├── buffered_write_stream_fwd.hpp ├── buffers_iterator.hpp ├── cancellation_signal.hpp ├── cancellation_state.hpp ├── cancellation_type.hpp ├── co_spawn.hpp ├── completion_condition.hpp ├── compose.hpp ├── connect.hpp ├── connect_pipe.hpp ├── coroutine.hpp ├── deadline_timer.hpp ├── defer.hpp ├── detached.hpp ├── detail ├── array.hpp ├── array_fwd.hpp ├── assert.hpp ├── atomic_count.hpp ├── base_from_cancellation_state.hpp ├── base_from_completion_cond.hpp ├── bind_handler.hpp ├── blocking_executor_op.hpp ├── buffer_resize_guard.hpp ├── buffer_sequence_adapter.hpp ├── buffered_stream_storage.hpp ├── bulk_executor_op.hpp ├── call_stack.hpp ├── chrono.hpp ├── chrono_time_traits.hpp ├── completion_handler.hpp ├── concurrency_hint.hpp ├── conditionally_enabled_event.hpp ├── conditionally_enabled_mutex.hpp ├── config.hpp ├── consuming_buffers.hpp ├── cstddef.hpp ├── cstdint.hpp ├── date_time_fwd.hpp ├── deadline_timer_service.hpp ├── dependent_type.hpp ├── descriptor_ops.hpp ├── descriptor_read_op.hpp ├── descriptor_write_op.hpp ├── dev_poll_reactor.hpp ├── epoll_reactor.hpp ├── event.hpp ├── eventfd_select_interrupter.hpp ├── executor_function.hpp ├── executor_op.hpp ├── fd_set_adapter.hpp ├── fenced_block.hpp ├── functional.hpp ├── future.hpp ├── gcc_arm_fenced_block.hpp ├── gcc_hppa_fenced_block.hpp ├── gcc_sync_fenced_block.hpp ├── gcc_x86_fenced_block.hpp ├── global.hpp ├── handler_alloc_helpers.hpp ├── handler_cont_helpers.hpp ├── handler_invoke_helpers.hpp ├── handler_tracking.hpp ├── handler_type_requirements.hpp ├── handler_work.hpp ├── hash_map.hpp ├── impl │ ├── buffer_sequence_adapter.ipp │ ├── descriptor_ops.ipp │ ├── dev_poll_reactor.hpp │ ├── dev_poll_reactor.ipp │ ├── epoll_reactor.hpp │ ├── epoll_reactor.ipp │ ├── eventfd_select_interrupter.ipp │ ├── handler_tracking.ipp │ ├── io_uring_descriptor_service.ipp │ ├── io_uring_file_service.ipp │ ├── io_uring_service.hpp │ ├── io_uring_service.ipp │ ├── io_uring_socket_service_base.ipp │ ├── kqueue_reactor.hpp │ ├── kqueue_reactor.ipp │ ├── null_event.ipp │ ├── pipe_select_interrupter.ipp │ ├── posix_event.ipp │ ├── posix_mutex.ipp │ ├── posix_serial_port_service.ipp │ ├── posix_thread.ipp │ ├── posix_tss_ptr.ipp │ ├── reactive_descriptor_service.ipp │ ├── reactive_socket_service_base.ipp │ ├── resolver_service_base.ipp │ ├── scheduler.ipp │ ├── select_reactor.hpp │ ├── select_reactor.ipp │ ├── service_registry.hpp │ ├── service_registry.ipp │ ├── signal_set_service.ipp │ ├── socket_ops.ipp │ ├── socket_select_interrupter.ipp │ ├── strand_executor_service.hpp │ ├── strand_executor_service.ipp │ ├── strand_service.hpp │ ├── strand_service.ipp │ ├── thread_context.ipp │ ├── throw_error.ipp │ ├── timer_queue_ptime.ipp │ ├── timer_queue_set.ipp │ ├── win_event.ipp │ ├── win_iocp_file_service.ipp │ ├── win_iocp_handle_service.ipp │ ├── win_iocp_io_context.hpp │ ├── win_iocp_io_context.ipp │ ├── win_iocp_serial_port_service.ipp │ ├── win_iocp_socket_service_base.ipp │ ├── win_mutex.ipp │ ├── win_object_handle_service.ipp │ ├── win_static_mutex.ipp │ ├── win_thread.ipp │ ├── win_tss_ptr.ipp │ ├── winrt_ssocket_service_base.ipp │ ├── winrt_timer_scheduler.hpp │ ├── winrt_timer_scheduler.ipp │ └── winsock_init.ipp ├── io_control.hpp ├── io_object_impl.hpp ├── io_uring_descriptor_read_at_op.hpp ├── io_uring_descriptor_read_op.hpp ├── io_uring_descriptor_service.hpp ├── io_uring_descriptor_write_at_op.hpp ├── io_uring_descriptor_write_op.hpp ├── io_uring_file_service.hpp ├── io_uring_null_buffers_op.hpp ├── io_uring_operation.hpp ├── io_uring_service.hpp ├── io_uring_socket_accept_op.hpp ├── io_uring_socket_connect_op.hpp ├── io_uring_socket_recv_op.hpp ├── io_uring_socket_recvfrom_op.hpp ├── io_uring_socket_recvmsg_op.hpp ├── io_uring_socket_send_op.hpp ├── io_uring_socket_sendto_op.hpp ├── io_uring_socket_service.hpp ├── io_uring_socket_service_base.hpp ├── io_uring_wait_op.hpp ├── is_buffer_sequence.hpp ├── is_executor.hpp ├── keyword_tss_ptr.hpp ├── kqueue_reactor.hpp ├── limits.hpp ├── local_free_on_block_exit.hpp ├── macos_fenced_block.hpp ├── memory.hpp ├── mutex.hpp ├── non_const_lvalue.hpp ├── noncopyable.hpp ├── null_event.hpp ├── null_fenced_block.hpp ├── null_global.hpp ├── null_mutex.hpp ├── null_reactor.hpp ├── null_signal_blocker.hpp ├── null_socket_service.hpp ├── null_static_mutex.hpp ├── null_thread.hpp ├── null_tss_ptr.hpp ├── object_pool.hpp ├── old_win_sdk_compat.hpp ├── op_queue.hpp ├── operation.hpp ├── pipe_select_interrupter.hpp ├── pop_options.hpp ├── posix_event.hpp ├── posix_fd_set_adapter.hpp ├── posix_global.hpp ├── posix_mutex.hpp ├── posix_serial_port_service.hpp ├── posix_signal_blocker.hpp ├── posix_static_mutex.hpp ├── posix_thread.hpp ├── posix_tss_ptr.hpp ├── push_options.hpp ├── reactive_descriptor_service.hpp ├── reactive_null_buffers_op.hpp ├── reactive_socket_accept_op.hpp ├── reactive_socket_connect_op.hpp ├── reactive_socket_recv_op.hpp ├── reactive_socket_recvfrom_op.hpp ├── reactive_socket_recvmsg_op.hpp ├── reactive_socket_send_op.hpp ├── reactive_socket_sendto_op.hpp ├── reactive_socket_service.hpp ├── reactive_socket_service_base.hpp ├── reactive_wait_op.hpp ├── reactor.hpp ├── reactor_op.hpp ├── reactor_op_queue.hpp ├── recycling_allocator.hpp ├── regex_fwd.hpp ├── resolve_endpoint_op.hpp ├── resolve_op.hpp ├── resolve_query_op.hpp ├── resolver_service.hpp ├── resolver_service_base.hpp ├── scheduler.hpp ├── scheduler_operation.hpp ├── scheduler_task.hpp ├── scheduler_thread_info.hpp ├── scoped_lock.hpp ├── scoped_ptr.hpp ├── select_interrupter.hpp ├── select_reactor.hpp ├── service_registry.hpp ├── signal_blocker.hpp ├── signal_handler.hpp ├── signal_init.hpp ├── signal_op.hpp ├── signal_set_service.hpp ├── socket_holder.hpp ├── socket_ops.hpp ├── socket_option.hpp ├── socket_select_interrupter.hpp ├── socket_types.hpp ├── solaris_fenced_block.hpp ├── source_location.hpp ├── static_mutex.hpp ├── std_event.hpp ├── std_fenced_block.hpp ├── std_global.hpp ├── std_mutex.hpp ├── std_static_mutex.hpp ├── std_thread.hpp ├── strand_executor_service.hpp ├── strand_service.hpp ├── string_view.hpp ├── thread.hpp ├── thread_context.hpp ├── thread_group.hpp ├── thread_info_base.hpp ├── throw_error.hpp ├── throw_exception.hpp ├── timer_queue.hpp ├── timer_queue_base.hpp ├── timer_queue_ptime.hpp ├── timer_queue_set.hpp ├── timer_scheduler.hpp ├── timer_scheduler_fwd.hpp ├── tss_ptr.hpp ├── type_traits.hpp ├── variadic_templates.hpp ├── wait_handler.hpp ├── wait_op.hpp ├── win_event.hpp ├── win_fd_set_adapter.hpp ├── win_fenced_block.hpp ├── win_global.hpp ├── win_iocp_file_service.hpp ├── win_iocp_handle_read_op.hpp ├── win_iocp_handle_service.hpp ├── win_iocp_handle_write_op.hpp ├── win_iocp_io_context.hpp ├── win_iocp_null_buffers_op.hpp ├── win_iocp_operation.hpp ├── win_iocp_overlapped_op.hpp ├── win_iocp_overlapped_ptr.hpp ├── win_iocp_serial_port_service.hpp ├── win_iocp_socket_accept_op.hpp ├── win_iocp_socket_connect_op.hpp ├── win_iocp_socket_recv_op.hpp ├── win_iocp_socket_recvfrom_op.hpp ├── win_iocp_socket_recvmsg_op.hpp ├── win_iocp_socket_send_op.hpp ├── win_iocp_socket_service.hpp ├── win_iocp_socket_service_base.hpp ├── win_iocp_thread_info.hpp ├── win_iocp_wait_op.hpp ├── win_mutex.hpp ├── win_object_handle_service.hpp ├── win_static_mutex.hpp ├── win_thread.hpp ├── win_tss_ptr.hpp ├── winapp_thread.hpp ├── wince_thread.hpp ├── winrt_async_manager.hpp ├── winrt_async_op.hpp ├── winrt_resolve_op.hpp ├── winrt_resolver_service.hpp ├── winrt_socket_connect_op.hpp ├── winrt_socket_recv_op.hpp ├── winrt_socket_send_op.hpp ├── winrt_ssocket_service.hpp ├── winrt_ssocket_service_base.hpp ├── winrt_timer_scheduler.hpp ├── winrt_utils.hpp ├── winsock_init.hpp ├── work_dispatcher.hpp └── wrapped_handler.hpp ├── dispatch.hpp ├── error.hpp ├── error_code.hpp ├── execution.hpp ├── execution ├── allocator.hpp ├── any_executor.hpp ├── bad_executor.hpp ├── blocking.hpp ├── blocking_adaptation.hpp ├── bulk_execute.hpp ├── bulk_guarantee.hpp ├── connect.hpp ├── context.hpp ├── context_as.hpp ├── detail │ ├── as_invocable.hpp │ ├── as_operation.hpp │ ├── as_receiver.hpp │ ├── bulk_sender.hpp │ ├── submit_receiver.hpp │ └── void_receiver.hpp ├── execute.hpp ├── executor.hpp ├── impl │ ├── bad_executor.ipp │ └── receiver_invocation_error.ipp ├── invocable_archetype.hpp ├── mapping.hpp ├── occupancy.hpp ├── operation_state.hpp ├── outstanding_work.hpp ├── prefer_only.hpp ├── receiver.hpp ├── receiver_invocation_error.hpp ├── relationship.hpp ├── schedule.hpp ├── scheduler.hpp ├── sender.hpp ├── set_done.hpp ├── set_error.hpp ├── set_value.hpp ├── start.hpp └── submit.hpp ├── execution_context.hpp ├── executor.hpp ├── executor_work_guard.hpp ├── experimental ├── append.hpp ├── as_single.hpp ├── as_tuple.hpp ├── awaitable_operators.hpp ├── basic_channel.hpp ├── basic_concurrent_channel.hpp ├── cancellation_condition.hpp ├── channel.hpp ├── channel_error.hpp ├── channel_traits.hpp ├── co_spawn.hpp ├── concurrent_channel.hpp ├── coro.hpp ├── coro_traits.hpp ├── deferred.hpp ├── detail │ ├── channel_handler.hpp │ ├── channel_message.hpp │ ├── channel_operation.hpp │ ├── channel_payload.hpp │ ├── channel_receive_op.hpp │ ├── channel_send_functions.hpp │ ├── channel_send_op.hpp │ ├── channel_service.hpp │ ├── completion_handler_erasure.hpp │ ├── coro_promise_allocator.hpp │ ├── has_signature.hpp │ ├── impl │ │ └── channel_service.hpp │ └── partial_promise.hpp ├── impl │ ├── append.hpp │ ├── as_single.hpp │ ├── as_tuple.hpp │ ├── channel_error.ipp │ ├── coro.hpp │ ├── deferred.hpp │ ├── parallel_group.hpp │ ├── prepend.hpp │ ├── promise.hpp │ └── use_coro.hpp ├── parallel_group.hpp ├── prepend.hpp ├── promise.hpp └── use_coro.hpp ├── file_base.hpp ├── generic ├── basic_endpoint.hpp ├── datagram_protocol.hpp ├── detail │ ├── endpoint.hpp │ └── impl │ │ └── endpoint.ipp ├── raw_protocol.hpp ├── seq_packet_protocol.hpp └── stream_protocol.hpp ├── handler_alloc_hook.hpp ├── handler_continuation_hook.hpp ├── handler_invoke_hook.hpp ├── high_resolution_timer.hpp ├── impl ├── any_io_executor.ipp ├── awaitable.hpp ├── buffered_read_stream.hpp ├── buffered_write_stream.hpp ├── cancellation_signal.ipp ├── co_spawn.hpp ├── compose.hpp ├── connect.hpp ├── connect_pipe.hpp ├── connect_pipe.ipp ├── defer.hpp ├── detached.hpp ├── dispatch.hpp ├── error.ipp ├── error_code.ipp ├── execution_context.hpp ├── execution_context.ipp ├── executor.hpp ├── executor.ipp ├── handler_alloc_hook.ipp ├── io_context.hpp ├── io_context.ipp ├── multiple_exceptions.ipp ├── post.hpp ├── read.hpp ├── read_at.hpp ├── read_until.hpp ├── redirect_error.hpp ├── serial_port_base.hpp ├── serial_port_base.ipp ├── spawn.hpp ├── src.hpp ├── system_context.hpp ├── system_context.ipp ├── system_executor.hpp ├── thread_pool.hpp ├── thread_pool.ipp ├── use_awaitable.hpp ├── use_future.hpp ├── write.hpp └── write_at.hpp ├── io_context.hpp ├── io_context_strand.hpp ├── io_service.hpp ├── io_service_strand.hpp ├── ip ├── address.hpp ├── address_v4.hpp ├── address_v4_iterator.hpp ├── address_v4_range.hpp ├── address_v6.hpp ├── address_v6_iterator.hpp ├── address_v6_range.hpp ├── bad_address_cast.hpp ├── basic_endpoint.hpp ├── basic_resolver.hpp ├── basic_resolver_entry.hpp ├── basic_resolver_iterator.hpp ├── basic_resolver_query.hpp ├── basic_resolver_results.hpp ├── detail │ ├── endpoint.hpp │ ├── impl │ │ └── endpoint.ipp │ └── socket_option.hpp ├── host_name.hpp ├── icmp.hpp ├── impl │ ├── address.hpp │ ├── address.ipp │ ├── address_v4.hpp │ ├── address_v4.ipp │ ├── address_v6.hpp │ ├── address_v6.ipp │ ├── basic_endpoint.hpp │ ├── host_name.ipp │ ├── network_v4.hpp │ ├── network_v4.ipp │ ├── network_v6.hpp │ └── network_v6.ipp ├── multicast.hpp ├── network_v4.hpp ├── network_v6.hpp ├── resolver_base.hpp ├── resolver_query_base.hpp ├── tcp.hpp ├── udp.hpp ├── unicast.hpp └── v6_only.hpp ├── is_applicable_property.hpp ├── is_executor.hpp ├── is_read_buffered.hpp ├── is_write_buffered.hpp ├── local ├── basic_endpoint.hpp ├── connect_pair.hpp ├── datagram_protocol.hpp ├── detail │ ├── endpoint.hpp │ └── impl │ │ └── endpoint.ipp └── stream_protocol.hpp ├── multiple_exceptions.hpp ├── packaged_task.hpp ├── placeholders.hpp ├── posix ├── basic_descriptor.hpp ├── basic_stream_descriptor.hpp ├── descriptor.hpp ├── descriptor_base.hpp └── stream_descriptor.hpp ├── post.hpp ├── prefer.hpp ├── query.hpp ├── random_access_file.hpp ├── read.hpp ├── read_at.hpp ├── read_until.hpp ├── readable_pipe.hpp ├── recycling_allocator.hpp ├── redirect_error.hpp ├── registered_buffer.hpp ├── require.hpp ├── require_concept.hpp ├── serial_port.hpp ├── serial_port_base.hpp ├── signal_set.hpp ├── socket_base.hpp ├── spawn.hpp ├── ssl.hpp ├── ssl ├── context.hpp ├── context_base.hpp ├── detail │ ├── buffered_handshake_op.hpp │ ├── engine.hpp │ ├── handshake_op.hpp │ ├── impl │ │ ├── engine.ipp │ │ └── openssl_init.ipp │ ├── io.hpp │ ├── openssl_init.hpp │ ├── openssl_types.hpp │ ├── password_callback.hpp │ ├── read_op.hpp │ ├── shutdown_op.hpp │ ├── stream_core.hpp │ ├── verify_callback.hpp │ └── write_op.hpp ├── error.hpp ├── host_name_verification.hpp ├── impl │ ├── context.hpp │ ├── context.ipp │ ├── error.ipp │ ├── host_name_verification.ipp │ ├── rfc2818_verification.ipp │ └── src.hpp ├── rfc2818_verification.hpp ├── stream.hpp ├── stream_base.hpp ├── verify_context.hpp └── verify_mode.hpp ├── static_thread_pool.hpp ├── steady_timer.hpp ├── strand.hpp ├── stream_file.hpp ├── streambuf.hpp ├── system_context.hpp ├── system_error.hpp ├── system_executor.hpp ├── system_timer.hpp ├── this_coro.hpp ├── thread.hpp ├── thread_pool.hpp ├── time_traits.hpp ├── traits ├── bulk_execute_free.hpp ├── bulk_execute_member.hpp ├── connect_free.hpp ├── connect_member.hpp ├── equality_comparable.hpp ├── execute_free.hpp ├── execute_member.hpp ├── prefer_free.hpp ├── prefer_member.hpp ├── query_free.hpp ├── query_member.hpp ├── query_static_constexpr_member.hpp ├── require_concept_free.hpp ├── require_concept_member.hpp ├── require_free.hpp ├── require_member.hpp ├── schedule_free.hpp ├── schedule_member.hpp ├── set_done_free.hpp ├── set_done_member.hpp ├── set_error_free.hpp ├── set_error_member.hpp ├── set_value_free.hpp ├── set_value_member.hpp ├── start_free.hpp ├── start_member.hpp ├── static_query.hpp ├── static_require.hpp ├── static_require_concept.hpp ├── submit_free.hpp └── submit_member.hpp ├── ts ├── buffer.hpp ├── executor.hpp ├── internet.hpp ├── io_context.hpp ├── net.hpp ├── netfwd.hpp ├── socket.hpp └── timer.hpp ├── unyield.hpp ├── use_awaitable.hpp ├── use_future.hpp ├── uses_executor.hpp ├── version.hpp ├── wait_traits.hpp ├── windows ├── basic_object_handle.hpp ├── basic_overlapped_handle.hpp ├── basic_random_access_handle.hpp ├── basic_stream_handle.hpp ├── object_handle.hpp ├── overlapped_handle.hpp ├── overlapped_ptr.hpp ├── random_access_handle.hpp └── stream_handle.hpp ├── writable_pipe.hpp ├── write.hpp ├── write_at.hpp └── yield.hpp /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8-bom 5 | end_of_line = crlf -------------------------------------------------------------------------------- /.github/workflows/build-binary.yml: -------------------------------------------------------------------------------- 1 | name: Build Binary 2 | 3 | on: 4 | push: 5 | paths-ignore: 6 | - '*.md' 7 | - 'assets/**' 8 | pull_request: 9 | paths-ignore: 10 | - '*.md' 11 | - 'assets/**' 12 | 13 | jobs: 14 | build: 15 | runs-on: windows-2019 16 | env: 17 | POWERSHELL_TELEMETRY_OPTOUT: 1 18 | steps: 19 | - uses: actions/checkout@v4 20 | with: 21 | fetch-depth: 0 22 | 23 | - uses: microsoft/setup-msbuild@v1.1 24 | 25 | - name: Clear local NuGet cache (workaround for failed restores on windows-latest) 26 | run: dotnet nuget locals all --clear 27 | 28 | - name: Restore Nuget package 29 | run: msbuild elaphureLink.sln -t:restore -p:RestorePackagesConfig=true 30 | 31 | - name: Build Debug Version 32 | run: msbuild elaphureLink.sln -target:elaphureLinkWpf\elaphureLink_Wpf -m /property:Configuration=Debug 33 | 34 | - name: Build Release Version 35 | run: msbuild elaphureLink.sln -target:elaphureLinkWpf\elaphureLink_Wpf -m /property:Configuration=Release 36 | 37 | - name: Prepare artifacts 38 | run: rm bin\* -vb -Recurse -Force -Include *.exp, *.idb, *.ilk, *.iobj, *.ipdb, *.lastbuildstate, *.lib, *.obj, *.res, *.tlog 39 | 40 | - name: Upload debug version artifacts 41 | uses: actions/upload-artifact@v4 42 | with: 43 | name: elaphureLink_Windows_x64_debug 44 | path: bin/x64/Debug 45 | 46 | - name: Upload release version artifacts 47 | uses: actions/upload-artifact@v4 48 | with: 49 | name: elaphureLink_Windows_x64_release 50 | path: bin/x64/Release -------------------------------------------------------------------------------- /common/dap.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | enum DAPCommandEnum { 4 | ID_DAP_Info = 0x00U, 5 | ID_DAP_HostStatus = 0x01U, 6 | ID_DAP_Connect = 0x02U, 7 | ID_DAP_Disconnect = 0x03U, 8 | ID_DAP_TransferConfigure = 0x04U, 9 | ID_DAP_Transfer = 0x05U, 10 | ID_DAP_TransferBlock = 0x06U, 11 | ID_DAP_TransferAbort = 0x07U, 12 | ID_DAP_WriteABORT = 0x08U, 13 | ID_DAP_Delay = 0x09U, 14 | ID_DAP_ResetTarget = 0x0AU, 15 | ID_DAP_SWJ_Pins = 0x10U, 16 | ID_DAP_SWJ_Clock = 0x11U, 17 | ID_DAP_SWJ_Sequence = 0x12U, 18 | ID_DAP_SWD_Configure = 0x13U, 19 | ID_DAP_SWD_Sequence = 0x1DU, 20 | ID_DAP_JTAG_Sequence = 0x14U, 21 | ID_DAP_JTAG_Configure = 0x15U, 22 | ID_DAP_JTAG_IDCODE = 0x16U, 23 | ID_DAP_SWO_Transport = 0x17U, 24 | ID_DAP_SWO_Mode = 0x18U, 25 | ID_DAP_SWO_Baudrate = 0x19U, 26 | ID_DAP_SWO_Control = 0x1AU, 27 | ID_DAP_SWO_Status = 0x1BU, 28 | ID_DAP_SWO_ExtendedStatus = 0x1EU, 29 | ID_DAP_SWO_Data = 0x1CU, 30 | ID_DAP_QueueCommands = 0x7EU, 31 | ID_DAP_ExecuteCommands = 0x7FU, 32 | }; 33 | 34 | enum DAPResponseEnum { 35 | DAP_RES_OK = 1, 36 | DAP_RES_WAIT = 2, 37 | DAP_RES_FAULT = 4, 38 | DAP_RES_NO_ACK = 7, 39 | DAP_RES_VALUE_MISMATCH = 16, 40 | DAP_RES_ERROR = 0xFF 41 | }; 42 | -------------------------------------------------------------------------------- /common/git_info.cpp: -------------------------------------------------------------------------------- 1 | #include "git_info.hpp" 2 | 3 | #include 4 | 5 | constexpr bool el_isdigit(char c) 6 | { 7 | return c >= '0' && c <= '9'; 8 | } 9 | 10 | template 11 | constexpr int el_git_tag_valid_check(Iterator it) 12 | { 13 | using char_type = typename std::iterator_traits::value_type; 14 | auto start = it; 15 | 16 | int dot_count = 0; 17 | while (*start) { 18 | char_type ch = *start++; 19 | if (ch == '.') { 20 | dot_count++; 21 | } 22 | } 23 | if (dot_count != 3) { // xx.xx.xx.xx 24 | return -1; 25 | } 26 | 27 | start = it; 28 | dot_count = 0; 29 | while (*start) { 30 | char_type ch = *start++; 31 | if (el_isdigit(ch)) { 32 | continue; 33 | } else if (ch == '.') { 34 | dot_count++; 35 | } else { 36 | if (dot_count < 3) { // digit only before third dot 37 | return -1; 38 | } 39 | } 40 | } 41 | 42 | return 0; 43 | } 44 | 45 | // static_assert(el_git_tag_valid_check("01.01x.0.1-x-gabc1230") == -1); 46 | // static_assert(el_git_tag_valid_check("1.1.1.1") == 0); 47 | // static_assert(el_git_tag_valid_check("1.1.1.0-6-ge87f720") == 0); 48 | 49 | static_assert(el_git_tag_valid_check(EL_GIT_TAG_INFO) == 0, "Git tag doesn't match the format requirements!"); 50 | 51 | 52 | // nothing to do 53 | int main() 54 | { 55 | return 0; 56 | } -------------------------------------------------------------------------------- /common/git_info.props: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | $(SolutionDir)common\$(Configuration)\ 7 | 8 | 9 | 10 | FOR /F "tokens=* USEBACKQ" %%F IN (`git --git-dir="$(SolutionDir)\.git" describe`) DO (echo constexpr const char* EL_GIT_TAG_INFO="%%F"; // THIS VALUE IS AUTOMATICALLY GENERATED BY THE BUILD TOOL, DO NOT MODIFY IT!> "$(SolutionDir)\common\git_info.hpp") 11 | 12 | 13 | stdcpp17 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /common/git_info.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /common/git_info.vcxproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | -------------------------------------------------------------------------------- /common/rddi_dap_jtag.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #ifndef RDDI_DAP_JTAG_H 4 | #define RDDI_DAP_JTAG_H 5 | 6 | #include "rddi.h" 7 | 8 | int rddi_cmsis_dap_probe_jtag_device(const RDDIHandle handle, int *noOfDAPs); 9 | 10 | 11 | #endif -------------------------------------------------------------------------------- /docs/elaphureLink_architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/windowsair/elaphureLink/fda237a94f49ba5a4d690e4fcbe4a7cbb25e2216/docs/elaphureLink_architecture.png -------------------------------------------------------------------------------- /elaphureLink.Wpf/Config/NLog.config: -------------------------------------------------------------------------------- 1 |  2 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /elaphureLink.Wpf/Converters/BooleanInverseConverter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using System.Windows.Data; 7 | 8 | namespace elaphureLink.Wpf.Converters 9 | { 10 | 11 | class BooleanInverseConverter : IValueConverter 12 | { 13 | public object Convert(object value, 14 | Type targetType, 15 | object parameter, 16 | System.Globalization.CultureInfo culture) 17 | => !(bool)value; 18 | 19 | public object ConvertBack(object value, 20 | Type targetType, 21 | object parameter, 22 | System.Globalization.CultureInfo culture) 23 | => !(bool)value; 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /elaphureLink.Wpf/Converters/BooleanToStatusColorConverter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using System.Windows.Data; 7 | 8 | namespace elaphureLink.Wpf.Converters 9 | { 10 | 11 | class BooleanToStatusColorConverter : IValueConverter 12 | { 13 | public object Convert(object value, 14 | Type targetType, 15 | object parameter, 16 | System.Globalization.CultureInfo culture) 17 | 18 | => (bool)value ? "Green" : "Red"; 19 | 20 | 21 | public object ConvertBack(object value, 22 | Type targetType, 23 | object parameter, 24 | System.Globalization.CultureInfo culture) 25 | { 26 | throw new NotImplementedException(); 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /elaphureLink.Wpf/Converters/BooleanToStringConverter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using System.Windows.Data; 7 | 8 | namespace elaphureLink.Wpf.Converters 9 | { 10 | class BooleanToStringConverter : IValueConverter 11 | { 12 | public object Convert( 13 | object value, 14 | Type targetType, 15 | object parameter, 16 | System.Globalization.CultureInfo culture 17 | ) => (bool)value ? "True" : "False"; 18 | 19 | public object ConvertBack( 20 | object value, 21 | Type targetType, 22 | object parameter, 23 | System.Globalization.CultureInfo culture 24 | ) 25 | { 26 | throw new NotImplementedException(); 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /elaphureLink.Wpf/Converters/ItemCountConverter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Globalization; 4 | using System.Linq; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | using System.Windows.Data; 8 | 9 | namespace elaphureLink.Wpf.Converters 10 | { 11 | public class ItemCountConverter : IValueConverter 12 | { 13 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 14 | { 15 | if (value is int count) 16 | { 17 | if (count > 1) 18 | { 19 | return $"({count} items)"; 20 | } 21 | else if (count == 1) 22 | { 23 | return $"({count} item)"; 24 | } 25 | } 26 | 27 | return string.Empty; 28 | } 29 | 30 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 31 | { 32 | throw new NotImplementedException(); 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /elaphureLink.Wpf/Converters/MultiBooleanToVisibilityConverter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using System.Windows.Data; 7 | 8 | namespace elaphureLink.Wpf.Converters 9 | { 10 | class MultiBooleanToVisibilityConverter : IMultiValueConverter 11 | { 12 | public object Convert(object[] values, 13 | Type targetType, 14 | object parameter, 15 | System.Globalization.CultureInfo culture) 16 | { 17 | bool visible = false; 18 | foreach (object value in values) 19 | if (value is bool) 20 | visible = visible || (bool)value; 21 | 22 | if (visible) 23 | return System.Windows.Visibility.Visible; 24 | else 25 | return System.Windows.Visibility.Hidden; 26 | } 27 | 28 | public object[] ConvertBack(object value, 29 | Type[] targetTypes, 30 | object parameter, 31 | System.Globalization.CultureInfo culture) 32 | { 33 | throw new NotImplementedException(); 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /elaphureLink.Wpf/Core/Driver/DriverInstallHelper/App.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /elaphureLink.Wpf/Core/Driver/DriverInstallHelper/FodyWeavers.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | -------------------------------------------------------------------------------- /elaphureLink.Wpf/Core/Driver/DriverInstallHelper/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | 6 | [assembly: AssemblyTitle("DriverInstallHelper")] 7 | [assembly: AssemblyDescription("")] 8 | [assembly: AssemblyConfiguration("")] 9 | [assembly: AssemblyCompany("")] 10 | [assembly: AssemblyProduct("DriverInstallHelper")] 11 | [assembly: AssemblyCopyright("")] 12 | [assembly: AssemblyTrademark("")] 13 | [assembly: AssemblyCulture("")] 14 | 15 | 16 | [assembly: ComVisible(false)] 17 | 18 | [assembly: Guid("7ae8f60d-8822-47f3-9223-b3810823cf7d")] 19 | 20 | 21 | [assembly: AssemblyVersion("1.0.0.0")] 22 | [assembly: AssemblyFileVersion("1.0.0.0")] 23 | -------------------------------------------------------------------------------- /elaphureLink.Wpf/Core/Driver/DriverInstallHelper/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /elaphureLink.Wpf/Core/ISettingsService.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace elaphureLink.Wpf.Core.Services 4 | { 5 | /// 6 | /// The default for the settings manager used in the app. 7 | /// 8 | public interface ISettingsService 9 | { 10 | /// 11 | /// Assigns a value to a settings key. 12 | /// 13 | /// The type of the object bound to the key. 14 | /// The key to check. 15 | /// The value to assign to the setting key. 16 | void SetValue(string key, T value); 17 | 18 | /// 19 | /// Reads a value from the current instance and returns its casting in the right type. 20 | /// 21 | /// The type of the object to retrieve. 22 | /// The key associated to the requested object. 23 | T GetValue(string key); 24 | } 25 | 26 | } 27 | 28 | -------------------------------------------------------------------------------- /elaphureLink.Wpf/Core/Log/DataGridDataSource.cs: -------------------------------------------------------------------------------- 1 | using NLog.Targets; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Collections.ObjectModel; 5 | using System.IO; 6 | using System.Linq; 7 | using System.Text; 8 | using System.Threading.Tasks; 9 | using System.Windows; 10 | using System.Windows.Data; 11 | 12 | namespace elaphureLink.Wpf.Core.Log 13 | { 14 | public class DataGridDataSource 15 | { 16 | private static ObservableCollection _items; 17 | 18 | private static CollectionViewSource groupedItems; 19 | private string _cachedSortedColumn = string.Empty; 20 | 21 | // Loading data 22 | public async Task> GetDataAsync() 23 | { 24 | var target = NLog.LogManager.Configuration.FindTargetByName("logMemoryBuffer"); 25 | var logEvents = target.Logs; 26 | 27 | return await Task.Run(() => 28 | { 29 | _items = new ObservableCollection(); 30 | foreach (string logLine in logEvents) 31 | { 32 | string[] values = logLine.Split('|'); 33 | _items.Add( 34 | new DataGridDataItem() 35 | { 36 | log_time = values[0], 37 | log_level = values[1], 38 | log_module = values[2], 39 | log_message = values[3] 40 | } 41 | ); 42 | } 43 | 44 | return _items; 45 | }); 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /elaphureLink.Wpf/Core/SettingsService.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace elaphureLink.Wpf.Core.Services 8 | { 9 | /// 10 | /// A simple that handles the local app settings. 11 | /// 12 | public sealed class SettingsService : ISettingsService 13 | { 14 | /// 15 | /// The with the settings targeted by the current instance. 16 | /// 17 | //private readonly IPropertySet SettingsStorage = null; 18 | //Properties.Settings 19 | //ApplicationData.Current.LocalSettings.Values; 20 | 21 | public SettingsService() 22 | { 23 | // TODO: 24 | } 25 | 26 | /// 27 | public void SetValue(string key, T value) 28 | { 29 | Properties.Settings.Default[key] = value; 30 | } 31 | 32 | /// 33 | public T GetValue(string key) 34 | { 35 | return (T)Properties.Settings.Default[key]; 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /elaphureLink.Wpf/DesignTimeResources.xaml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /elaphureLink.Wpf/FodyWeavers.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | elaphureLinkProxy 5 | 6 | 7 | -------------------------------------------------------------------------------- /elaphureLink.Wpf/MainWindow.xaml: -------------------------------------------------------------------------------- 1 |  29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /elaphureLink.Wpf/Messenger/ProxyStatusMessage.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | using Microsoft.Toolkit.Mvvm.Messaging.Messages; 8 | 9 | namespace elaphureLink.Wpf.Messenger 10 | { 11 | class ProxyStatusChangedMessage : ValueChangedMessage 12 | { 13 | public ProxyStatusChangedMessage(bool value) : base(value) 14 | { 15 | 16 | } 17 | } 18 | 19 | public class ProxyStatusRequestMessage : RequestMessage 20 | { 21 | } 22 | 23 | 24 | 25 | } 26 | -------------------------------------------------------------------------------- /elaphureLink.Wpf/NLog.config: -------------------------------------------------------------------------------- 1 |  2 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /elaphureLink.Wpf/Pages/ExitConfirmDialog.xaml: -------------------------------------------------------------------------------- 1 |  11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /elaphureLink.Wpf/Pages/ExitConfirmDialog.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using System.Windows; 7 | using System.Windows.Controls; 8 | using System.Windows.Data; 9 | using System.Windows.Documents; 10 | using System.Windows.Input; 11 | using System.Windows.Media; 12 | using System.Windows.Media.Imaging; 13 | using System.Windows.Shapes; 14 | 15 | using ModernWpf.Controls; 16 | 17 | namespace elaphureLink.Wpf.Pages 18 | { 19 | 20 | public partial class ExitConfirmDialog : ContentDialog 21 | { 22 | public ExitConfirmDialog() 23 | { 24 | InitializeComponent(); 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /elaphureLink.Wpf/Pages/HomePage.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using System.Windows; 7 | using System.Windows.Controls; 8 | using System.Windows.Data; 9 | using System.Windows.Documents; 10 | using System.Windows.Input; 11 | using System.Windows.Media; 12 | using System.Windows.Media.Imaging; 13 | using System.Windows.Navigation; 14 | using System.Windows.Shapes; 15 | 16 | using elaphureLink.Wpf.ViewModel; 17 | using Microsoft.Toolkit.Mvvm.DependencyInjection; 18 | 19 | namespace elaphureLink.Wpf.Pages 20 | { 21 | public partial class HomePage 22 | { 23 | public HomePage() 24 | { 25 | InitializeComponent(); 26 | 27 | // DataContext = Ioc.Default.GetRequiredService(); 28 | 29 | } 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /elaphureLink.Wpf/Pages/InfoPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using System.Windows; 7 | using System.Windows.Controls; 8 | using System.Windows.Data; 9 | using System.Windows.Documents; 10 | using System.Windows.Input; 11 | using System.Windows.Media; 12 | using System.Windows.Media.Imaging; 13 | using System.Windows.Navigation; 14 | using System.Windows.Shapes; 15 | using ModernWpf; 16 | using ModernWpf.Controls; 17 | using ModernWpf.Media.Animation; 18 | 19 | namespace elaphureLink.Wpf.Pages 20 | { 21 | public partial class InfoPage 22 | { 23 | public InfoPage() 24 | { 25 | this.InitializeComponent(); 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /elaphureLink.Wpf/Pages/InstallPathConfirmDialog.xaml: -------------------------------------------------------------------------------- 1 |  13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /elaphureLink.Wpf/Pages/InstallPathConfirmDialog.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using System.Windows; 7 | using System.Windows.Controls; 8 | using System.Windows.Data; 9 | using System.Windows.Documents; 10 | using System.Windows.Input; 11 | using System.Windows.Media; 12 | using System.Windows.Media.Imaging; 13 | using System.Windows.Shapes; 14 | 15 | namespace elaphureLink.Wpf.Pages 16 | { 17 | public partial class InstallPathConfirmDialog 18 | { 19 | public InstallPathConfirmDialog() 20 | { 21 | InitializeComponent(); 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /elaphureLink.Wpf/Pages/LogPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Diagnostics; 4 | using System.Linq; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | using System.Windows; 8 | using System.Windows.Controls; 9 | using System.Windows.Data; 10 | using System.Windows.Documents; 11 | using System.Windows.Input; 12 | using System.Windows.Media; 13 | using System.Windows.Media.Imaging; 14 | using System.Windows.Navigation; 15 | using System.Windows.Shapes; 16 | 17 | using elaphureLink.Wpf.Core.Log; 18 | 19 | namespace elaphureLink.Wpf.Pages 20 | { 21 | public partial class LogPage 22 | { 23 | private readonly Stopwatch _stopwatch; 24 | private DataGridDataSource _viewModel = new DataGridDataSource(); 25 | private CollectionViewSource _cvs; 26 | 27 | public LogPage() 28 | { 29 | _stopwatch = Stopwatch.StartNew(); 30 | Loaded += OnLoaded; 31 | 32 | InitializeComponent(); 33 | 34 | _cvs = (CollectionViewSource)Resources["cvs"]; 35 | 36 | //GroupingToggle.IsChecked = true; 37 | } 38 | 39 | private async void OnLoaded(object sender, RoutedEventArgs e) 40 | { 41 | Loaded -= OnLoaded; 42 | 43 | DataContext = await _viewModel.GetDataAsync(); 44 | 45 | // var comboBoxColumn = 46 | // dataGrid.Columns.FirstOrDefault(x => x.Header.Equals("Mountain")) 47 | // as DataGridComboBoxColumn; 48 | // if (comboBoxColumn != null) 49 | // { 50 | // comboBoxColumn.ItemsSource = await _viewModel.GetMountains(); 51 | // } 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /elaphureLink.Wpf/Pages/SettingPage.xaml: -------------------------------------------------------------------------------- 1 |  10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /elaphureLink.Wpf/Pages/SettingPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using System.Windows; 7 | using System.Windows.Controls; 8 | using System.Windows.Data; 9 | using System.Windows.Documents; 10 | using System.Windows.Input; 11 | using System.Windows.Media; 12 | using System.Windows.Media.Imaging; 13 | using System.Windows.Navigation; 14 | using System.Windows.Shapes; 15 | 16 | namespace elaphureLink.Wpf.Pages 17 | { 18 | public partial class SettingPage 19 | { 20 | public SettingPage() 21 | { 22 | this.InitializeComponent(); 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /elaphureLink.Wpf/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Resources; 3 | using System.Runtime.CompilerServices; 4 | using System.Runtime.InteropServices; 5 | using System.Windows; 6 | 7 | 8 | [assembly: AssemblyTitle("elaphureLink.Wpf")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("elaphureLink.Wpf")] 13 | [assembly: AssemblyCopyright("Copyright © windowsair. 2022")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | 18 | [assembly: ComVisible(false)] 19 | 20 | 21 | [assembly: ThemeInfo( 22 | ResourceDictionaryLocation.None, 23 | 24 | 25 | ResourceDictionaryLocation.SourceAssembly 26 | 27 | 28 | )] 29 | 30 | 31 | 32 | // [assembly: AssemblyVersion("1.0.*")] 33 | [assembly: AssemblyVersion(ThisAssembly.Git.BaseTag)] 34 | [assembly: AssemblyFileVersion(ThisAssembly.Git.BaseTag)] 35 | -------------------------------------------------------------------------------- /elaphureLink.Wpf/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | dap.local 7 | 8 | 9 | 0 10 | 11 | 12 | False 13 | 14 | 15 | 16 | 17 | 18 | True 19 | 20 | 21 | -------------------------------------------------------------------------------- /elaphureLink.Wpf/Resources/Converter.xaml: -------------------------------------------------------------------------------- 1 |  7 | 8 | True 9 | False 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /elaphureLink.Wpf/Resources/TextStyles.xaml: -------------------------------------------------------------------------------- 1 |  2 | 5 | 6 | 14 | 15 | 16 | 20 | 21 | -------------------------------------------------------------------------------- /elaphureLink.Wpf/ViewModel/InfoPageViewModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | using Microsoft.Toolkit.Mvvm; 8 | using Microsoft.Toolkit.Mvvm.ComponentModel; 9 | using Microsoft.Toolkit.Mvvm.Input; 10 | using Microsoft.Toolkit.Mvvm.Messaging; 11 | 12 | using elaphureLink.Wpf.Core; 13 | 14 | namespace elaphureLink.Wpf.ViewModel 15 | { 16 | class InfoPageViewModel : ObservableObject 17 | { 18 | public InfoPageViewModel() 19 | { 20 | CheckUpdateButtonCommand = new AsyncRelayCommand(CheckUpdateAsync); 21 | } 22 | 23 | 24 | public IAsyncRelayCommand CheckUpdateButtonCommand { get; } 25 | 26 | 27 | private async Task CheckUpdateAsync() 28 | { 29 | await WpfUpdate.UpdateProgram(); 30 | } 31 | 32 | 33 | public string GitVersionText 34 | { 35 | get 36 | { 37 | // Tag == git describe command 38 | return ThisAssembly.Git.Tag + "_" + ThisAssembly.Git.CommitDate; 39 | } 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /elaphureLink.Wpf/ViewModel/ViewModelLocator.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Diagnostics; 4 | using System.Linq; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | using System.Windows; 8 | using Microsoft.Toolkit.Mvvm; 9 | using Microsoft.Toolkit.Mvvm.ComponentModel; 10 | using Microsoft.Toolkit.Mvvm.Input; 11 | 12 | using elaphureLink.Wpf.Core.Services; 13 | using Ninject; 14 | 15 | 16 | using static elaphureLink.Wpf.App; 17 | using System.Runtime.InteropServices; 18 | using NLog.Targets; 19 | 20 | namespace elaphureLink.Wpf.ViewModel 21 | { 22 | class ViewModelLocator 23 | { 24 | public HomePageViewModel HomePageViewModel 25 | { 26 | get { return IocKernel.Get(); } // Loading UserControlViewModel will automatically load the binding for IStorage 27 | } 28 | 29 | public InfoPageViewModel InfoPageViewModel 30 | { 31 | get { return IocKernel.Get(); } 32 | } 33 | 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /elaphureLink.Wpf/costura64/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/windowsair/elaphureLink/fda237a94f49ba5a4d690e4fcbe4a7cbb25e2216/elaphureLink.Wpf/costura64/.gitignore -------------------------------------------------------------------------------- /elaphureLinkAGDI/.editorconfig: -------------------------------------------------------------------------------- 1 | [*] 2 | charset = utf-8-bom 3 | end_of_line = crlf -------------------------------------------------------------------------------- /elaphureLinkAGDI/DbgCM/DbgCM.def: -------------------------------------------------------------------------------- 1 | ; DbgCM.def : Declares the module parameters for the DLL. 2 | 3 | LIBRARY 4 | 5 | EXPORTS 6 | ; Explicit exports can go here 7 | -------------------------------------------------------------------------------- /elaphureLinkAGDI/DbgCM/DbgCM.rc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/windowsair/elaphureLink/fda237a94f49ba5a4d690e4fcbe4a7cbb25e2216/elaphureLinkAGDI/DbgCM/DbgCM.rc -------------------------------------------------------------------------------- /elaphureLinkAGDI/DbgCM/DbgCM.vcxproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | C:\Program Files\KEIL5\UV4\UV4.exe 5 | WindowsLocalDebugger 6 | 7 | 8 | C:\Program Files\KEIL5\UV4\UV4.exe 9 | WindowsLocalDebugger 10 | 11 | -------------------------------------------------------------------------------- /elaphureLinkAGDI/DbgCM/res/DbgCM.rc2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/windowsair/elaphureLink/fda237a94f49ba5a4d690e4fcbe4a7cbb25e2216/elaphureLinkAGDI/DbgCM/res/DbgCM.rc2 -------------------------------------------------------------------------------- /elaphureLinkAGDI/DbgCM/res/load.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/windowsair/elaphureLink/fda237a94f49ba5a4d690e4fcbe4a7cbb25e2216/elaphureLinkAGDI/DbgCM/res/load.bmp -------------------------------------------------------------------------------- /elaphureLinkAGDI/DbgCM/stdafx.cpp: -------------------------------------------------------------------------------- 1 | // stdafx.cpp : source file that includes just the standard includes 2 | // DbgCM.pch will be the pre-compiled header 3 | // stdafx.obj will contain the pre-compiled type information 4 | 5 | #include "stdafx.h" 6 | -------------------------------------------------------------------------------- /elaphureLinkAGDI/DbgCM/stdafx.h: -------------------------------------------------------------------------------- 1 | // stdafx.h : include file for standard system include files, 2 | // or project specific include files that are used frequently, but 3 | // are changed infrequently 4 | 5 | #pragma once 6 | 7 | #ifndef VC_EXTRALEAN 8 | #define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers 9 | #endif 10 | 11 | #include "targetver.h" 12 | 13 | #define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // some CString constructors will be explicit 14 | 15 | #include // MFC core and standard components 16 | #include // MFC extensions 17 | 18 | #ifndef _AFX_NO_OLE_SUPPORT 19 | #include // MFC OLE classes 20 | #include // MFC OLE dialog classes 21 | #include // MFC Automation classes 22 | #endif // _AFX_NO_OLE_SUPPORT 23 | 24 | #ifndef _AFX_NO_DB_SUPPORT 25 | #include // MFC ODBC database classes 26 | #endif // _AFX_NO_DB_SUPPORT 27 | 28 | #ifndef _AFX_NO_DAO_SUPPORT 29 | #include // MFC DAO database classes 30 | #endif // _AFX_NO_DAO_SUPPORT 31 | 32 | #ifndef _AFX_NO_OLE_SUPPORT 33 | #include // MFC support for Internet Explorer 4 Common Controls 34 | #endif 35 | #ifndef _AFX_NO_AFXCMN_SUPPORT 36 | #include // MFC support for Windows Common Controls 37 | #endif // _AFX_NO_AFXCMN_SUPPORT 38 | -------------------------------------------------------------------------------- /elaphureLinkAGDI/DbgCM/targetver.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | // Including SDKDDKVer.h defines the highest available Windows platform. 4 | 5 | // If you wish to build your application for a previous Windows platform, include WinSDKVer.h and 6 | // set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h. 7 | 8 | #include 9 | -------------------------------------------------------------------------------- /elaphureLinkProxy/elaphureLinkProxy.vcxproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | -------------------------------------------------------------------------------- /elaphureLinkProxy/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /elaphureLinkProxy/pch.cpp: -------------------------------------------------------------------------------- 1 | #include "pch.h" 2 | -------------------------------------------------------------------------------- /elaphureLinkProxy/pch.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #define WIN32_LEAN_AND_MEAN 4 | #include 5 | 6 | #include "proxy_export.hpp" 7 | #include "ipc_common.hpp" 8 | #include "dap.hpp" 9 | 10 | 11 | extern bool k_is_proxy_init; 12 | 13 | extern HANDLE k_shared_memory_handle; 14 | extern el_memory_t *k_shared_memory_ptr; 15 | 16 | extern HANDLE k_producer_event; 17 | extern HANDLE k_consumer_event; 18 | 19 | struct WindowsVersionNumber { 20 | ULONG major_version; 21 | ULONG build_number; 22 | }; 23 | extern WindowsVersionNumber k_windows_version_number; 24 | 25 | struct el_proxy_config { 26 | uint8_t enable_vendor_command; 27 | }; 28 | -------------------------------------------------------------------------------- /elaphureLinkProxy/protocol.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | 4 | #define EL_LINK_IDENTIFIER 0x8a656c70 5 | 6 | #define EL_DAP_VERSION 0x00000001 7 | 8 | #define EL_COMMAND_HANDSHAKE 0x00000000 9 | 10 | 11 | typedef struct 12 | { 13 | uint32_t el_link_identifier; 14 | uint32_t command; 15 | uint32_t el_proxy_version; 16 | } el_request_handshake_t; 17 | 18 | 19 | typedef struct 20 | { 21 | uint32_t el_link_identifier; 22 | uint32_t command; 23 | uint32_t el_dap_version; 24 | } el_response_handshake_t; -------------------------------------------------------------------------------- /elaphureLinkRDDI/dap_swo.cpp: -------------------------------------------------------------------------------- 1 | #include "pch.h" 2 | 3 | /* 4 | 5 | 6 | RDDI_FUNC int CMSIS_DAP_SWO_Baudrate(const RDDIHandle handle, int baudrate) 7 | { 8 | //EL_TODO 9 | __debugbreak(); 10 | return 8204; 11 | } 12 | 13 | RDDI_FUNC int CMSIS_DAP_SWO_Control(const RDDIHandle handle, int control) 14 | { 15 | //EL_TODO 16 | __debugbreak(); 17 | return 8204; 18 | } 19 | 20 | 21 | 22 | RDDI_FUNC int CMSIS_DAP_SWO_Status(const RDDIHandle handle, int *count, int *status) 23 | { 24 | //EL_TODO 25 | __debugbreak(); 26 | return 8204; 27 | } 28 | 29 | 30 | 31 | RDDI_FUNC int CMSIS_DAP_SWO_Data(const RDDIHandle handle, int *num_written, void *buffer, int *status) 32 | { 33 | //EL_TODO 34 | __debugbreak(); 35 | return 8204; 36 | } 37 | 38 | * 39 | */ -------------------------------------------------------------------------------- /elaphureLinkRDDI/data/device_jtag_idcode.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | typedef struct { 7 | uint32_t idcode; 8 | uint32_t irlen; 9 | } jtag_idcode_info_t; 10 | 11 | // TODO: C++20 to_array 12 | 13 | enum { 14 | INVALID_IDCODE = 0 15 | }; 16 | 17 | extern jtag_idcode_info_t k_jtag_idcode_list[]; -------------------------------------------------------------------------------- /elaphureLinkRDDI/elaphureLinkRDDI.vcxproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | C:\Program Files\KEIL5\UV4\UV4.exe 5 | WindowsLocalDebugger 6 | 7 | 8 | C:\Program Files\KEIL5\UV4\UV4.exe 9 | WindowsLocalDebugger 10 | 11 | -------------------------------------------------------------------------------- /elaphureLinkRDDI/framework.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #define WIN32_LEAN_AND_MEAN 4 | #include 5 | -------------------------------------------------------------------------------- /elaphureLinkRDDI/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /elaphureLinkRDDI/pch.cpp: -------------------------------------------------------------------------------- 1 | #include "pch.h" 2 | -------------------------------------------------------------------------------- /elaphureLinkRDDI/pch.h: -------------------------------------------------------------------------------- 1 | #ifndef PCH_H 2 | #define PCH_H 3 | 4 | #ifdef _MSC_VER 5 | #define _CRT_SECURE_NO_WARNINGS 1 6 | #endif 7 | 8 | #include "framework.h" 9 | 10 | #include "rddi_dap.h" 11 | #include "rddi_dap_cmsis.h" 12 | #include "rddi_dap_jtag.h" 13 | #include "rddi_dap_swo.h" 14 | 15 | #include "../common/ipc_common.hpp" 16 | #include "../common/dap.hpp" 17 | 18 | 19 | extern HANDLE k_shared_memory_handle; 20 | extern el_memory_t *k_shared_memory_ptr; 21 | 22 | extern HANDLE k_producer_event; 23 | extern HANDLE k_consumer_event; 24 | 25 | 26 | #define EL_SHOW_WARNING_MSG_BOX(msg, title) MessageBox(NULL, const_cast(msg), const_cast(title), MB_ICONWARNING | MB_SYSTEMMODAL) 27 | 28 | 29 | #endif //PCH_H 30 | -------------------------------------------------------------------------------- /test/misc/asio_1/README.md: -------------------------------------------------------------------------------- 1 | # About this test 2 | 3 | asio echo client reconnect test. -------------------------------------------------------------------------------- /test/misc/asio_1/UnitTest1/UnitTest1.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd 11 | 12 | 13 | 14 | 15 | Source Files 16 | 17 | 18 | Source Files 19 | 20 | 21 | 22 | 23 | Header Files 24 | 25 | 26 | -------------------------------------------------------------------------------- /test/misc/asio_1/UnitTest1/UnitTest1.vcxproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | -------------------------------------------------------------------------------- /test/misc/asio_1/UnitTest1/pch.cpp: -------------------------------------------------------------------------------- 1 | #include "pch.h" 2 | -------------------------------------------------------------------------------- /test/misc/asio_1/UnitTest1/pch.h: -------------------------------------------------------------------------------- 1 | #ifndef PCH_H 2 | #define PCH_H 3 | 4 | 5 | 6 | #endif //PCH_H 7 | -------------------------------------------------------------------------------- /test/misc/asio_1/asio_1.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 6 | h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd 7 | 8 | 9 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 10 | cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx 11 | 12 | 13 | 14 | 15 | Source Files 16 | 17 | 18 | -------------------------------------------------------------------------------- /test/misc/asio_1/asio_1.vcxproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | -------------------------------------------------------------------------------- /test/misc/ipc/.gitignore: -------------------------------------------------------------------------------- 1 | TestResults/ -------------------------------------------------------------------------------- /test/misc/ipc/ipc-p1/framework.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #define WIN32_LEAN_AND_MEAN 4 | #include 5 | -------------------------------------------------------------------------------- /test/misc/ipc/ipc-p1/ipc-p1.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 6 | h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd 7 | 8 | 9 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 10 | cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx 11 | 12 | 13 | 14 | 15 | Header Files 16 | 17 | 18 | Header Files 19 | 20 | 21 | Header Files 22 | 23 | 24 | 25 | 26 | Source Files 27 | 28 | 29 | Source Files 30 | 31 | 32 | -------------------------------------------------------------------------------- /test/misc/ipc/ipc-p1/ipc-p1.vcxproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | -------------------------------------------------------------------------------- /test/misc/ipc/ipc-p1/pch.cpp: -------------------------------------------------------------------------------- 1 | #include "pch.h" -------------------------------------------------------------------------------- /test/misc/ipc/ipc-p1/pch.h: -------------------------------------------------------------------------------- 1 | #ifndef PCH_H 2 | #define PCH_H 3 | 4 | 5 | #include "framework.h" 6 | #include "../ipc_common.h" 7 | 8 | #endif //PCH_H 9 | -------------------------------------------------------------------------------- /test/misc/ipc/ipc-p2/framework.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #define WIN32_LEAN_AND_MEAN 4 | #include 5 | -------------------------------------------------------------------------------- /test/misc/ipc/ipc-p2/ipc-p2.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 6 | h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd 7 | 8 | 9 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 10 | cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx 11 | 12 | 13 | 14 | 15 | Header Files 16 | 17 | 18 | Header Files 19 | 20 | 21 | Header Files 22 | 23 | 24 | 25 | 26 | Source Files 27 | 28 | 29 | Source Files 30 | 31 | 32 | -------------------------------------------------------------------------------- /test/misc/ipc/ipc-p2/ipc-p2.vcxproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | -------------------------------------------------------------------------------- /test/misc/ipc/ipc-p2/pch.cpp: -------------------------------------------------------------------------------- 1 | #include "pch.h" 2 | -------------------------------------------------------------------------------- /test/misc/ipc/ipc-p2/pch.h: -------------------------------------------------------------------------------- 1 | #ifndef PCH_H 2 | #define PCH_H 3 | 4 | 5 | #include "framework.h" 6 | #include "../ipc_common.h" 7 | 8 | #endif //PCH_H 9 | -------------------------------------------------------------------------------- /test/misc/ipc/ipc_common.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | #ifdef ELL_DLL_USE_IMPORT 7 | #define EL_DLL_FUNCTION extern "C" __declspec(dllimport) 8 | #else 9 | #define EL_DLL_FUNCTION extern "C" __declspec(dllexport) 10 | #endif 11 | 12 | 13 | #define EL_SHARED_MEMORY_NAME "elamemory" 14 | #define EL_SHARED_MEMORY_SIZE 4096 * 1000 15 | 16 | #define EL_EVENT_PRODUCER_NAME "elaproducer" 17 | #define EL_EVENT_CONSUMER_NAME "elaconsumer" 18 | 19 | EL_DLL_FUNCTION void *get_ipc1_shared_memory_ptr(); 20 | EL_DLL_FUNCTION void *get_ipc2_shared_memory_ptr(); 21 | EL_DLL_FUNCTION int ipc1_main_thread(int end); 22 | EL_DLL_FUNCTION int ipc2_main_thread(int end); 23 | EL_DLL_FUNCTION int ipc_source_init(); 24 | 25 | 26 | 27 | typedef struct el_memory_ { 28 | uint32_t a; 29 | uint32_t b; 30 | } el_memory_t; 31 | 32 | #ifdef __cplusplus 33 | static_assert(offsetof(el_memory_t, a) == 0, "wrong"); 34 | static_assert(offsetof(el_memory_t, b) == 4, "wrong"); 35 | #endif -------------------------------------------------------------------------------- /test/misc/ipc/p1-test/p1-test.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include "../ipc_common.h" 3 | 4 | 5 | int main() 6 | { 7 | std::cout << "Start to test p1\n"; 8 | 9 | int ret = ipc1_main_thread(10 * 10000 + 1); 10 | if (ret == 0) { 11 | std::cout << "TEST PASS!\n"; 12 | } else { 13 | std::cout << "TEST FAILED!\n"; 14 | } 15 | 16 | return 0; 17 | } 18 | -------------------------------------------------------------------------------- /test/misc/ipc/p1-test/p1-test.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd 11 | 12 | 13 | 14 | 15 | Source Files 16 | 17 | 18 | -------------------------------------------------------------------------------- /test/misc/ipc/p1-test/p1-test.vcxproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | -------------------------------------------------------------------------------- /test/misc/ipc/p2-test/p2-test.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #define ELL_DLL_USE_IMPORT 1 3 | #include "../ipc_common.h" 4 | 5 | #include 6 | 7 | int main() 8 | { 9 | int ret = ipc2_main_thread(1000 * 10000); 10 | if (ret == 0) { 11 | std::cout << "TEST PASS!\n"; 12 | } else { 13 | std::cout << "TEST FAILED!\n"; 14 | } 15 | return 0; 16 | 17 | int i = 0; 18 | // std::cout << "Hello World!\n"; 19 | } 20 | -------------------------------------------------------------------------------- /test/misc/ipc/p2-test/p2-test.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 6 | h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd 7 | 8 | 9 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 10 | cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx 11 | 12 | 13 | 14 | 15 | Source Files 16 | 17 | 18 | -------------------------------------------------------------------------------- /test/misc/ipc/p2-test/p2-test.vcxproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | -------------------------------------------------------------------------------- /test/misc/ipc/unittest/pch.cpp: -------------------------------------------------------------------------------- 1 | #include "pch.h" 2 | -------------------------------------------------------------------------------- /test/misc/ipc/unittest/pch.h: -------------------------------------------------------------------------------- 1 | #ifndef PCH_H 2 | #define PCH_H 3 | 4 | #define ELL_DLL_USE_IMPORT 1 5 | #include "../ipc_common.h" 6 | 7 | #endif //PCH_H 8 | -------------------------------------------------------------------------------- /test/misc/ipc/unittest/unittest.cpp: -------------------------------------------------------------------------------- 1 | #include "pch.h" 2 | #include "CppUnitTest.h" 3 | 4 | #include "windows.h" 5 | 6 | using namespace Microsoft::VisualStudio::CppUnitTestFramework; 7 | 8 | 9 | namespace unittest 10 | { 11 | TEST_CLASS (unittest) { 12 | public: 13 | TEST_METHOD (TestMethod1) { 14 | STARTUPINFO si; 15 | PROCESS_INFORMATION pi; 16 | 17 | ZeroMemory(&si, sizeof(si)); 18 | si.cb = sizeof(si); 19 | ZeroMemory(&pi, sizeof(pi)); 20 | 21 | 22 | Assert::IsTrue(CreateProcess("p2-test.exe", 23 | NULL, // Command line 24 | NULL, // Process handle not inheritable 25 | NULL, // Thread handle not inheritable 26 | FALSE, // Set handle inheritance to FALSE 27 | 0, // No creation flags 28 | NULL, // Use parent's environment block 29 | NULL, // Use parent's starting directory 30 | &si, // Pointer to STARTUPINFO structure 31 | &pi)); 32 | 33 | Sleep(1); // wait process to init 34 | 35 | BOOL ret = ipc_source_init(); 36 | Assert::AreEqual(ret, TRUE, L"here 1"); 37 | ret = ipc1_main_thread(100 * 10000); 38 | Assert::AreEqual(ret, 0, L"here 2"); 39 | 40 | // cleanup 41 | TerminateProcess(pi.hProcess, 0); 42 | 43 | } // namespace unittest 44 | }; 45 | } // namespace unittest 46 | -------------------------------------------------------------------------------- /test/misc/ipc/unittest/unittest.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 6 | h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd 7 | 8 | 9 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 10 | cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx 11 | 12 | 13 | 14 | 15 | Source Files 16 | 17 | 18 | Source Files 19 | 20 | 21 | 22 | 23 | Header Files 24 | 25 | 26 | -------------------------------------------------------------------------------- /test/misc/ipc/unittest/unittest.vcxproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | -------------------------------------------------------------------------------- /test/proxy_test/pch.cpp: -------------------------------------------------------------------------------- 1 | #include "pch.h" 2 | -------------------------------------------------------------------------------- /test/proxy_test/pch.h: -------------------------------------------------------------------------------- 1 | #ifndef PCH_H 2 | #define PCH_H 3 | 4 | 5 | 6 | #endif //PCH_H 7 | -------------------------------------------------------------------------------- /test/proxy_test/proxy_test.cpp: -------------------------------------------------------------------------------- 1 | #include "pch.h" 2 | #include "CppUnitTest.h" 3 | 4 | #define PROXY_DLL_USE_IMPORT 1 5 | #include "../../common/proxy_export.hpp" 6 | 7 | #include "windows.h" 8 | 9 | using namespace Microsoft::VisualStudio::CppUnitTestFramework; 10 | 11 | namespace proxytest 12 | { 13 | TEST_CLASS (proxytest) { 14 | public: 15 | TEST_METHOD (handshake_test) { 16 | Assert::AreEqual(0, 17 | el_proxy_init()); 18 | Assert::AreEqual(0, 19 | el_proxy_start_with_address("dap.local")); 20 | Sleep(INFINITE); 21 | } 22 | 23 | 24 | TEST_METHOD (stop_test) { 25 | Assert::AreEqual(0, 26 | el_proxy_init()); 27 | 28 | for (int i = 0; i < 10; i++) { 29 | Assert::AreEqual(0, el_proxy_start_with_address("dap.local")); 30 | el_proxy_stop(); 31 | } 32 | } 33 | }; 34 | 35 | 36 | } // namespace proxytest 37 | -------------------------------------------------------------------------------- /test/proxy_test/proxy_test.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd 11 | 12 | 13 | 14 | 15 | Source Files 16 | 17 | 18 | Source Files 19 | 20 | 21 | 22 | 23 | Header Files 24 | 25 | 26 | -------------------------------------------------------------------------------- /test/proxy_test/proxy_test.vcxproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | -------------------------------------------------------------------------------- /test/uv_project/.gitignore: -------------------------------------------------------------------------------- 1 | *.bak 2 | *.ddk 3 | *.edk 4 | *.lst 5 | *.lnp 6 | *.mpf 7 | *.mpj 8 | *.obj 9 | *.omf 10 | *.opt 11 | *.plg 12 | *.rpt 13 | *.tmp 14 | *.__i 15 | *.crf 16 | *.o 17 | *.d 18 | *.axf 19 | *.tra 20 | *.dep 21 | JLinkLog.txt 22 | *.iex 23 | *.htm 24 | *.sct 25 | *.map 26 | *.hex 27 | EventRecorderStub.scvd -------------------------------------------------------------------------------- /test/uv_project/stm32f103c8/RTE/_Target_1/RTE_Components.h: -------------------------------------------------------------------------------- 1 | 2 | /* 3 | * Auto generated Run-Time-Environment Configuration File 4 | * *** Do not modify ! *** 5 | * 6 | * Project: 'minial' 7 | * Target: 'Target 1' 8 | */ 9 | 10 | #ifndef RTE_COMPONENTS_H 11 | #define RTE_COMPONENTS_H 12 | 13 | 14 | /* 15 | * Define the Device Header File: 16 | */ 17 | #define CMSIS_device_header "stm32f10x.h" 18 | 19 | 20 | 21 | #endif /* RTE_COMPONENTS_H */ 22 | -------------------------------------------------------------------------------- /thirdparty/asio/COPYING: -------------------------------------------------------------------------------- 1 | Copyright (c) 2003-2022 Christopher M. Kohlhoff (chris at kohlhoff dot com) 2 | 3 | Distributed under the Boost Software License, Version 1.0. (See accompanying 4 | file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 5 | -------------------------------------------------------------------------------- /thirdparty/asio/LICENSE_1_0.txt: -------------------------------------------------------------------------------- 1 | Boost Software License - Version 1.0 - August 17th, 2003 2 | 3 | Permission is hereby granted, free of charge, to any person or organization 4 | obtaining a copy of the software and accompanying documentation covered by 5 | this license (the "Software") to use, reproduce, display, distribute, 6 | execute, and transmit the Software, and to prepare derivative works of the 7 | Software, and to permit third-parties to whom the Software is furnished to 8 | do so, all subject to the following: 9 | 10 | The copyright notices in the Software and this entire statement, including 11 | the above license grant, this restriction and the following disclaimer, 12 | must be included in all copies of the Software, in whole or in part, and 13 | all derivative works of the Software, unless such copies or derivative 14 | works are solely in the form of machine-executable object code generated by 15 | a source language processor. 16 | 17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT 20 | SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE 21 | FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, 22 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 23 | DEALINGS IN THE SOFTWARE. 24 | -------------------------------------------------------------------------------- /thirdparty/asio/README: -------------------------------------------------------------------------------- 1 | asio version 1.22.2 2 | Released Wednesday, 29 June 2022. 3 | 4 | See doc/index.html for API documentation and a tutorial. 5 | -------------------------------------------------------------------------------- /thirdparty/asio/include/asio/associator.hpp: -------------------------------------------------------------------------------- 1 | // 2 | // associator.hpp 3 | // ~~~~~~~~~~~~~~ 4 | // 5 | // Copyright (c) 2003-2022 Christopher M. Kohlhoff (chris at kohlhoff dot com) 6 | // 7 | // Distributed under the Boost Software License, Version 1.0. (See accompanying 8 | // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 9 | // 10 | 11 | #ifndef ASIO_ASSOCIATOR_HPP 12 | #define ASIO_ASSOCIATOR_HPP 13 | 14 | #if defined(_MSC_VER) && (_MSC_VER >= 1200) 15 | # pragma once 16 | #endif // defined(_MSC_VER) && (_MSC_VER >= 1200) 17 | 18 | #include "asio/detail/config.hpp" 19 | 20 | #include "asio/detail/push_options.hpp" 21 | 22 | namespace asio { 23 | 24 | /// Used to generically specialise associators for a type. 25 | template