commit a29c5e1fec44e7483730dea1d769a08b7e7db619 Author: Nav Date: Sun Apr 4 21:04:12 2021 +0100 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..746ee136 --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +.idea/ +release +_CPack_Packages +build/cmake-build-debug +build/cmake-build-release +build/resources +build/bin/bloom +build/bin/bloom.json +*.deb \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100755 index 00000000..7f26974b --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,222 @@ +cmake_minimum_required(VERSION 3.10) +project(Bloom LANGUAGES CXX VERSION 0.1) + +set(CMAKE_VERBOSE_MAKEFILE off) + +# Create directory for generated sources +file(MAKE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/src/Generated) + +set(CMAKE_CXX_STANDARD 20) +set(ENABLE_SANITIZERS off) + +add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0) + +# The HIDAPI library lives here +link_directories(/usr/local/lib) + +set(CMAKE_AUTOMOC ON) +set(CMAKE_INCLUDE_CURRENT_DIR ON) +set(AUTOGEN_BUILD_DIR ../build/) +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/build/bin") + +find_package(Qt5Core) +find_package(Qt5Gui) +find_package(Qt5Widgets) +find_package(Qt5Xml) +find_package(Qt5Svg) +find_package(Qt5UiTools) + +set(CMAKE_SKIP_BUILD_RPATH true) +set(CMAKE_BUILD_RPATH_USE_ORIGIN true) +set(CMAKE_INSTALL_RPATH "\$ORIGIN/../lib") +set(CMAKE_BUILD_RPATH ${CMAKE_INSTALL_RPATH}) + +add_executable(Bloom + src/main.cpp + src/Generated/resources.cpp + src/ApplicationConfig.cpp + src/Logger/Logger.cpp + src/SignalHandler/SignalHandler.cpp + src/DebugToolDrivers/USB/Interface.cpp + src/DebugToolDrivers/USB/HID/HidInterface.cpp + src/DebugToolDrivers/Microchip/AtmelICE/AtmelIce.cpp + src/DebugToolDrivers/Microchip/PowerDebugger/PowerDebugger.cpp + src/DebugToolDrivers/Protocols/CMSIS-DAP/Command.cpp + src/DebugToolDrivers/Protocols/CMSIS-DAP/Response.cpp + src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/AvrCommand.cpp + src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AvrCommandFrame.cpp + src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/AvrResponse.cpp + src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/ResponseFrames/AvrResponseFrame.cpp + src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/AvrEvent.cpp + src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/Events/AVR8Generic/BreakEvent.cpp + src/DebugToolDrivers/Protocols/CMSIS-DAP/CmsisDapInterface.cpp + src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/EdbgInterface.cpp + src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/EdbgAvr8Interface.cpp + src/Targets/Target.cpp + src/Targets/Microchip/AVR/AVR8/Avr8.cpp + src/Targets/Microchip/AVR/AVR8/Mega/Mega.cpp + src/Targets/Microchip/AVR/AVR8/PartDescription/PartDescriptionFile.cpp + src/Application.cpp + src/DebugToolDrivers/USB/UsbDevice.cpp + src/TargetController/TargetController.cpp + src/EventManager/EventListener.cpp + src/EventManager/EventManager.cpp + src/DebugServers/DebugServer.cpp + src/DebugServers/GdbRsp/GdbRspDebugServer.cpp + src/DebugServers/GdbRsp/CommandPackets/CommandPacket.cpp + src/DebugServers/GdbRsp/CommandPackets/CommandPacketFactory.cpp + src/DebugServers/GdbRsp/CommandPackets/SupportedFeaturesQuery.cpp + src/DebugServers/GdbRsp/CommandPackets/ReadGeneralRegisters.cpp + src/DebugServers/GdbRsp/CommandPackets/WriteGeneralRegisters.cpp + src/DebugServers/GdbRsp/CommandPackets/ContinueExecution.cpp + src/DebugServers/GdbRsp/CommandPackets/StepExecution.cpp + src/DebugServers/GdbRsp/CommandPackets/InterruptExecution.cpp + src/DebugServers/GdbRsp/CommandPackets/ReadMemory.cpp + src/DebugServers/GdbRsp/CommandPackets/WriteMemory.cpp + src/DebugServers/GdbRsp/CommandPackets/SetBreakpoint.cpp + src/DebugServers/GdbRsp/CommandPackets/RemoveBreakpoint.cpp + src/DebugServers/GdbRsp/ResponsePackets/SupportedFeaturesResponse.cpp + src/DebugServers/GdbRsp/Connection.cpp + src/Insight/Insight.cpp + src/Insight/InsightWorker.cpp + src/Insight/UserInterfaces/InsightWindow/InsightWindow.cpp + src/Insight/UserInterfaces/InsightWindow/AboutWindow.cpp + src/Insight/UserInterfaces/InsightWindow/TargetWidgets/TargetPackageWidget.hpp + src/Insight/UserInterfaces/InsightWindow/TargetWidgets/TargetPinWidget.hpp + + src/Insight/UserInterfaces/InsightWindow/TargetWidgets/DIP/DualInlinePackageWidget.cpp + src/Insight/UserInterfaces/InsightWindow/TargetWidgets/DIP/PinWidget.cpp + src/Insight/UserInterfaces/InsightWindow/TargetWidgets/DIP/PinBodyWidget.cpp + src/Insight/UserInterfaces/InsightWindow/TargetWidgets/DIP/BodyWidget.cpp + + src/Insight/UserInterfaces/InsightWindow/TargetWidgets/QFP/QuadFlatPackageWidget.cpp + src/Insight/UserInterfaces/InsightWindow/TargetWidgets/QFP/PinWidget.cpp + src/Insight/UserInterfaces/InsightWindow/TargetWidgets/QFP/PinBodyWidget.cpp + src/Insight/UserInterfaces/InsightWindow/TargetWidgets/QFP/BodyWidget.cpp + build/resources/TargetPartDescriptions/AVR/Mapping.json +) + +set_target_properties(Bloom PROPERTIES OUTPUT_NAME bloom) +target_include_directories(Bloom PUBLIC ./) + +# Construct JSON mapping of part description files. +add_custom_command( + OUTPUT + ${CMAKE_CURRENT_SOURCE_DIR}/build/resources/TargetPartDescriptions/AVR/Mapping.json + DEPENDS + ${CMAKE_CURRENT_SOURCE_DIR}/build/scripts/CopyAvrPartFilesAndCreateMapping.php + COMMAND echo 'Processing AVR target description files.' + COMMAND + php ${CMAKE_CURRENT_SOURCE_DIR}/build/scripts/CopyAvrPartFilesAndCreateMapping.php +) + +# Compile resources +add_custom_command( + OUTPUT + ${CMAKE_CURRENT_SOURCE_DIR}/src/Generated/resources.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/Generated/resources_fake.cpp + DEPENDS + ${CMAKE_CURRENT_SOURCE_DIR}/src/resources.qrc + COMMAND echo 'Compiling QT resources. |${CMAKE_BUILD_TYPE}|' + COMMAND + rcc -o ${CMAKE_CURRENT_SOURCE_DIR}/src/Generated/resources.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/resources.qrc +) + +target_link_libraries(Bloom -static-libgcc -static-libstdc++) +target_link_libraries(Bloom -lstdc++fs) +target_link_libraries(Bloom -lpthread) +target_link_libraries(Bloom -lusb-1.0) +target_link_libraries(Bloom -lhidapi-libusb) +target_link_libraries(Bloom Qt5::Core) +target_link_libraries(Bloom Qt5::Gui) +target_link_libraries(Bloom Qt5::UiTools) +target_link_libraries(Bloom Qt5::Widgets) +target_link_libraries(Bloom Qt5::Xml) +target_link_libraries(Bloom Qt5::Svg) + +target_compile_options( + Bloom + PUBLIC -std=c++2a + PUBLIC -pedantic + PUBLIC -Wconversion + PUBLIC -fno-sized-deallocation + PUBLIC $<$:-g> + PUBLIC $<$:-Os> + PUBLIC $<$:-O2> + PUBLIC $<$:-fno-inline> + PUBLIC $<$:-fkeep-static-functions> +) + +target_link_options( + Bloom + PUBLIC [=[-Wl,--disable-new-dtags]=] #,--verbose +) + +if (${ENABLE_SANITIZERS}) + message(WARNING "Sanitizers have been enabled") + + # For TSAN, see ThreadSanitizerSuppression.txt + + # Some sanitizers are not compatible with each other. + target_compile_options( + Bloom + PUBLIC "-fsanitize=address" + #PUBLIC "-fsanitize=undefined" +# PUBLIC "-fsanitize=thread" +# PUBLIC "$<$:-fsanitize=address>" +# PUBLIC "$<$:-fsanitize=undefined>" +# PUBLIC "$<$:-fsanitize=integer-divide-by-zero>" +# PUBLIC "$<$:-fsanitize=unreachable>" +# PUBLIC "$<$:-fsanitize=vla-bound>" +# PUBLIC "$<$:-fsanitize=null>" +# PUBLIC "$<$:-fsanitize=return>" +# PUBLIC "$<$:-fsanitize=signed-integer-overflow>" +# PUBLIC "$<$:-fsanitize=bounds>" +# PUBLIC "$<$:-fsanitize=alignment>" +# PUBLIC "$<$:-fsanitize=object-size>" +# PUBLIC "$<$:-fsanitize=float-divide-by-zero>" +# PUBLIC "$<$:-fsanitize=float-cast-overflow>" +# PUBLIC "$<$:-fsanitize=nonnull-attribute>" +# PUBLIC "$<$:-fsanitize=returns-nonnull-attribute>" +# PUBLIC "$<$:-fsanitize=bool>" +# PUBLIC "$<$:-fsanitize=enum>" +# PUBLIC "$<$:-fsanitize=vptr>" + ) + + target_link_libraries( + Bloom + "-fsanitize=address" +# "-fsanitize=undefined" +# "-fsanitize=thread" + ) +endif() + +# Installation configuration +set(CMAKE_INSTALL_PREFIX "${CMAKE_CURRENT_SOURCE_DIR}/release/") +install(TARGETS Bloom DESTINATION bin PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ) + +install(FILES build/bin/bloom.json DESTINATION bin PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ) # Remove this +install(DIRECTORY build/bin/plugins DESTINATION "bin" DIRECTORY_PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ FILE_PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ) +install(DIRECTORY build/bin/platforms DESTINATION "bin" DIRECTORY_PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ FILE_PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ) +install(DIRECTORY build/resources DESTINATION "." DIRECTORY_PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ FILE_PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ) +install(DIRECTORY build/lib DESTINATION "." DIRECTORY_PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ FILE_PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ) + +# Debian package configuration +set(CPACK_GENERATOR "DEB") +set(CPACK_DEBIAN_PACKAGE_NAME "Bloom") +set(CPACK_DEBIAN_PACKAGE_DESCRIPTION "") +file(READ ${CMAKE_CURRENT_SOURCE_DIR}/resources/packaging/description.txt CPACK_DEBIAN_PACKAGE_DESCRIPTION) +set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "A Linux-based debug interface for embedded systems development") +set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Bloom Support ") +set(CPACK_DEBIAN_PACKAGE_HOMEPAGE "https://bloom.oscillate.io") +set(CPACK_PACKAGE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) +set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON) +set(CPACK_PACKAGING_INSTALL_PREFIX "/opt/bloom") +set( + CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA + ${CMAKE_CURRENT_SOURCE_DIR}/resources/packaging/postinst; + ${CMAKE_CURRENT_SOURCE_DIR}/resources/packaging/postrm +) + +include(CPack) diff --git a/COPYING.LESSER b/COPYING.LESSER new file mode 100644 index 00000000..418dc9a9 --- /dev/null +++ b/COPYING.LESSER @@ -0,0 +1,165 @@ +GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. \ No newline at end of file diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 00000000..2eccb44a --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,12 @@ +Bloom is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Bloom is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program (COPYING.LESSER). If not, see . \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 00000000..6acad976 --- /dev/null +++ b/README.md @@ -0,0 +1,51 @@ + + +## Bloom +Bloom is a Linux-based debug platform for microcontrollers. This is the official repository for Bloom's source code. +For information on how to use Bloom, please visit https://bloom.oscillate.io. + +Bloom implements a number of user-space device drivers, enabling support for many debug tools (such as the Atmel-ICE, +Power Debugger, MPLAB SNAP* and the MPLAB PICkit 4*). Bloom exposes an interface to the connected target, via a GDB +RSP server. This allows any IDE with GDB RSP client capabilities to interface with Bloom and gain full +access to the target. + +Currently, Bloom only supports AVR8 targets from Microchip. Bloom was designed to accommodate targets from different +families and architectures. Support for other target families will be considered as and when requested. + +*These debug tools are not yet officially supported by Bloom, but will be soon. + +### License +Bloom is released under the LGPLv3 license. See LICENSE.txt + +### Bloom Architecture +Bloom is a multithreaded event-driven program written in C++. It consists of four components: + +- TargetController +- DebugServer +- Insight +- SignalHandler + +##### TargetController +The TargetController possesses full control of the connected debug tool and target. Execution of user-space +device drivers takes place here. All interaction with the connected hardware goes through the TargetController. +It exposes an interface to the connected hardware via events. The TargetController runs on a dedicated thread. + +##### DebugServer +The DebugServer exposes an interface to the connected target, for third-party programs such as IDEs. Currently, Bloom +only supports one DebugServer - the GDB RSP server. With this server, any IDE with GDB RSP support can interface with +Bloom and thus the connected target. The DebugServer runs on a dedicated thread. + +##### Insight +Insight is a graphical user interface that provides insight of the target's GPIO pin states. It also enables GPIO +pin manipulation. Insight occupies Bloom's main thread and employs a single worker thread for background tasks. +Unlike other components within Bloom, Insight relies heavily on the Qt framework for its GUI capabilities and +other useful utilities. + +##### SignalHandler +The SignalHandler is responsible for handling any UNIX signals issued to Bloom. It runs on a dedicated thread. All +other threads within Bloom do not accept any UNIX signals. + +#### Inter-component communication +The components described above interact with each other using an event-based mechanism. + +More documentation to follow. diff --git a/ThreadSanitizerSuppression.txt b/ThreadSanitizerSuppression.txt new file mode 100644 index 00000000..0455f753 --- /dev/null +++ b/ThreadSanitizerSuppression.txt @@ -0,0 +1,5 @@ +# Suppression file can be specified via: +# TSAN_OPTIONS="suppressions=../../../ThreadSanitizerSuppression.txt" bloom + +race:libusb-1.0 +race:libglib \ No newline at end of file diff --git a/build/bin/platforms/libqxcb.so b/build/bin/platforms/libqxcb.so new file mode 100755 index 00000000..c9ffac58 Binary files /dev/null and b/build/bin/platforms/libqxcb.so differ diff --git a/build/bin/plugins/iconengines/libqsvgicon.so b/build/bin/plugins/iconengines/libqsvgicon.so new file mode 100755 index 00000000..5896062c Binary files /dev/null and b/build/bin/plugins/iconengines/libqsvgicon.so differ diff --git a/build/bin/plugins/imageformats/libqgif.so b/build/bin/plugins/imageformats/libqgif.so new file mode 100755 index 00000000..2fa4835f Binary files /dev/null and b/build/bin/plugins/imageformats/libqgif.so differ diff --git a/build/bin/plugins/imageformats/libqicns.so b/build/bin/plugins/imageformats/libqicns.so new file mode 100755 index 00000000..14b2ed8e Binary files /dev/null and b/build/bin/plugins/imageformats/libqicns.so differ diff --git a/build/bin/plugins/imageformats/libqico.so b/build/bin/plugins/imageformats/libqico.so new file mode 100755 index 00000000..ab0a0573 Binary files /dev/null and b/build/bin/plugins/imageformats/libqico.so differ diff --git a/build/bin/plugins/imageformats/libqjpeg.so b/build/bin/plugins/imageformats/libqjpeg.so new file mode 100755 index 00000000..af5b96c6 Binary files /dev/null and b/build/bin/plugins/imageformats/libqjpeg.so differ diff --git a/build/bin/plugins/imageformats/libqsvg.so b/build/bin/plugins/imageformats/libqsvg.so new file mode 100755 index 00000000..26612b58 Binary files /dev/null and b/build/bin/plugins/imageformats/libqsvg.so differ diff --git a/build/bin/plugins/imageformats/libqtga.so b/build/bin/plugins/imageformats/libqtga.so new file mode 100755 index 00000000..13da77cb Binary files /dev/null and b/build/bin/plugins/imageformats/libqtga.so differ diff --git a/build/bin/plugins/imageformats/libqtiff.so b/build/bin/plugins/imageformats/libqtiff.so new file mode 100755 index 00000000..bae478ba Binary files /dev/null and b/build/bin/plugins/imageformats/libqtiff.so differ diff --git a/build/bin/plugins/imageformats/libqwbmp.so b/build/bin/plugins/imageformats/libqwbmp.so new file mode 100755 index 00000000..805a3608 Binary files /dev/null and b/build/bin/plugins/imageformats/libqwbmp.so differ diff --git a/build/bin/plugins/imageformats/libqwebp.so b/build/bin/plugins/imageformats/libqwebp.so new file mode 100755 index 00000000..0693c62f Binary files /dev/null and b/build/bin/plugins/imageformats/libqwebp.so differ diff --git a/build/bin/plugins/xcbglintegrations/libqxcb-egl-integration.so b/build/bin/plugins/xcbglintegrations/libqxcb-egl-integration.so new file mode 100755 index 00000000..a284f0a0 Binary files /dev/null and b/build/bin/plugins/xcbglintegrations/libqxcb-egl-integration.so differ diff --git a/build/bin/plugins/xcbglintegrations/libqxcb-glx-integration.so b/build/bin/plugins/xcbglintegrations/libqxcb-glx-integration.so new file mode 100755 index 00000000..be69d5fa Binary files /dev/null and b/build/bin/plugins/xcbglintegrations/libqxcb-glx-integration.so differ diff --git a/build/lib/libQt5Core.so.5 b/build/lib/libQt5Core.so.5 new file mode 120000 index 00000000..9b3e7af5 --- /dev/null +++ b/build/lib/libQt5Core.so.5 @@ -0,0 +1 @@ +./libQt5Core.so.5.12.10 \ No newline at end of file diff --git a/build/lib/libQt5Core.so.5.12.10 b/build/lib/libQt5Core.so.5.12.10 new file mode 100644 index 00000000..a61518bc Binary files /dev/null and b/build/lib/libQt5Core.so.5.12.10 differ diff --git a/build/lib/libQt5DBus.so.5 b/build/lib/libQt5DBus.so.5 new file mode 120000 index 00000000..292aa1bb --- /dev/null +++ b/build/lib/libQt5DBus.so.5 @@ -0,0 +1 @@ +./libQt5DBus.so.5.12.10 \ No newline at end of file diff --git a/build/lib/libQt5DBus.so.5.12.10 b/build/lib/libQt5DBus.so.5.12.10 new file mode 100755 index 00000000..51d47f83 Binary files /dev/null and b/build/lib/libQt5DBus.so.5.12.10 differ diff --git a/build/lib/libQt5Gui.so.5 b/build/lib/libQt5Gui.so.5 new file mode 120000 index 00000000..83ed1a02 --- /dev/null +++ b/build/lib/libQt5Gui.so.5 @@ -0,0 +1 @@ +./libQt5Gui.so.5.12.10 \ No newline at end of file diff --git a/build/lib/libQt5Gui.so.5.12.10 b/build/lib/libQt5Gui.so.5.12.10 new file mode 100644 index 00000000..a513fb1f Binary files /dev/null and b/build/lib/libQt5Gui.so.5.12.10 differ diff --git a/build/lib/libQt5Svg.so.5 b/build/lib/libQt5Svg.so.5 new file mode 120000 index 00000000..d36545c4 --- /dev/null +++ b/build/lib/libQt5Svg.so.5 @@ -0,0 +1 @@ +./libQt5Svg.so.5.12.10 \ No newline at end of file diff --git a/build/lib/libQt5Svg.so.5.12.10 b/build/lib/libQt5Svg.so.5.12.10 new file mode 100755 index 00000000..4212b16c Binary files /dev/null and b/build/lib/libQt5Svg.so.5.12.10 differ diff --git a/build/lib/libQt5Widgets.so.5 b/build/lib/libQt5Widgets.so.5 new file mode 120000 index 00000000..c11f5d90 --- /dev/null +++ b/build/lib/libQt5Widgets.so.5 @@ -0,0 +1 @@ +./libQt5Widgets.so.5.12.10 \ No newline at end of file diff --git a/build/lib/libQt5Widgets.so.5.12.10 b/build/lib/libQt5Widgets.so.5.12.10 new file mode 100644 index 00000000..eb3cab38 Binary files /dev/null and b/build/lib/libQt5Widgets.so.5.12.10 differ diff --git a/build/lib/libQt5XcbQpa.so.5 b/build/lib/libQt5XcbQpa.so.5 new file mode 120000 index 00000000..1abcbf07 --- /dev/null +++ b/build/lib/libQt5XcbQpa.so.5 @@ -0,0 +1 @@ +./libQt5XcbQpa.so.5.12.10 \ No newline at end of file diff --git a/build/lib/libQt5XcbQpa.so.5.12.10 b/build/lib/libQt5XcbQpa.so.5.12.10 new file mode 100644 index 00000000..c1b0342b Binary files /dev/null and b/build/lib/libQt5XcbQpa.so.5.12.10 differ diff --git a/build/lib/libQt5Xml.so.5 b/build/lib/libQt5Xml.so.5 new file mode 120000 index 00000000..3adfe610 --- /dev/null +++ b/build/lib/libQt5Xml.so.5 @@ -0,0 +1 @@ +./libQt5Xml.so.5.12.10 \ No newline at end of file diff --git a/build/lib/libQt5Xml.so.5.12.10 b/build/lib/libQt5Xml.so.5.12.10 new file mode 100644 index 00000000..e9e69a78 Binary files /dev/null and b/build/lib/libQt5Xml.so.5.12.10 differ diff --git a/build/lib/libhidapi-libusb.so.0 b/build/lib/libhidapi-libusb.so.0 new file mode 100644 index 00000000..1e5136a0 Binary files /dev/null and b/build/lib/libhidapi-libusb.so.0 differ diff --git a/build/lib/libicudata.so.56 b/build/lib/libicudata.so.56 new file mode 120000 index 00000000..e5e55e70 --- /dev/null +++ b/build/lib/libicudata.so.56 @@ -0,0 +1 @@ +./libicudata.so.56.1 \ No newline at end of file diff --git a/build/lib/libicudata.so.56.1 b/build/lib/libicudata.so.56.1 new file mode 100644 index 00000000..bcbaea35 Binary files /dev/null and b/build/lib/libicudata.so.56.1 differ diff --git a/build/lib/libicui18n.so.56 b/build/lib/libicui18n.so.56 new file mode 120000 index 00000000..d07af7f8 --- /dev/null +++ b/build/lib/libicui18n.so.56 @@ -0,0 +1 @@ +./libicui18n.so.56.1 \ No newline at end of file diff --git a/build/lib/libicui18n.so.56.1 b/build/lib/libicui18n.so.56.1 new file mode 100644 index 00000000..3dfd5c34 Binary files /dev/null and b/build/lib/libicui18n.so.56.1 differ diff --git a/build/lib/libicuuc.so.56 b/build/lib/libicuuc.so.56 new file mode 120000 index 00000000..c5702a5f --- /dev/null +++ b/build/lib/libicuuc.so.56 @@ -0,0 +1 @@ +./libicuuc.so.56.1 \ No newline at end of file diff --git a/build/lib/libicuuc.so.56.1 b/build/lib/libicuuc.so.56.1 new file mode 100644 index 00000000..4d55a95d Binary files /dev/null and b/build/lib/libicuuc.so.56.1 differ diff --git a/build/lib/libqxcb.so b/build/lib/libqxcb.so new file mode 100755 index 00000000..c9ffac58 Binary files /dev/null and b/build/lib/libqxcb.so differ diff --git a/build/lib/libqxcb.so.1 b/build/lib/libqxcb.so.1 new file mode 120000 index 00000000..ab7b6188 --- /dev/null +++ b/build/lib/libqxcb.so.1 @@ -0,0 +1 @@ +./libqxcb.so \ No newline at end of file diff --git a/build/lib/libusb-1.0.so.0 b/build/lib/libusb-1.0.so.0 new file mode 100644 index 00000000..0fc69d9c Binary files /dev/null and b/build/lib/libusb-1.0.so.0 differ diff --git a/build/scripts/CleanBuild.sh b/build/scripts/CleanBuild.sh new file mode 100644 index 00000000..28aba3d5 --- /dev/null +++ b/build/scripts/CleanBuild.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +cd /home/nav/Projects/Bloom || exit; + +rm -fr build/cmake-build-debug/*; rm -fr build/cmake-build-release/*; + +rm -fr release; +rm -fr Bloom-*.deb; +rm -fr "_CPack_Packages"; + +export CMAKE_PREFIX_PATH=/opt/Qt/5.12.10/gcc_64/ + +cd build/cmake-build-debug/ && cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_COMPILER=/usr/bin/g++-9 /home/nav/Projects/Bloom/ +cd /home/nav/Projects/Bloom/ && cmake --build /home/nav/Projects/Bloom/build/cmake-build-debug --target clean + +cmake --build /home/nav/Projects/Bloom/build/cmake-build-debug --target Bloom +cmake --install /home/nav/Projects/Bloom/build/cmake-build-debug --target Bloom \ No newline at end of file diff --git a/build/scripts/CopyAvrPartFilesAndCreateMapping.php b/build/scripts/CopyAvrPartFilesAndCreateMapping.php new file mode 100644 index 00000000..13da3406 --- /dev/null +++ b/build/scripts/CopyAvrPartFilesAndCreateMapping.php @@ -0,0 +1,178 @@ +\n"; + +// Empty destination directory +if (file_exists(TARGET_PD_DEST_FILE_PATH)) { + // There is no PHP function to delete a non-empty directory and I can't be arsed to write one. Bite me + exec("rm -r " . TARGET_PD_DEST_FILE_PATH); +} + +if (file_exists(TARGET_PD_MAPPING_FILE_PATH)) { + unlink(TARGET_PD_MAPPING_FILE_PATH); +} + +mkdir(TARGET_PD_DEST_FILE_PATH, 0777, true); + +class TargetDescription implements JsonSerializable +{ + public ?string $targetId; + public ?string $targetName; + public ?string $originalFilePath; + public ?string $destinationFilePath; + public ?string $relativeDestinationFilePath; + + public function jsonSerialize() { + return [ + 'targetName' => $this->targetName, + 'targetDescriptionFilePath' => $this->relativeDestinationFilePath, + ]; + } +} + +$processedFileCount = 0; +$failedFileCount = 0; + +/** + * Will read all .atdf and .xml files in $path and attempt to parse them as AVR target description files. + * This function is recursive - it will call itself if it stumbles upon a directory within $path. + * + * @param $path + * @return TargetDescription[][] + * A mapping of target IDs to an array of TargetDescription objects. Note: target IDs are not + * always unique to targets. That is why each ID is mapped to an array of TargetDescription objects. + */ +function processAvrPartFiles($path) : array { + global $processedFileCount, $failedFileCount; + + /** @var TargetDescription[][] $output */ + $output = []; + + foreach (glob($path . "/*") as $file) { + if (is_dir($file)) { + $output = array_merge($output, processAvrPartFiles($file)); + continue; + } + + if (strstr($file, '.atdf') === false && strstr($file, '.xml') === false) { + // Unknown file type + continue; + } + + $fileContents = file_get_contents($file); + $pdXml = simplexml_load_string($fileContents); + + if ($pdXml === false) { + print "Invalid XML in \"" . $file . "\"\n"; + $failedFileCount++; + continue; + } + + $device = $pdXml->devices[0]->device; + + $partDescriptionXml = new TargetDescription(); + $partDescriptionXml->originalFilePath = $file; + $partDescriptionXml->destinationFilePath = TARGET_PD_DEST_FILE_PATH . "/"; + $partDescriptionXml->relativeDestinationFilePath = TARGET_PD_DEST_RELATIVE_FILE_PATH . "/"; + + if (!empty($device['architecture']) + && in_array($device['architecture'], ['AVR8', 'AVR32', 'AVR8X', 'AVR8L', 'AVR8_XMEGA']) + ) { + // This is an AVR device. + if (!empty($device['architecture'])) { + // Group by architecture + $partDescriptionXml->destinationFilePath .= strtoupper((string) $device['architecture']) . "/"; + $partDescriptionXml->relativeDestinationFilePath .= strtoupper((string) $device['architecture']) . "/"; + } + + if (!empty($device['family'])) { + // Group by family + $partDescriptionXml->destinationFilePath .= str_replace([' '] , '_', strtoupper((string) $device['family'])); + $partDescriptionXml->relativeDestinationFilePath .= str_replace([' '] , '_', strtoupper((string) $device['family'])); + } + + $partDescriptionXml->targetName = str_replace([' '], '', (string) $device['name']); + + if (!empty(($signatures = $device->{'property-groups'} + ->xpath('property-group[@name="SIGNATURES"]')[0])) + && !empty($signatures->xpath('property[@name="SIGNATURE0"]')) + && !empty($signatures->xpath('property[@name="SIGNATURE1"]')) + && !empty($signatures->xpath('property[@name="SIGNATURE2"]')) + ) { + $partDescriptionXml->targetId = (string) $signatures->xpath('property[@name="SIGNATURE0"]')[0]['value'] + . str_replace('0x', '', (string) $signatures->xpath('property[@name="SIGNATURE1"]')[0]['value']) + . str_replace('0x', '', (string) $signatures->xpath('property[@name="SIGNATURE2"]')[0]['value']) + ; + $partDescriptionXml->targetId = strtolower($partDescriptionXml->targetId); + } + } + + if (empty($partDescriptionXml->destinationFilePath) + || empty($partDescriptionXml->targetName) + || empty($partDescriptionXml->targetId) + ) { + print "Failed to parse file {$file}\n"; + $failedFileCount++; + continue; + } + + if (!file_exists($partDescriptionXml->destinationFilePath)) { + mkdir($partDescriptionXml->destinationFilePath, 0777, true); + } + + $partDescriptionXml->destinationFilePath .= "/" . strtoupper($partDescriptionXml->targetName) . ".xml"; + $partDescriptionXml->relativeDestinationFilePath .= "/" . strtoupper($partDescriptionXml->targetName) . ".xml"; + + if (strstr($fileContents, 'destinationFilePath, $fileContents) === false) { + print "FATAL ERROR: Failed to write data to " . $partDescriptionXml->destinationFilePath . "\n"; + print "Aborting\n"; + exit(1); + } + + $output[$partDescriptionXml->targetId][] = $partDescriptionXml; + echo "Target Part Description File Processed: \"" . substr($partDescriptionXml->originalFilePath, strlen(AVR_PD_FILE_PATH)) . "\"\n" + . "Target Name: \"" . $partDescriptionXml->targetName . "\" Target ID: \"" . $partDescriptionXml->targetId + . "\" Destination: \"" . substr($partDescriptionXml->destinationFilePath, strlen(TARGET_PD_DEST_FILE_PATH)) + . "\"\n\n" + ; + $processedFileCount++; + } + + return $output; +} + +print "Processing files in " . AVR_PD_FILE_PATH . "\n\n"; +$targetDescriptions = processAvrPartFiles(AVR_PD_FILE_PATH); + +if (file_put_contents(TARGET_PD_MAPPING_FILE_PATH, json_encode($targetDescriptions, JSON_PRETTY_PRINT)) === false) { + print "FATAL ERROR: Failed to create JSON mapping of target IDs to target description file paths\n"; + exit(1); +} + +print "\nCreated JSON mapping of target IDs to target description file paths: " . TARGET_PD_MAPPING_FILE_PATH . "\n"; + +print "\nProcessed " . $processedFileCount . " files. Failures: " . $failedFileCount . "\n"; +print "Done\n"; diff --git a/resources/bloom.template.json b/resources/bloom.template.json new file mode 100644 index 00000000..3cba6321 --- /dev/null +++ b/resources/bloom.template.json @@ -0,0 +1,20 @@ +{ + "environments": { + "default": { + "debugToolName": "atmel-ice", + + "target": { + "name": "avr8", + "physicalInterface": "debugWire" + }, + + "debugServer": { + "name": "avr-gdb-rsp" + } + } + }, + + "insight": { + "enabled": true + } +} \ No newline at end of file diff --git a/resources/help.txt b/resources/help.txt new file mode 100644 index 00000000..596328bc --- /dev/null +++ b/resources/help.txt @@ -0,0 +1,14 @@ +A Linux-based debug interface for embedded systems development. + +Usage: + bloom [ENVIRONMENT_NAME/COMMAND] + +If no environment name or command is provided, Bloom will fallback to the environment named "default". +If no such environment exists, Bloom will exit. + +Commands: + --help, -h Displays this help text. + --version, -v Displays the current version number. + init Creates a new Bloom project configuration file (bloom.json) in the working directory. + +For more information on getting started with Bloom, please visit https://bloom.oscillate.io/getting-started. diff --git a/resources/packaging/description.txt b/resources/packaging/description.txt new file mode 100644 index 00000000..56a8fe25 --- /dev/null +++ b/resources/packaging/description.txt @@ -0,0 +1 @@ +Bloom is a Linux-based debug interface for embedded systems development. Bloom supports most Microchip AVR8 targets, along with numerous EDBG-based debug tools. \ No newline at end of file diff --git a/resources/packaging/postinst b/resources/packaging/postinst new file mode 100755 index 00000000..7d031c65 --- /dev/null +++ b/resources/packaging/postinst @@ -0,0 +1,15 @@ +#!/bin/bash + +BLOOM_UDEV_FILE_PATH=/etc/udev/rules.d/ + +if [ ! -f "${BLOOM_UDEV_FILE_PATH}/99-bloom.rules" ]; then + sudo ln -s /opt/bloom/resources/UDevRules/99-bloom.rules "$BLOOM_UDEV_FILE_PATH"; +fi + + +if [ -f "/usr/bin/bloom" ]; then + sudo rm /usr/bin/bloom; +fi + +sudo chmod u=rwx,g=rwx,o=rx -R /opt/bloom +ln -s /opt/bloom/bin/bloom /usr/bin/bloom; diff --git a/resources/packaging/postrm b/resources/packaging/postrm new file mode 100755 index 00000000..20b802e2 --- /dev/null +++ b/resources/packaging/postrm @@ -0,0 +1,11 @@ +#!/bin/bash + +BLOOM_UDEV_FILE_PATH=/etc/udev/rules.d/ + +if [ -f "${BLOOM_UDEV_FILE_PATH}/99-bloom.rules" ]; then + sudo rm "$BLOOM_UDEV_FILE_PATH/99-bloom.rules"; +fi + +if [ -f "/usr/bin/bloom" ]; then + sudo rm /usr/bin/bloom; +fi diff --git a/src/Application.cpp b/src/Application.cpp new file mode 100644 index 00000000..10823b33 --- /dev/null +++ b/src/Application.cpp @@ -0,0 +1,344 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#include "Application.hpp" +#include "src/Logger/Logger.hpp" +#include "SignalHandler/SignalHandler.hpp" +#include "Exceptions/InvalidConfig.hpp" + +using namespace Bloom; +using namespace Bloom::Events; +using namespace Bloom::Exceptions; + +int Application::run(const std::vector& arguments) { + try { + this->setName("Bloom"); + + if (!arguments.empty()) { + auto firstArg = arguments.front(); + auto commandsToCallbackMapping = this->getCommandToCallbackMapping(); + + if (commandsToCallbackMapping.contains(firstArg)) { + // User has passed an argument that maps to a command callback - invoke the callback and shutdown + auto returnValue = commandsToCallbackMapping.at(firstArg)(); + + this->shutdown(); + return returnValue; + + } else { + // If the first argument didn't map to a command, we assume it's an environment name + this->selectedEnvironmentName = firstArg; + } + } + + this->startup(); + + if (this->insightConfig.insightEnabled) { + this->insight.setApplicationConfig(this->applicationConfig); + this->insight.setEnvironmentConfig(this->environmentConfig); + this->insight.run(); + Logger::debug("Insight closed"); + this->shutdown(); + return EXIT_SUCCESS; + } + + // Main event loop + while (Thread::getState() == ThreadState::READY) { + this->applicationEventListener->waitAndDispatch(); + } + + } catch (const InvalidConfig& exception) { + Logger::error(exception.getMessage()); + + } catch (const Exception& exception) { + Logger::error(exception.getMessage()); + } + + this->shutdown(); + return EXIT_SUCCESS; +} + +void Application::startup() { + auto applicationEventListener = this->applicationEventListener; + this->eventManager.registerListener(applicationEventListener); + applicationEventListener->registerCallbackForEventType( + std::bind(&Application::handleShutdownApplicationEvent, this, std::placeholders::_1) + ); + + this->applicationConfig = this->extractConfig(); + Logger::configure(this->applicationConfig); + + // Start signal handler + this->blockAllSignalsOnCurrentThread(); + this->signalHandlerThread = std::thread(&SignalHandler::run, std::ref(this->signalHandler)); + + auto environmentName = this->selectedEnvironmentName.value_or("default"); + Logger::info("Selected environment: " + environmentName); + Logger::debug("Number of environments extracted from config: " + + std::to_string(this->applicationConfig.environments.size())); + + // Validate the selected environment + if (!applicationConfig.environments.contains(environmentName)) { + throw InvalidConfig("Environment (\"" + environmentName + "\") not found in configuration."); + } + + this->environmentConfig = applicationConfig.environments.at(environmentName); + this->insightConfig = this->environmentConfig.insightConfig.value_or(this->applicationConfig.insightConfig); + + if (this->environmentConfig.debugServerConfig.has_value()) { + this->debugServerConfig = this->environmentConfig.debugServerConfig.value(); + + } else if (this->applicationConfig.debugServerConfig.has_value()) { + this->debugServerConfig = this->applicationConfig.debugServerConfig.value(); + + } else { + throw InvalidConfig("Debug server configuration missing."); + } + + applicationEventListener->registerCallbackForEventType( + std::bind(&Application::handleTargetControllerStateChangedEvent, this, std::placeholders::_1) + ); + + applicationEventListener->registerCallbackForEventType( + std::bind(&Application::onDebugServerStateChanged, this, std::placeholders::_1) + ); + + this->startTargetController(); + this->startDebugServer(); + + Thread::setState(ThreadState::READY); +} + +ApplicationConfig Application::extractConfig() { + auto appConfig = ApplicationConfig(); + auto currentPath = std::filesystem::current_path().string(); + auto jsonConfigFile = QFile(QString::fromStdString(currentPath + "/bloom.json")); + + if (!jsonConfigFile.exists()) { + throw InvalidConfig("Bloom configuration file (bloom.json) not found. Working directory: " + + currentPath); + } + + if (!jsonConfigFile.open(QIODevice::ReadOnly)) { + throw InvalidConfig("Failed to load Bloom configuration file (bloom.json) Working directory: " + + currentPath); + } + + auto jsonObject = QJsonDocument::fromJson(jsonConfigFile.readAll()).object(); + appConfig.init(jsonObject); + + jsonConfigFile.close(); + return appConfig; +} + +int Application::presentHelpText() { + /* + * Silence all logging here, as we're just to display the help text and then exit the application. Any + * further logging will just be noise. + */ + Logger::silence(); + + // The file help.txt is included in the binary image as a resource. See src/resource.qrc + auto helpFile = QFile(":/compiled/resources/help.txt"); + + if (!helpFile.open(QIODevice::ReadOnly)) { + // This should never happen - if it does, something has gone very wrong + throw Exception("Failed to open help file - please report this issue at https://bloom.oscillate.io/report-issue"); + } + + std::cout << "Bloom v" << Application::VERSION_STR << std::endl; + std::cout << QTextStream(&helpFile).readAll().toUtf8().constData() << std::endl; + return EXIT_SUCCESS; +} + +int Application::presentVersionText() { + Logger::silence(); + + std::cout << "Bloom v" << Application::VERSION_STR << "\n"; + std::cout << "https://bloom.oscillate.io/" << "\n"; + std::cout << "Nav Mohammed" << std::endl; + return EXIT_SUCCESS; +} + +int Application::initProject() { + auto configFile = QFile(QString::fromStdString(std::filesystem::current_path().string() + "/bloom.json")); + + if (configFile.exists()) { + throw Exception("Bloom configuration file (bloom.json) already exists in working directory."); + } + + /* + * The file bloom.template.json is just a template Bloom config file that is included in the binary image as + * a resource. See src/resource.qrc + * + * We simply copy the template file into the user's working directory. + */ + auto templateConfigFile = QFile(":/compiled/resources/bloom.template.json"); + + if (!templateConfigFile.open(QIODevice::ReadOnly)) { + throw Exception("Failed to open template configuration file - please report this issue at https://bloom.oscillate.io/report-issue"); + } + + if (!configFile.open(QIODevice::ReadWrite)) { + throw Exception("Failed to create Bloom configuration file (bloom.json)"); + } + + configFile.write(templateConfigFile.readAll()); + + configFile.close(); + templateConfigFile.close(); + + Logger::info("Bloom configuration file (bloom.json) created in working directory."); + return EXIT_SUCCESS; +} + +void Application::shutdown() { + auto appState = Thread::getState(); + if (appState == ThreadState::STOPPED || appState == ThreadState::SHUTDOWN_INITIATED) { + return; + } + + Thread::setState(ThreadState::SHUTDOWN_INITIATED); + Logger::info("Shutting down Bloom"); + + this->stopDebugServer(); + this->stopTargetController(); + + if (this->signalHandler.getState() == ThreadState::READY) { + // Signal handler is still running + this->signalHandler.triggerShutdown(); + + // Send meaningless signal to the SignalHandler thread to have it shutdown. + pthread_kill(this->signalHandlerThread.native_handle(), SIGUSR1); + } + + if (this->signalHandlerThread.joinable()) { + Logger::debug("Joining SignalHandler thread"); + this->signalHandlerThread.join(); + Logger::debug("SignalHandler thread joined"); + } + + Thread::setState(ThreadState::STOPPED); +} + +void Application::startTargetController() { + this->targetController.setApplicationConfig(this->applicationConfig); + this->targetController.setEnvironmentConfig(this->environmentConfig); + + this->targetControllerThread = std::thread( + &TargetController::run, + std::ref(this->targetController) + ); + + auto tcStateChangeEvent = this->applicationEventListener->waitForEvent(); + + if (!tcStateChangeEvent.has_value() || tcStateChangeEvent->get()->getState() != ThreadState::READY) { + throw Exception("TargetController failed to startup."); + } +} + +void Application::stopTargetController() { + auto targetControllerState = this->targetController.getState(); + if (targetControllerState == ThreadState::STARTING || targetControllerState == ThreadState::READY) { + // this->applicationEventListener->clearEventsOfType(Events::TargetControllerStateChanged::name); + this->eventManager.triggerEvent(std::make_shared()); + this->applicationEventListener->waitForEvent( + std::chrono::milliseconds(10000) + ); + } + + if (this->targetControllerThread.joinable()) { + Logger::debug("Joining TargetController thread"); + this->targetControllerThread.join(); + Logger::debug("TargetController thread joined"); + } +} + +void Application::startDebugServer() { + auto supportedDebugServers = this->getSupportedDebugServers(); + if (!supportedDebugServers.contains(this->debugServerConfig.name)) { + throw Exceptions::InvalidConfig("DebugServer \"" + this->debugServerConfig.name + "\" not found."); + } + + this->debugServer = supportedDebugServers.at(this->debugServerConfig.name)(); + this->debugServer->setApplicationConfig(this->applicationConfig); + this->debugServer->setEnvironmentConfig(this->environmentConfig); + this->debugServer->setDebugServerConfig(this->debugServerConfig); + + Logger::info("Selected DebugServer: " + this->debugServer->getName()); + + this->debugServerThread = std::thread( + &DebugServer::run, + this->debugServer.get() + ); + + auto dsStateChangeEvent = this->applicationEventListener->waitForEvent(); + + if (!dsStateChangeEvent.has_value() || dsStateChangeEvent->get()->getState() != ThreadState::READY) { + throw Exception("DebugServer failed to startup."); + } +} + +void Application::stopDebugServer() { + if (this->debugServer == nullptr) { + // DebugServer hasn't been resolved yet. + return; + } + + auto debugServerState = this->debugServer->getState(); + if (debugServerState == ThreadState::STARTING || debugServerState == ThreadState::READY) { + this->eventManager.triggerEvent(std::make_shared()); + this->applicationEventListener->waitForEvent( + std::chrono::milliseconds(5000) + ); + } + + if (this->debugServerThread.joinable()) { + Logger::debug("Joining DebugServer thread"); + this->debugServerThread.join(); + Logger::debug("DebugServer thread joined"); + } +} + +void Application::handleTargetControllerStateChangedEvent(EventPointer event) { + if (event->getState() == ThreadState::STOPPED || event->getState() == ThreadState::SHUTDOWN_INITIATED) { + // TargetController has unexpectedly shutdown - it must have encountered a fatal error. + this->shutdown(); + } +} + +void Application::handleShutdownApplicationEvent(EventPointer) { + Logger::debug("ShutdownApplication event received."); + this->shutdown(); +} + +void Application::onDebugServerStateChanged(EventPointer event) { + if (event->getState() == ThreadState::STOPPED || event->getState() == ThreadState::SHUTDOWN_INITIATED) { + // DebugServer has unexpectedly shutdown - it must have encountered a fatal error. + this->shutdown(); + } +} + +std::string Application::getApplicationDirPath() { + auto pathCharArray = std::array(); + + if (readlink("/proc/self/exe", pathCharArray.data(), PATH_MAX) < 0) { + throw Exception("Failed to obtain application directory path."); + } + + return std::filesystem::path(std::string(pathCharArray.begin(), pathCharArray.end())).parent_path(); +} + +std::string Application::getResourcesDirPath() { + return Application::getApplicationDirPath() + "/../resources/"; +} + +bool Application::isRunningAsRoot() { + return geteuid() == 0; +} diff --git a/src/Application.hpp b/src/Application.hpp new file mode 100644 index 00000000..5e35aa39 --- /dev/null +++ b/src/Application.hpp @@ -0,0 +1,183 @@ +#pragma once + +#include +#include +#include +#include +#include +#include + +#include "src/SignalHandler/SignalHandler.hpp" +#include "src/TargetController/TargetController.hpp" +#include "src/DebugServers/GdbRsp/AvrGdbRsp/AvrGdbRsp.hpp" +#include "src/Insight/Insight.hpp" +#include "src/Helpers/Thread.hpp" +#include "src/Logger/Logger.hpp" +#include "src/ApplicationConfig.hpp" +#include "src/Exceptions/Exception.hpp" +#include "src/EventManager/EventListener.hpp" +#include "src/EventManager/Events/Events.hpp" + +namespace Bloom +{ + using namespace DebugServers; + + class Application: public Thread + { + public: + static const inline std::string VERSION_STR = "0.0.1"; + + private: + /** + * This is the application wide event manager. It should be the only instance of the EventManager class at + * any given time. + * + * It should be injected (by reference) into any other instances of classes that require use + * of the EventManager. + */ + EventManager eventManager = EventManager(); + EventListenerPointer applicationEventListener = std::make_shared("ApplicationEventListener"); + + SignalHandler signalHandler = SignalHandler(this->eventManager); + std::thread signalHandlerThread; + + TargetController targetController = TargetController(this->eventManager); + std::thread targetControllerThread; + + std::unique_ptr debugServer = nullptr; + std::thread debugServerThread; + + Insight insight = Insight(this->eventManager); + + ApplicationConfig applicationConfig; + EnvironmentConfig environmentConfig; + DebugServerConfig debugServerConfig; + InsightConfig insightConfig; + + std::optional selectedEnvironmentName; + + auto getCommandToCallbackMapping() { + return std::map> { + { + "--help", + std::bind(&Application::presentHelpText, this) + }, + { + "-h", + std::bind(&Application::presentHelpText, this) + }, + { + "--version", + std::bind(&Application::presentVersionText, this) + }, + { + "-v", + std::bind(&Application::presentVersionText, this) + }, + { + "init", + std::bind(&Application::initProject, this) + }, + }; + } + + /** + * Extracts config from the user's JSON config file and generates an ApplicationConfig object. + * + * @see ApplicationConfig declaration for more on this. + * @return + */ + static ApplicationConfig extractConfig(); + + /** + * Presents application help text to user. + * + * @return + */ + int presentHelpText(); + + /** + * Presents the current Bloom version number to user. + * + * @return + */ + int presentVersionText(); + + /** + * Initialises a project in the user's working directory. + * + * @return + */ + int initProject(); + + /** + * Kicks off the application. + * + * Will start the TargetController and DebugServer. And register the main application's event handlers. + */ + void startup(); + + /** + * Will cleanly shutdown the application. This should never fail. + */ + void shutdown(); + + /** + * Prepares a dedicated thread for the TargetController and kicks it off. + */ + void startTargetController(); + + /** + * Invokes a clean shutdown of the TargetController. The TargetController should disconnect from the target + * and debug tool in a clean and safe manner, ensuring that both are left in a sensible state. + * + * This will join the TargetController thread. + */ + void stopTargetController(); + + void startDebugServer(); + + void stopDebugServer(); + + public: + explicit Application() = default; + + auto getSupportedDebugServers() { + return std::map()>> { + { + "avr-gdb-rsp", + [this]() -> std::unique_ptr { + return std::make_unique(this->eventManager); + } + }, + }; + }; + + int run(const std::vector& arguments); + + void handleTargetControllerStateChangedEvent(EventPointer event); + void onDebugServerStateChanged(EventPointer event); + void handleShutdownApplicationEvent(EventPointer); + + /** + * Returns the path to the directory in which the Bloom binary resides. + * + * @return + */ + static std::string getApplicationDirPath(); + + /** + * Returns the path to the Resources directory, located in the application directory. + * + * @return + */ + static std::string getResourcesDirPath(); + + /** + * Checks if the current effective user running Bloom has root privileges. + * + * @return + */ + static bool isRunningAsRoot(); + }; +} diff --git a/src/ApplicationConfig.cpp b/src/ApplicationConfig.cpp new file mode 100644 index 00000000..1c05397a --- /dev/null +++ b/src/ApplicationConfig.cpp @@ -0,0 +1,88 @@ +#include +#include +#include "ApplicationConfig.hpp" + +using namespace Bloom; + +void ApplicationConfig::init(QJsonObject jsonObject) { + if (!jsonObject.contains("environments")) { + throw Exceptions::InvalidConfig("No environments found."); + } + + // Extract all environment objects from JSON config. + auto environments = jsonObject.find("environments").value().toObject(); + for (auto environmentIt = environments.begin(); environmentIt != environments.end(); environmentIt++) { + auto environmentName = environmentIt.key().toStdString(); + + try { + auto environmentConfig = EnvironmentConfig(); + environmentConfig.init(environmentName, environmentIt.value().toObject()); + + this->environments.insert( + std::pair(environmentName, environmentConfig) + ); + } catch (Exceptions::InvalidConfig& exception) { + Logger::error("Invalid environment config for environment '" + environmentName + "': " + + exception.getMessage() + " Environment will be ignored."); + } + } + + if (jsonObject.contains("debugServer")) { + auto debugServerConfig = DebugServerConfig(); + debugServerConfig.init(jsonObject.find("debugServer")->toObject()); + this->debugServerConfig = debugServerConfig; + } + + if (jsonObject.contains("insight")) { + this->insightConfig.init(jsonObject.find("insight")->toObject()); + } + + if (jsonObject.contains("debugLoggingEnabled")) { + this->debugLoggingEnabled = jsonObject.find("debugLoggingEnabled").value().toBool(); + } +} + +void InsightConfig::init(QJsonObject jsonObject) { + if (jsonObject.contains("enabled")) { + this->insightEnabled = jsonObject.find("enabled").value().toBool(); + } +} + +void EnvironmentConfig::init(std::string name, QJsonObject jsonObject) { + this->name = name; + this->debugToolName = jsonObject.find("debugToolName")->toString().toLower().toStdString(); + + // Extract target data + if (!jsonObject.contains("target")) { + // Environment has no target data - ignore + throw Exceptions::InvalidConfig("No target configuration provided"); + } + + this->targetConfig.init(jsonObject.find("target")->toObject()); + + if (jsonObject.contains("debugServer")) { + auto debugServerConfig = DebugServerConfig(); + debugServerConfig.init(jsonObject.find("debugServer")->toObject()); + this->debugServerConfig = debugServerConfig; + } + + if (jsonObject.contains("insight")) { + auto insightConfig = InsightConfig(); + insightConfig.init(jsonObject.find("insight")->toObject()); + this->insightConfig = insightConfig; + } +} + +void TargetConfig::init(QJsonObject jsonObject) { + if (!jsonObject.contains("name")) { + throw Exceptions::InvalidConfig("No target name found."); + } + + this->name = jsonObject.find("name")->toString().toLower().toStdString(); + this->jsonObject = jsonObject; +} + +void DebugServerConfig::init(QJsonObject jsonObject) { + this->name = jsonObject.find("name")->toString().toLower().toStdString(); + this->jsonObject = jsonObject; +} diff --git a/src/ApplicationConfig.hpp b/src/ApplicationConfig.hpp new file mode 100644 index 00000000..7bf6eb6c --- /dev/null +++ b/src/ApplicationConfig.hpp @@ -0,0 +1,154 @@ +#pragma once + +#include +#include +#include +#include + +namespace Bloom +{ + /* + * Currently, all user configuration is stored in a JSON file (bloom.json), in the user's project directory. + * + * The JSON config file should define debugging environment objects. A debugging environment object is just + * a user defined JSON object that holds parameters relating to a specific debugging environment (like the + * name of the DebugTool, Target configuration and any debug server config). Because a config file + * can define multiple debugging environments, each object should be assigned a key in the config file. We use this + * key to allow users to select different debugging environments between debugging sessions. + * + * On application startup, we extract the config from this JSON file and generate an ApplicationConfig object. + * See Application::extractConfig() for more on this. + * + * Some config parameters are specific to certain entities within Bloom, but have no significance across the + * rest of the application. For example, AVR8 targets require 'physicalInterface' and 'configVariant' parameters. + * These are used to configure the AVR8 target, but have no significance across the rest of the application. + * This is why some configuration structs (like TargetConfig) include a QJsonObject member, typically named jsonObject. + * When instances of these structs are passed to the appropriate entities, any configuration required by those + * entities is extracted from the jsonObject member. This means we don't have to worry about any entity specific + * config parameters at the application level. We can simply extract what we need at an entity level and the rest + * of the application can remain oblivious. For an example on extracting entity specific config, see AVR8::configure(). + */ + + /** + * Configuration relating to a specific target. + * + * Please don't define any target specific configuration here, unless it applies to *all* targets across + * the application. If a target requires specific config, it should be extracted from the jsonObject member. + * This should be done in Target::preActivationConfigure(), to which an instance of TargetConfig is passed. + * See the comment above on entity specific config for more on this. + */ + struct TargetConfig + { + /** + * Obtains config parameters from JSON object. + * + * @param jsonObject + */ + void init(QJsonObject jsonObject); + + std::string name; + QJsonObject jsonObject; + }; + + /** + * Debug server configuration. + */ + struct DebugServerConfig + { + /** + * Obtains config parameters from JSON object. + * + * @param jsonObject + */ + void init(QJsonObject jsonObject); + + std::string name; + QJsonObject jsonObject; + }; + + struct InsightConfig + { + /** + * Obtains config parameters from JSON object. + * + * @param jsonObject + */ + void init(QJsonObject jsonObject); + + bool insightEnabled = true; + }; + + /** + * Configuration relating to a specific user defined environment. + * + * An instance of this type will be instantiated for each environment defined in the user's config file. + * See Application::extractConfig() implementation for more on this. + */ + struct EnvironmentConfig + { + /** + * Obtains config parameters from JSON object. + * + * @param jsonObject + */ + void init(std::string name, QJsonObject jsonObject); + + /** + * The environment name is stored as the key to the JSON object containing the environment parameters. + * + * Environment names must be unique. + */ + std::string name; + + /** + * Name of the selected debug tool for this environment. + */ + std::string debugToolName; + + /** + * Configuration for the environment's selected target. + * + * Each environment can consist of only one target. + */ + TargetConfig targetConfig; + + /** + * Configuration for the environment's debug server. Users can define this at the application level if + * they desire. + */ + std::optional debugServerConfig; + + /** + * Insight configuration can be defined at an environment level as well as at an application level. + */ + std::optional insightConfig; + }; + + /** + * This holds all user provided application configuration. + */ + struct ApplicationConfig + { + /** + * Obtains config parameters from JSON object. + * + * @param jsonObject + */ + void init(QJsonObject jsonObject); + + /** + * A mapping of environment names to EnvironmentConfig objects. + */ + std::map environments; + + /** + * Application level debug server configuration. We use this as a fallback if no debug server config is + * provided at the environment level. + */ + std::optional debugServerConfig; + + InsightConfig insightConfig; + + bool debugLoggingEnabled = false; + }; +} diff --git a/src/DebugServers/DebugServer.cpp b/src/DebugServers/DebugServer.cpp new file mode 100644 index 00000000..c0cb7d2e --- /dev/null +++ b/src/DebugServers/DebugServer.cpp @@ -0,0 +1,233 @@ +#include +#include + +#include "DebugServer.hpp" +#include "src/Exceptions/InvalidConfig.hpp" +#include "src/Logger/Logger.hpp" + +using namespace Bloom::DebugServers; + +void DebugServer::run() { + try { + this->startup(); + + Logger::info("DebugServer ready"); + + while (this->getState() == ThreadState::READY) { + this->serve(); + this->eventListener->dispatchCurrentEvents(); + } + } catch (const std::exception& exception) { + Logger::error("DebugServer fatal error: " + std::string(exception.what())); + } + + this->shutdown(); +} + +void DebugServer::startup() { + this->setName("DS"); + Logger::info("Starting DebugServer"); + + this->eventManager.registerListener(this->eventListener); + + this->interruptEventNotifier = std::make_shared(); + this->interruptEventNotifier->init(); + this->eventListener->setInterruptEventNotifier(this->interruptEventNotifier); + + // Register event handlers + this->eventListener->registerCallbackForEventType( + std::bind(&DebugServer::onShutdownDebugServerEvent, this, std::placeholders::_1) + ); + + this->init(); + this->setStateAndEmitEvent(ThreadState::READY); +} + +void DebugServer::shutdown() { + if (this->getState() == ThreadState::STOPPED || this->getState() == ThreadState::SHUTDOWN_INITIATED) { + return; + } + + this->setState(ThreadState::SHUTDOWN_INITIATED); + Logger::info("Shutting down DebugServer"); + this->close(); + this->interruptEventNotifier->close(); + this->setStateAndEmitEvent(ThreadState::STOPPED); +} + +void DebugServer::onShutdownDebugServerEvent(EventPointer event) { + this->shutdown(); +} + +void DebugServer::stopTargetExecution() { + auto stopTargetEvent = std::make_shared(); + this->eventManager.triggerEvent(stopTargetEvent); + + auto responseEvent = this->eventListener->waitForEvent< + Events::TargetExecutionStopped, + Events::TargetControllerErrorOccurred + >(std::chrono::milliseconds(5000), stopTargetEvent->id); + + if (!responseEvent.has_value() + || !std::holds_alternative>(responseEvent.value()) + ) { + throw Exception("Unexpected response from TargetController"); + } +} + +void DebugServer::continueTargetExecution(std::optional fromAddress) { + auto resumeExecutionEvent = std::make_shared(); + + if (fromAddress.has_value()) { + resumeExecutionEvent->fromProgramCounter = fromAddress.value(); + } + + this->eventManager.triggerEvent(resumeExecutionEvent); + auto responseEvent = this->eventListener->waitForEvent< + Events::TargetExecutionResumed, + Events::TargetControllerErrorOccurred + >(std::chrono::milliseconds(5000), resumeExecutionEvent->id); + + if (!responseEvent.has_value() + || !std::holds_alternative>(responseEvent.value()) + ) { + throw Exception("Unexpected response from TargetController"); + } +} + +void DebugServer::stepTargetExecution(std::optional fromAddress) { + auto stepExecutionEvent = std::make_shared(); + + if (fromAddress.has_value()) { + stepExecutionEvent->fromProgramCounter = fromAddress.value(); + } + + this->eventManager.triggerEvent(stepExecutionEvent); + auto responseEvent = this->eventListener->waitForEvent< + Events::TargetExecutionResumed, + Events::TargetControllerErrorOccurred + >(std::chrono::milliseconds(5000), stepExecutionEvent->id); + + if (!responseEvent.has_value() + || !std::holds_alternative>(responseEvent.value()) + ) { + throw Exception("Unexpected response from TargetController"); + } +} + +TargetRegisters DebugServer::readGeneralRegistersFromTarget(TargetRegisterDescriptors descriptors) { + auto readRegistersEvent = std::make_shared(); + readRegistersEvent->descriptors = descriptors; + + this->eventManager.triggerEvent(readRegistersEvent); + auto responseEvent = this->eventListener->waitForEvent< + Events::RegistersRetrievedFromTarget, + Events::TargetControllerErrorOccurred + >(std::chrono::milliseconds(5000), readRegistersEvent->id); + + if (!responseEvent.has_value() + || !std::holds_alternative>(responseEvent.value()) + ) { + throw Exception("Unexpected response from TargetController"); + } + + auto retrievedRegistersEvent = std::get>(responseEvent.value()); + return retrievedRegistersEvent->registers; +} + +void DebugServer::writeGeneralRegistersToTarget(TargetRegisters registers) { + auto event = std::make_shared(); + event->registers = registers; + + this->eventManager.triggerEvent(event); + auto responseEvent = this->eventListener->waitForEvent< + Events::RegistersWrittenToTarget, + Events::TargetControllerErrorOccurred + >(std::chrono::milliseconds(5000), event->id); + + if (!responseEvent.has_value() + || !std::holds_alternative>(responseEvent.value()) + ) { + throw Exception("Unexpected response from TargetController"); + } +} + +TargetMemoryBuffer DebugServer::readMemoryFromTarget(TargetMemoryType memoryType, std::uint32_t startAddress, std::uint32_t bytes) { + auto readMemoryEvent = std::make_shared(); + readMemoryEvent->memoryType = memoryType; + readMemoryEvent->startAddress = startAddress; + readMemoryEvent->bytes = bytes; + + this->eventManager.triggerEvent(readMemoryEvent); + auto responseEvent = this->eventListener->waitForEvent< + Events::MemoryRetrievedFromTarget, + Events::TargetControllerErrorOccurred + >(std::chrono::milliseconds(5000), readMemoryEvent->id); + + if (!responseEvent.has_value() + || !std::holds_alternative>(responseEvent.value()) + ) { + throw Exception("Unexpected response from TargetController"); + } + + auto retrievedRegistersEvent = std::get>(responseEvent.value()); + return retrievedRegistersEvent->data; +} + +void DebugServer::writeMemoryToTarget( + TargetMemoryType memoryType, + std::uint32_t startAddress, + const TargetMemoryBuffer& buffer +) { + auto writeMemoryEvent = std::make_shared(); + writeMemoryEvent->memoryType = memoryType; + writeMemoryEvent->startAddress = startAddress; + writeMemoryEvent->buffer = buffer; + + this->eventManager.triggerEvent(writeMemoryEvent); + auto responseEvent = this->eventListener->waitForEvent< + Events::MemoryWrittenToTarget, + Events::TargetControllerErrorOccurred + >(std::chrono::milliseconds(5000), writeMemoryEvent->id); + + if (!responseEvent.has_value() + || !std::holds_alternative>(responseEvent.value()) + ) { + throw Exception("Unexpected response from TargetController"); + } +} + +void DebugServer::setBreakpointOnTarget(TargetBreakpoint breakpoint) { + auto event = std::make_shared(); + event->breakpoint = breakpoint; + + this->eventManager.triggerEvent(event); + auto responseEvent = this->eventListener->waitForEvent< + Events::BreakpointSetOnTarget, + Events::TargetControllerErrorOccurred + >(std::chrono::milliseconds(5000), event->id); + + if (!responseEvent.has_value() + || !std::holds_alternative>(responseEvent.value()) + ) { + throw Exception("Unexpected response from TargetController"); + } +} + +void DebugServer::removeBreakpointOnTarget(TargetBreakpoint breakpoint) { + auto event = std::make_shared(); + event->breakpoint = breakpoint; + + this->eventManager.triggerEvent(event); + auto responseEvent = this->eventListener->waitForEvent< + Events::BreakpointRemovedOnTarget, + Events::TargetControllerErrorOccurred + >(std::chrono::milliseconds(5000), event->id); + + if (!responseEvent.has_value() + || !std::holds_alternative>(responseEvent.value()) + ) { + throw Exception("Unexpected response from TargetController"); + } +} + diff --git a/src/DebugServers/DebugServer.hpp b/src/DebugServers/DebugServer.hpp new file mode 100644 index 00000000..8c32b7cb --- /dev/null +++ b/src/DebugServers/DebugServer.hpp @@ -0,0 +1,195 @@ +#pragma once + +#include +#include +#include + +#include "src/EventManager/Events/Events.hpp" +#include "src/EventManager/EventManager.hpp" +#include "src/Exceptions/DebugServerInterrupted.hpp" +#include "src/ApplicationConfig.hpp" +#include "src/Helpers/Thread.hpp" +#include "src/Targets/TargetRegister.hpp" +#include "src/Targets/TargetBreakpoint.hpp" + +namespace Bloom::DebugServers +{ + using Targets::TargetRegister; + using Targets::TargetRegisterDescriptor; + using Targets::TargetRegisters; + using Targets::TargetRegisterMap; + using Targets::TargetMemoryBuffer; + using Targets::TargetMemoryType; + using Targets::TargetBreakpoint; + + /** + * The DebugServer exposes the connected target to third-party debugging software such as IDEs. + * The DebugServer runs on a dedicated thread which is kicked off shortly after the TargetController has been + * started. + * + * All supported DebugServers should be derived from this class. + * + * Bloom currently only supports one DebugServer - the GdbRspDebugServer. + */ + class DebugServer: public Thread + { + private: + /** + * Prepares the debug server thread and then calls init(). + * + * Derived classes should not override this method - they should instead use init(). + */ + void startup(); + + /** + * Calls close() and updates the thread state. + * + * As with startup(), derived classes should not override this method. They should use close() instead. + */ + void shutdown(); + + /** + * Updates the state of the DebugServer and emits a state changed event. + * + * @param state + * @param emitEvent + */ + void setStateAndEmitEvent(ThreadState state) { + Thread::setState(state); + this->eventManager.triggerEvent( + std::make_shared(state) + ); + }; + + /** + * Handles a shutdown request. + * + * @param event + */ + void onShutdownDebugServerEvent(EventPointer event); + + protected: + /** + * Application-wide instance to EventManager + */ + EventManager& eventManager; + EventListenerPointer eventListener = std::make_shared("DebugServerEventListener"); + + /** + * Enables the interruption of any blocking file IO. + */ + std::shared_ptr interruptEventNotifier = nullptr; + + ApplicationConfig applicationConfig; + EnvironmentConfig environmentConfig; + DebugServerConfig debugServerConfig; + + /** + * Called on startup of the DebugServer thread. Derived classes should implement any initialisation work here. + */ + virtual void init() = 0; + + /** + * Called repeatedly in an infinite loop when the DebugServer is running. + */ + virtual void serve() = 0; + + /** + * Called on shutdown of the debug server. + */ + virtual void close() = 0; + + /** + * Requests the TargetController to halt execution on the target. + */ + void stopTargetExecution(); + + /** + * Requests the TargetController to continue execution on the target. + * + * @param fromAddress + */ + void continueTargetExecution(std::optional fromAddress); + + /** + * Requests the TargetController to step execution on the target. + * + * @param fromAddress + */ + void stepTargetExecution(std::optional fromAddress); + + /** + * Requests the TargetController to read register values from the target. + * + * @param descriptors + * Descriptors of the registers to read. + * + * @return + */ + TargetRegisters readGeneralRegistersFromTarget(TargetRegisterDescriptors descriptors); + + /** + * Requests the TargetController to write register values to the target. + * + * @param registers + */ + void writeGeneralRegistersToTarget(TargetRegisters registers); + + /** + * Requests the TargetController to read memory from the target. + * + * @param memoryType + * @param startAddress + * @param bytes + * @return + */ + TargetMemoryBuffer readMemoryFromTarget(TargetMemoryType memoryType, std::uint32_t startAddress, std::uint32_t bytes); + + /** + * Requests the TargetController to write memory to the target. + * + * @param memoryType + * @param startAddress + * @param buffer + */ + void writeMemoryToTarget(TargetMemoryType memoryType, std::uint32_t startAddress, const TargetMemoryBuffer& buffer); + + /** + * Requests the TargetController to set a breakpoint on the target. + * + * @param breakpoint + */ + void setBreakpointOnTarget(TargetBreakpoint breakpoint); + + /** + * Requests the TargetController to remove a breakpoint from the target. + * + * @param breakpoint + */ + void removeBreakpointOnTarget(TargetBreakpoint breakpoint); + + public: + DebugServer(EventManager& eventManager) : eventManager(eventManager) {}; + + void setApplicationConfig(const ApplicationConfig& applicationConfig) { + this->applicationConfig = applicationConfig; + } + + void setEnvironmentConfig(const EnvironmentConfig& environmentConfig) { + this->environmentConfig = environmentConfig; + } + + void setDebugServerConfig(const DebugServerConfig& debugServerConfig) { + this->debugServerConfig = debugServerConfig; + } + + /** + * Entry point for the DebugServer. This must called from a dedicated thread. + */ + void run(); + + virtual std::string getName() const = 0; + + virtual ~DebugServer() = default; + }; +} diff --git a/src/DebugServers/GdbRsp/AvrGdbRsp/AvrGdbRsp.hpp b/src/DebugServers/GdbRsp/AvrGdbRsp/AvrGdbRsp.hpp new file mode 100644 index 00000000..b66b40df --- /dev/null +++ b/src/DebugServers/GdbRsp/AvrGdbRsp/AvrGdbRsp.hpp @@ -0,0 +1,121 @@ +#pragma once + +#include + +#include "src/DebugServers/GdbRsp/GdbRspDebugServer.hpp" +#include "src/DebugServers/GdbRsp/Register.hpp" + +namespace Bloom::DebugServers::Gdb +{ + /** + * The AVR GDB client (avr-gdb) defines a set of parameters relating to AVR targets. These parameters are + * hardcoded in the AVR GDB source code. The client expects all compatible GDB RSP servers to be aware of + * these parameters. + * + * An example of these hardcoded parameters is target registers and the order in which they are supplied; AVR GDB + * clients expect 35 registers to be accessible via the server. 32 of these registers are general purpose CPU + * registers. The GP registers are expected to be followed by the status register (SREG), stack pointer + * register (SPH & SPL) and the program counter. These must all be given in a specific order, which is + * pre-determined by the AVR GDB client. See AvrGdbRsp::getRegisterNumberToDescriptorMapping() for more. + * + * For more on this, see the AVR GDB source code at https://github.com/bminor/binutils-gdb/blob/master/gdb/avr-tdep.c + * + * The AvrGdpRsp class extends the generic GDB RSP debug server and implements these AVR specific parameters. + */ + class AvrGdbRsp: public GdbRspDebugServer + { + private: + /** + * The mask used by the AVR GDB client to encode the memory type into memory addresses. + * See AvrGdbRsp::getMemoryTypeFromGdbAddress() for more. + */ + unsigned int gdbInternalMemoryMask = 0xFE0000u; + + protected: + /** + * For AVR targets, avr-gdb defines 35 registers in total: + * + * Register number 0 through 31 are general purpose registers + * Register number 32 is the status register (SREG) + * Register number 33 is the stack pointer register + * Register number 34 is the program counter register + * + * Only general purpose registers have register IDs. The others do not require an ID. + * + * @return + */ + BiMap getRegisterNumberToDescriptorMapping() override { + static BiMap mapping = { + {0, TargetRegisterDescriptor(0, TargetRegisterType::GENERAL_PURPOSE_REGISTER)}, + {1, TargetRegisterDescriptor(1, TargetRegisterType::GENERAL_PURPOSE_REGISTER)}, + {2, TargetRegisterDescriptor(2, TargetRegisterType::GENERAL_PURPOSE_REGISTER)}, + {3, TargetRegisterDescriptor(3, TargetRegisterType::GENERAL_PURPOSE_REGISTER)}, + {4, TargetRegisterDescriptor(4, TargetRegisterType::GENERAL_PURPOSE_REGISTER)}, + {5, TargetRegisterDescriptor(5, TargetRegisterType::GENERAL_PURPOSE_REGISTER)}, + {6, TargetRegisterDescriptor(6, TargetRegisterType::GENERAL_PURPOSE_REGISTER)}, + {7, TargetRegisterDescriptor(7, TargetRegisterType::GENERAL_PURPOSE_REGISTER)}, + {8, TargetRegisterDescriptor(8, TargetRegisterType::GENERAL_PURPOSE_REGISTER)}, + {9, TargetRegisterDescriptor(9, TargetRegisterType::GENERAL_PURPOSE_REGISTER)}, + {10, TargetRegisterDescriptor(10, TargetRegisterType::GENERAL_PURPOSE_REGISTER)}, + {11, TargetRegisterDescriptor(11, TargetRegisterType::GENERAL_PURPOSE_REGISTER)}, + {12, TargetRegisterDescriptor(12, TargetRegisterType::GENERAL_PURPOSE_REGISTER)}, + {13, TargetRegisterDescriptor(13, TargetRegisterType::GENERAL_PURPOSE_REGISTER)}, + {14, TargetRegisterDescriptor(14, TargetRegisterType::GENERAL_PURPOSE_REGISTER)}, + {15, TargetRegisterDescriptor(15, TargetRegisterType::GENERAL_PURPOSE_REGISTER)}, + {16, TargetRegisterDescriptor(16, TargetRegisterType::GENERAL_PURPOSE_REGISTER)}, + {17, TargetRegisterDescriptor(17, TargetRegisterType::GENERAL_PURPOSE_REGISTER)}, + {18, TargetRegisterDescriptor(18, TargetRegisterType::GENERAL_PURPOSE_REGISTER)}, + {19, TargetRegisterDescriptor(19, TargetRegisterType::GENERAL_PURPOSE_REGISTER)}, + {20, TargetRegisterDescriptor(20, TargetRegisterType::GENERAL_PURPOSE_REGISTER)}, + {21, TargetRegisterDescriptor(21, TargetRegisterType::GENERAL_PURPOSE_REGISTER)}, + {22, TargetRegisterDescriptor(22, TargetRegisterType::GENERAL_PURPOSE_REGISTER)}, + {23, TargetRegisterDescriptor(23, TargetRegisterType::GENERAL_PURPOSE_REGISTER)}, + {24, TargetRegisterDescriptor(24, TargetRegisterType::GENERAL_PURPOSE_REGISTER)}, + {25, TargetRegisterDescriptor(25, TargetRegisterType::GENERAL_PURPOSE_REGISTER)}, + {26, TargetRegisterDescriptor(26, TargetRegisterType::GENERAL_PURPOSE_REGISTER)}, + {27, TargetRegisterDescriptor(27, TargetRegisterType::GENERAL_PURPOSE_REGISTER)}, + {28, TargetRegisterDescriptor(28, TargetRegisterType::GENERAL_PURPOSE_REGISTER)}, + {29, TargetRegisterDescriptor(29, TargetRegisterType::GENERAL_PURPOSE_REGISTER)}, + {30, TargetRegisterDescriptor(30, TargetRegisterType::GENERAL_PURPOSE_REGISTER)}, + {31, TargetRegisterDescriptor(31, TargetRegisterType::GENERAL_PURPOSE_REGISTER)}, + {32, TargetRegisterDescriptor(TargetRegisterType::STATUS_REGISTER)}, + {33, TargetRegisterDescriptor(TargetRegisterType::STACK_POINTER)}, + {34, TargetRegisterDescriptor(TargetRegisterType::PROGRAM_COUNTER)}, + }; + + return mapping; + }; + + /** + * avr-gdb uses the most significant 15 bits in memory addresses to indicate the type of memory being + * addressed. + * + * @param address + * @return + */ + TargetMemoryType getMemoryTypeFromGdbAddress(std::uint32_t address) override { + if (address & this->gdbInternalMemoryMask) { + return TargetMemoryType::RAM; + } + + return TargetMemoryType::FLASH; + }; + + /** + * Strips the most significant 15 bits from a GDB memory address. + * + * @param address + * @return + */ + std::uint32_t removeMemoryTypeIndicatorFromGdbAddress(std::uint32_t address) override { + return address & this->gdbInternalMemoryMask ? (address & ~(this->gdbInternalMemoryMask)) : address; + }; + + public: + AvrGdbRsp(EventManager& eventManager) : GdbRspDebugServer(eventManager) {}; + + std::string getName() const override { + return "AVR GDB Remote Serial Protocol Debug Server"; + } + }; +} \ No newline at end of file diff --git a/src/DebugServers/GdbRsp/BreakpointType.hpp b/src/DebugServers/GdbRsp/BreakpointType.hpp new file mode 100644 index 00000000..5789fc2d --- /dev/null +++ b/src/DebugServers/GdbRsp/BreakpointType.hpp @@ -0,0 +1,11 @@ +#pragma once + +namespace Bloom::DebugServers::Gdb +{ + enum class BreakpointType: int + { + UNKNOWN = 0, + SOFTWARE_BREAKPOINT = 1, + HARDWARE_BREAKPOINT = 2, + }; +} diff --git a/src/DebugServers/GdbRsp/CommandPackets/CommandPacket.cpp b/src/DebugServers/GdbRsp/CommandPackets/CommandPacket.cpp new file mode 100644 index 00000000..c051bf6a --- /dev/null +++ b/src/DebugServers/GdbRsp/CommandPackets/CommandPacket.cpp @@ -0,0 +1,8 @@ +#include "CommandPacket.hpp" +#include "src/DebugServers/GdbRsp/GdbRspDebugServer.hpp" + +using namespace Bloom::DebugServers::Gdb::CommandPackets; + +void CommandPacket::dispatchToHandler(Gdb::GdbRspDebugServer& gdbRspDebugServer) { + gdbRspDebugServer.handleGdbPacket(*this); +} \ No newline at end of file diff --git a/src/DebugServers/GdbRsp/CommandPackets/CommandPacket.hpp b/src/DebugServers/GdbRsp/CommandPackets/CommandPacket.hpp new file mode 100644 index 00000000..8e21e94d --- /dev/null +++ b/src/DebugServers/GdbRsp/CommandPackets/CommandPacket.hpp @@ -0,0 +1,51 @@ +#pragma once + +#include +#include + +#include "src/DebugServers/GdbRsp/Packet.hpp" + +namespace Bloom::DebugServers::Gdb { + class GdbRspDebugServer; +} + +namespace Bloom::DebugServers::Gdb::CommandPackets +{ + /** + * GDB RSP command packets are sent to the server, from the GDB client. These packets carry instructions that the + * server is expected to carry out. Upon completion, the server is expected to respond to the client with + * a ResponsePacket. + * + * For some command packets, we define a specific data structure by extending this CommandPacket class. These + * classes extend the data structure to include fields for data which may be specific to the command. + * They also implement additional methods that allow us to easily access the additional data. An example + * of this would be the SupportedFeaturesQuery class. It extends the CommandPacket class and provides access + * to additional data fields that are specific to the command (in this case, a set of GDB features reported to be + * supported by the GDB client). + * + * Typically, command packets that require specific data structures are handled in a dedicated handler method + * in the GdbRspDebugServer. This is done by double dispatching the packet object to the appropriate handler. + * See CommandPacket::dispatchToHandler(), GdbRspDebugServer::serve() and the overloads + * for GdbRspDebugServer::handleGdbPacket() for more on this. + * + * Some command packets are so simple they do not require a dedicated data structure. An example of this is + * the halt reason packet, which contains nothing more than an ? character in the packet body. These packets are + * typically handled in the generic GdbRspDebugServer::handleGdbPacket(CommandPacket&) method. + * + * See the Packet class for information on how the raw packets are formatted. + */ + class CommandPacket: public Packet + { + public: + CommandPacket(const std::vector& rawPacket) : Packet(rawPacket) {} + + /** + * Double dispatches the packet to the appropriate overload of handleGdbPacket(), within the passed instance of + * GdbRspDebugServer. If there is no overload defined for a specific CommandPacket-inherited type, the + * generic GdbRspDebugServer::handleGdbPacket(CommandPacket&) is used. + * + * @param gdbRspDebugServer + */ + virtual void dispatchToHandler(Gdb::GdbRspDebugServer& gdbRspDebugServer); + }; +} diff --git a/src/DebugServers/GdbRsp/CommandPackets/CommandPacketFactory.cpp b/src/DebugServers/GdbRsp/CommandPackets/CommandPacketFactory.cpp new file mode 100644 index 00000000..8980b176 --- /dev/null +++ b/src/DebugServers/GdbRsp/CommandPackets/CommandPacketFactory.cpp @@ -0,0 +1,129 @@ +#include +#include +#include + +#include "CommandPacketFactory.hpp" + +using namespace Bloom::DebugServers::Gdb; + +std::unique_ptr CommandPacketFactory::create(std::vector rawPacket) { + + if (rawPacket.size() == 5 && rawPacket[1] == 0x03) { + // This is an interrupt request - create a fake packet for it + return std::make_unique(rawPacket); + } + + auto rawPacketString = std::string(rawPacket.begin(), rawPacket.end()); + + if (rawPacketString.size() >= 2) { + /* + * First byte of the raw packet will be 0x24 ('$'), so find() should return 1, not 0, when + * looking for a command identifier string. + */ + if (rawPacketString.find("qSupported") == 1) { + return std::make_unique(rawPacket); + + } else if (rawPacketString[1] == 'g' || rawPacketString[1] == 'p') { + return std::make_unique(rawPacket); + + } else if (rawPacketString[1] == 'G' || rawPacketString[1] == 'P') { + return std::make_unique(rawPacket); + + } else if (rawPacketString[1] == 'c') { + return std::make_unique(rawPacket); + + } else if (rawPacketString[1] == 's') { + return std::make_unique(rawPacket); + + } else if (rawPacketString[1] == 'm') { + return std::make_unique(rawPacket); + + } else if (rawPacketString[1] == 'M') { + return std::make_unique(rawPacket); + + } else if (rawPacketString[1] == 'Z') { + return std::make_unique(rawPacket); + + } else if (rawPacketString[1] == 'z') { + return std::make_unique(rawPacket); + } + } + + return std::make_unique(rawPacket); +} + +std::vector> CommandPacketFactory::extractRawPackets(std::vector buffer) { + std::vector> output; + + std::size_t bufferIndex; + std::size_t bufferSize = buffer.size(); + unsigned char byte; + for (bufferIndex = 0; bufferIndex < bufferSize; bufferIndex++) { + byte = buffer[bufferIndex]; + + if (byte == 0x03) { + /* + * This is an interrupt packet - it doesn't carry any of the usual packet frame bytes, so we'll just + * add them here, in order to keep things consistent. + * + * Because we're effectively faking the packet frame, we can use any value for the checksum. + */ + output.push_back({'$', byte, '#', 'F', 'F'}); + + } else if (byte == '$') { + // Beginning of packet + std::vector rawPacket; + rawPacket.push_back('$'); + + auto packetIndex = bufferIndex; + bool validPacket = false; + bool isByteEscaped = false; + + for (packetIndex++; packetIndex < bufferSize; packetIndex++) { + byte = buffer[packetIndex]; + + if (byte == '}' && !isByteEscaped) { + isByteEscaped = true; + continue; + } + + if (byte == '$' && !isByteEscaped) { + // Unexpected end of packet + validPacket = false; + break; + } + + if (byte == '#' && !isByteEscaped) { + // End of packet data + if ((bufferSize - 1) < (packetIndex + 2)) { + // There should be at least two more bytes in the buffer, for the checksum. + break; + } + + rawPacket.push_back(byte); + + // Add the checksum bytes and break the loop + rawPacket.push_back(buffer[++packetIndex]); + rawPacket.push_back(buffer[++packetIndex]); + validPacket = true; + break; + } + + if (isByteEscaped) { + // Escaped bytes are XOR'd with a 0x20 mask. + byte ^= 0x20; + isByteEscaped = false; + } + + rawPacket.push_back(byte); + } + + if (validPacket) { + output.push_back(rawPacket); + bufferIndex = packetIndex; + } + } + } + + return output; +} \ No newline at end of file diff --git a/src/DebugServers/GdbRsp/CommandPackets/CommandPacketFactory.hpp b/src/DebugServers/GdbRsp/CommandPackets/CommandPacketFactory.hpp new file mode 100644 index 00000000..3a418df6 --- /dev/null +++ b/src/DebugServers/GdbRsp/CommandPackets/CommandPacketFactory.hpp @@ -0,0 +1,51 @@ +#pragma once + +#include +#include + +// Command packets +#include "CommandPacket.hpp" +#include "InterruptExecution.hpp" +#include "SupportedFeaturesQuery.hpp" +#include "ReadGeneralRegisters.hpp" +#include "WriteGeneralRegisters.hpp" +#include "ReadMemory.hpp" +#include "WriteMemory.hpp" +#include "StepExecution.hpp" +#include "ContinueExecution.hpp" +#include "SetBreakpoint.hpp" +#include "RemoveBreakpoint.hpp" + +namespace Bloom::DebugServers::Gdb +{ + using namespace CommandPackets; + + /** + * The CommandPacketFactory class provides a means for extracting raw packet data from a raw buffer, and + * constructing the appropriate CommandPacket objects. + */ + class CommandPacketFactory + { + public: + /** + * Extracts raw GDB RSP packets from buffer. + * + * @param buffer + * The buffer from which to extract the raw GDB RSP packets. + * + * @return + * A vector of raw packets. + */ + static std::vector> extractRawPackets(std::vector buffer); + + /** + * Constructs the appropriate CommandPacket object from a single raw GDB RSP packet. + * + * @param rawPacket + * The raw GDB RSP packet from which to construct the CommandPacket object. + * + * @return + */ + static std::unique_ptr create(std::vector rawPacket); + }; +} diff --git a/src/DebugServers/GdbRsp/CommandPackets/ContinueExecution.cpp b/src/DebugServers/GdbRsp/CommandPackets/ContinueExecution.cpp new file mode 100644 index 00000000..776b6ae4 --- /dev/null +++ b/src/DebugServers/GdbRsp/CommandPackets/ContinueExecution.cpp @@ -0,0 +1,18 @@ +#include + +#include "src/DebugServers/GdbRsp/GdbRspDebugServer.hpp" +#include "ContinueExecution.hpp" + +using namespace Bloom::DebugServers::Gdb::CommandPackets; + +void ContinueExecution::init() { + if (this->data.size() > 1) { + this->fromProgramCounter = static_cast( + std::stoi(std::string(this->data.begin(), this->data.end()), nullptr, 16) + ); + } +} + +void ContinueExecution::dispatchToHandler(Gdb::GdbRspDebugServer& gdbRspDebugServer) { + gdbRspDebugServer.handleGdbPacket(*this); +} diff --git a/src/DebugServers/GdbRsp/CommandPackets/ContinueExecution.hpp b/src/DebugServers/GdbRsp/CommandPackets/ContinueExecution.hpp new file mode 100644 index 00000000..78b74f8d --- /dev/null +++ b/src/DebugServers/GdbRsp/CommandPackets/ContinueExecution.hpp @@ -0,0 +1,38 @@ +#pragma once + +#include +#include + +#include "CommandPacket.hpp" + +namespace Bloom::DebugServers::Gdb::CommandPackets +{ + using namespace Bloom::DebugServers::Gdb; + + /** + * The ContinueExecution class implements a structure for "c" packets. These packets instruct the server + * to continue execution on the target. + * + * See @link https://sourceware.org/gdb/onlinedocs/gdb/Packets.html#Packets for more on this. + */ + class ContinueExecution: public CommandPacket + { + private: + void init(); + + public: + /** + * The "c" packet can contain an address which defines the point from which the execution should be resumed on + * the target. + * + * Although the packet *can* contain this address, it is not required, hence the optional. + */ + std::optional fromProgramCounter; + + ContinueExecution(std::vector rawPacket) : CommandPacket(rawPacket) { + init(); + }; + + virtual void dispatchToHandler(Gdb::GdbRspDebugServer& gdbRspDebugServer) override; + }; +} diff --git a/src/DebugServers/GdbRsp/CommandPackets/InterruptExecution.cpp b/src/DebugServers/GdbRsp/CommandPackets/InterruptExecution.cpp new file mode 100644 index 00000000..041d4cd0 --- /dev/null +++ b/src/DebugServers/GdbRsp/CommandPackets/InterruptExecution.cpp @@ -0,0 +1,8 @@ +#include "InterruptExecution.hpp" +#include "src/DebugServers/GdbRsp/GdbRspDebugServer.hpp" + +using namespace Bloom::DebugServers::Gdb::CommandPackets; + +void InterruptExecution::dispatchToHandler(Gdb::GdbRspDebugServer& gdbRspDebugServer) { + gdbRspDebugServer.handleGdbPacket(*this); +} diff --git a/src/DebugServers/GdbRsp/CommandPackets/InterruptExecution.hpp b/src/DebugServers/GdbRsp/CommandPackets/InterruptExecution.hpp new file mode 100644 index 00000000..adca0a75 --- /dev/null +++ b/src/DebugServers/GdbRsp/CommandPackets/InterruptExecution.hpp @@ -0,0 +1,24 @@ +#pragma once + +#include "CommandPacket.hpp" + +namespace Bloom::DebugServers::Gdb::CommandPackets +{ + using namespace Bloom::DebugServers::Gdb; + + /** + * The InterruptException class represents interrupt command packets. Upon receiving an interrupt packet, the + * server is expected to interrupt execution on the target. + * + * Technically, interrupts are not sent by the client in the form of a typical GDP RSP packet. Instead, they're + * just sent as a single byte from the client. We fake the packet on our end, to save us the headache of dealing + * with this inconsistency. We do this in CommandPacketFactory::extractRawPackets(). + */ + class InterruptExecution: public CommandPacket + { + public: + InterruptExecution(std::vector rawPacket) : CommandPacket(rawPacket) {}; + + virtual void dispatchToHandler(Gdb::GdbRspDebugServer& gdbRspDebugServer) override; + }; +} diff --git a/src/DebugServers/GdbRsp/CommandPackets/ReadGeneralRegisters.cpp b/src/DebugServers/GdbRsp/CommandPackets/ReadGeneralRegisters.cpp new file mode 100644 index 00000000..4e97f536 --- /dev/null +++ b/src/DebugServers/GdbRsp/CommandPackets/ReadGeneralRegisters.cpp @@ -0,0 +1,15 @@ +#include "ReadGeneralRegisters.hpp" +#include "src/DebugServers/GdbRsp/GdbRspDebugServer.hpp" + +using namespace Bloom::DebugServers::Gdb::CommandPackets; + +void ReadGeneralRegisters::init() { + if (this->data.size() >= 2 && this->data.front() == 'p') { + // This command packet is requesting a specific register + this->registerNumber = static_cast(std::stoi(std::string(this->data.begin() + 1, this->data.end()))); + } +} + +void ReadGeneralRegisters::dispatchToHandler(Gdb::GdbRspDebugServer& gdbRspDebugServer) { + gdbRspDebugServer.handleGdbPacket(*this); +} diff --git a/src/DebugServers/GdbRsp/CommandPackets/ReadGeneralRegisters.hpp b/src/DebugServers/GdbRsp/CommandPackets/ReadGeneralRegisters.hpp new file mode 100644 index 00000000..6262a8c4 --- /dev/null +++ b/src/DebugServers/GdbRsp/CommandPackets/ReadGeneralRegisters.hpp @@ -0,0 +1,37 @@ +#pragma once + +#include + +#include "CommandPacket.hpp" + +namespace Bloom::DebugServers::Gdb::CommandPackets +{ + using namespace Bloom::DebugServers::Gdb; + + /** + * The ReadGeneralRegisters class implements a structure for "g" and "p" command packets. In response to these + * packets, the server is expected to send register values for all registers (for "g" packets) or for a single + * register (for "p" packets). + */ + class ReadGeneralRegisters: public CommandPacket + { + private: + void init(); + + public: + /** + * "p" packets include a register number to indicate which register is requested for reading. When this is set, + * the server is expected to respond with only the value of the requested register. + * + * If the register number is not supplied (as is the case with "g" packets), the server is expected to respond + * with values for all registers. + */ + std::optional registerNumber; + + ReadGeneralRegisters(std::vector rawPacket) : CommandPacket(rawPacket) { + init(); + }; + + virtual void dispatchToHandler(Gdb::GdbRspDebugServer& gdbRspDebugServer) override; + }; +} diff --git a/src/DebugServers/GdbRsp/CommandPackets/ReadMemory.cpp b/src/DebugServers/GdbRsp/CommandPackets/ReadMemory.cpp new file mode 100644 index 00000000..e24d1b37 --- /dev/null +++ b/src/DebugServers/GdbRsp/CommandPackets/ReadMemory.cpp @@ -0,0 +1,43 @@ +#include "ReadMemory.hpp" +#include "src/DebugServers/GdbRsp/GdbRspDebugServer.hpp" + +using namespace Bloom::DebugServers::Gdb::CommandPackets; +using namespace Bloom::Exceptions; + +void ReadMemory::init() { + if (this->data.size() < 4) { + throw Exception("Invalid packet length"); + } + + auto packetString = QString::fromLocal8Bit( + reinterpret_cast(this->data.data() + 1), + static_cast(this->data.size() - 1) + ); + + /* + * The read memory ('m') packet consists of two segments, an address and a number of bytes to read. + * These are separated by a comma character. + */ + auto packetSegments = packetString.split(","); + + if (packetSegments.size() != 2) { + throw Exception("Unexpected number of segments in packet data: " + std::to_string(packetSegments.size())); + } + + bool conversionStatus = false; + this->startAddress = packetSegments.at(0).toUInt(&conversionStatus, 16); + + if (!conversionStatus) { + throw Exception("Failed to parse start address from read memory packet data"); + } + + this->bytes = packetSegments.at(1).toUInt(&conversionStatus, 16); + + if (!conversionStatus) { + throw Exception("Failed to parse read length from read memory packet data"); + } +} + +void ReadMemory::dispatchToHandler(Gdb::GdbRspDebugServer& gdbRspDebugServer) { + gdbRspDebugServer.handleGdbPacket(*this); +} diff --git a/src/DebugServers/GdbRsp/CommandPackets/ReadMemory.hpp b/src/DebugServers/GdbRsp/CommandPackets/ReadMemory.hpp new file mode 100644 index 00000000..64148582 --- /dev/null +++ b/src/DebugServers/GdbRsp/CommandPackets/ReadMemory.hpp @@ -0,0 +1,42 @@ +#pragma once + +#include +#include + +#include "CommandPacket.hpp" + +namespace Bloom::DebugServers::Gdb::CommandPackets +{ + using namespace Bloom::DebugServers::Gdb; + + /** + * The ReadMemory class implements a structure for "m" packets. Upon receiving these packets, the server is + * expected to read memory from the target and send it the client. + */ + class ReadMemory: public CommandPacket + { + private: + void init(); + + public: + /** + * The startAddress sent from the GDB client may include additional bits used to indicate the memory type. + * These bits have to be removed from the address before it can be used as a start address. This is not done + * here, as it's target specific. + * + * For an example of where GDB does this, see the AvrGdbRsp class. + */ + std::uint32_t startAddress; + + /** + * Number of bytes to read. + */ + std::uint32_t bytes; + + ReadMemory(std::vector rawPacket) : CommandPacket(rawPacket) { + init(); + }; + + virtual void dispatchToHandler(Gdb::GdbRspDebugServer& gdbRspDebugServer) override; + }; +} diff --git a/src/DebugServers/GdbRsp/CommandPackets/RemoveBreakpoint.cpp b/src/DebugServers/GdbRsp/CommandPackets/RemoveBreakpoint.cpp new file mode 100644 index 00000000..e117756b --- /dev/null +++ b/src/DebugServers/GdbRsp/CommandPackets/RemoveBreakpoint.cpp @@ -0,0 +1,38 @@ +#include + +#include "RemoveBreakpoint.hpp" +#include "src/DebugServers/GdbRsp/GdbRspDebugServer.hpp" + +using namespace Bloom::DebugServers::Gdb::CommandPackets; +using namespace Bloom::Exceptions; + +void RemoveBreakpoint::init() { + if (data.size() < 6) { + throw Exception("Unexpected RemoveBreakpoint packet size"); + } + + // z0 = SW breakpoint, z1 = HW breakpoint + this->type = (data[1] == 0) ? BreakpointType::SOFTWARE_BREAKPOINT : (data[1] == 1) ? + BreakpointType::HARDWARE_BREAKPOINT : BreakpointType::UNKNOWN; + + auto packetData = QString::fromLocal8Bit( + reinterpret_cast(this->data.data() + 2), + static_cast(this->data.size() - 2) + ); + + auto packetSegments = packetData.split(","); + if (packetSegments.size() < 3) { + throw Exception("Unexpected number of packet segments in RemoveBreakpoint packet"); + } + + bool conversionStatus = true; + this->address = packetSegments.at(1).toUInt(&conversionStatus, 16); + + if (!conversionStatus) { + throw Exception("Failed to convert address hex value from RemoveBreakpoint packet."); + } +} + +void RemoveBreakpoint::dispatchToHandler(Gdb::GdbRspDebugServer& gdbRspDebugServer) { + gdbRspDebugServer.handleGdbPacket(*this); +} diff --git a/src/DebugServers/GdbRsp/CommandPackets/RemoveBreakpoint.hpp b/src/DebugServers/GdbRsp/CommandPackets/RemoveBreakpoint.hpp new file mode 100644 index 00000000..24ff9771 --- /dev/null +++ b/src/DebugServers/GdbRsp/CommandPackets/RemoveBreakpoint.hpp @@ -0,0 +1,44 @@ +#pragma once + +#include +#include +#include + +#include "../BreakpointType.hpp" +#include "CommandPacket.hpp" + +namespace Bloom::DebugServers::Gdb { + enum class Feature: int; +} + +namespace Bloom::DebugServers::Gdb::CommandPackets +{ + using namespace Bloom::DebugServers::Gdb; + + /** + * The RemoveBreakpoint class implements the structure for "z" command packets. Upon receiving this command, the + * server is expected to remove a breakpoint at the specified address. + */ + class RemoveBreakpoint: public CommandPacket + { + private: + void init(); + + public: + /** + * Breakpoint type (Software or Hardware) + */ + BreakpointType type = BreakpointType::UNKNOWN; + + /** + * Address at which the breakpoint should be located. + */ + std::uint32_t address; + + RemoveBreakpoint(std::vector rawPacket) : CommandPacket(rawPacket) { + this->init(); + }; + + virtual void dispatchToHandler(Gdb::GdbRspDebugServer& gdbRspDebugServer) override; + }; +} diff --git a/src/DebugServers/GdbRsp/CommandPackets/SetBreakpoint.cpp b/src/DebugServers/GdbRsp/CommandPackets/SetBreakpoint.cpp new file mode 100644 index 00000000..43289fb6 --- /dev/null +++ b/src/DebugServers/GdbRsp/CommandPackets/SetBreakpoint.cpp @@ -0,0 +1,39 @@ +#include "SetBreakpoint.hpp" +#include +#include + +#include "src/DebugServers/GdbRsp/GdbRspDebugServer.hpp" + +using namespace Bloom::DebugServers::Gdb::CommandPackets; +using namespace Bloom::Exceptions; + +void SetBreakpoint::init() { + if (data.size() < 6) { + throw Exception("Unexpected SetBreakpoint packet size"); + } + + // Z0 = SW breakpoint, Z1 = HW breakpoint + this->type = (data[1] == 0) ? BreakpointType::SOFTWARE_BREAKPOINT : (data[1] == 1) ? + BreakpointType::HARDWARE_BREAKPOINT : BreakpointType::UNKNOWN; + + auto packetData = QString::fromLocal8Bit( + reinterpret_cast(this->data.data() + 2), + static_cast(this->data.size() - 2) + ); + + auto packetSegments = packetData.split(","); + if (packetSegments.size() < 3) { + throw Exception("Unexpected number of packet segments in SetBreakpoint packet"); + } + + bool conversionStatus = true; + this->address = packetSegments.at(1).toUInt(&conversionStatus, 16); + + if (!conversionStatus) { + throw Exception("Failed to convert address hex value from SetBreakpoint packet."); + } +} + +void SetBreakpoint::dispatchToHandler(Gdb::GdbRspDebugServer& gdbRspDebugServer) { + gdbRspDebugServer.handleGdbPacket(*this); +} diff --git a/src/DebugServers/GdbRsp/CommandPackets/SetBreakpoint.hpp b/src/DebugServers/GdbRsp/CommandPackets/SetBreakpoint.hpp new file mode 100644 index 00000000..e39bcdc1 --- /dev/null +++ b/src/DebugServers/GdbRsp/CommandPackets/SetBreakpoint.hpp @@ -0,0 +1,44 @@ +#pragma once + +#include +#include +#include + +#include "../BreakpointType.hpp" +#include "CommandPacket.hpp" + +namespace Bloom::DebugServers::Gdb { + enum class Feature: int; +} + +namespace Bloom::DebugServers::Gdb::CommandPackets +{ + using namespace Bloom::DebugServers::Gdb; + + /** + * The SetBreakpoint class implements the structure for "Z" command packets. Upon receiving this command, the + * server is expected to set a breakpoint at the specified address. + */ + class SetBreakpoint: public CommandPacket + { + private: + void init(); + + public: + /** + * Breakpoint type (Software or Hardware) + */ + BreakpointType type = BreakpointType::UNKNOWN; + + /** + * Address at which the breakpoint should be located. + */ + std::uint32_t address; + + SetBreakpoint(std::vector rawPacket) : CommandPacket(rawPacket) { + this->init(); + }; + + virtual void dispatchToHandler(Gdb::GdbRspDebugServer& gdbRspDebugServer) override; + }; +} diff --git a/src/DebugServers/GdbRsp/CommandPackets/StepExecution.cpp b/src/DebugServers/GdbRsp/CommandPackets/StepExecution.cpp new file mode 100644 index 00000000..626f9900 --- /dev/null +++ b/src/DebugServers/GdbRsp/CommandPackets/StepExecution.cpp @@ -0,0 +1,18 @@ +#include + +#include "src/DebugServers/GdbRsp/GdbRspDebugServer.hpp" +#include "StepExecution.hpp" + +using namespace Bloom::DebugServers::Gdb::CommandPackets; + +void StepExecution::init() { + if (this->data.size() > 1) { + this->fromProgramCounter = static_cast( + std::stoi(std::string(this->data.begin(), this->data.end()), nullptr, 16) + ); + } +} + +void StepExecution::dispatchToHandler(Gdb::GdbRspDebugServer& gdbRspDebugServer) { + gdbRspDebugServer.handleGdbPacket(*this); +} diff --git a/src/DebugServers/GdbRsp/CommandPackets/StepExecution.hpp b/src/DebugServers/GdbRsp/CommandPackets/StepExecution.hpp new file mode 100644 index 00000000..03bba741 --- /dev/null +++ b/src/DebugServers/GdbRsp/CommandPackets/StepExecution.hpp @@ -0,0 +1,32 @@ +#pragma once + +#include + +#include "CommandPacket.hpp" + +namespace Bloom::DebugServers::Gdb::CommandPackets +{ + using namespace Bloom::DebugServers::Gdb; + + /** + * The StepExecution class implements the structure for "s" command packets. Upon receiving this command, the + * server is expected to step execution on the target. + */ + class StepExecution: public CommandPacket + { + private: + void init(); + + public: + /** + * The address from which to begin the step. + */ + std::optional fromProgramCounter; + + StepExecution(std::vector rawPacket) : CommandPacket(rawPacket) { + init(); + }; + + virtual void dispatchToHandler(Gdb::GdbRspDebugServer& gdbRspDebugServer) override; + }; +} diff --git a/src/DebugServers/GdbRsp/CommandPackets/SupportedFeaturesQuery.cpp b/src/DebugServers/GdbRsp/CommandPackets/SupportedFeaturesQuery.cpp new file mode 100644 index 00000000..0aaebbda --- /dev/null +++ b/src/DebugServers/GdbRsp/CommandPackets/SupportedFeaturesQuery.cpp @@ -0,0 +1,43 @@ +#include "SupportedFeaturesQuery.hpp" +#include + +#include "src/DebugServers/GdbRsp/GdbRspDebugServer.hpp" +#include "../Feature.hpp" + +using namespace Bloom::DebugServers::Gdb::CommandPackets; + +void SupportedFeaturesQuery::init() { + /* + * For qSupported packets, supported and unsupported GDB features are reported in the packet + * data, where each GDB feature is separated by a semicolon. + */ + + // The "qSupported:" prefix occupies 11 bytes + if (data.size() > 11) { + auto packetData = QString::fromLocal8Bit( + reinterpret_cast(this->data.data() + 11), + static_cast(this->data.size() - 11) + ); + + auto featureList = packetData.split(";"); + auto gdbFeatureMapping = getGdbFeatureToNameMapping(); + + for (int i = 0; i < featureList.size(); i++) { + auto featureString = featureList.at(i); + + // We only care about supported features. Supported features will precede a '+' character. + if (featureString[featureString.size() - 1] == "+") { + featureString.remove("+"); + + auto feature = gdbFeatureMapping.valueAt(featureString.toStdString()); + if (feature.has_value()) { + this->supportedFeatures.insert(static_cast(feature.value())); + } + } + } + } +} + +void SupportedFeaturesQuery::dispatchToHandler(Gdb::GdbRspDebugServer& gdbRspDebugServer) { + gdbRspDebugServer.handleGdbPacket(*this); +} diff --git a/src/DebugServers/GdbRsp/CommandPackets/SupportedFeaturesQuery.hpp b/src/DebugServers/GdbRsp/CommandPackets/SupportedFeaturesQuery.hpp new file mode 100644 index 00000000..7c791d99 --- /dev/null +++ b/src/DebugServers/GdbRsp/CommandPackets/SupportedFeaturesQuery.hpp @@ -0,0 +1,46 @@ +#pragma once + +#include +#include + +#include "CommandPacket.hpp" +#include "../Feature.hpp" + +namespace Bloom::DebugServers::Gdb::CommandPackets +{ + using namespace Bloom::DebugServers::Gdb; + + /** + * The SupportedFeaturesQuery command packet is a query from the GDB client, requesting a list of GDB features + * supported by the GDB server. The body of this packet also contains a list GDB features that are supported or + * unsupported by the GDB client. + * + * The command packet is identified by its 'qSupported' prefix in the command packet data. Following the prefix is + * a list of GDB features that are supported/unsupported by the client. For more info on this command + * packet, see the GDP RSP documentation. + * + * Responses to this command packet should take the form of a ResponsePackets::SupportedFeaturesResponse. + */ + class SupportedFeaturesQuery: public CommandPacket + { + private: + std::set supportedFeatures; + + void init(); + + public: + SupportedFeaturesQuery(std::vector rawPacket) : CommandPacket(rawPacket) { + this->init(); + }; + + bool isFeatureSupported(const Feature& feature) const { + return this->supportedFeatures.find(feature) != this->supportedFeatures.end(); + } + + const std::set& getSupportedFeatures() const { + return this->supportedFeatures; + } + + virtual void dispatchToHandler(Gdb::GdbRspDebugServer& gdbRspDebugServer) override; + }; +} diff --git a/src/DebugServers/GdbRsp/CommandPackets/WriteGeneralRegisters.cpp b/src/DebugServers/GdbRsp/CommandPackets/WriteGeneralRegisters.cpp new file mode 100644 index 00000000..d9ee45c6 --- /dev/null +++ b/src/DebugServers/GdbRsp/CommandPackets/WriteGeneralRegisters.cpp @@ -0,0 +1,26 @@ +#include "WriteGeneralRegisters.hpp" +#include "src/DebugServers/GdbRsp/GdbRspDebugServer.hpp" + +using namespace Bloom::DebugServers::Gdb::CommandPackets; + +void WriteGeneralRegisters::init() { + // The P packet updates a single register + auto packet = std::string(this->data.begin(), this->data.end()); + + if (packet.size() < 6) { + throw Exception("Invalid P command packet - insufficient data in packet."); + } + + if (packet.find("=") == std::string::npos) { + throw Exception("Invalid P command packet - unexpected format"); + } + + auto packetSegments = QString::fromStdString(packet).split("="); + this->registerNumber = packetSegments.front().mid(1).toUInt(nullptr, 16); + this->registerValue = this->hexToData(packetSegments.back().toStdString()); + std::reverse(this->registerValue.begin(), this->registerValue.end()); +} + +void WriteGeneralRegisters::dispatchToHandler(Gdb::GdbRspDebugServer& gdbRspDebugServer) { + gdbRspDebugServer.handleGdbPacket(*this); +} diff --git a/src/DebugServers/GdbRsp/CommandPackets/WriteGeneralRegisters.hpp b/src/DebugServers/GdbRsp/CommandPackets/WriteGeneralRegisters.hpp new file mode 100644 index 00000000..0ffeb67a --- /dev/null +++ b/src/DebugServers/GdbRsp/CommandPackets/WriteGeneralRegisters.hpp @@ -0,0 +1,34 @@ +#pragma once + +#include + +#include "CommandPacket.hpp" +#include "src/Targets/TargetRegister.hpp" + +namespace Bloom::DebugServers::Gdb::CommandPackets +{ + using namespace Bloom::DebugServers::Gdb; + using Bloom::Targets::TargetRegister; + using Bloom::Targets::TargetRegisterMap; + + /** + * The WriteGeneralRegisters class implements the structure for "G" and "P" packets. Upon receiving this packet, + * server is expected to write register values to the target. + */ + class WriteGeneralRegisters: public CommandPacket + { + private: + void init(); + + public: + TargetRegisterMap registerMap; + int registerNumber; + std::vector registerValue; + + WriteGeneralRegisters(std::vector rawPacket) : CommandPacket(rawPacket) { + init(); + }; + + virtual void dispatchToHandler(Gdb::GdbRspDebugServer& gdbRspDebugServer) override; + }; +} diff --git a/src/DebugServers/GdbRsp/CommandPackets/WriteMemory.cpp b/src/DebugServers/GdbRsp/CommandPackets/WriteMemory.cpp new file mode 100644 index 00000000..c9f48d8a --- /dev/null +++ b/src/DebugServers/GdbRsp/CommandPackets/WriteMemory.cpp @@ -0,0 +1,52 @@ +#include "WriteMemory.hpp" +#include "src/DebugServers/GdbRsp/GdbRspDebugServer.hpp" + +using namespace Bloom::DebugServers::Gdb::CommandPackets; +using namespace Bloom::Exceptions; + +void WriteMemory::init() { + if (this->data.size() < 4) { + throw Exception("Invalid packet length"); + } + + auto packetString = QString::fromLocal8Bit( + reinterpret_cast(this->data.data() + 1), + static_cast(this->data.size() - 1) + ); + + /* + * The write memory ('M') packet consists of three segments, an address, a length and a buffer. + * The address and length are separated by a comma character, and the buffer proceeds a colon character. + */ + auto packetSegments = packetString.split(","); + if (packetSegments.size() != 2) { + throw Exception("Unexpected number of segments in packet data: " + std::to_string(packetSegments.size())); + } + + bool conversionStatus = false; + this->startAddress = packetSegments.at(0).toUInt(&conversionStatus, 16); + + if (!conversionStatus) { + throw Exception("Failed to parse start address from write memory packet data"); + } + + auto lengthAndBufferSegments = packetSegments.at(1).split(":"); + if (lengthAndBufferSegments.size() != 2) { + throw Exception("Unexpected number of segments in packet data: " + std::to_string(lengthAndBufferSegments.size())); + } + + auto bufferSize = lengthAndBufferSegments.at(0).toUInt(&conversionStatus, 16); + if (!conversionStatus) { + throw Exception("Failed to parse write length from write memory packet data"); + } + + this->buffer = this->hexToData(lengthAndBufferSegments.at(1).toStdString()); + + if (this->buffer.size() != bufferSize) { + throw Exception("Buffer size does not match length value given in write memory packet"); + } +} + +void WriteMemory::dispatchToHandler(Gdb::GdbRspDebugServer& gdbRspDebugServer) { + gdbRspDebugServer.handleGdbPacket(*this); +} diff --git a/src/DebugServers/GdbRsp/CommandPackets/WriteMemory.hpp b/src/DebugServers/GdbRsp/CommandPackets/WriteMemory.hpp new file mode 100644 index 00000000..6d0095f3 --- /dev/null +++ b/src/DebugServers/GdbRsp/CommandPackets/WriteMemory.hpp @@ -0,0 +1,38 @@ +#pragma once + +#include +#include + +#include "CommandPacket.hpp" +#include "src/Targets/TargetMemory.hpp" + +namespace Bloom::DebugServers::Gdb::CommandPackets +{ + using namespace Bloom::DebugServers::Gdb; + using Bloom::Targets::TargetMemoryBuffer; + + /** + * The WriteMemory class implements the structure for "M" packets. Upon receiving this packet, the server is + * expected to write data to the target's memory, at the specified start address. + */ + class WriteMemory: public CommandPacket + { + private: + void init(); + + public: + /** + * Like with the ReadMemory command packet, the start address carries additional bits that indicate + * the memory type. + */ + std::uint32_t startAddress; + + TargetMemoryBuffer buffer; + + WriteMemory(std::vector rawPacket) : CommandPacket(rawPacket) { + init(); + }; + + virtual void dispatchToHandler(Gdb::GdbRspDebugServer& gdbRspDebugServer) override; + }; +} diff --git a/src/DebugServers/GdbRsp/Connection.cpp b/src/DebugServers/GdbRsp/Connection.cpp new file mode 100644 index 00000000..2d37a309 --- /dev/null +++ b/src/DebugServers/GdbRsp/Connection.cpp @@ -0,0 +1,208 @@ +#include +#include +#include +#include + +#include "src/Logger/Logger.hpp" +#include "src/Exceptions/Exception.hpp" +#include "src/Exceptions/DebugServerInterrupted.hpp" +#include "Connection.hpp" +#include "Exceptions/ClientDisconnected.hpp" +#include "Exceptions/ClientCommunicationError.hpp" +#include "CommandPackets/CommandPacketFactory.hpp" + +using namespace Bloom::DebugServers::Gdb; +using namespace Bloom::DebugServers::Gdb::Exceptions; +using namespace Bloom::Exceptions; + +void Connection::accept(int serverSocketFileDescriptor) { + int socketAddressLength = sizeof(this->socketAddress); + + this->socketFileDescriptor = ::accept( + serverSocketFileDescriptor, + (sockaddr*)& (this->socketAddress), + (socklen_t*)& socketAddressLength + ); + + if (this->socketFileDescriptor == -1) { + throw Exception("Failed to accept GDB Remote Serial Protocol connection"); + } + + ::fcntl( + this->socketFileDescriptor, + F_SETFL, + fcntl(this->socketFileDescriptor, F_GETFL, 0) | O_NONBLOCK + ); + + // Create event FD + this->eventFileDescriptor = ::epoll_create(2); + struct epoll_event event = {}; + event.events = EPOLLIN; + event.data.fd = this->socketFileDescriptor; + + if (::epoll_ctl(this->eventFileDescriptor, EPOLL_CTL_ADD, this->socketFileDescriptor, &event) != 0) { + throw Exception("Failed to create event FD for GDB client connection - could not add client connection " + "socket FD to epoll FD"); + } + + this->enableReadInterrupts(); +} + +void Connection::disableReadInterrupts() { + if (::epoll_ctl( + this->eventFileDescriptor, + EPOLL_CTL_DEL, + this->interruptEventNotifier->getFileDescriptor(), + NULL) != 0 + ) { + throw Exception("Failed to disable GDB client connection read interrupts - epoll_ctl failed"); + } + + this->readInterruptEnabled = false; +} + +void Connection::enableReadInterrupts() { + auto interruptFileDescriptor = this->interruptEventNotifier->getFileDescriptor(); + struct epoll_event event = {}; + event.events = EPOLLIN; + event.data.fd = interruptFileDescriptor; + + if (::epoll_ctl(this->eventFileDescriptor, EPOLL_CTL_ADD, interruptFileDescriptor, &event) != 0) { + throw Exception("Failed to enable GDB client connection read interrupts - epoll_ctl failed"); + } + + this->readInterruptEnabled = true; +} + +void Connection::close() noexcept { + if (this->socketFileDescriptor > 0) { + ::close(this->socketFileDescriptor); + this->socketFileDescriptor = 0; + } +} + +void Connection::write(const std::vector& buffer) { + Logger::debug("Writing packet: " + std::string(buffer.begin(), buffer.end())); + if (::write(this->socketFileDescriptor, buffer.data(), buffer.size()) == -1) { + if (errno == EPIPE || errno == ECONNRESET) { + // Connection was closed + throw ClientDisconnected(); + + } else { + throw ClientCommunicationError("Failed to write " + std::to_string(buffer.size()) + + " bytes to GDP client socket - error no: " + std::to_string(errno)); + } + } +} + +void Connection::writePacket(const ResponsePacket& packet) { + // Write the packet repeatedly until the GDB client acknowledges it. + int attempts = 0; + auto rawPacket = packet.toRawPacket(); + + do { + if (attempts > 10) { + throw ClientCommunicationError("Failed to write GDB response packet - client failed to " + "acknowledge receipt - retry limit reached"); + } + + this->write(rawPacket); + attempts++; + + } while(this->readSingleByte(false).value_or(0) != '+'); +} + +std::vector Connection::read(size_t bytes, bool interruptible, std::optional msTimeout) { + auto output = std::vector(); + constexpr size_t bufferSize = 1024; + std::array buffer; + ssize_t bytesRead; + + if (interruptible) { + if (this->readInterruptEnabled != interruptible) { + this->enableReadInterrupts(); + } else { + // Clear any previous interrupts that are still hanging around + this->interruptEventNotifier->clear(); + } + } + + if (this->readInterruptEnabled != interruptible && !interruptible) { + this->disableReadInterrupts(); + } + + std::array events = {}; + + int eventCount = ::epoll_wait( + this->eventFileDescriptor, + events.data(), + 1, + msTimeout.value_or(-1) + ); + + if (eventCount > 0) { + for (size_t i = 0; i < eventCount; i++) { + auto fileDescriptor = events[i].data.fd; + + if (fileDescriptor == this->interruptEventNotifier->getFileDescriptor()) { + // Interrupted + this->interruptEventNotifier->clear(); + throw DebugServerInterrupted(); + } + } + + size_t bytesToRead = (bytes > bufferSize || bytes == 0) ? bufferSize : bytes; + while (bytesToRead > 0 && (bytesRead = ::read(this->socketFileDescriptor, buffer.data(), bytesToRead)) > 0) { + output.insert(output.end(), buffer.begin(), buffer.begin() + bytesRead); + + if (bytesRead < bytesToRead) { + // No more data available + break; + } + + bytesToRead = ((bytes - output.size()) > bufferSize || bytes == 0) ? bufferSize : (bytes - output.size()); + } + + if (output.empty()) { + // EOF means the client has disconnected + throw ClientDisconnected(); + } + } + + return output; +} + +std::optional Connection::readSingleByte(bool interruptible) { + auto bytes = this->read(1, interruptible, 300); + + if (!bytes.empty()) { + return bytes.front(); + } + + return std::nullopt; +} + +std::vector> Connection::readPackets() { + auto buffer = this->read(); + Logger::debug("GDB client data received (" + std::to_string(buffer.size()) + " bytes): " + std::string(buffer.begin(), buffer.end())); + + auto rawPackets = CommandPacketFactory::extractRawPackets(buffer); + std::vector> output; + + for (const auto& rawPacket : rawPackets) { + try { + output.push_back(CommandPacketFactory::create(rawPacket)); + this->write({'+'}); + + } catch (const ClientDisconnected& exception) { + throw exception; + + } catch (const Exception& exception) { + Logger::error("Failed to parse GDB packet - " + exception.getMessage()); + this->write({'-'}); + + } + } + + return output; +} diff --git a/src/DebugServers/GdbRsp/Connection.hpp b/src/DebugServers/GdbRsp/Connection.hpp new file mode 100644 index 00000000..2058ab3e --- /dev/null +++ b/src/DebugServers/GdbRsp/Connection.hpp @@ -0,0 +1,137 @@ +#pragma once + +#include +#include +#include +#include +#include +#include +#include + +#include "src/Helpers/EventNotifier.hpp" +#include "src/DebugServers/GdbRsp/CommandPackets/CommandPacket.hpp" +#include "src/DebugServers/GdbRsp/ResponsePackets/ResponsePacket.hpp" + +namespace Bloom::DebugServers::Gdb +{ + using namespace CommandPackets; + using namespace ResponsePackets; + + /** + * The Connection class represents an active connection between the GDB RSP server and client. + * + * All interfacing with the GDB client should take place here. + */ + class Connection + { + private: + int socketFileDescriptor = -1; + int eventFileDescriptor = -1; + + struct sockaddr_in socketAddress = {}; + int maxPacketSize = 1024; + + /** + * The interruptEventNotifier allows us to interrupt blocking IO calls on the GDB debug server. + * Under the hood, this is just a wrapper for a Linux event notifier. See the EventNotifier class for more. + */ + std::shared_ptr interruptEventNotifier = nullptr; + bool readInterruptEnabled = false; + + /** + * Reads data from the client into a raw buffer. + * + * @param bytes + * Number of bytes to read. + * + * @param interruptible + * If this flag is set to false, no other component within Bloom will be able to gracefully interrupt + * the read (via means of this->interruptEventNotifier). This flag has no affect if this->readInterruptEnabled + * is false. + * + * @param msTimeout + * The timeout in milliseconds. If not supplied, no timeout will be applied. + * + * @return + */ + std::vector read(std::size_t bytes = 0, bool interruptible = true, std::optional msTimeout = std::nullopt); + + /** + * Does the same as Connection::read(), but only reads a single byte. + * + * @param interruptible + * See Connection::read(). + * + * @return + */ + std::optional readSingleByte(bool interruptible = true); + + /** + * Writes data from a raw buffer to the client connection. + * + * @param buffer + */ + void write(const std::vector& buffer); + + void disableReadInterrupts(); + + void enableReadInterrupts(); + + public: + /** + * When the GDB client is waiting for the target to reach a breakpoint, this is set to true so we know when to + * notify the client. + * + * @TODO: This is pretty gross. Consider rethinking it. + */ + bool waitingForBreak = false; + + Connection(std::shared_ptr interruptEventNotifier) + : interruptEventNotifier(interruptEventNotifier) {}; + + /** + * Accepts a connection on serverSocketFileDescriptor. + * + * @param serverSocketFileDescriptor + */ + void accept(int serverSocketFileDescriptor); + + /** + * Closes the connection with the client. + */ + void close() noexcept; + + /** + * Obtains the human readable IP address of the connected client. + * + * @return + */ + std::string getIpAddress() { + std::array ipAddress; + + if (::inet_ntop(AF_INET, &(socketAddress.sin_addr), ipAddress.data(), INET_ADDRSTRLEN) == nullptr) { + throw Exceptions::Exception("Failed to convert client IP address to text form."); + } + + return std::string(ipAddress.data()); + }; + + /** + * Waits for incoming data from the client and returns any received command packets. + * + * @return + */ + std::vector> readPackets(); + + /** + * Sends a response packet to the client. + * + * @param packet + */ + void writePacket(const ResponsePacket& packet); + + int getMaxPacketSize() { + return this->maxPacketSize; + } + }; +} diff --git a/src/DebugServers/GdbRsp/Exceptions/ClientCommunicationError.hpp b/src/DebugServers/GdbRsp/Exceptions/ClientCommunicationError.hpp new file mode 100644 index 00000000..2fe8b7e1 --- /dev/null +++ b/src/DebugServers/GdbRsp/Exceptions/ClientCommunicationError.hpp @@ -0,0 +1,28 @@ +#pragma once + +#include "src/Exceptions/Exception.hpp" + +namespace Bloom::DebugServers::Gdb::Exceptions +{ + using namespace Bloom::Exceptions; + + /** + * In the event that communication between the GDB RSP client and Bloom fails, a ClientCommunicationFailure + * exception should be thrown. The GDB debug server handles this by severing the connection. + * + * See GdbRspDebugServer::serve() for handling code. + */ + class ClientCommunicationError: public Exception + { + public: + explicit ClientCommunicationError(const std::string& message) : Exception(message) { + this->message = message; + } + + explicit ClientCommunicationError(const char* message) : Exception(message) { + this->message = std::string(message); + } + + explicit ClientCommunicationError() = default; + }; +} diff --git a/src/DebugServers/GdbRsp/Exceptions/ClientDisconnected.hpp b/src/DebugServers/GdbRsp/Exceptions/ClientDisconnected.hpp new file mode 100644 index 00000000..6f190c66 --- /dev/null +++ b/src/DebugServers/GdbRsp/Exceptions/ClientDisconnected.hpp @@ -0,0 +1,29 @@ +#pragma once + +#include "src/Exceptions/Exception.hpp" + +namespace Bloom::DebugServers::Gdb::Exceptions +{ + using namespace Bloom::Exceptions; + + /** + * When a GDB RSP client unexpectedly drops the connection in the middle of an IO operation, a ClientDisconnected + * exception should be thrown. The GDB debug server handles this by clearing the connection and waiting for a new + * one. + * + * See GdbRspDebugServer::serve() for handling code. + */ + class ClientDisconnected: public Exception + { + public: + explicit ClientDisconnected(const std::string& message) : Exception(message) { + this->message = message; + } + + explicit ClientDisconnected(const char* message) : Exception(message) { + this->message = std::string(message); + } + + explicit ClientDisconnected() = default; + }; +} diff --git a/src/DebugServers/GdbRsp/Exceptions/ClientNotSupported.hpp b/src/DebugServers/GdbRsp/Exceptions/ClientNotSupported.hpp new file mode 100644 index 00000000..1796834c --- /dev/null +++ b/src/DebugServers/GdbRsp/Exceptions/ClientNotSupported.hpp @@ -0,0 +1,28 @@ +#pragma once + +#include "src/Exceptions/Exception.hpp" + +namespace Bloom::DebugServers::Gdb::Exceptions +{ + using namespace Bloom::Exceptions; + + /** + * In the event that the GDB debug server determines that the connected client cannot be served, + * the ClientNotSupported exception should be thrown. + * + * See GdbRspDebugServer::serve() for handling code. + */ + class ClientNotSupported: public Exception + { + public: + explicit ClientNotSupported(const std::string& message) : Exception(message) { + this->message = message; + } + + explicit ClientNotSupported(const char* message) : Exception(message) { + this->message = std::string(message); + } + + explicit ClientNotSupported() = default; + }; +} diff --git a/src/DebugServers/GdbRsp/Feature.hpp b/src/DebugServers/GdbRsp/Feature.hpp new file mode 100644 index 00000000..3091ae4e --- /dev/null +++ b/src/DebugServers/GdbRsp/Feature.hpp @@ -0,0 +1,23 @@ +#pragma once + +#include "src/Helpers/BiMap.hpp" + +namespace Bloom::DebugServers::Gdb +{ + enum class Feature: int + { + SOFTWARE_BREAKPOINTS, + HARDWARE_BREAKPOINTS, + PACKET_SIZE, + MEMORY_MAP_READ, + }; + + static inline BiMap getGdbFeatureToNameMapping() { + return BiMap{ + {Feature::HARDWARE_BREAKPOINTS, "hwbreak"}, + {Feature::SOFTWARE_BREAKPOINTS, "swbreak"}, + {Feature::PACKET_SIZE, "PacketSize"}, + {Feature::MEMORY_MAP_READ, "qXfer:memory-map:read"}, + }; + } +} diff --git a/src/DebugServers/GdbRsp/GdbRspDebugServer.cpp b/src/DebugServers/GdbRsp/GdbRspDebugServer.cpp new file mode 100644 index 00000000..bb9302ec --- /dev/null +++ b/src/DebugServers/GdbRsp/GdbRspDebugServer.cpp @@ -0,0 +1,404 @@ +#include +#include +#include + +#include "GdbRspDebugServer.hpp" +#include "Exceptions/ClientDisconnected.hpp" +#include "Exceptions/ClientNotSupported.hpp" +#include "Exceptions/ClientCommunicationError.hpp" +#include "src/Exceptions/Exception.hpp" +#include "src/Exceptions/InvalidConfig.hpp" +#include "src/Logger/Logger.hpp" + +using namespace Bloom::DebugServers::Gdb; +using namespace Exceptions; + +void GdbRspDebugServer::init() { + auto ipAddress = this->debugServerConfig.jsonObject.find("ipAddress")->toString().toStdString(); + auto port = static_cast(this->debugServerConfig.jsonObject.find("port")->toInt()); + + if (!ipAddress.empty()) { + this->listeningAddress = ipAddress; + } + + if (port > 0) { + this->listeningPortNumber = port; + } + + this->socketAddress.sin_family = AF_INET; + this->socketAddress.sin_port = htons(this->listeningPortNumber); + + if (::inet_pton(AF_INET, this->listeningAddress.c_str(), &(this->socketAddress.sin_addr)) == 0) { + // Invalid IP address + throw InvalidConfig("Invalid IP address provided in config file: (\"" + this->listeningAddress + "\")"); + } + + int socketFileDescriptor; + + if ((socketFileDescriptor = ::socket(AF_INET, SOCK_STREAM, 0)) == 0) { + throw Exception("Failed to create socket file descriptor."); + } + + if (::setsockopt( + socketFileDescriptor, + SOL_SOCKET, + SO_REUSEADDR, + &this->enableReuseAddressSocketOption, + sizeof(this->enableReuseAddressSocketOption)) < 0 + ) { + Logger::error("Failed to set socket SO_REUSEADDR option."); + } + + if (::bind( + socketFileDescriptor, + reinterpret_cast(&(this->socketAddress)), + sizeof(this->socketAddress) + ) < 0 + ) { + throw Exception("Failed to bind address."); + } + + this->serverSocketFileDescriptor = socketFileDescriptor; + + this->eventFileDescriptor = ::epoll_create(2); + struct epoll_event event = {}; + event.events = EPOLLIN; + event.data.fd = this->serverSocketFileDescriptor; + + if (::epoll_ctl(this->eventFileDescriptor, EPOLL_CTL_ADD, this->serverSocketFileDescriptor, &event) != 0) { + throw Exception("Failed epoll_ctl server socket"); + } + + if (this->interruptEventNotifier != nullptr) { + auto interruptFileDescriptor = this->interruptEventNotifier->getFileDescriptor(); + event.events = EPOLLIN; + event.data.fd = interruptFileDescriptor; + + if (::epoll_ctl(this->eventFileDescriptor, EPOLL_CTL_ADD, interruptFileDescriptor, &event) != 0) { + throw Exception("Failed epoll_ctl interrupt event fd"); + } + } + + Logger::info("GDB RSP address: " + this->listeningAddress); + Logger::info("GDB RSP port: " + std::to_string(this->listeningPortNumber)); + + this->eventListener->registerCallbackForEventType( + std::bind(&GdbRspDebugServer::onTargetExecutionStopped, this, std::placeholders::_1) + ); +} + +void GdbRspDebugServer::serve() { + try { + if (!this->clientConnection.has_value()) { + Logger::info("Waiting for GDB RSP connection"); + this->waitForConnection(); + } + + auto packets = this->clientConnection->readPackets(); + + for (auto& packet : packets) { + // Double-dispatch to appropriate handler + packet->dispatchToHandler(*this); + } + + } catch (const ClientDisconnected&) { + Logger::info("GDB RSP client disconnected"); + this->closeClientConnection(); + return; + + } catch (const ClientCommunicationError& exception) { + Logger::error("GDB client communication error - " + exception.getMessage() + " - closing connection"); + this->closeClientConnection(); + return; + + } catch (const ClientNotSupported& exception) { + Logger::error("Invalid GDB client - " + exception.getMessage() + " - closing connection"); + this->closeClientConnection(); + return; + + } catch (const DebugServerInterrupted&) { + // Server was interrupted + Logger::debug("GDB RSP interrupted"); + return; + } +} + +void GdbRspDebugServer::waitForConnection() { + if (::listen(this->serverSocketFileDescriptor, 3) != 0) { + throw Exception("Failed to listen on server socket"); + } + + std::array events = {}; + int eventCount = ::epoll_wait( + this->eventFileDescriptor, + events.data(), + 5, + -1 + ); + + if (eventCount > 0) { + for (size_t i = 0; i < eventCount; i++) { + auto fileDescriptor = events[i].data.fd; + + if (fileDescriptor == this->interruptEventNotifier->getFileDescriptor()) { + // Interrupted + this->interruptEventNotifier->clear(); + throw DebugServerInterrupted(); + } + } + + this->clientConnection = Connection(this->interruptEventNotifier); + this->clientConnection->accept(this->serverSocketFileDescriptor); + + Logger::info("Accepted GDP RSP connection from " + this->clientConnection->getIpAddress()); + this->eventManager.triggerEvent(std::make_shared()); + } else { + // This method should not return until a connection has been established (or an exception is thrown) + return this->waitForConnection(); + } +} + +void GdbRspDebugServer::close() { + this->closeClientConnection(); + + if (this->serverSocketFileDescriptor > 0) { + ::close(this->serverSocketFileDescriptor); + } +} + +void GdbRspDebugServer::handleGdbPacket(CommandPacket& packet) { + auto packetData = packet.getData(); + auto packetString = std::string(packetData.begin(), packetData.end()); + + if (packetString[0] == '?') { + // Status report + this->clientConnection->writePacket(TargetStopped(Signal::TRAP)); + + } else if (packetString.find("qAttached") == 0) { + Logger::debug("Handling qAttached"); + this->clientConnection->writePacket(ResponsePacket({1})); + + } else { + Logger::debug("Unknown GDB RSP packet: " + packetString + " - returning empty response"); + + // Respond with an empty packet + this->clientConnection->writePacket(ResponsePacket({0})); + } +} + +void GdbRspDebugServer::onTargetExecutionStopped(EventPointer) { + if (this->clientConnection.has_value() && this->clientConnection->waitingForBreak) { + this->clientConnection->writePacket(TargetStopped(Signal::TRAP)); + this->clientConnection->waitingForBreak = false; + } +} + +void GdbRspDebugServer::handleGdbPacket(CommandPackets::SupportedFeaturesQuery& packet) { + Logger::debug("Handling QuerySupport packet"); + + if (!packet.isFeatureSupported(Feature::HARDWARE_BREAKPOINTS) + && !packet.isFeatureSupported(Feature::SOFTWARE_BREAKPOINTS)) { + // All GDB clients are expected to support breakpoints! + throw ClientNotSupported("GDB client does not support HW or SW breakpoints"); + } + + // Respond with a SupportedFeaturesResponse packet, listing all supported GDB features by Bloom + auto response = ResponsePackets::SupportedFeaturesResponse({ + {Feature::SOFTWARE_BREAKPOINTS, std::nullopt}, + {Feature::PACKET_SIZE, std::to_string(this->clientConnection->getMaxPacketSize())}, + }); + + this->clientConnection->writePacket(response); +} + +void GdbRspDebugServer::handleGdbPacket(CommandPackets::ReadGeneralRegisters& packet) { + Logger::debug("Handling ReadGeneralRegisters packet"); + + try { + auto descriptors = TargetRegisterDescriptors(); + + if (packet.registerNumber.has_value()) { + Logger::debug("Reading register number: " + std::to_string(packet.registerNumber.value())); + descriptors.push_back(this->getRegisterDescriptorFromNumber(packet.registerNumber.value())); + + } else { + // Read all descriptors + auto descriptorMapping = this->getRegisterNumberToDescriptorMapping(); + for (auto& descriptor : descriptorMapping.getMap()) { + descriptors.push_back(descriptor.second); + } + } + + auto registerSet = this->readGeneralRegistersFromTarget(descriptors); + auto registerNumberToDescriptorMapping = this->getRegisterNumberToDescriptorMapping(); + + /* + * Remove any registers that are not mapped to GDB register numbers (as we won't know where to place + * them in our response to GDB). All registers that are expected from the GDB client should be mapped + * to register numbers. + * + * Registers that are not mapped to a GDB register number are presumed to be unknown to GDB, so GDB shouldn't + * complain about not receiving them. + */ + registerSet.erase( + std::remove_if( + registerSet.begin(), + registerSet.end(), + [®isterNumberToDescriptorMapping](const TargetRegister& reg) { + return !registerNumberToDescriptorMapping.contains(reg.descriptor); + } + ), + registerSet.end() + ); + + /* + * Sort each register by their respective GDB register number - this will leave us with a collection of + * registers in the order expected by the GDB client. + */ + std::sort( + registerSet.begin(), + registerSet.end(), + [this, ®isterNumberToDescriptorMapping](const TargetRegister& registerA, const TargetRegister& registerB) { + return registerNumberToDescriptorMapping.valueAt(registerA.descriptor) < + registerNumberToDescriptorMapping.valueAt(registerB.descriptor); + } + ); + + /* + * Finally, implode the register values, convert to hexadecimal form and send to the GDB client. + */ + auto registers = std::vector(); + for (const auto& reg : registerSet) { + registers.insert(registers.end(), reg.value.begin(), reg.value.end()); + } + + auto responseRegisters = Packet::dataToHex(registers); + this->clientConnection->writePacket( + ResponsePacket(std::vector(responseRegisters.begin(), responseRegisters.end())) + ); + + } catch (const Exception& exception) { + Logger::error("Failed to read general registers - " + exception.getMessage()); + this->clientConnection->writePacket(ResponsePacket({'E', '0', '1'})); + } +} + +void GdbRspDebugServer::handleGdbPacket(CommandPackets::WriteGeneralRegisters& packet) { + Logger::debug("Handling WriteGeneralRegisters packet"); + + try { + auto registerDescriptor = this->getRegisterDescriptorFromNumber(packet.registerNumber); + this->writeGeneralRegistersToTarget({TargetRegister(registerDescriptor, packet.registerValue)}); + this->clientConnection->writePacket(ResponsePacket({'O', 'K'})); + + } catch (const Exception& exception) { + Logger::error("Failed to write general registers - " + exception.getMessage()); + this->clientConnection->writePacket(ResponsePacket({'E', '0', '1'})); + } +} + +void GdbRspDebugServer::handleGdbPacket(CommandPackets::ContinueExecution& packet) { + Logger::debug("Handling ContinueExecution packet"); + + try { + this->continueTargetExecution(packet.fromProgramCounter); + this->clientConnection->waitingForBreak = true; + + } catch (const Exception& exception) { + Logger::error("Failed to continue execution on target - " + exception.getMessage()); + this->clientConnection->writePacket(ResponsePacket({'E', '0', '1'})); + } +} + +void GdbRspDebugServer::handleGdbPacket(CommandPackets::StepExecution& packet) { + Logger::debug("Handling StepExecution packet"); + + try { + this->stepTargetExecution(packet.fromProgramCounter); + this->clientConnection->waitingForBreak = true; + + } catch (const Exception& exception) { + Logger::error("Failed to step execution on target - " + exception.getMessage()); + this->clientConnection->writePacket(ResponsePacket({'E', '0', '1'})); + } +} + +void GdbRspDebugServer::handleGdbPacket(CommandPackets::ReadMemory& packet) { + Logger::debug("Handling ReadMemory packet"); + + try { + auto memoryType = this->getMemoryTypeFromGdbAddress(packet.startAddress); + auto startAddress = this->removeMemoryTypeIndicatorFromGdbAddress(packet.startAddress); + auto memoryBuffer = this->readMemoryFromTarget(memoryType, startAddress, packet.bytes); + + auto hexMemoryBuffer = Packet::dataToHex(memoryBuffer); + this->clientConnection->writePacket( + ResponsePacket(std::vector(hexMemoryBuffer.begin(), hexMemoryBuffer.end())) + ); + + } catch (const Exception& exception) { + Logger::error("Failed to read memory from target - " + exception.getMessage()); + this->clientConnection->writePacket(ResponsePacket({'E', '0', '1'})); + } +} + +void GdbRspDebugServer::handleGdbPacket(CommandPackets::WriteMemory& packet) { + Logger::debug("Handling WriteMemory packet"); + + try { + auto memoryType = this->getMemoryTypeFromGdbAddress(packet.startAddress); + auto startAddress = this->removeMemoryTypeIndicatorFromGdbAddress(packet.startAddress); + this->writeMemoryToTarget(memoryType, startAddress, packet.buffer); + + this->clientConnection->writePacket(ResponsePacket({'O', 'K'})); + + } catch (const Exception& exception) { + Logger::error("Failed to write memory two target - " + exception.getMessage()); + this->clientConnection->writePacket(ResponsePacket({'E', '0', '1'})); + } +} + +void GdbRspDebugServer::handleGdbPacket(CommandPackets::SetBreakpoint& packet) { + Logger::debug("Handling SetBreakpoint packet"); + + try { + auto breakpoint = TargetBreakpoint(); + breakpoint.address = packet.address; + this->setBreakpointOnTarget(breakpoint); + + this->clientConnection->writePacket(ResponsePacket({'O', 'K'})); + + } catch (const Exception& exception) { + Logger::error("Failed to set breakpoint on target - " + exception.getMessage()); + this->clientConnection->writePacket(ResponsePacket({'E', '0', '1'})); + } +} + +void GdbRspDebugServer::handleGdbPacket(CommandPackets::RemoveBreakpoint& packet) { + Logger::debug("Removing breakpoint at address " + std::to_string(packet.address)); + + try { + auto breakpoint = TargetBreakpoint(); + breakpoint.address = packet.address; + this->removeBreakpointOnTarget(breakpoint); + + this->clientConnection->writePacket(ResponsePacket({'O', 'K'})); + + } catch (const Exception& exception) { + Logger::error("Failed to remove breakpoint on target - " + exception.getMessage()); + this->clientConnection->writePacket(ResponsePacket({'E', '0', '1'})); + } +} + +void GdbRspDebugServer::handleGdbPacket(CommandPackets::InterruptExecution& packet) { + Logger::debug("Handling InterruptExecution packet"); + + try { + this->stopTargetExecution(); + this->clientConnection->writePacket(TargetStopped(Signal::INTERRUPTED)); + + } catch (const Exception& exception) { + Logger::error("Failed to interrupt execution - " + exception.getMessage()); + this->clientConnection->writePacket(ResponsePacket({'E', '0', '1'})); + } +} diff --git a/src/DebugServers/GdbRsp/GdbRspDebugServer.hpp b/src/DebugServers/GdbRsp/GdbRspDebugServer.hpp new file mode 100644 index 00000000..a9e7272c --- /dev/null +++ b/src/DebugServers/GdbRsp/GdbRspDebugServer.hpp @@ -0,0 +1,257 @@ +#pragma once + +#include +#include +#include +#include +#include + +#include "../DebugServer.hpp" +#include "Connection.hpp" +#include "Signal.hpp" +#include "Register.hpp" +#include "Feature.hpp" +#include "src/Helpers/EventNotifier.hpp" +#include "src/Helpers/BiMap.hpp" +#include "CommandPackets/CommandPacketFactory.hpp" +#include "src/Targets/TargetRegister.hpp" + +// Response packets +#include "ResponsePackets/SupportedFeaturesResponse.hpp" +#include "ResponsePackets/TargetStopped.hpp" + +namespace Bloom::DebugServers::Gdb +{ + using Bloom::Targets::TargetRegisterType; + using Bloom::Targets::TargetRegisterDescriptor; + + /** + * The GdbRspDebugServer is an implementation of a GDB server using the GDB Remote Serial Protocol. + * + * This DebugServer employs TCP/IP sockets to interface with GDB clients. The listening address can be configured + * in the user's project config file. + * + * See https://sourceware.org/gdb/onlinedocs/gdb/Remote-Protocol.html for more info on the GDB Remote + * Serial Protocol. + * + * @TODO: This could do with some cleaning. + */ + class GdbRspDebugServer: public DebugServer + { + protected: + /** + * The port number for the GDB server to listen on. + * + * This will be pulled from the user's project configuration, if set. Otherwise it will default to whatever is + * set here. + */ + std::uint16_t listeningPortNumber = 1055; + + /** + * The address for the GDB server to listen on. + * + * Like the port number, this can also be pulled from the user's project configuration. + */ + std::string listeningAddress = "127.0.0.1"; + + /** + * Listening socket address + */ + struct sockaddr_in socketAddress = {}; + + /** + * Listening socket file descriptor + */ + int serverSocketFileDescriptor = -1; + + /** + * We don't listen on the this->serverSocketFileDescriptor directly. Instead, we add it to an epoll set, along + * with the this->interruptEventNotifier FD. This allows us to interrupt any blocking socket IO calls when + * we have other things to do. + * + * See GdbRspDebugServer::init() + * See DebugServer::interruptEventNotifier + * See EventNotifier + */ + int eventFileDescriptor = -1; + + /** + * SO_REUSEADDR option value for listening socket. + */ + int enableReuseAddressSocketOption = 1; + + /** + * The current active GDB client connection, if any. + */ + std::optional clientConnection; + + /** + * Prepares the GDB server for listing on the selected address and port. + */ + void init() override; + + /** + * Closes any client connection as well as the listening socket file descriptor. + */ + void close() override; + + /** + * See DebugServer::serve() + */ + void serve() override; + + /** + * Waits for a GDB client to connect on the listening socket. Accepts the connection and + * sets this->clientConnection. + */ + void waitForConnection(); + + void closeClientConnection() { + if (this->clientConnection.has_value()) { + this->clientConnection->close(); + this->clientConnection = std::nullopt; + this->eventManager.triggerEvent(std::make_shared()); + } + } + + /** + * GDB clients encode memory type information (flash, ram, eeprom, etc) in memory addresses. This is typically + * hardcoded in the GDB client source. This method extracts memory type information from a given memory address. + * The specifics of the encoding may vary with targets, which is why this method is virtual. For an example, + * see the implementation of this method in AvrGdbRsp. + * + * @param address + * @return + */ + virtual TargetMemoryType getMemoryTypeFromGdbAddress(std::uint32_t address) = 0; + + /** + * Removes memory type information from memory address. + * See comment for GdbRspDebugServer::getMemoryTypeFromGdbAddress() + * + * @param address + * @return + */ + virtual std::uint32_t removeMemoryTypeIndicatorFromGdbAddress(std::uint32_t address) = 0; + + /** + * Like with the method of encoding memory type information onto memory addresses, GDB clients also expect + * a pre-defined set of registers. The defined set being dependant on the target. This is hardcoded in the the + * GDB client source. The order of the registers is also pre-defined in the GDB client. + * + * For an example, see the implementation of this method in the AvrGdbRsp class. + * + * @return + */ + virtual BiMap getRegisterNumberToDescriptorMapping() = 0; + + /** + * Obtains the appropriate register descriptor from a register number. + * + * @param number + * @return + */ + virtual TargetRegisterDescriptor getRegisterDescriptorFromNumber(GdbRegisterNumber number) { + auto mapping = this->getRegisterNumberToDescriptorMapping(); + + if (!mapping.contains(number)) { + throw Exception("Unknown register from GDB - register number (" + std::to_string(number) + + ") not mapped to any register descriptor."); + } + + return mapping.valueAt(number).value(); + } + + public: + GdbRspDebugServer(EventManager& eventManager) : DebugServer(eventManager) {}; + + std::string getName() const override { + return "GDB Remote Serial Protocol DebugServer"; + }; + + /** + * If the GDB client is currently waiting for the target execution to stop, this event handler will issue + * a "stop reply" packet to the client once the target execution stops. + */ + void onTargetExecutionStopped(EventPointer); + + /** + * Handles any other GDB command packet that has not been promoted to a more specific type. + * This would be packets like "?" and "qAttached". + * + * @param packet + */ + virtual void handleGdbPacket(CommandPacket& packet); + + /** + * Handles the supported features query ("qSupported") command packet. + * + * @param packet + */ + virtual void handleGdbPacket(CommandPackets::SupportedFeaturesQuery& packet); + + /** + * Handles the read registers ("g" and "p") command packet. + * + * @param packet + */ + virtual void handleGdbPacket(CommandPackets::ReadGeneralRegisters& packet); + + /** + * Handles the write general registers ("G" and "P") command packet. + * + * @param packet + */ + virtual void handleGdbPacket(CommandPackets::WriteGeneralRegisters& packet); + + /** + * Handles the continue execution ("c") command packet. + * + * @param packet + */ + virtual void handleGdbPacket(CommandPackets::ContinueExecution& packet); + + /** + * Handles the step execution ("s") packet. + * + * @param packet + */ + virtual void handleGdbPacket(CommandPackets::StepExecution& packet); + + /** + * Handles the read memory ("m") command packet. + * + * @param packet + */ + virtual void handleGdbPacket(CommandPackets::ReadMemory& packet); + + /** + * Handles the write memory ("M") command packet. + * + * @param packet + */ + virtual void handleGdbPacket(CommandPackets::WriteMemory& packet); + + /** + * Handles the set breakpoint ("Z") command packet. + * + * @param packet + */ + virtual void handleGdbPacket(CommandPackets::SetBreakpoint& packet); + + /** + * Handles the remove breakpoint ("z") command packet. + * + * @param packet + */ + virtual void handleGdbPacket(CommandPackets::RemoveBreakpoint& packet); + + /** + * Handles the interrupt command packet. + * Will attempt to halt execution on the target. Should respond with a "stop reply" packet, or an error code. + * + * @param packet + */ + virtual void handleGdbPacket(CommandPackets::InterruptExecution& packet); + }; +} diff --git a/src/DebugServers/GdbRsp/Packet.hpp b/src/DebugServers/GdbRsp/Packet.hpp new file mode 100644 index 00000000..d7a130b5 --- /dev/null +++ b/src/DebugServers/GdbRsp/Packet.hpp @@ -0,0 +1,123 @@ +#pragma once + +#include +#include +#include +#include +#include +#include + +namespace Bloom::DebugServers::Gdb +{ + /** + * The Packet class implements the data structure for GDB RSP packets. + * + * Fore more information on the packet data structure, see https://sourceware.org/gdb/onlinedocs/gdb/Overview.html#Overview + */ + class Packet + { + protected: + std::vector data; + + void init(const std::vector& rawPacket) { + this->data.insert( + this->data.begin(), + rawPacket.begin() + 1, + rawPacket.end() - 3 + ); + } + public: + Packet() = default; + Packet(const std::vector& rawPacket) { + this->init(rawPacket); + } + + virtual std::vector getData() const { + return this->data; + } + + void setData(const std::vector& data) { + this->data = data; + } + + /** + * Generates a raw packet. + * + * @return + */ + std::vector toRawPacket() const { + std::vector packet = {'$'}; + auto data = this->getData(); + + for (const auto& byte : data) { + // Escape $ and # characters + switch (byte) { + case '$': + case '#': { + packet.push_back('}'); + packet.push_back(byte ^ 0x20); + } + default: { + packet.push_back(byte); + } + } + } + + auto dataSum = std::accumulate(packet.begin() + 1, packet.end(), 0); + packet.push_back('#'); + auto checkSum = QStringLiteral("%1").arg(dataSum % 256, 2, 16, QLatin1Char('0')).toStdString(); + + if (checkSum.size() < 2) { + packet.push_back('0'); + + if (checkSum.size() < 1) { + packet.push_back('0'); + } else { + packet.push_back(static_cast(checkSum[0])); + } + } + + packet.push_back(static_cast(checkSum[0])); + packet.push_back(static_cast(checkSum[1])); + + return packet; + } + + /** + * Converts raw data to hexadecimal form, the form in which responses are expected to be delivered from the + * server. + * + * @param data + * @return + */ + static std::string dataToHex(std::vector data) { + std::stringstream stream; + stream << std::hex << std::setfill('0'); + + for (const auto& byte : data) { + stream << std::setw(2) << static_cast(byte); + } + + return stream.str(); + } + + /** + * Converts data in hexadecimal form to raw data. + * + * @param hexData + * @return + */ + static std::vector hexToData(const std::string& hexData) { + std::vector output; + + for (auto i = 0; i < hexData.size(); i += 2) { + auto hexByte = std::string((hexData.begin() + i), (hexData.begin() + i + 2)); + output.push_back(static_cast(std::stoi(hexByte, nullptr, 16))); + } + + return output; + } + + virtual ~Packet() = default; + }; +} diff --git a/src/DebugServers/GdbRsp/Register.hpp b/src/DebugServers/GdbRsp/Register.hpp new file mode 100644 index 00000000..98220c1e --- /dev/null +++ b/src/DebugServers/GdbRsp/Register.hpp @@ -0,0 +1,6 @@ +#pragma once + +namespace Bloom::DebugServers::Gdb +{ + using GdbRegisterNumber = int; +} diff --git a/src/DebugServers/GdbRsp/ResponsePackets/Ok.hpp b/src/DebugServers/GdbRsp/ResponsePackets/Ok.hpp new file mode 100644 index 00000000..4945610d --- /dev/null +++ b/src/DebugServers/GdbRsp/ResponsePackets/Ok.hpp @@ -0,0 +1,25 @@ +#pragma once + +#include + +#include "ResponsePacket.hpp" + +namespace Bloom::DebugServers::Gdb { + enum class Feature; +} + +namespace Bloom::DebugServers::Gdb::ResponsePackets +{ + /** + * OK response packet expected by the GDB client, in response to certain commands. + */ + class Ok: public ResponsePacket + { + public: + Ok() = default; + + std::vector getData() const override { + return {'O', 'K'}; + } + }; +} diff --git a/src/DebugServers/GdbRsp/ResponsePackets/ResponsePacket.hpp b/src/DebugServers/GdbRsp/ResponsePackets/ResponsePacket.hpp new file mode 100644 index 00000000..d685a9cf --- /dev/null +++ b/src/DebugServers/GdbRsp/ResponsePackets/ResponsePacket.hpp @@ -0,0 +1,22 @@ +#pragma once + +#include +#include + +#include "src/DebugServers/GdbRsp/Packet.hpp" + +namespace Bloom::DebugServers::Gdb::ResponsePackets +{ + /** + * Upon receiving a CommandPacket from the connected GDB RSP client, the server is expected to respond with a + * response packet. + */ + class ResponsePacket: public Packet + { + public: + ResponsePacket() = default; + explicit ResponsePacket(const std::vector& data) { + this->data = data; + } + }; +} diff --git a/src/DebugServers/GdbRsp/ResponsePackets/SupportedFeaturesResponse.cpp b/src/DebugServers/GdbRsp/ResponsePackets/SupportedFeaturesResponse.cpp new file mode 100644 index 00000000..4a16adcf --- /dev/null +++ b/src/DebugServers/GdbRsp/ResponsePackets/SupportedFeaturesResponse.cpp @@ -0,0 +1,23 @@ +#include "SupportedFeaturesResponse.hpp" + +using namespace Bloom::DebugServers::Gdb::ResponsePackets; + +std::vector SupportedFeaturesResponse::getData() const { + std::string output = "qSupported:"; + auto gdbFeatureMapping = getGdbFeatureToNameMapping(); + + for (const auto& supportedFeature : this->supportedFeatures) { + auto featureString = gdbFeatureMapping.valueAt(supportedFeature.first); + + if (featureString.has_value()) { + if (supportedFeature.second.has_value()) { + output.append(featureString.value() + "=" + supportedFeature.second.value() + ";"); + } else { + output.append(featureString.value() + "+;"); + } + + } + } + + return std::vector(output.begin(), output.end()); +} diff --git a/src/DebugServers/GdbRsp/ResponsePackets/SupportedFeaturesResponse.hpp b/src/DebugServers/GdbRsp/ResponsePackets/SupportedFeaturesResponse.hpp new file mode 100644 index 00000000..084936d9 --- /dev/null +++ b/src/DebugServers/GdbRsp/ResponsePackets/SupportedFeaturesResponse.hpp @@ -0,0 +1,25 @@ +#pragma once + +#include + +#include "ResponsePacket.hpp" +#include "../Feature.hpp" + +namespace Bloom::DebugServers::Gdb::ResponsePackets +{ + /** + * The SupportedFeaturesResponse class implements the response packet structure for the "qSupported" command. + */ + class SupportedFeaturesResponse: public ResponsePacket + { + protected: + std::set>> supportedFeatures; + + public: + SupportedFeaturesResponse() = default; + SupportedFeaturesResponse(const std::set>>& supportedFeatures) + : supportedFeatures(supportedFeatures) {}; + + std::vector getData() const override; + }; +} diff --git a/src/DebugServers/GdbRsp/ResponsePackets/TargetStopped.hpp b/src/DebugServers/GdbRsp/ResponsePackets/TargetStopped.hpp new file mode 100644 index 00000000..3527b206 --- /dev/null +++ b/src/DebugServers/GdbRsp/ResponsePackets/TargetStopped.hpp @@ -0,0 +1,47 @@ +#pragma once + +#include "ResponsePacket.hpp" +#include "../Signal.hpp" +#include "../StopReason.hpp" +#include "src/Targets/TargetRegister.hpp" + +namespace Bloom::DebugServers::Gdb::ResponsePackets +{ + using Bloom::Targets::TargetRegisterMap; + + /** + * The TargetStopped class implements the response packet structure for any commands that expect a "StopReply" + * packet in response. + */ + class TargetStopped: public ResponsePacket + { + public: + Signal signal; + std::optional registerMap; + std::optional stopReason; + + TargetStopped(Signal signal) : signal(signal) {} + + std::vector getData() const override { + std::string output = "T" + this->dataToHex({static_cast(this->signal)}); + + if (this->stopReason.has_value()) { + auto stopReasonMapping = getStopReasonToNameMapping(); + auto stopReasonName = stopReasonMapping.valueAt(this->stopReason.value()); + + if (stopReasonName.has_value()) { + output += stopReasonName.value() + ":;"; + } + } + + if (this->registerMap.has_value()) { + for (const auto& [registerId, registerValue] : this->registerMap.value()) { + output += this->dataToHex({static_cast(registerId)}); + output += ":" + this->dataToHex(registerValue.value) + ";"; + } + } + + return std::vector(output.begin(), output.end()); + } + }; +} diff --git a/src/DebugServers/GdbRsp/Signal.hpp b/src/DebugServers/GdbRsp/Signal.hpp new file mode 100644 index 00000000..403acc03 --- /dev/null +++ b/src/DebugServers/GdbRsp/Signal.hpp @@ -0,0 +1,10 @@ +#pragma once + +namespace Bloom::DebugServers::Gdb +{ + enum class Signal: unsigned char + { + TRAP = 5, + INTERRUPTED = 2, + }; +} diff --git a/src/DebugServers/GdbRsp/StopReason.hpp b/src/DebugServers/GdbRsp/StopReason.hpp new file mode 100644 index 00000000..80d085a2 --- /dev/null +++ b/src/DebugServers/GdbRsp/StopReason.hpp @@ -0,0 +1,19 @@ +#pragma once + +#include "src/Helpers/BiMap.hpp" + +namespace Bloom::DebugServers::Gdb +{ + enum class StopReason: int + { + SOFTWARE_BREAKPOINT = 0, + HARDWARE_BREAKPOINT = 1, + }; + + static inline BiMap getStopReasonToNameMapping() { + return BiMap({ + {StopReason::HARDWARE_BREAKPOINT, "hwbreak"}, + {StopReason::SOFTWARE_BREAKPOINT, "swbreak"}, + }); + } +} diff --git a/src/DebugToolDrivers/DebugTool.hpp b/src/DebugToolDrivers/DebugTool.hpp new file mode 100644 index 00000000..e6b63cbd --- /dev/null +++ b/src/DebugToolDrivers/DebugTool.hpp @@ -0,0 +1,54 @@ +#pragma once + +#include "TargetInterfaces/Microchip/AVR/AVR8/Avr8Interface.hpp" + +namespace Bloom +{ + using DebugToolDrivers::TargetInterfaces::Microchip::Avr::Avr8::Avr8Interface; + + /** + * A debug tool can be any device that provides access to the connected target. Debug tools are usually connected + * to the host machine via USB. + * + * Each debug tool must implement this interface. Note that target specific driver code should not be placed here. + * Each target family will expect the debug tool to provide an interface for that particular group of targets. + * For an example, see the Avr8Interface class and the DebugTool::getAvr8Interface(). + */ + class DebugTool + { + private: + bool initialised = false; + + protected: + void setInitialised(bool initialised) { + this->initialised = initialised; + } + + public: + bool isInitialised() const { + return this->initialised; + } + + virtual void init() = 0; + + virtual void close() = 0; + + virtual std::string getName() = 0; + + virtual std::string getSerialNumber() = 0; + + /** + * All debug tools that support AVR8 targets must provide an implementation of the Avr8Interface + * class, via this method. + * + * For debug tools that do not support AVR8 targets, this method should return a nullptr. + * + * @return + */ + virtual Avr8Interface* getAvr8Interface() { + return nullptr; + }; + + virtual ~DebugTool() = default; + }; +} diff --git a/src/DebugToolDrivers/DebugTools.hpp b/src/DebugToolDrivers/DebugTools.hpp new file mode 100644 index 00000000..9ab06998 --- /dev/null +++ b/src/DebugToolDrivers/DebugTools.hpp @@ -0,0 +1,5 @@ +#pragma once + +#include "DebugTool.hpp" +#include "src/DebugToolDrivers/Microchip/AtmelICE/AtmelIce.hpp" +#include "src/DebugToolDrivers/Microchip/PowerDebugger/PowerDebugger.hpp" diff --git a/src/DebugToolDrivers/Microchip/AtmelICE/AtmelIce.cpp b/src/DebugToolDrivers/Microchip/AtmelICE/AtmelIce.cpp new file mode 100644 index 00000000..d39c4533 --- /dev/null +++ b/src/DebugToolDrivers/Microchip/AtmelICE/AtmelIce.cpp @@ -0,0 +1,87 @@ +#include + +#include "AtmelIce.hpp" +#include "src/Exceptions/Exception.hpp" + +using namespace Bloom::DebugToolDrivers; +using namespace Protocols::CmsisDap::Edbg::Avr; +using namespace Bloom::Exceptions; + +void AtmelIce::init() { + UsbDevice::init(); + + // TODO: Move away from hard-coding the CMSIS-DAP/EDBG interface number + auto& usbHidInterface = this->getEdbgInterface().getUsbHidInterface(); + usbHidInterface.setNumber(0); + usbHidInterface.setUSBDevice(this->getLibUsbDevice()); + usbHidInterface.setVendorId(this->getVendorId()); + usbHidInterface.setProductId(this->getProductId()); + + if (!usbHidInterface.isInitialised()) { + usbHidInterface.init(); + } + + /** + * The Atmel-ICE EDBG/CMSIS-DAP interface doesn't operate properly when sending commands too quickly. + * + * Because of this, we have to enforce a minimum time gap between commands. See comment + * in CmsisDapInterface class declaration for more info. + */ + this->getEdbgInterface().setMinimumCommandTimeGap(35); + + // We don't need to claim the CMSISDAP interface here as the HIDAPI will have already done so. + if (!this->sessionStarted) { + this->startSession(); + } + + this->edbgAvr8Interface = std::make_unique(this->edbgInterface); + this->setInitialised(true); +} + +void AtmelIce::close() { + if (this->sessionStarted) { + this->endSession(); + } + + this->getEdbgInterface().getUsbHidInterface().close(); + UsbDevice::close(); +} + +std::string AtmelIce::getSerialNumber() { + auto response = this->getEdbgInterface().sendAvrCommandFrameAndWaitForResponseFrame( + CommandFrames::Discovery::Query(CommandFrames::Discovery::QueryContext::SERIAL_NUMBER) + ); + + if (response.getResponseId() != CommandFrames::Discovery::ResponseId::OK) { + throw Exception("Failed to fetch serial number from device - invalid Discovery Protocol response ID."); + } + + auto data = response.getPayloadData(); + return std::string(data.begin(), data.end()); +} + +void AtmelIce::startSession() { + auto response = this->getEdbgInterface().sendAvrCommandFrameAndWaitForResponseFrame( + CommandFrames::HouseKeeping::StartSession() + ); + + if (response.getResponseId() == CommandFrames::HouseKeeping::ResponseId::FAILED) { + // Failed response returned! + throw Exception("Failed to start session with Atmel-ICE!"); + } + + this->sessionStarted = true; +} + +void AtmelIce::endSession() { + auto response = this->getEdbgInterface().sendAvrCommandFrameAndWaitForResponseFrame( + CommandFrames::HouseKeeping::EndSession() + ); + + if (response.getResponseId() == CommandFrames::HouseKeeping::ResponseId::FAILED) { + // Failed response returned! + throw Exception("Failed to end session with Atmel-ICE!"); + } + + this->sessionStarted = false; +} diff --git a/src/DebugToolDrivers/Microchip/AtmelICE/AtmelIce.hpp b/src/DebugToolDrivers/Microchip/AtmelICE/AtmelIce.hpp new file mode 100644 index 00000000..81aaee44 --- /dev/null +++ b/src/DebugToolDrivers/Microchip/AtmelICE/AtmelIce.hpp @@ -0,0 +1,104 @@ +#pragma once + +#include +#include +#include + +#include "src/DebugToolDrivers/DebugTool.hpp" +#include "src/DebugToolDrivers/USB/UsbDevice.hpp" +#include "src/DebugToolDrivers/USB/HID/HidInterface.hpp" +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/CmsisDapInterface.hpp" +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/EdbgInterface.hpp" +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/EdbgAvr8Interface.hpp" +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AvrCommandFrames.hpp" + +namespace Bloom::DebugToolDrivers +{ + using namespace Protocols::CmsisDap; + using Protocols::CmsisDap::Edbg::EdbgInterface; + using Protocols::CmsisDap::Edbg::Avr::EdbgAvr8Interface; + + /** + * The Atmel-ICE device is an EDBG (Embedded Debugger) device. It implements the CMSIS-DAP layer as well + * as an Atmel Data Gateway Interface (DGI). + * + * Communication: + * Using the Atmel-ICE device for AVR debugging/programming requires the AVR communication protocol, which + * is a sub-protocol of the CMSIS-DAP (AVR communication protocol commands are wrapped in CMSIS-DAP vendor + * commands). AVR communication protocol commands contain AVR frames, in which commands for numerous + * sub-protocols are enveloped. + * + * So to summarise, issuing an AVR command to the EDBG device, involves: + * Actual command data -> AVR sub-protocol -> AVR Frames -> CMSIS-DAP Vendor commands -> EDBG Device + * + * For more information on protocols and sub-protocols employed by Microchip EDBG devices, see + * the 'Embedded Debugger-Based Tools Protocols User's Guide' document by Microchip. + * @link http://ww1.microchip.com/downloads/en/DeviceDoc/50002630A.pdf + * + * USB Setup: + * Vendor ID: 0x03eb (1003) + * Product ID: 0x2141 (8513) + * + * The Atmel-ICE consists of two USB interfaces. One HID interface for CMSIS-DAP and one vendor specific + * interface for the DGI. We only work with the CMSIS-DAP interface, for now. + */ + class AtmelIce: public DebugTool, public Usb::UsbDevice + { + private: + /** + * The EDBG interface implements additional functionality via vendor specific CMSIS-DAP commands. + * In other words, all EDBG commands are just CMSIS-DAP vendor commands that allow the debug tool + * to support additional functionality, like AVR programming and debugging. + * + * Any non-EDBG CMSIS-DAP commands for the Atmel-ICE can be sent through the EdbgInterface (as the + * EdbgInterface extends the CmsisDapInterface). + */ + EdbgInterface edbgInterface = EdbgInterface(); + + /** + * The Atmel-ICE employs the EDBG AVR8 Generic protocol, for debugging AVR8 targets. This protocol is + * implemented in EdbgAvr8Interface. See the EdbgAvr8Interface class for more information. + */ + std::unique_ptr edbgAvr8Interface = nullptr; + + bool sessionStarted = false; + + public: + static const std::uint16_t USB_VENDOR_ID = 1003; + static const std::uint16_t USB_PRODUCT_ID = 8513; + + AtmelIce() : UsbDevice(AtmelIce::USB_VENDOR_ID, AtmelIce::USB_PRODUCT_ID) {} + + void init() override; + void close() override; + + EdbgInterface& getEdbgInterface() { + return this->edbgInterface; + } + + Avr8Interface* getAvr8Interface() override { + return this->edbgAvr8Interface.get(); + } + + std::string getName() override { + return "Atmel-ICE"; + }; + + /** + * Retrieves the device serial number via the Discovery Protocol. + * + * @return + */ + std::string getSerialNumber() override; + + /** + * Starts a session with the EDBG-based tool using the housekeeping protocol. + */ + void startSession(); + + /** + * Ends the active session with the debug tool. + */ + void endSession(); + }; +} diff --git a/src/DebugToolDrivers/Microchip/PowerDebugger/PowerDebugger.cpp b/src/DebugToolDrivers/Microchip/PowerDebugger/PowerDebugger.cpp new file mode 100644 index 00000000..2dbaf37b --- /dev/null +++ b/src/DebugToolDrivers/Microchip/PowerDebugger/PowerDebugger.cpp @@ -0,0 +1,87 @@ +#include + +#include "PowerDebugger.hpp" +#include "src/Exceptions/Exception.hpp" + +using namespace Bloom::DebugToolDrivers; +using namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr; +using namespace Bloom::Exceptions; + +void PowerDebugger::init() { + UsbDevice::init(); + + // TODO: Move away from hard-coding the CMSIS-DAP/EDBG interface number + auto& usbHidInterface = this->getEdbgInterface().getUsbHidInterface(); + usbHidInterface.setNumber(0); + usbHidInterface.setUSBDevice(this->getLibUsbDevice()); + usbHidInterface.setVendorId(this->getVendorId()); + usbHidInterface.setProductId(this->getProductId()); + + if (!usbHidInterface.isInitialised()) { + usbHidInterface.init(); + } + + /** + * The Power Debugger EDBG/CMSIS-DAP interface doesn't operate properly when sending commands too quickly. + * + * Because of this, we have to enforce a minimum time gap between commands. See comment in + * CmsisDapInterface class declaration for more info. + */ + this->getEdbgInterface().setMinimumCommandTimeGap(35); + + // We don't need to claim the CMSISDAP interface here as the HIDAPI will have already done so. + if (!this->sessionStarted) { + this->startSession(); + } + + this->edbgAvr8Interface = std::make_unique(this->edbgInterface); + this->setInitialised(true); +} + +void PowerDebugger::close() { + if (this->sessionStarted) { + this->endSession(); + } + + this->getEdbgInterface().getUsbHidInterface().close(); + UsbDevice::close(); +} + +std::string PowerDebugger::getSerialNumber() { + auto response = this->getEdbgInterface().sendAvrCommandFrameAndWaitForResponseFrame( + CommandFrames::Discovery::Query(Discovery::QueryContext::SERIAL_NUMBER) + ); + + if (response.getResponseId() != Discovery::ResponseId::OK) { + throw Exception("Failed to fetch serial number from device - invalid Discovery Protocol response ID."); + } + + auto data = response.getPayloadData(); + return std::string(data.begin(), data.end()); +} + +void PowerDebugger::startSession() { + auto response = this->getEdbgInterface().sendAvrCommandFrameAndWaitForResponseFrame( + CommandFrames::HouseKeeping::StartSession() + ); + + if (response.getResponseId() == HouseKeeping::ResponseId::FAILED) { + // Failed response returned! + throw Exception("Failed to start session with the Power Debugger - device returned failed response ID"); + } + + this->sessionStarted = true; +} + +void PowerDebugger::endSession() { + auto response = this->getEdbgInterface().sendAvrCommandFrameAndWaitForResponseFrame( + CommandFrames::HouseKeeping::EndSession() + ); + + if (response.getResponseId() == HouseKeeping::ResponseId::FAILED) { + // Failed response returned! + throw Exception("Failed to end session with the Power Debugger - device returned failed response ID"); + } + + this->sessionStarted = false; +} diff --git a/src/DebugToolDrivers/Microchip/PowerDebugger/PowerDebugger.hpp b/src/DebugToolDrivers/Microchip/PowerDebugger/PowerDebugger.hpp new file mode 100644 index 00000000..2e4e116a --- /dev/null +++ b/src/DebugToolDrivers/Microchip/PowerDebugger/PowerDebugger.hpp @@ -0,0 +1,96 @@ +#pragma once + +#include +#include +#include + +#include "src/DebugToolDrivers/DebugTool.hpp" +#include "src/DebugToolDrivers/USB/UsbDevice.hpp" +#include "src/DebugToolDrivers/USB/HID/HidInterface.hpp" +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/CmsisDapInterface.hpp" +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/EdbgInterface.hpp" +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/EdbgAvr8Interface.hpp" +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AvrCommandFrames.hpp" + +namespace Bloom::DebugToolDrivers +{ + using namespace Protocols::CmsisDap; + using namespace Protocols::CmsisDap::Edbg::Avr::CommandFrames; + using namespace Protocols::CmsisDap::Edbg::Avr::CommandFrames::Discovery; + using namespace Protocols::CmsisDap::Edbg::Avr::CommandFrames::HouseKeeping; + using Protocols::CmsisDap::Edbg::EdbgInterface; + using Protocols::CmsisDap::Edbg::Avr::EdbgAvr8Interface; + + /** + * The Power Debugger device is very similar to the Atmel-ICE. It implements the CMSIS-DAP layer as well + * as an Atmel Data Gateway Interface (DGI). + * + * Communication: + * Like the Atmel-ICE, using the Power Debugger device for AVR debugging/programming requires the AVR + * communication protocol, which is a sub-protocol of the CMSIS-DAP. + * + * For more information on the communication protocol, see the DebugToolDrivers::AtmelIce class. + * + * USB Setup: + * Vendor ID: 0x03eb (1003) + * Product ID: 0x2141 (8513) + */ + class PowerDebugger: public DebugTool, public Usb::UsbDevice + { + private: + /** + * The EDBG interface implements additional functionality via vendor specific CMSIS-DAP commands. + * In other words, all EDBG commands are just CMSIS-DAP vendor commands that allow the debug tool + * to support additional functionality, like AVR programming and debugging. + * + * Any non-EDBG CMSIS-DAP commands for the Power Debugger can be sent through the EDBGInterface (as the + * EdbgInterface extends the CmsisDapInterface). + */ + EdbgInterface edbgInterface = EdbgInterface(); + + /** + * The Power Debugger employs the EDBG AVR8Generic protocol for interfacing with AVR8 targets. + */ + std::unique_ptr edbgAvr8Interface; + + bool sessionStarted = false; + + public: + static const std::uint16_t USB_VENDOR_ID = 1003; + static const std::uint16_t USB_PRODUCT_ID = 8516; + + PowerDebugger() : UsbDevice(PowerDebugger::USB_VENDOR_ID, PowerDebugger::USB_PRODUCT_ID) {} + + void init() override; + void close() override; + + EdbgInterface& getEdbgInterface() { + return this->edbgInterface; + } + + Avr8Interface* getAvr8Interface() override { + return this->edbgAvr8Interface.get(); + } + + std::string getName() override { + return "Power Debugger"; + }; + + /** + * Retrieves the device serial number via the Discovery Protocol. + * + * @return + */ + std::string getSerialNumber() override; + + /** + * Starts a session with the EDBG-based tool using the housekeeping protocol. + */ + void startSession(); + + /** + * Ends the active session with the debug tool. + */ + void endSession(); + }; +} diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/CmsisDapInterface.cpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/CmsisDapInterface.cpp new file mode 100644 index 00000000..84ff5bb8 --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/CmsisDapInterface.cpp @@ -0,0 +1,51 @@ +#include +#include +#include + +#include "CmsisDapInterface.hpp" +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/Command.hpp" +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/Response.hpp" +#include "src/Exceptions/Exception.hpp" + +using namespace Bloom::DebugToolDrivers::Protocols::CmsisDap; +using namespace Bloom::Exceptions; + +void CmsisDapInterface::sendCommand(const Command& cmsisDapCommand) { + if (this->msSendCommandDelay > 0) { + using namespace std::chrono; + long now = duration_cast(high_resolution_clock::now().time_since_epoch()).count(); + long difference = (now - this->lastCommandSentTimeStamp); + + if (difference < this->msSendCommandDelay) { + std::this_thread::sleep_for(milliseconds(this->msSendCommandDelay - difference)); + } + + this->lastCommandSentTimeStamp = now; + } + + this->getUsbHidInterface().write(static_cast>(cmsisDapCommand)); +} + +std::unique_ptr CmsisDapInterface::getResponse() { + auto rawResponse = this->getUsbHidInterface().read(5000); + + if (rawResponse.size() == 0) { + throw Exception("Empty CMSIS-DAP response received"); + } + + auto response = std::make_unique(Response()); + response->init(rawResponse); + return response; +} + +std::unique_ptr CmsisDapInterface::sendCommandAndWaitForResponse(const Command& cmsisDapCommand) { + this->sendCommand(cmsisDapCommand); + auto response = this->getResponse(); + + if (response->getResponseId() != cmsisDapCommand.getCommandId()) { + // This response is not what we were expecting + throw Exception("Unexpected response to CMSIS-DAP command."); + } + + return response; +} diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/CmsisDapInterface.hpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/CmsisDapInterface.hpp new file mode 100644 index 00000000..a3b1d101 --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/CmsisDapInterface.hpp @@ -0,0 +1,91 @@ +#pragma once + +#include +#include + +#include "src/DebugToolDrivers/USB/HID/HidInterface.hpp" +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/Response.hpp" +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/Command.hpp" +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/AvrCommand.hpp" + +using namespace Bloom::DebugToolDrivers; + +namespace Bloom::DebugToolDrivers::Protocols::CmsisDap +{ + /** + * The CmsisDapInterface class implements the CMSIS-DAP protocol. + * + * See https://www.keil.com/support/man/docs/dapdebug/dapdebug_introduction.htm for more on the CMSIS-DAP protocol. + */ + class CmsisDapInterface + { + private: + /** + * All CMSIS-DAP devices employ the USB HID interface for communication. + * + * For many CMSIS-DAP devices, the USB HID interface parameters (interface number, endpoint config, etc) vary + * amongst devices, so we'll need to be able to preActivationConfigure the CMSISDAPInterface from a + * higher level. For an example, see the constructor of the AtmelIce device class. + */ + Usb::HidInterface usbHidInterface = Usb::HidInterface(); + + /** + * Some CMSIS-DAP debug tools fail to operate properly when we send commands too quickly. Even if we've + * received a response from every previous command. + * + * Because of this, we may need to enforce a minimum time gap between sending CMSIS commands. + * Setting msSendCommandDelay to any value above 0 will enforce an x millisecond gap between each command + * being sent, where x is the value of msSendCommandDelay. + */ + int msSendCommandDelay = 0; + long lastCommandSentTimeStamp; + + public: + explicit CmsisDapInterface() = default; + + Usb::HidInterface& getUsbHidInterface() { + return this->usbHidInterface; + } + + void setUsbHidInterface(Usb::HidInterface& usbHidInterface) { + this->usbHidInterface = usbHidInterface; + } + + size_t getUsbHidInputReportSize() { + return this->usbHidInterface.getInputReportSize(); + } + + void setMinimumCommandTimeGap(int millisecondTimeGap) { + this->msSendCommandDelay = millisecondTimeGap; + } + + /** + * Sends a CMSIS-DAP command to the device. + * + * @param cmsisDapCommand + */ + virtual void sendCommand(const Protocols::CmsisDap::Command& cmsisDapCommand); + + /** + * Listens for a CMSIS-DAP response from the device. + * + * @TODO: There is a hard-coded timeout in this method. Review. + * + * @return + * The parsed response. + */ + virtual std::unique_ptr getResponse(); + + /** + * Sends a CMSIS-DAP command and waits for a response. + * + * @param cmsisDapCommand + * + * @return + * The parsed response. + */ + virtual std::unique_ptr sendCommandAndWaitForResponse( + const Protocols::CmsisDap::Command& cmsisDapCommand + ); + }; +} diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/Command.cpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/Command.cpp new file mode 100644 index 00000000..962a161a --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/Command.cpp @@ -0,0 +1,12 @@ +#include "Command.hpp" + +using namespace Bloom::DebugToolDrivers::Protocols::CmsisDap; + +Command::operator std::vector () const +{ + auto rawCommand = std::vector(1, this->getCommandId()); + auto commandData = this->getData(); + rawCommand.insert(rawCommand.end(), commandData.begin(), commandData.end()); + + return rawCommand; +} diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/Command.hpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/Command.hpp new file mode 100644 index 00000000..7fd4b6b0 --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/Command.hpp @@ -0,0 +1,52 @@ +#pragma once + +#include +#include + +namespace Bloom::DebugToolDrivers::Protocols::CmsisDap +{ + class Command + { + private: + unsigned char commandId = 0x00; + std::vector data; + + public: + unsigned char getCommandId() const { + return this->commandId; + } + + void setCommandId(unsigned char commandId) { + this->commandId = commandId; + } + + virtual std::vector getData() const { + return this->data; + } + + void setData(const std::vector& data) { + this->data = data; + } + + [[nodiscard]] int getCommandSize() const { + // +1 for the command ID + return (int) (1 + this->getData().size()); + } + + std::uint16_t getDataSize() const { + return (std::uint16_t) this->getData().size(); + } + + /** + * Converts instance of a CMSIS Command to a vector of unsigned char (buffer), for sending + * to the debug tool. + * + * @return + */ + explicit virtual operator std::vector() const; + + virtual ~Command() = default; + + }; + +} diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/Response.cpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/Response.cpp new file mode 100644 index 00000000..73dd8617 --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/Response.cpp @@ -0,0 +1,24 @@ +#include + +#include "src/Exceptions/Exception.hpp" +#include "Response.hpp" + +using namespace Bloom::DebugToolDrivers::Protocols::CmsisDap; + +void Response::init(unsigned char* response, std::size_t length) +{ + if (length == 0) { + throw Exceptions::Exception("Failed to process CMSIS-DAP response - invalid response"); + } + + this->setResponseId(response[0]); + std::vector data = this->getData(); + + // TODO: use insert with iterators here + for (std::size_t i = 1; i < length; i++) { + data.push_back(response[i]); + } + + this->setData(data); +} + diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/Response.hpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/Response.hpp new file mode 100644 index 00000000..e74dcae6 --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/Response.hpp @@ -0,0 +1,41 @@ +#pragma once + +#include +#include + +namespace Bloom::DebugToolDrivers::Protocols::CmsisDap +{ + class Response + { + private: + unsigned char responseId = 0x00; + + std::vector data; + + protected: + void setResponseId(unsigned char commandId) { + this->responseId = commandId; + } + + void setData(const std::vector& data) { + this->data = data; + } + + public: + Response() = default; + virtual void init(unsigned char* response, std::size_t length); + virtual void init(std::vector response) { + this->init(response.data(), response.size()); + } + + unsigned char getResponseId() const { + return this->responseId; + } + + virtual const std::vector& getData() const { + return this->data; + } + + virtual ~Response() = default; + }; +} diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/Avr8Generic.hpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/Avr8Generic.hpp new file mode 100644 index 00000000..232f9c84 --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/Avr8Generic.hpp @@ -0,0 +1,146 @@ +#pragma once + +namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr +{ + struct Avr8EdbgParameter + { + unsigned char context = 0x00; + unsigned char id = 0x00; + + constexpr Avr8EdbgParameter() = default; + constexpr Avr8EdbgParameter(unsigned char context, unsigned char id) + : context(context), id(id) {}; + }; + + struct Avr8EdbgParameters + { + constexpr static Avr8EdbgParameter CONFIG_VARIANT {0x00, 0x00}; + constexpr static Avr8EdbgParameter CONFIG_FUNCTION {0x00, 0x01}; + constexpr static Avr8EdbgParameter PHYSICAL_INTERFACE {0x01, 0x00}; + constexpr static Avr8EdbgParameter DW_CLOCK_DIVISION_FACTOR {0x01, 0x10}; + constexpr static Avr8EdbgParameter XMEGA_PDI_CLOCK {0x01, 0x31}; + + // debugWire and JTAG parameters + constexpr static Avr8EdbgParameter DEVICE_BOOT_START_ADDR {0x02, 0x0A}; + constexpr static Avr8EdbgParameter DEVICE_FLASH_BASE {0x02, 0x06}; + constexpr static Avr8EdbgParameter DEVICE_SRAM_START {0x02, 0x0E}; + constexpr static Avr8EdbgParameter DEVICE_EEPROM_SIZE {0x02, 0x10}; + constexpr static Avr8EdbgParameter DEVICE_EEPROM_PAGE_SIZE {0x02, 0x12}; + constexpr static Avr8EdbgParameter DEVICE_FLASH_PAGE_SIZE {0x02, 0x00}; + constexpr static Avr8EdbgParameter DEVICE_FLASH_SIZE {0x02, 0x02}; + constexpr static Avr8EdbgParameter DEVICE_OCD_REVISION {0x02, 0x13}; + constexpr static Avr8EdbgParameter DEVICE_OCD_DATA_REGISTER {0x02, 0x18}; + constexpr static Avr8EdbgParameter DEVICE_SPMCR_REGISTER {0x02, 0x1D}; + constexpr static Avr8EdbgParameter DEVICE_OSCCAL_ADDR {0x02, 0x1E}; + constexpr static Avr8EdbgParameter DEVICE_EEARH_ADDR {0x02, 0x19}; + constexpr static Avr8EdbgParameter DEVICE_EEARL_ADDR {0x02, 0x1A}; + constexpr static Avr8EdbgParameter DEVICE_EECR_ADDR {0x02, 0x1B}; + constexpr static Avr8EdbgParameter DEVICE_EEDR_ADDR {0x02, 0x1C}; + + // PDI/XMega device parameters + constexpr static Avr8EdbgParameter DEVICE_XMEGA_APPL_BASE_ADDR {0x02, 0x00}; + constexpr static Avr8EdbgParameter DEVICE_XMEGA_BOOT_BASE_ADDR {0x02, 0x04}; + constexpr static Avr8EdbgParameter DEVICE_XMEGA_EEPROM_BASE_ADDR {0x02, 0x08}; + constexpr static Avr8EdbgParameter DEVICE_XMEGA_FUSE_BASE_ADDR {0x02, 0x0C}; + constexpr static Avr8EdbgParameter DEVICE_XMEGA_LOCKBIT_BASE_ADDR {0x02, 0x10}; + constexpr static Avr8EdbgParameter DEVICE_XMEGA_USER_SIGN_BASE_ADDR {0x02, 0x14}; + constexpr static Avr8EdbgParameter DEVICE_XMEGA_PROD_SIGN_BASE_ADDR {0x02, 0x18}; + constexpr static Avr8EdbgParameter DEVICE_XMEGA_DATA_BASE_ADDR {0x02, 0x1C}; + constexpr static Avr8EdbgParameter DEVICE_XMEGA_APPLICATION_BYTES {0x02, 0x20}; + constexpr static Avr8EdbgParameter DEVICE_XMEGA_BOOT_BYTES {0x02, 0x24}; + constexpr static Avr8EdbgParameter DEVICE_XMEGA_NVM_BASE {0x02, 0x2B}; + constexpr static Avr8EdbgParameter DEVICE_XMEGA_SIGNATURE_OFFSET {0x02, 0x2D}; + constexpr static Avr8EdbgParameter DEVICE_XMEGA_FLASH_PAGE_BYTES {0x02, 0x26}; + constexpr static Avr8EdbgParameter DEVICE_XMEGA_EEPROM_SIZE {0x02, 0x28}; + constexpr static Avr8EdbgParameter DEVICE_XMEGA_EEPROM_PAGE_SIZE {0x02, 0x2A}; + + constexpr static Avr8EdbgParameter RUN_TIMERS_WHILST_STOPPED {0x03, 0x00}; + }; + + enum class Avr8ConfigVariant: unsigned char + { + LOOPBACK = 0x00, + NONE = 0xff, + DEBUG_WIRE = 0x01, + MEGAJTAG = 0x02, + XMEGA = 0x03, + UPDI = 0x05, + }; + + enum class Avr8ConfigFunction: unsigned char + { + NONE = 0x00, + PROGRAMMING = 0x01, + DEBUGGING = 0x02, + }; + + enum class Avr8PhysicalInterface: unsigned char + { + NONE = 0x00, + JTAG = 0x04, + DEBUG_WIRE = 0x05, + PDI = 0x06, + PDI_1W = 0x08, + }; + + enum class Avr8MemoryType: unsigned char + { + /** + * The SRAM memory type can be used to read &write to internal memory on the target. + * + * It's available with all of the config variants in debugging mode. + */ + SRAM = 0x20, + + /** + * The EEPROM memory type can be used to read &write to EEPROM memory on the target. + * + * It's available with all of the config variants, in debugging mode. + */ + EEPROM = 0x22, + + /** + * The FLASH_PAGE memory type can be used to read &write full flash pages on the target. + * + * Only available with the JTAG and debugWire config variants. + * + * This memory type is not available with the JTAG config variant in debugging mode. Programming mode will need + * to be enabled before it can be used with JTAG targets. With the debugWire variant, this memory type *can* be + * used whilst in debugging mode. + */ + FLASH_PAGE = 0xB0, + + /** + * The APPL_FLASH memory type can be used to read/write flash memory on the target. + * + * Only available with the XMEGA (PDI) and UPDI (PDI_1W) config variants. + * + * When in debugging mode, only read access is permitted. Programming mode will need to be enabled before + * any attempts of writing data. + */ + APPL_FLASH = 0xC0, + + /** + * The SPM memory type can be used to read memory from the target whilst in debugging mode. + * + * Only available with JTAG and debugWire config variants. + */ + SPM = 0xA0, + + /** + * The REGISTER_FILE memory type can be used to read &write to general purpose registers. + * + * Only available in debugging mode and with XMEGA and UPDI config variants. The SRAM memory type can be used + * to access general purpose registers when other variants are in use. + */ + REGISTER_FILE = 0xB8, + }; + + enum class Avr8ResponseId: unsigned char + { + OK = 0x80, + DATA = 0x84, + FAILED = 0xA0, + }; + +} \ No newline at end of file diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/AvrCommand.cpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/AvrCommand.cpp new file mode 100644 index 00000000..e18cdeaa --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/AvrCommand.cpp @@ -0,0 +1,26 @@ +#include "AvrCommand.hpp" + +using namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr; + +std::vector AvrCommand::getData() const +{ + std::vector data; + auto commandPacket = this->getCommandPacket(); + std::size_t commandPacketSize = commandPacket.size(); + data.resize(3 + commandPacketSize); + // FragmentInfo byte + data[0] = static_cast((this->getFragmentNumber() << 4) | this->getFragmentCount()); + + // Size byte + data[1] = (unsigned char) (commandPacketSize >> 8); + data[2] = (unsigned char) (commandPacketSize & 0xFF); + + if (commandPacketSize > 0) { + for (std::size_t index = 0; index <= commandPacketSize - 1; index++) { + data[3 + index] = commandPacket[index]; + } + } + + return data; +} + diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/AvrCommand.hpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/AvrCommand.hpp new file mode 100644 index 00000000..a5bbc2d8 --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/AvrCommand.hpp @@ -0,0 +1,54 @@ +#pragma once + +#include + +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/Command.hpp" + +namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr +{ + class AvrCommand: public Command + { + private: + size_t fragmentNumber = 1; + size_t fragmentCount = 1; + + std::vector commandPacket; + + public: + AvrCommand() { + this->setCommandId(0x80); + } + + /** + * Constructs raw command data on the fly. + * + * @return + */ + std::vector getData() const override; + + size_t getFragmentNumber() const { + return this->fragmentNumber; + } + + void setFragmentNumber(size_t fragmentNumber) { + this->fragmentNumber = fragmentNumber; + } + + size_t getFragmentCount() const { + return this->fragmentCount; + } + + void setFragmentCount(size_t fragmentCount) { + this->fragmentCount = fragmentCount; + } + + const std::vector& getCommandPacket() const { + return this->commandPacket; + } + + void setCommandPacket(const std::vector& commandPacket) { + this->commandPacket = commandPacket; + } + }; + +} diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/AvrEvent.cpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/AvrEvent.cpp new file mode 100644 index 00000000..04536765 --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/AvrEvent.cpp @@ -0,0 +1,53 @@ +#include +#include + +#include "AvrEvent.hpp" +#include "src/Exceptions/Exception.hpp" + +using namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr; +using namespace Bloom::Exceptions; + +void AvrEvent::init(unsigned char* response, size_t length) +{ + Response::init(response, length); + + if (this->getResponseId() != 0x82) { + throw Exception("Failed to construct AvrEvent object - invalid response ID."); + } + + std::vector responseData = this->getData(); + + if (responseData.size() < 2) { + // All AVR_EVT responses should consist of at least two bytes (excluding the AVR_EVT ID) + throw Exception("Failed to construct AvrEvent object - AVR_EVT response " + "returned no additional data."); + } + + // Response size is two bytes, MSB + size_t responsePacketSize = static_cast((responseData[0] << 8) | responseData[1]); + + if (responseData.size() < 2) { + // All AVR_EVT responses should consist of at least two bytes (excluding the AVR_EVT ID) + throw Exception("Failed to construct AvrEvent object - AVR_EVT response " + "contained invalid event data size."); + } + + std::vector eventData; + + /* + * Ignore the SOF, protocol version &handler id and sequence ID (with all make up 5 bytes in total, 7 when + * you include the two size bytes) + */ + eventData.insert( + eventData.end(), + responseData.begin() + 7, + responseData.begin() + 7 + static_cast(responsePacketSize) + ); + + this->setEventData(eventData); + + if (eventData.size() >= 1) { + this->eventId = eventData[0]; + } +} + diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/AvrEvent.hpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/AvrEvent.hpp new file mode 100644 index 00000000..cebc832c --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/AvrEvent.hpp @@ -0,0 +1,65 @@ +#pragma once + +#include + +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/Response.hpp" +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/Edbg.hpp" + +namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr +{ + using Edbg::ProtocolHandlerId; + + enum class AvrEventId : unsigned char + { + AVR8_BREAK_EVENT = 0x40, + }; + + inline bool operator==(unsigned char rawId, AvrEventId id) { + return static_cast(id) == rawId; + } + + inline bool operator==(AvrEventId id, unsigned char rawId) { + return rawId == id; + } + + class AvrEvent: public Response + { + private: + unsigned char eventId; + + std::vector eventData; + + protected: + void setEventData(const std::vector& eventData) { + this->eventData = eventData; + } + + public: + AvrEvent() = default; + + /** + * Construct an AVRResponse object from a Response object. + * + * @param response + */ + void init(const Response& response) { + auto rawData = response.getData(); + rawData.insert(rawData.begin(), response.getResponseId()); + this->init(rawData.data(), rawData.size()); + } + + void init(unsigned char* response, size_t length) override; + + const std::vector& getEventData() const { + return this->eventData; + } + + size_t getEventDataSize() const { + return this->eventData.size(); + } + + AvrEventId getEventId() { + return static_cast(this->eventId); + } + }; +} diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/AvrEventCommand.hpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/AvrEventCommand.hpp new file mode 100644 index 00000000..54bbeb9a --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/AvrEventCommand.hpp @@ -0,0 +1,16 @@ +#pragma once + +#include + +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/Command.hpp" + +namespace Bloom::DebugToolDrivers::Protocols::CmsisDap +{ + class AvrEventCommand: public Command + { + public: + AvrEventCommand() { + this->setCommandId(0x82); + } + }; +} diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/AvrResponse.cpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/AvrResponse.cpp new file mode 100644 index 00000000..b3187fa6 --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/AvrResponse.cpp @@ -0,0 +1,44 @@ +#include + +#include "AvrResponse.hpp" +#include "src/Exceptions/Exception.hpp" + +using namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr; +using namespace Bloom::Exceptions; + +void AvrResponse::init(unsigned char* response, std::size_t length) +{ + Response::init(response, length); + + if (this->getResponseId() != 0x81) { + throw Exception("Failed to construct AvrResponse object - invalid response ID."); + } + + std::vector responseData = this->getData(); + + if (responseData.empty()) { + // All AVR responses should contain at least one byte (the fragment info byte) + throw Exception("Failed to construct AvrResponse object - AVR_RSP response " + "returned no additional data"); + } + + if (responseData[0] == 0x00) { + // This AVR Response contains no data (the device had no data to send), so we can stop here. + return; + } + + this->setFragmentCount(static_cast(responseData[0] & 0x0Fu)); + this->setFragmentNumber(static_cast(responseData[0] >> 4)); + + // Response size is two bytes, MSB + std::size_t responsePacketSize = static_cast((responseData[1] << 8u) + responseData[2]); + std::vector responsePacket; + responsePacket.resize(responsePacketSize); + + for (std::size_t i = 0; i < responsePacketSize; i++) { + responsePacket[i] = responseData[i + 3]; + } + + this->setResponsePacket(responsePacket); +} + diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/AvrResponse.hpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/AvrResponse.hpp new file mode 100644 index 00000000..083f5b00 --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/AvrResponse.hpp @@ -0,0 +1,59 @@ +#pragma once + +#include +#include + +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/Response.hpp" + +namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr +{ + class AvrResponse: public Response + { + private: + std::uint8_t fragmentNumber = 0; + std::uint8_t fragmentCount = 0; + + std::vector responsePacket; + + protected: + void setFragmentNumber(std::uint8_t fragmentNumber) { + this->fragmentNumber = fragmentNumber; + } + + void setFragmentCount(std::uint8_t fragmentCount) { + this->fragmentCount = fragmentCount; + } + + void setResponsePacket(const std::vector& responsePacket) { + this->responsePacket = responsePacket; + } + + public: + AvrResponse() = default; + + /** + * Construct an AVRResponse object from a Response object. + * + * @param response + */ + void init(const Response& response) { + auto rawData = response.getData(); + rawData.insert(rawData.begin(), response.getResponseId()); + this->init(rawData.data(), rawData.size()); + } + + void init(unsigned char* response, std::size_t length) override; + + std::uint8_t getFragmentNumber() const { + return this->fragmentNumber; + } + + std::uint8_t getFragmentCount() const { + return this->fragmentCount; + } + + const std::vector& getResponsePacket() const { + return this->responsePacket; + } + }; +} diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/AvrResponseCommand.hpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/AvrResponseCommand.hpp new file mode 100644 index 00000000..7b9725a5 --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/AvrResponseCommand.hpp @@ -0,0 +1,28 @@ +#pragma once +#include +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/Command.hpp" + +namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr +{ + /** + * All AVR commands result in an automatic response, but that is just a response to confirm + * receipt of the AVR Command. It is *not* a response to the AVR command. + * + * Responses to AVR commands are not automatically sent from the device, they must be requested from the device. + * + * An AvrResponseCommand is a CMSIS-DAP command, used to request a response for an AVR command. In response to an + * AvrResponseCommand, the device will send over an AVRResponse, which will contain the response to the AVR command. + * + * For more information on this, see the 'Embedded Debugger-Based Tools Protocols User's Guide' + * document, by Microchip. Link provided in the AtmelICE device class declaration. + * + * An AvrResponseCommand is very simple - it consists of a command ID and nothing more. + */ + class AvrResponseCommand: public Command + { + public: + AvrResponseCommand() { + this->setCommandId(0x81); + } + }; +} diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/ActivatePhysical.hpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/ActivatePhysical.hpp new file mode 100644 index 00000000..a2b31928 --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/ActivatePhysical.hpp @@ -0,0 +1,36 @@ +#pragma once + +#include "Avr8GenericCommandFrame.hpp" + +namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr::CommandFrames::Avr8Generic +{ + class ActivatePhysical: public Avr8GenericCommandFrame + { + private: + bool reset = false; + + public: + ActivatePhysical() = default; + ActivatePhysical(bool reset) : reset(reset) {}; + + void setReset(bool reset) { + this->reset = reset; + } + + std::vector getPayload() const override { + /* + * The activate physical command consists of 3 bytes: + * 1. Command ID (0x10) + * 2. Version (0x00) + * 3. Reset flag (to apply external reset) + */ + auto output = std::vector(3, 0x00); + output[0] = 0x10; + output[1] = 0x00; + output[2] = static_cast(this->reset); + + return output; + } + }; + +} diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/Attach.hpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/Attach.hpp new file mode 100644 index 00000000..0c5c8fb4 --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/Attach.hpp @@ -0,0 +1,36 @@ +#pragma once + +#include "Avr8GenericCommandFrame.hpp" + +namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr::CommandFrames::Avr8Generic +{ + class Attach: public Avr8GenericCommandFrame + { + private: + bool breakAfterAttach = false; + + public: + Attach() = default; + Attach(bool breakAfterAttach) : breakAfterAttach(breakAfterAttach) {}; + + void setBreadAfterAttach(bool breakAfterAttach) { + this->breakAfterAttach = breakAfterAttach; + } + + std::vector getPayload() const override { + /* + * The attach command consists of 3 bytes: + * 1. Command ID (0x13) + * 2. Version (0x00) + * 3. Break (stop) after attach flag + */ + auto output = std::vector(3, 0x00); + output[0] = 0x13; + output[1] = 0x00; + output[2] = static_cast(this->breakAfterAttach); + + return output; + } + }; + +} diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/Avr8GenericCommandFrame.hpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/Avr8GenericCommandFrame.hpp new file mode 100644 index 00000000..33e45295 --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/Avr8GenericCommandFrame.hpp @@ -0,0 +1,23 @@ +#pragma once + +#include "src/Exceptions/Exception.hpp" +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/Avr8Generic.hpp" +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AvrCommandFrame.hpp" +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/ResponseFrames/AVR8Generic/Avr8GenericResponseFrame.hpp" + +namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr::CommandFrames::Avr8Generic +{ + using namespace DebugToolDrivers::Protocols::CmsisDap; + using namespace DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr; + + class Avr8GenericCommandFrame: public AvrCommandFrame + { + public: + using ResponseFrameType = ResponseFrames::Avr8Generic::Avr8GenericResponseFrame; + + Avr8GenericCommandFrame() { + this->setProtocolHandlerId(ProtocolHandlerId::Avr8Generic); + } + }; + +} diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/ClearAllSoftwareBreakpoints.hpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/ClearAllSoftwareBreakpoints.hpp new file mode 100644 index 00000000..24c019fd --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/ClearAllSoftwareBreakpoints.hpp @@ -0,0 +1,28 @@ +#pragma once + +#include "Avr8GenericCommandFrame.hpp" + +namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr::CommandFrames::Avr8Generic +{ + class ClearAllSoftwareBreakpoints: public Avr8GenericCommandFrame + { + private: + void init() { + /* + * The clear all software breakpoints command consists of 2 bytes: + * 1. Command ID (0x45) + * 2. Version (0x00) + */ + auto payload = std::vector(2); + payload[0] = 0x45; + payload[1] = 0x00; + this->setPayload(payload); + } + + public: + ClearAllSoftwareBreakpoints() { + init(); + }; + }; + +} diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/ClearSoftwareBreakpoints.hpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/ClearSoftwareBreakpoints.hpp new file mode 100644 index 00000000..0db59ddd --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/ClearSoftwareBreakpoints.hpp @@ -0,0 +1,47 @@ +#pragma once + +#include + +#include "Avr8GenericCommandFrame.hpp" + +namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr::CommandFrames::Avr8Generic +{ + class ClearSoftwareBreakpoints: public Avr8GenericCommandFrame + { + private: + std::vector addresses; + + public: + ClearSoftwareBreakpoints() = default; + + ClearSoftwareBreakpoints(const std::vector& addresses) : addresses(addresses) {} + + void setAddresses(const std::vector& addresses) { + this->addresses = addresses; + } + + virtual std::vector getPayload() const override { + /* + * The clear software breakpoints command consists of 2 bytes + 4*n bytes, where n is the number + * of breakpoints to clear: + * + * 1. Command ID (0x44) + * 2. Version (0x00) + * ... addresses + */ + auto output = std::vector(2, 0x00); + output[0] = 0x44; + output[1] = 0x00; + + for (const auto& address : this->addresses) { + output.push_back(static_cast(address)); + output.push_back(static_cast(address >> 8)); + output.push_back(static_cast(address >> 16)); + output.push_back(static_cast(address >> 24)); + } + + return output; + } + }; + +} diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/DeactivatePhysical.hpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/DeactivatePhysical.hpp new file mode 100644 index 00000000..e34e8802 --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/DeactivatePhysical.hpp @@ -0,0 +1,28 @@ +#pragma once + +#include "Avr8GenericCommandFrame.hpp" + +namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr::CommandFrames::Avr8Generic +{ + class DeactivatePhysical: public Avr8GenericCommandFrame + { + private: + void init() { + /* + * The deactivate physical command consists of 2 bytes: + * 1. Command ID (0x11) + * 2. Version (0x00) + */ + auto payload = std::vector(2); + payload[0] = 0x11; + payload[1] = 0x00; + this->setPayload(payload); + } + + public: + DeactivatePhysical() { + init(); + }; + }; + +} diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/Detach.hpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/Detach.hpp new file mode 100644 index 00000000..2f8ac46e --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/Detach.hpp @@ -0,0 +1,28 @@ +#pragma once + +#include "Avr8GenericCommandFrame.hpp" + +namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr::CommandFrames::Avr8Generic +{ + class Detach: public Avr8GenericCommandFrame + { + private: + void init() { + /* + * The detach command consists of 2 bytes: + * 1. Command ID (0x11) + * 2. Version (0x00) + */ + auto payload = std::vector(2); + payload[0] = 0x11; + payload[1] = 0x00; + this->setPayload(payload); + } + + public: + Detach() { + init(); + }; + }; + +} diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/DisableDebugWire.hpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/DisableDebugWire.hpp new file mode 100644 index 00000000..a60cce95 --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/DisableDebugWire.hpp @@ -0,0 +1,28 @@ +#pragma once + +#include "Avr8GenericCommandFrame.hpp" + +namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr::CommandFrames::Avr8Generic +{ + class DisableDebugWire: public Avr8GenericCommandFrame + { + private: + void init() { + /* + * The disable debugWire command consists of 2 bytes: + * 1. Command ID (0x17) + * 2. Version (0x00) + */ + auto payload = std::vector(2); + payload[0] = 0x17; + payload[1] = 0x00; + this->setPayload(payload); + } + + public: + DisableDebugWire() { + init(); + }; + }; + +} diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/GetDeviceId.hpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/GetDeviceId.hpp new file mode 100644 index 00000000..848ed029 --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/GetDeviceId.hpp @@ -0,0 +1,31 @@ +#pragma once + +#include "Avr8GenericCommandFrame.hpp" +#include "../../ResponseFrames/AVR8Generic/GetDeviceId.hpp" + +namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr::CommandFrames::Avr8Generic +{ + class GetDeviceId: public Avr8GenericCommandFrame + { + private: + void init() { + /* + * The get device ID command consists of 2 bytes: + * 1. Command ID (0x12) + * 2. Version (0x00) + */ + auto payload = std::vector(2); + payload[0] = 0x12; + payload[1] = 0x00; + this->setPayload(payload); + } + + public: + using ResponseFrameType = ResponseFrames::Avr8Generic::GetDeviceId; + + GetDeviceId() { + init(); + }; + }; + +} diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/GetParameter.hpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/GetParameter.hpp new file mode 100644 index 00000000..b117a444 --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/GetParameter.hpp @@ -0,0 +1,54 @@ +#pragma once + +#include + +#include "Avr8GenericCommandFrame.hpp" + +namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr::CommandFrames::Avr8Generic +{ + class GetParameter: public Avr8GenericCommandFrame + { + private: + Avr8EdbgParameter parameter; + std::uint8_t size; + + public: + GetParameter() = default; + + GetParameter(const Avr8EdbgParameter& parameter) { + this->setParameter(parameter); + } + + GetParameter(const Avr8EdbgParameter& parameter, std::uint8_t size) : GetParameter(parameter) { + this->setSize(size); + } + + void setParameter(const Avr8EdbgParameter& parameter) { + this->parameter = parameter; + } + + void setSize(std::uint8_t size) { + this->size = size; + } + + virtual std::vector getPayload() const override { + /* + * The get param command consists of 5 bytes: + * 1. Command ID (0x02) + * 2. Version (0x00) + * 3. Param context (Avr8Parameter::context) + * 4. Param ID (Avr8Parameter::id) + * 5. Param value length (this->size) + */ + auto output = std::vector(5, 0x00); + output[0] = 0x02; + output[1] = 0x00; + output[2] = static_cast(this->parameter.context); + output[3] = static_cast(this->parameter.id); + output[4] = static_cast(this->size); + + return output; + } + }; + +} diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/GetProgramCounter.hpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/GetProgramCounter.hpp new file mode 100644 index 00000000..b1685baa --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/GetProgramCounter.hpp @@ -0,0 +1,31 @@ +#pragma once + +#include "Avr8GenericCommandFrame.hpp" +#include "../../ResponseFrames/AVR8Generic/GetProgramCounter.hpp" + +namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr::CommandFrames::Avr8Generic +{ + class GetProgramCounter: public Avr8GenericCommandFrame + { + private: + void init() { + /* + * The PC Read command consists of 2 bytes: + * 1. Command ID (0x35) + * 2. Version (0x00) + */ + auto payload = std::vector(2); + payload[0] = 0x35; + payload[1] = 0x00; + this->setPayload(payload); + } + + public: + using ResponseFrameType = ResponseFrames::Avr8Generic::GetProgramCounter; + + GetProgramCounter() { + init(); + }; + }; + +} diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/ReadMemory.hpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/ReadMemory.hpp new file mode 100644 index 00000000..fbf96079 --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/ReadMemory.hpp @@ -0,0 +1,62 @@ +#pragma once + +#include + +#include "Avr8GenericCommandFrame.hpp" +#include "../../ResponseFrames/AVR8Generic/ReadMemory.hpp" + +namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr::CommandFrames::Avr8Generic +{ + using namespace Exceptions; + + class ReadMemory: public Avr8GenericCommandFrame + { + private: + Avr8MemoryType type; + std::uint32_t address = 0; + std::uint32_t bytes = 0; + + public: + using ResponseFrameType = ResponseFrames::Avr8Generic::ReadMemory; + + ReadMemory() = default; + + void setType(const Avr8MemoryType& type) { + this->type = type; + } + + void setAddress(std::uint32_t address) { + this->address = address; + } + + void setBytes(std::uint32_t bytes) { + this->bytes = bytes; + } + + virtual std::vector getPayload() const override { + /* + * The read memory command consists of 11 bytes: + * 1. Command ID (0x21) + * 2. Version (0x00) + * 3. Memory type (Avr8MemoryType) + * 4. Start address (4 bytes) + * 5. Number of bytes to read (4 bytes) + */ + auto output = std::vector(11, 0x00); + output[0] = 0x21; + output[1] = 0x00; + output[2] = static_cast(this->type); + output[3] = static_cast(this->address); + output[4] = static_cast(this->address >> 8); + output[5] = static_cast(this->address >> 16); + output[6] = static_cast(this->address >> 24); + output[7] = static_cast(this->bytes); + output[8] = static_cast(this->bytes >> 8); + output[9] = static_cast(this->bytes >> 16); + output[10] = static_cast(this->bytes >> 24); + + return output; + } + }; + +} diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/Reset.hpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/Reset.hpp new file mode 100644 index 00000000..2a0091a3 --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/Reset.hpp @@ -0,0 +1,36 @@ +#pragma once + +#include "Avr8GenericCommandFrame.hpp" + +namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr::CommandFrames::Avr8Generic +{ + class Reset: public Avr8GenericCommandFrame + { + private: + bool stopAtMainAddress = false; + + public: + Reset() = default; + Reset(bool stopAtMainAddress) : stopAtMainAddress(stopAtMainAddress) {}; + + void setStopAtMainAddress(bool stopAtMainAddress) { + this->stopAtMainAddress = stopAtMainAddress; + } + + virtual std::vector getPayload() const override { + /* + * The reset command consists of 3 bytes: + * 1. Command ID (0x30) + * 2. Version (0x00) + * 3. "Level" (0x01 to stop at boot reset vector or 0x02 to stop at main address) + */ + auto output = std::vector(3, 0x00); + output[0] = 0x30; + output[1] = 0x00; + output[2] = this->stopAtMainAddress ? 0x02 : 0x01; + + return output; + } + }; + +} diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/Run.hpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/Run.hpp new file mode 100644 index 00000000..684103d7 --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/Run.hpp @@ -0,0 +1,28 @@ +#pragma once + +#include "Avr8GenericCommandFrame.hpp" + +namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr::CommandFrames::Avr8Generic +{ + class Run: public Avr8GenericCommandFrame + { + private: + void init() { + /* + * The run command consists of 2 bytes: + * 1. Command ID (0x32) + * 2. Version (0x00) + */ + auto payload = std::vector(2); + payload[0] = 0x32; + payload[1] = 0x00; + this->setPayload(payload); + } + + public: + Run() { + init(); + }; + }; + +} diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/RunTo.hpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/RunTo.hpp new file mode 100644 index 00000000..97a50b48 --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/RunTo.hpp @@ -0,0 +1,45 @@ +#pragma once + +#include + +#include "Avr8GenericCommandFrame.hpp" + +namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr::CommandFrames::Avr8Generic +{ + class RunTo: public Avr8GenericCommandFrame + { + private: + std::uint32_t address; + + public: + RunTo() = default; + + RunTo(const std::uint32_t& address) : address(address) {} + + void setAddress(const std::uint32_t& address) { + this->address = address; + } + + virtual std::vector getPayload() const override { + /* + * The run-to command consists of 6 bytes: + * + * 1. Command ID (0x33) + * 2. Version (0x00) + * 3. Address to run to (4 bytes) + */ + auto output = std::vector(6, 0x00); + output[0] = 0x33; + output[1] = 0x00; + + // The address to run to needs to be the 16-bit word address, not the byte address. + auto wordAddress = this->address / 2; + output[2] = (static_cast(wordAddress)); + output[3] = (static_cast(wordAddress >> 8)); + output[4] = (static_cast(wordAddress >> 16)); + output[5] = (static_cast(wordAddress >> 24)); + + return output; + } + }; +} diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/SetParameter.hpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/SetParameter.hpp new file mode 100644 index 00000000..d45ba18d --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/SetParameter.hpp @@ -0,0 +1,64 @@ +#pragma once + +#include "Avr8GenericCommandFrame.hpp" + +namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr::CommandFrames::Avr8Generic +{ + using namespace Exceptions; + + class SetParameter: public Avr8GenericCommandFrame + { + private: + Avr8EdbgParameter parameter; + std::vector value; + + public: + SetParameter() = default; + + SetParameter(const Avr8EdbgParameter& parameter) { + this->setParameter(parameter); + } + + SetParameter(const Avr8EdbgParameter& parameter, const std::vector& value) : SetParameter(parameter) { + this->setValue(value); + } + + SetParameter(const Avr8EdbgParameter& parameter, unsigned char value) : SetParameter(parameter) { + this->setValue(value); + } + + void setParameter(const Avr8EdbgParameter& parameter) { + this->parameter = parameter; + } + + void setValue(const std::vector& value) { + this->value = value; + } + + void setValue(unsigned char value) { + this->value.resize(1, value); + } + + virtual std::vector getPayload() const override { + /* + * The set param command consists of this->value.size() + 5 bytes. The first five bytes consist of: + * 1. Command ID (0x01) + * 2. Version (0x00) + * 3. Param context (Avr8Parameter::context) + * 4. Param ID (Avr8Parameter::id) + * 5. Param value length (this->value.size()) - this is only one byte in size, so its value should + * never exceed 255. + */ + auto output = std::vector(this->value.size() + 5, 0x00); + output[0] = 0x01; + output[1] = 0x00; + output[2] = static_cast(this->parameter.context); + output[3] = static_cast(this->parameter.id); + output[4] = static_cast(this->value.size()); + output.insert(output.begin() + 5, this->value.begin(), this->value.end()); + + return output; + } + }; + +} diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/SetProgramCounter.hpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/SetProgramCounter.hpp new file mode 100644 index 00000000..a044423d --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/SetProgramCounter.hpp @@ -0,0 +1,37 @@ +#pragma once + +#include + +#include "Avr8GenericCommandFrame.hpp" + +namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr::CommandFrames::Avr8Generic +{ + using namespace Exceptions; + + class SetProgramCounter: public Avr8GenericCommandFrame + { + private: + std::uint32_t programCounter = 0; + + public: + SetProgramCounter(std::uint32_t programCounter) : programCounter(programCounter) {} + + virtual std::vector getPayload() const override { + /* + * The PC write command consists of 6 bytes: + * 1. Command ID (0x01) + * 2. Version (0x00) + * 3. PC (4 bytes, LSB) + */ + auto output = std::vector(6, 0x00); + output[0] = 0x36; + output[1] = 0x00; + output[2] = static_cast(this->programCounter); + output[3] = static_cast(this->programCounter >> 8); + output[4] = static_cast(this->programCounter >> 16); + output[5] = static_cast(this->programCounter >> 24); + + return output; + } + }; +} diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/SetSoftwareBreakpoints.hpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/SetSoftwareBreakpoints.hpp new file mode 100644 index 00000000..f906ac7f --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/SetSoftwareBreakpoints.hpp @@ -0,0 +1,47 @@ +#pragma once + +#include + +#include "Avr8GenericCommandFrame.hpp" + +namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr::CommandFrames::Avr8Generic +{ + class SetSoftwareBreakpoints: public Avr8GenericCommandFrame + { + private: + std::vector addresses; + + public: + SetSoftwareBreakpoints() = default; + + SetSoftwareBreakpoints(const std::vector& addresses) : addresses(addresses) {} + + void setAddresses(const std::vector& addresses) { + this->addresses = addresses; + } + + virtual std::vector getPayload() const override { + /* + * The set software breakpoint command consists of 2 bytes + 4*n bytes, where n is the number + * of breakpoints to set: + * + * 1. Command ID (0x43) + * 2. Version (0x00) + * ... addresses + */ + auto output = std::vector(2, 0x00); + output[0] = 0x43; + output[1] = 0x00; + + for (const auto& address : this->addresses) { + output.push_back(static_cast(address)); + output.push_back(static_cast(address >> 8)); + output.push_back(static_cast(address >> 16)); + output.push_back(static_cast(address >> 24)); + } + + return output; + } + }; + +} diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/SetXmegaSoftwareBreakpoint.hpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/SetXmegaSoftwareBreakpoint.hpp new file mode 100644 index 00000000..4809cbdf --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/SetXmegaSoftwareBreakpoint.hpp @@ -0,0 +1,45 @@ +#pragma once + +#include + +#include "Avr8GenericCommandFrame.hpp" + +namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr::CommandFrames::Avr8Generic +{ + class SetXmegaSoftwareBreakpoint: public Avr8GenericCommandFrame + { + private: + std::uint32_t address; + + public: + SetXmegaSoftwareBreakpoint() = default; + + SetXmegaSoftwareBreakpoint(std::uint32_t address) : address(address) {} + + void setAddress(std::uint32_t address) { + this->address = address; + } + + virtual std::vector getPayload() const override { + /* + * The set software breakpoint command consists of 6 bytes bytes + * + * 1. Command ID (0x42) + * 2. Version (0x00) + * 3. Address (4 bytes) + */ + auto output = std::vector(15, 0x00); + output[0] = 0x42; + output[1] = 0x00; + output[2] = static_cast(address); + output[3] = static_cast(address >> 8); + output[4] = static_cast(address >> 16); + output[5] = static_cast(address >> 24); + output[13] = 0x01; // One breakpoint + output[14] = 0x00; + + return output; + } + }; + +} diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/Step.hpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/Step.hpp new file mode 100644 index 00000000..e2652c85 --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/Step.hpp @@ -0,0 +1,30 @@ +#pragma once + +#include "Avr8GenericCommandFrame.hpp" + +namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr::CommandFrames::Avr8Generic +{ + class Step: public Avr8GenericCommandFrame + { + public: + Step() = default; + + virtual std::vector getPayload() const override { + /* + * The step command consists of 4 bytes: + * 1. Command ID (0x34) + * 2. Version (0x00) + * 3. Level (0x01 for instruction level step, 0x02 for statement level step) + * 4. Mode (0x00 for step over, 0x01 for step into, 0x02 for step out) + */ + auto output = std::vector(4, 0x00); + output[0] = 0x34; + output[1] = 0x00; + output[2] = 0x01; + output[3] = 0x01; + + return output; + } + }; + +} diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/Stop.hpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/Stop.hpp new file mode 100644 index 00000000..80c0b0f8 --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/Stop.hpp @@ -0,0 +1,36 @@ +#pragma once + +#include "Avr8GenericCommandFrame.hpp" + +namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr::CommandFrames::Avr8Generic +{ + class Stop: public Avr8GenericCommandFrame + { + private: + bool stopImmediately = true; + + public: + Stop() = default; + Stop(bool stopImmediately) : stopImmediately(stopImmediately) {}; + + void setStopImmediately(bool stopImmediately) { + this->stopImmediately = stopImmediately; + } + + virtual std::vector getPayload() const override { + /* + * The stop command consists of 3 bytes: + * 1. Command ID (0x31) + * 2. Version (0x00) + * 3. Stop immediately (0x01 to stop immediately or 0x02 to stop at the next symbol) + */ + auto output = std::vector(3, 0x00); + output[0] = 0x31; + output[1] = 0x00; + output[2] = this->stopImmediately ? 0x01 : 0x02; + + return output; + } + }; + +} diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/WriteMemory.hpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/WriteMemory.hpp new file mode 100644 index 00000000..a0b1a156 --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/WriteMemory.hpp @@ -0,0 +1,70 @@ +#pragma once + +#include + +#include "Avr8GenericCommandFrame.hpp" +#include "src/Targets/TargetMemory.hpp" + +namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr::CommandFrames::Avr8Generic +{ + using namespace Exceptions; + using Bloom::Targets::TargetMemoryBuffer; + + class WriteMemory: public Avr8GenericCommandFrame + { + private: + Avr8MemoryType type; + std::uint32_t address = 0; + TargetMemoryBuffer buffer; + + public: + WriteMemory() = default; + + void setType(const Avr8MemoryType& type) { + this->type = type; + } + + void setAddress(std::uint32_t address) { + this->address = address; + } + + void setBuffer(const TargetMemoryBuffer& buffer) { + this->buffer = buffer; + } + + virtual std::vector getPayload() const override { + /* + * The write memory command consists of 12 bytes + the buffer size: + * 1. Command ID (0x23) + * 2. Version (0x00) + * 3. Memory type (Avr8MemoryType) + * 4. Start address (4 bytes) + * 5. Number of bytes to write (4 bytes) + * 6. Asynchronous flag (0x00 for "write first, then reply" and 0x01 for "reply first, then write") + * 7. Buffer + */ + auto output = std::vector(12, 0x00); + output[0] = 0x23; + output[1] = 0x00; + output[2] = static_cast(this->type); + output[3] = static_cast(this->address); + output[4] = static_cast(this->address >> 8); + output[5] = static_cast(this->address >> 16); + output[6] = static_cast(this->address >> 24); + + auto bytesToWrite = static_cast(this->buffer.size()); + output[7] = static_cast(bytesToWrite); + output[8] = static_cast(bytesToWrite >> 8); + output[9] = static_cast(bytesToWrite >> 16); + output[10] = static_cast(bytesToWrite >> 24); + + // We always set the async flag to 0x00 ("write first, then reply") + output[11] = 0x00; + + output.insert(output.end(), this->buffer.begin(), this->buffer.end()); + + return output; + } + }; + +} diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AvrCommandFrame.cpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AvrCommandFrame.cpp new file mode 100644 index 00000000..0206ea9d --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AvrCommandFrame.cpp @@ -0,0 +1,61 @@ +#include + +#include "AvrCommandFrame.hpp" + +using namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr; + +std::vector AvrCommandFrame::generateAvrCommands(std::size_t maximumCommandPacketSize) const { + auto rawCommandFrame = static_cast>(*this); + std::size_t commandFrameSize = rawCommandFrame.size(); + std::size_t commandsRequired = static_cast(ceil(static_cast(commandFrameSize) / static_cast(maximumCommandPacketSize))); + + std::vector avrCommands; + std::size_t copiedPacketSize = 0; + for (std::size_t i = 0; i < commandsRequired; i++) { + AvrCommand avrCommand; + avrCommand.setFragmentCount(commandsRequired); + avrCommand.setFragmentNumber(i + 1); + auto commandPacket = avrCommand.getCommandPacket(); + + // If we're on the last packet, the packet size will be what ever is left of the AvrCommandFrame + std::size_t commandPacketSize = ((i + 1) != commandsRequired) ? maximumCommandPacketSize + : (commandFrameSize - (maximumCommandPacketSize * i)); + + commandPacket.insert( + commandPacket.end(), + rawCommandFrame.begin() + static_cast(copiedPacketSize), + rawCommandFrame.begin() + static_cast(copiedPacketSize + commandPacketSize) + ); + + avrCommand.setCommandPacket(commandPacket); + avrCommands.push_back(avrCommand); + copiedPacketSize += commandPacketSize; + } + + return avrCommands; +} + +AvrCommandFrame::operator std::vector () const { + auto data = this->getPayload(); + auto dataSize = data.size(); + + auto rawCommand = std::vector(5); + + rawCommand[0] = this->SOF; + rawCommand[1] = this->getProtocolVersion(); + + rawCommand[2] = static_cast(this->getSequenceId()); + rawCommand[3] = static_cast(this->getSequenceId() >> 8); + + rawCommand[4] = static_cast(this->getProtocolHandlerId()); + + if (dataSize > 0) { + rawCommand.insert( + rawCommand.end(), + data.begin(), + data.end() + ); + } + + return rawCommand; +} diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AvrCommandFrame.hpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AvrCommandFrame.hpp new file mode 100644 index 00000000..91e57d83 --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AvrCommandFrame.hpp @@ -0,0 +1,110 @@ +#pragma once + +#include +#include +#include +#include + +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/Command.hpp" +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/Edbg.hpp" +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/AvrCommand.hpp" +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/ResponseFrames/AvrResponseFrame.hpp" + +namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr +{ + using namespace Edbg; + using namespace DebugToolDrivers::Protocols::CmsisDap; + + class AvrCommandFrame + { + private: + unsigned char SOF = 0x0E; + + unsigned char protocolVersion = 0x00; + + /** + * Incrementing from 0x00 + */ + std::uint16_t sequenceId = 0; + inline static std::uint16_t lastSequenceId = 0; + + /** + * Destination sub-protocol handler ID + */ + ProtocolHandlerId protocolHandlerID; + + std::vector payload; + + public: + using ResponseFrameType = AvrResponseFrame; + + AvrCommandFrame() { + if (this->lastSequenceId < std::numeric_limitslastSequenceId)>::max()) { + this->sequenceId = ++(this->lastSequenceId); + + } else { + this->sequenceId = 0; + this->lastSequenceId = 0; + } + }; + + unsigned char getProtocolVersion() const { + return this->protocolVersion; + } + + void setProtocolVersion(unsigned char protocolVersion) { + this->protocolVersion = protocolVersion; + } + + std::uint16_t getSequenceId() const { + return this->sequenceId; + } + + ProtocolHandlerId getProtocolHandlerId() const { + return this->protocolHandlerID; + } + + void setProtocolHandlerId(ProtocolHandlerId protocolHandlerId) { + this->protocolHandlerID = protocolHandlerId; + } + + void setProtocolHandlerId(unsigned char protocolHandlerId) { + this->protocolHandlerID = static_cast(protocolHandlerId); + } + + virtual std::vector getPayload() const { + return this->payload; + } + + void setPayload(const std::vector& payload) { + this->payload = payload; + } + + /** + * AvrCommandFrames are sent to the device via AVRCommands (CMSIS-DAP vendor commands). + * + * If the size of an AvrCommandFrame exceeds the maximum packet size of an AVRCommand, it will need to + * be split into multiple AVRCommands before being sent to the device. + * + * This methods generates AVR commands from an AvrCommandFrame. The number of AVRCommands generated depends + * on the size of the AvrCommandFrame and the passed maximumCommandPacketSize. + * + * @param maximumCommandPacketSize + * The maximum size of an AVRCommand command packet. This is usually the REPORT_SIZE of the HID + * endpoint, minus a few bytes to account for other AVRCommand fields. The maximumCommandPacketSize is used to + * determine the number of AVRCommands to be generated. + * + * @return + * A vector of sequenced AVRCommands, each containing a segment of the AvrCommandFrame. + */ + std::vector generateAvrCommands(std::size_t maximumCommandPacketSize) const; + + /** + * Converts instance of a CMSIS Command to an unsigned char, for sending to the Atmel ICE device. + * + * @return + */ + explicit virtual operator std::vector () const; + }; + +} diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AvrCommandFrames.hpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AvrCommandFrames.hpp new file mode 100644 index 00000000..7043d3ca --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AvrCommandFrames.hpp @@ -0,0 +1,12 @@ +#pragma once + +#include "AvrCommandFrame.hpp" + +#include "Discovery/DiscoveryCommandFrame.hpp" +#include "Discovery/Query.hpp" + +#include "HouseKeeping/HouseKeepingCommandFrame.hpp" +#include "HouseKeeping/StartSession.hpp" +#include "HouseKeeping/EndSession.hpp" + +#include "AVR8Generic/Avr8GenericCommandFrame.hpp" diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/Discovery/DiscoveryCommandFrame.hpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/Discovery/DiscoveryCommandFrame.hpp new file mode 100644 index 00000000..ae7270bc --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/Discovery/DiscoveryCommandFrame.hpp @@ -0,0 +1,47 @@ +#pragma once + +#include +#include "../AvrCommandFrame.hpp" + +namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr::CommandFrames::Discovery +{ + using namespace DebugToolDrivers::Protocols::CmsisDap; + /** + * Discovery commands can only return two responses; A LIST response and a failure. + */ + enum class ResponseId : unsigned char + { + /* + * According to the protocol docs, response ID 0x81 is for a LIST response, but this doesn't seem to be + * well defined. So just going to use a generic name. + */ + OK = 0x81, + FAILED = 0xA0, + }; + + inline bool operator==(unsigned char rawId, ResponseId id) { + return static_cast(id) == rawId; + } + + inline bool operator==(ResponseId id, unsigned char rawId) { + return static_cast(id) == rawId; + } + + inline bool operator!=(unsigned char rawId, ResponseId id) { + return static_cast(id) != rawId; + } + + inline bool operator!=(ResponseId id, unsigned char rawId) { + return static_cast(id) != rawId; + } + + class DiscoveryCommandFrame: public AvrCommandFrame + { + public: + using ResponseFrameType = ResponseFrames::DiscoveryResponseFrame; + + DiscoveryCommandFrame() { + this->setProtocolHandlerId(ProtocolHandlerId::Discovery); + } + }; +} diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/Discovery/Query.hpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/Discovery/Query.hpp new file mode 100644 index 00000000..b58e30d5 --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/Discovery/Query.hpp @@ -0,0 +1,49 @@ +#pragma once + +#include "DiscoveryCommandFrame.hpp" + +namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr::CommandFrames::Discovery +{ + /** + * The query context is the type of query to execute. + */ + enum class QueryContext : unsigned char + { + COMMAND_HANDLERS = 0x00, + TOOL_NAME = 0x80, + SERIAL_NUMBER = 0x81, + MANUFACTURE_DATE = 0x82, + }; + + /** + * The Discovery protocol handler only supports one command; the Query command. This command is used to + * query information from the device, such as device capabilities, manufacture date, serial number, etc. + */ + class Query: public DiscoveryCommandFrame + { + private: + QueryContext context; + + public: + Query() : DiscoveryCommandFrame() {} + + Query(QueryContext context) : DiscoveryCommandFrame() { + this->setContext(context); + } + + void setContext(QueryContext context) { + this->context = context; + } + + virtual std::vector getPayload() const override { + /* + * The payload for the Query command consists of three bytes. A command ID (0x00), version (0x00) and a + * query context. + */ + auto output = std::vector(3, 0x00); + output[2] = static_cast(this->context); + + return output; + } + }; +} diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/HouseKeeping/EndSession.hpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/HouseKeeping/EndSession.hpp new file mode 100644 index 00000000..8a586d3b --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/HouseKeeping/EndSession.hpp @@ -0,0 +1,31 @@ +#pragma once + +#include "HouseKeepingCommandFrame.hpp" + +namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr::CommandFrames::HouseKeeping +{ + /** + * The End Session command ends the active session with the tool. + */ + class EndSession: public HouseKeepingCommandFrame + { + private: + void init() { + /* + * The payload for the End Session command consists of three bytes. A command ID byte (0x11), a + * version byte (0x00) and a reset flag (0x00 for no reset, 0x01 for tool reset). + */ + auto payload = std::vector(3); + payload[0] = 0x11; + payload[1] = 0x00; + payload[2] = 0x00; + this->setPayload(payload); + } + + public: + EndSession() : HouseKeepingCommandFrame() { + this->init(); + } + }; + +} diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/HouseKeeping/HouseKeepingCommandFrame.hpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/HouseKeeping/HouseKeepingCommandFrame.hpp new file mode 100644 index 00000000..b2306790 --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/HouseKeeping/HouseKeepingCommandFrame.hpp @@ -0,0 +1,32 @@ +#pragma once + +#include "../AvrCommandFrame.hpp" + +namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr::CommandFrames::HouseKeeping +{ + enum class ResponseId : unsigned char + { + OK = 0x80, + LIST = 0x81, + DATA = 0x84, + FAILED = 0xA0, + FAILED_WITH_DATA = 0xA1 + }; + + inline bool operator==(unsigned char rawId, ResponseId id) { + return static_cast(id) == rawId; + } + + inline bool operator==(ResponseId id, unsigned char rawId) { + return rawId == id; + } + + class HouseKeepingCommandFrame: public AvrCommandFrame + { + public: + HouseKeepingCommandFrame() { + this->setProtocolHandlerId(ProtocolHandlerId::HouseKeeping); + } + }; + +} diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/HouseKeeping/StartSession.hpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/HouseKeeping/StartSession.hpp new file mode 100644 index 00000000..16c4dbfa --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/HouseKeeping/StartSession.hpp @@ -0,0 +1,30 @@ +#pragma once + +#include "HouseKeepingCommandFrame.hpp" + +namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr::CommandFrames::HouseKeeping +{ + /** + * The Start Session command begins a session with the tool. + */ + class StartSession: public HouseKeepingCommandFrame + { + private: + void init() { + /* + * The payload for the Start Session command consists of two bytes. A command ID byte (0x10) and a + * version byte (0x00). + */ + auto payload = std::vector(2); + payload[0] = 0x10; + payload[1] = 0x00; + this->setPayload(payload); + } + + public: + StartSession() : HouseKeepingCommandFrame() { + this->init(); + } + }; + +} diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/EdbgAvr8Interface.cpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/EdbgAvr8Interface.cpp new file mode 100644 index 00000000..52e9da52 --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/EdbgAvr8Interface.cpp @@ -0,0 +1,919 @@ +#include +#include +#include + +#include "EdbgAvr8Interface.hpp" +#include "src/Exceptions/InvalidConfig.hpp" +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/Exceptions/Avr8CommandFailure.hpp" + +// Command frames +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/SetParameter.hpp" +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/GetParameter.hpp" +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/ActivatePhysical.hpp" +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/DeactivatePhysical.hpp" +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/Attach.hpp" +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/Detach.hpp" +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/Stop.hpp" +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/Step.hpp" +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/Run.hpp" +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/RunTo.hpp" +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/GetDeviceId.hpp" +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/Reset.hpp" +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/ReadMemory.hpp" +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/WriteMemory.hpp" +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/GetProgramCounter.hpp" +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/SetProgramCounter.hpp" +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/DisableDebugWire.hpp" +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/SetSoftwareBreakpoints.hpp" +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/SetXmegaSoftwareBreakpoint.hpp" +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/ClearAllSoftwareBreakpoints.hpp" +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AVR8Generic/ClearSoftwareBreakpoints.hpp" + +// AVR events +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/Events/AVR8Generic/BreakEvent.hpp" + +using namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr; +using namespace Bloom::Exceptions; +using Bloom::Targets::TargetState; +using Bloom::Targets::TargetRegister; +using Bloom::Targets::TargetRegisters; +using Bloom::Targets::TargetRegisterType; + +void EdbgAvr8Interface::setParameter(const Avr8EdbgParameter& parameter, const std::vector& value) { + auto commandFrame = CommandFrames::Avr8Generic::SetParameter(parameter, value); + + auto response = this->edbgInterface.sendAvrCommandFrameAndWaitForResponseFrame(commandFrame); + if (response.getResponseId() == Avr8ResponseId::FAILED) { + throw Avr8CommandFailure("Failed to set parameter on device!", response); + } +} + +std::vector EdbgAvr8Interface::getParameter(const Avr8EdbgParameter& parameter, std::uint8_t size) { + auto commandFrame = CommandFrames::Avr8Generic::GetParameter(parameter, size); + + auto response = this->edbgInterface.sendAvrCommandFrameAndWaitForResponseFrame(commandFrame); + if (response.getResponseId() == Avr8ResponseId::FAILED) { + throw Avr8CommandFailure("Failed to get parameter from device!", response); + } + + return response.getPayloadData(); +} + +void EdbgAvr8Interface::configure(const TargetConfig& targetConfig) { + auto physicalInterface = targetConfig.jsonObject.find("physicalInterface")->toString().toLower().toStdString(); + + auto availablePhysicalInterfaces = EdbgAvr8Interface::physicalInterfacesByName; + auto availableConfigVariants = EdbgAvr8Interface::configVariantsByPhysicalInterface; + + if (physicalInterface.empty() + || availablePhysicalInterfaces.find(physicalInterface) == availablePhysicalInterfaces.end() + ) { + throw InvalidConfig("Invalid physical interface config parameter for AVR8 target."); + } + + auto selectedPhysicalInterface = availablePhysicalInterfaces.find(physicalInterface)->second; + + if (availableConfigVariants.find(selectedPhysicalInterface) == availableConfigVariants.end()) { + throw InvalidConfig("Invalid config variant deduced from physical interface."); + } + + if (selectedPhysicalInterface == Avr8PhysicalInterface::DEBUG_WIRE) { + Logger::warning("AVR8 debugWire interface selected - the DWEN fuse will need to be enabled"); + } + + this->physicalInterface = selectedPhysicalInterface; + this->configVariant = availableConfigVariants.find(selectedPhysicalInterface)->second; + + if (this->configVariant == Avr8ConfigVariant::XMEGA) { + // Default PDI clock to 4MHz + this->setParameter(Avr8EdbgParameters::XMEGA_PDI_CLOCK, static_cast(0x0FA0)); + } +} + +void EdbgAvr8Interface::setTargetParameters(const Avr8Bit::TargetParameters& config) { + this->targetParameters = config; + + if (!config.stackPointerRegisterStartAddress.has_value()) { + throw Exception("Failed to find stack pointer register start address"); + } + + if (!config.stackPointerRegisterSize.has_value()) { + throw Exception("Failed to find stack pointer register size"); + } + + if (!config.statusRegisterStartAddress.has_value()) { + throw Exception("Failed to find status register start address"); + } + + if (!config.statusRegisterSize.has_value()) { + throw Exception("Failed to find status register size"); + } + + if (this->configVariant == Avr8ConfigVariant::XMEGA) { + if (!config.appSectionPdiOffset.has_value()) { + throw Exception("Missing required parameter: APPL_BASE_ADDR"); + } + + if (!config.bootSectionPdiOffset.has_value()) { + throw Exception("Missing required parameter: BOOT_BASE_ADDR"); + } + + if (!config.bootSectionSize.has_value()) { + throw Exception("Missing required parameter: BOOT_BYTES"); + } + + if (!config.flashSize.has_value()) { + throw Exception("Missing required parameter: APPLICATION_BYTES"); + } + + if (!config.eepromPdiOffset.has_value()) { + throw Exception("Missing required parameter: EEPROM_BASE_ADDR"); + } + + if (!config.fuseRegistersPdiOffset.has_value()) { + throw Exception("Missing required parameter: FUSE_BASE_ADDR"); + } + + if (!config.lockRegistersPdiOffset.has_value()) { + throw Exception("Missing required parameter: LOCKBIT_BASE_ADDR"); + } + + if (!config.userSignaturesPdiOffset.has_value()) { + throw Exception("Missing required parameter: USER_SIGN_BASE_ADDR"); + } + + if (!config.productSignaturesPdiOffset.has_value()) { + throw Exception("Missing required parameter: PROD_SIGN_BASE_ADDR"); + } + + if (!config.ramPdiOffset.has_value()) { + throw Exception("Missing required parameter: DATA_BASE_ADDR"); + } + + if (!config.flashPageSize.has_value()) { + throw Exception("Missing required parameter: FLASH_PAGE_BYTES"); + } + + if (!config.eepromSize.has_value()) { + throw Exception("Missing required parameter: EEPROM_SIZE"); + } + + if (!config.eepromPageSize.has_value()) { + throw Exception("Missing required parameter: EEPROM_PAGE_SIZE"); + } + + Logger::debug("Setting APPL_BASE_ADDR AVR8 parameter"); + this->setParameter(Avr8EdbgParameters::DEVICE_XMEGA_APPL_BASE_ADDR, config.appSectionPdiOffset.value()); + + Logger::debug("Setting BOOT_BASE_ADDR AVR8 parameter"); + this->setParameter(Avr8EdbgParameters::DEVICE_XMEGA_BOOT_BASE_ADDR, config.bootSectionPdiOffset.value()); + + Logger::debug("Setting EEPROM_BASE_ADDR AVR8 parameter"); + this->setParameter(Avr8EdbgParameters::DEVICE_XMEGA_EEPROM_BASE_ADDR, config.eepromPdiOffset.value()); + + Logger::debug("Setting FUSE_BASE_ADDR AVR8 parameter"); + this->setParameter(Avr8EdbgParameters::DEVICE_XMEGA_FUSE_BASE_ADDR, config.fuseRegistersPdiOffset.value()); + + Logger::debug("Setting LOCKBIT_BASE_ADDR AVR8 parameter"); + this->setParameter(Avr8EdbgParameters::DEVICE_XMEGA_LOCKBIT_BASE_ADDR, config.lockRegistersPdiOffset.value()); + + Logger::debug("Setting USER_SIGN_BASE_ADDR AVR8 parameter"); + this->setParameter(Avr8EdbgParameters::DEVICE_XMEGA_USER_SIGN_BASE_ADDR, config.userSignaturesPdiOffset.value()); + + Logger::debug("Setting PROD_SIGN_BASE_ADDR AVR8 parameter"); + this->setParameter(Avr8EdbgParameters::DEVICE_XMEGA_PROD_SIGN_BASE_ADDR, config.productSignaturesPdiOffset.value()); + + Logger::debug("Setting DATA_BASE_ADDR AVR8 parameter"); + this->setParameter(Avr8EdbgParameters::DEVICE_XMEGA_DATA_BASE_ADDR, config.ramPdiOffset.value()); + + Logger::debug("Setting APPLICATION_BYTES AVR8 parameter"); + this->setParameter(Avr8EdbgParameters::DEVICE_XMEGA_APPLICATION_BYTES, config.flashSize.value()); + + Logger::debug("Setting BOOT_BYTES AVR8 parameter"); + this->setParameter(Avr8EdbgParameters::DEVICE_XMEGA_BOOT_BYTES, config.bootSectionSize.value()); + + Logger::debug("Setting FLASH_PAGE_BYTES AVR8 parameter"); + this->setParameter(Avr8EdbgParameters::DEVICE_XMEGA_FLASH_PAGE_BYTES, config.flashPageSize.value()); + + Logger::debug("Setting EEPROM_SIZE AVR8 parameter"); + this->setParameter(Avr8EdbgParameters::DEVICE_XMEGA_EEPROM_SIZE, config.eepromSize.value()); + + Logger::debug("Setting EEPROM_PAGE_SIZE AVR8 parameter"); + this->setParameter(Avr8EdbgParameters::DEVICE_XMEGA_EEPROM_PAGE_SIZE, static_cast(config.eepromPageSize.value())); + + this->setParameter(Avr8EdbgParameters::DEVICE_XMEGA_NVM_BASE, static_cast(0x01c0)); +// this->setParameter(Avr8EdbgParameters::DEVICE_XMEGA_SIGNATURE_OFFSET, static_cast(0x0090)); + + } else { + if (config.flashPageSize.has_value()) { + Logger::debug("Setting DEVICE_FLASH_PAGE_SIZE AVR8 parameter"); + this->setParameter(Avr8EdbgParameters::DEVICE_FLASH_PAGE_SIZE, config.flashPageSize.value()); + } + + if (config.flashSize.has_value()) { + Logger::debug("Setting DEVICE_FLASH_SIZE AVR8 parameter"); + this->setParameter(Avr8EdbgParameters::DEVICE_FLASH_SIZE, config.flashSize.value()); + } + + if (config.flashStartAddress.has_value()) { + Logger::debug("Setting DEVICE_FLASH_BASE AVR8 parameter"); + this->setParameter(Avr8EdbgParameters::DEVICE_FLASH_BASE, config.flashStartAddress.value()); + } + + if (config.ramStartAddress.has_value()) { + Logger::debug("Setting DEVICE_SRAM_START AVR8 parameter"); + this->setParameter(Avr8EdbgParameters::DEVICE_SRAM_START, config.ramStartAddress.value()); + } + + if (config.eepromSize.has_value()) { + Logger::debug("Setting DEVICE_EEPROM_SIZE AVR8 parameter"); + this->setParameter(Avr8EdbgParameters::DEVICE_EEPROM_SIZE, config.eepromSize.value()); + } + + if (config.eepromPageSize.has_value()) { + Logger::debug("Setting DEVICE_EEPROM_PAGE_SIZE AVR8 parameter"); + this->setParameter(Avr8EdbgParameters::DEVICE_EEPROM_PAGE_SIZE, config.eepromPageSize.value()); + } + + if (config.ocdRevision.has_value()) { + Logger::debug("Setting DEVICE_OCD_REVISION AVR8 parameter"); + this->setParameter(Avr8EdbgParameters::DEVICE_OCD_REVISION, config.ocdRevision.value()); + } + + if (config.ocdDataRegister.has_value()) { + Logger::debug("Setting DEVICE_OCD_DATA_REGISTER AVR8 parameter"); + this->setParameter(Avr8EdbgParameters::DEVICE_OCD_DATA_REGISTER, config.ocdDataRegister.value()); + } + + if (config.spmcsRegisterStartAddress.has_value()) { + Logger::debug("Setting DEVICE_SPMCR_REGISTER AVR8 parameter"); + this->setParameter(Avr8EdbgParameters::DEVICE_SPMCR_REGISTER, config.spmcsRegisterStartAddress.value()); + } + + if (config.osccalAddress.has_value()) { + Logger::debug("Setting DEVICE_OSCCAL_ADDR AVR8 parameter"); + this->setParameter(Avr8EdbgParameters::DEVICE_OSCCAL_ADDR, config.osccalAddress.value()); + } + + if (config.eepromAddressRegisterLow.has_value()) { + Logger::debug("Setting DEVICE_EEARL_ADDR AVR8 parameter"); + this->setParameter(Avr8EdbgParameters::DEVICE_EEARL_ADDR, config.eepromAddressRegisterLow.value()); + } + + if (config.eepromAddressRegisterHigh.has_value()) { + Logger::debug("Setting DEVICE_EEARH_ADDR AVR8 parameter"); + this->setParameter(Avr8EdbgParameters::DEVICE_EEARH_ADDR, config.eepromAddressRegisterHigh.value()); + } + + if (config.eepromControlRegisterAddress.has_value()) { + Logger::debug("Setting DEVICE_EECR_ADDR AVR8 parameter"); + this->setParameter(Avr8EdbgParameters::DEVICE_EECR_ADDR, config.eepromControlRegisterAddress.value()); + } + + if (config.eepromDataRegisterAddress.has_value()) { + Logger::debug("Setting DEVICE_EEDR_ADDR AVR8 parameter"); + this->setParameter(Avr8EdbgParameters::DEVICE_EEDR_ADDR, config.eepromDataRegisterAddress.value()); + } + + if (config.bootSectionStartAddress.has_value()) { + Logger::debug("Setting DEVICE_BOOT_START_ADDR AVR8 parameter"); + this->setParameter(Avr8EdbgParameters::DEVICE_BOOT_START_ADDR, config.bootSectionStartAddress.value()); + } + } +} + +void EdbgAvr8Interface::init() { + this->setParameter( + Avr8EdbgParameters::CONFIG_VARIANT, + static_cast(this->configVariant) + ); + + this->setParameter( + Avr8EdbgParameters::CONFIG_FUNCTION, + static_cast(this->configFunction) + ); + + this->setParameter( + Avr8EdbgParameters::PHYSICAL_INTERFACE, + static_cast(this->physicalInterface) + ); +} + +std::unique_ptr EdbgAvr8Interface::getAvrEvent() { + auto event = this->edbgInterface.requestAvrEvent(); + + if (!event.has_value()) { + return nullptr; + } + + switch (event->getEventId()) { + case AvrEventId::AVR8_BREAK_EVENT: { + // Break event + return std::make_unique(event.value()); + } + default: { + /* + * TODO: This isn't very nice as we're performing an unnecessary copy. Maybe requestAvrEvents should + * return a unique_ptr instead? + */ + return std::make_unique(event.value()); + } + } +} + +void EdbgAvr8Interface::clearEvents() { + while (this->getAvrEvent() != nullptr) {} +} + +void EdbgAvr8Interface::activatePhysical(bool applyExternalReset) { + auto commandFrame = CommandFrames::Avr8Generic::ActivatePhysical(applyExternalReset); + + auto response = this->edbgInterface.sendAvrCommandFrameAndWaitForResponseFrame(commandFrame); + if (response.getResponseId() == Avr8ResponseId::FAILED) { + if (!applyExternalReset) { + // Try again with external reset applied + Logger::debug("Failed to activate physical interface on AVR8 target - retrying with external reset applied."); + return this->activatePhysical(true); + } else { + throw Exception("Activate physical interface command failed"); + } + } + + this->physicalInterfaceActivated = true; +} + +void EdbgAvr8Interface::deactivatePhysical() { + auto commandFrame = CommandFrames::Avr8Generic::DeactivatePhysical(); + + auto response = this->edbgInterface.sendAvrCommandFrameAndWaitForResponseFrame(commandFrame); + if (response.getResponseId() == Avr8ResponseId::FAILED) { + throw Avr8CommandFailure("deactivate physical interface on AVR8 target command failed", response); + } + + this->physicalInterfaceActivated = false; +} + +void EdbgAvr8Interface::attach() { + auto commandFrame = CommandFrames::Avr8Generic::Attach(true); + + auto response = this->edbgInterface.sendAvrCommandFrameAndWaitForResponseFrame(commandFrame); + if (response.getResponseId() == Avr8ResponseId::FAILED) { + throw Avr8CommandFailure("Attach AVR8 target command failed", response); + } + + this->targetAttached = true; + + // Wait for stopped event + this->waitForStoppedEvent(); +} + +void EdbgAvr8Interface::detach() { + auto commandFrame = CommandFrames::Avr8Generic::Detach(); + + auto response = this->edbgInterface.sendAvrCommandFrameAndWaitForResponseFrame(commandFrame); + if (response.getResponseId() == Avr8ResponseId::FAILED) { + throw Avr8CommandFailure("Detach AVR8 target command failed", response); + } + + this->targetAttached = false; +} + +void EdbgAvr8Interface::activate() { + if (!this->physicalInterfaceActivated) { + this->activatePhysical(); + } + + if (!this->targetAttached) { + this->attach(); + } +} + +void EdbgAvr8Interface::deactivate() { + if (this->targetAttached) { + if (this->physicalInterface == Avr8PhysicalInterface::DEBUG_WIRE && this->disableDebugWireOnDeactivate) { + try { + this->disableDebugWire(); + Logger::warning("Successfully disabled debugWire on the AVR8 target - this is only temporary - " + "the debugWire module has lost control of the RESET pin. Bloom will no longer be able to interface " + "with the target until the next power cycle."); + + } catch (const Exception& exception) { + // Failing to disable debugWire should never prevent us from proceeding with target deactivation. + Logger::error(exception.getMessage()); + } + } + + this->stop(); + this->clearAllBreakpoints(); + this->run(); + + this->detach(); + } + + if (this->physicalInterfaceActivated) { + this->deactivatePhysical(); + } +} + +void EdbgAvr8Interface::reset() { + auto commandFrame = CommandFrames::Avr8Generic::Reset(); + + auto response = this->edbgInterface.sendAvrCommandFrameAndWaitForResponseFrame(commandFrame); + if (response.getResponseId() == Avr8ResponseId::FAILED) { + throw Avr8CommandFailure("Reset AVR8 target command failed", response); + } +} + +void EdbgAvr8Interface::stop() { + auto commandFrame = CommandFrames::Avr8Generic::Stop(); + + auto response = this->edbgInterface.sendAvrCommandFrameAndWaitForResponseFrame(commandFrame); + if (response.getResponseId() == Avr8ResponseId::FAILED) { + throw Avr8CommandFailure("Stop AVR8 target command failed", response); + } + + if (this->getTargetState() == TargetState::RUNNING) { + this->waitForStoppedEvent(); + } +} + +void EdbgAvr8Interface::step() { + auto commandFrame = CommandFrames::Avr8Generic::Step(); + + auto response = this->edbgInterface.sendAvrCommandFrameAndWaitForResponseFrame(commandFrame); + if (response.getResponseId() == Avr8ResponseId::FAILED) { + throw Avr8CommandFailure("Step AVR8 target command failed", response); + } + + this->targetState = TargetState::RUNNING; +} + +void EdbgAvr8Interface::waitForStoppedEvent() { + auto breakEvent = this->waitForAvrEvent(); + + if (breakEvent == nullptr) { + throw Exception("Failed to receive break event for AVR8 target."); + } + + this->targetState = TargetState::STOPPED; +} + +void EdbgAvr8Interface::disableDebugWire() { + auto commandFrame = CommandFrames::Avr8Generic::DisableDebugWire(); + + auto response = this->edbgInterface.sendAvrCommandFrameAndWaitForResponseFrame(commandFrame); + if (response.getResponseId() == Avr8ResponseId::FAILED) { + throw Avr8CommandFailure("Disable debugWire AVR8 target command failed", response); + } +} + +void EdbgAvr8Interface::run() { + this->clearEvents(); + auto commandFrame = CommandFrames::Avr8Generic::Run(); + + auto response = this->edbgInterface.sendAvrCommandFrameAndWaitForResponseFrame(commandFrame); + if (response.getResponseId() == Avr8ResponseId::FAILED) { + throw Avr8CommandFailure("Run AVR8 command failed", response); + } + + this->targetState = TargetState::RUNNING; +} + +void EdbgAvr8Interface::runTo(std::uint32_t address) { + this->clearEvents(); + Logger::debug("Running to address: " + std::to_string(address)); + auto commandFrame = CommandFrames::Avr8Generic::RunTo(address); + + auto response = this->edbgInterface.sendAvrCommandFrameAndWaitForResponseFrame(commandFrame); + if (response.getResponseId() == Avr8ResponseId::FAILED) { + throw Avr8CommandFailure("Run-to AVR8 command failed", response); + } + + this->targetState = TargetState::RUNNING; +} + +std::uint32_t EdbgAvr8Interface::getProgramCounter() { + if (this->targetState != TargetState::STOPPED) { + this->stop(); + } + + auto commandFrame = CommandFrames::Avr8Generic::GetProgramCounter(); + auto response = this->edbgInterface.sendAvrCommandFrameAndWaitForResponseFrame(commandFrame); + if (response.getResponseId() == Avr8ResponseId::FAILED) { + throw Avr8CommandFailure("Get AVR8 program counter command failed", response); + } + + return response.extractProgramCounter(); +} + +TargetRegister EdbgAvr8Interface::getStackPointerRegister() { + return TargetRegister(TargetRegisterType::STACK_POINTER, this->readMemory( + Avr8MemoryType::SRAM, + this->targetParameters.stackPointerRegisterStartAddress.value(), + this->targetParameters.stackPointerRegisterSize.value() + )); +} + +TargetRegister EdbgAvr8Interface::getStatusRegister() { + return TargetRegister(TargetRegisterType::STATUS_REGISTER, this->readMemory( + Avr8MemoryType::SRAM, + this->targetParameters.statusRegisterStartAddress.value(), + this->targetParameters.statusRegisterSize.value() + )); +} + +void EdbgAvr8Interface::setStackPointerRegister(const TargetRegister& stackPointerRegister) { + auto maximumStackPointerRegisterSize = this->targetParameters.stackPointerRegisterSize.value(); + auto registerValue = stackPointerRegister.value; + + if (registerValue.size() > maximumStackPointerRegisterSize) { + throw Exception("Provided stack pointer register value exceeds maximum size."); + + } else if (registerValue.size() < maximumStackPointerRegisterSize) { + // Fill the missing most-significant bytes with 0x00 + registerValue.insert(registerValue.begin(), maximumStackPointerRegisterSize - registerValue.size(), 0x00); + } + + this->writeMemory( + Avr8MemoryType::SRAM, + this->targetParameters.stackPointerRegisterStartAddress.value(), + registerValue + ); +} + +void EdbgAvr8Interface::setStatusRegister(const TargetRegister& statusRegister) { + auto maximumStatusRegisterSize = this->targetParameters.statusRegisterSize.value(); + auto registerValue = statusRegister.value; + + if (registerValue.size() > maximumStatusRegisterSize) { + throw Exception("Provided status register value exceeds maximum size."); + + } else if (registerValue.size() < maximumStatusRegisterSize) { + // Fill the missing most-significant bytes with 0x00 + registerValue.insert(registerValue.begin(), maximumStatusRegisterSize - registerValue.size(), 0x00); + } + + this->writeMemory( + Avr8MemoryType::SRAM, + this->targetParameters.statusRegisterStartAddress.value(), + registerValue + ); +} + +void EdbgAvr8Interface::setProgramCounter(std::uint32_t programCounter) { + if (this->targetState != TargetState::STOPPED) { + this->stop(); + } + + /* + * The program counter will be given in byte address form, but the EDBG tool will be expecting it in word + * address (16-bit) form. This is why we divide it by 2. + */ + auto commandFrame = CommandFrames::Avr8Generic::SetProgramCounter(programCounter / 2); + auto response = this->edbgInterface.sendAvrCommandFrameAndWaitForResponseFrame(commandFrame); + if (response.getResponseId() == Avr8ResponseId::FAILED) { + throw Avr8CommandFailure("Set program counter command failed", response); + } +} + +TargetSignature EdbgAvr8Interface::getDeviceId() { + auto commandFrame = CommandFrames::Avr8Generic::GetDeviceId(); + + auto response = this->edbgInterface.sendAvrCommandFrameAndWaitForResponseFrame(commandFrame); + if (response.getResponseId() == Avr8ResponseId::FAILED) { + throw Avr8CommandFailure("Get device ID command failed", response); + } + + return response.extractSignature(this->physicalInterface); +} + +void EdbgAvr8Interface::setBreakpoint(std::uint32_t address) { + auto commandFrame = CommandFrames::Avr8Generic::SetSoftwareBreakpoints({address}); + + auto response = this->edbgInterface.sendAvrCommandFrameAndWaitForResponseFrame(commandFrame); + if (response.getResponseId() == Avr8ResponseId::FAILED) { + throw Avr8CommandFailure("Set software breakpoint command failed", response); + } +} + +void EdbgAvr8Interface::clearBreakpoint(std::uint32_t address) { + auto commandFrame = CommandFrames::Avr8Generic::ClearSoftwareBreakpoints({address}); + + auto response = this->edbgInterface.sendAvrCommandFrameAndWaitForResponseFrame(commandFrame); + if (response.getResponseId() == Avr8ResponseId::FAILED) { + throw Avr8CommandFailure("Clear AVR8 software breakpoint command failed", response); + } +} + +void EdbgAvr8Interface::clearAllBreakpoints() { + auto commandFrame = CommandFrames::Avr8Generic::ClearAllSoftwareBreakpoints(); + + auto response = this->edbgInterface.sendAvrCommandFrameAndWaitForResponseFrame(commandFrame); + if (response.getResponseId() == Avr8ResponseId::FAILED) { + throw Avr8CommandFailure("Clear all AVR8 software breakpoints command failed", response); + } +} + +void EdbgAvr8Interface::refreshTargetState() { + auto avrEvent = this->getAvrEvent(); + + if (avrEvent != nullptr && avrEvent->getEventId() == AvrEventId::AVR8_BREAK_EVENT) { + auto breakEvent = dynamic_cast(avrEvent.get()); + + if (breakEvent == nullptr) { + throw Exception("Failed to process AVR8 break event"); + } + + this->targetState = TargetState::STOPPED; + return; + } + + this->targetState = TargetState::RUNNING; +} + +TargetState EdbgAvr8Interface::getTargetState() { + /* + * We are not informed when a target goes from a stopped state to a running state, so there is no need + * to query the tool when we already know the target has stopped. + * + * This means we have to rely on the assumption that the target cannot enter a running state without + * our instruction. + */ + if (this->targetState != TargetState::STOPPED) { + this->refreshTargetState(); + } + + return this->targetState; +} + +TargetMemoryBuffer EdbgAvr8Interface::readMemory(Avr8MemoryType type, std::uint32_t address, std::uint32_t bytes) { + if (type == Avr8MemoryType::FLASH_PAGE && this->targetParameters.flashPageSize.value_or(0) > 0) { + // Flash reads must be done in pages + auto pageSize = this->targetParameters.flashPageSize.value(); + + if ((bytes % pageSize) != 0 || (address % pageSize) != 0) { + /* + * The number of bytes to read and/or the start address are not aligned. + * + * Align both and call this function again. + */ + auto alignedAddress = address; + auto alignedBytesToRead = bytes; + + if ((bytes % pageSize) != 0) { + auto pagesRequired = static_cast(std::ceil( + static_cast(bytes) / static_cast(pageSize) + )); + + alignedBytesToRead = (pagesRequired * pageSize); + } + + if ((address % pageSize) != 0) { + alignedAddress = static_cast(std::floor( + static_cast(address) / static_cast(pageSize) + ) * pageSize); + + /* + * Given that we've pushed the start address back, this must be accounted for in the number of + * bytes to read. We'll need to include the difference as those are the bytes we're actually + * interested in. + * + * For example: + * + * Given: page size = 4 + * Given: dummy memory (each character represents one byte, with first byte at 0x00) = aaaabbbbccccdddd + * Given: requested start address = 0x05 + * Given: requested bytes to read = 4 + * + * The start address (0x05) would be: + * aaaabbbbccccdddd + * ^ + * Because only 4 bytes were requested, starting at address 0x05, we're only interested in the bytes + * at addresses 0x05, 0x06, 0x07 and 0x08 (that's bytes bbbc). + * + * But the start address isn't aligned, so we need to align it by pushing it back to the beginning + * of the page (so we'd set it to 0x04, for this example), which is what we do above, when setting + * alignedAddress: + * aaaabbbbccccdddd + * ^ + * But now we'll only be reading 4 bytes from start address 0x04, meaning we won't be reading + * that 4th byte (0x08). So we need to account for this by adding the difference of the requested start + * address and the aligned start address to the number of bytes to read, to ensure that we're reading + * all of the bytes that we're interested in. But this will throw off the aligned bytes!! So we need + * to also account for this by aligning the additional bytes before adding them to alignedBytesToRead. + * + * However, we could simply get away with just adding the bytes without aligning + * them (alignedBytesToRead += (address - alignedAddress);), as the subsequent recursive call will + * align them for us, but it will result in an unnecessary recursion, so we'll just align the + * additional bytes here. + */ + if ((address - alignedAddress) > (alignedBytesToRead - bytes)) { + alignedBytesToRead += static_cast(std::ceil( + static_cast(address - alignedAddress) / static_cast(pageSize) + )) * pageSize; + } + } + + /* + * Now that the start address and bytes to read have been aligned, we can simply invoke this function + * for a second time, with the aligned values. Then, return the requested data and discard the rest. + */ + auto memoryBuffer = this->readMemory(type, alignedAddress, alignedBytesToRead); + return TargetMemoryBuffer( + memoryBuffer.begin() + (address - alignedAddress), + memoryBuffer.begin() + (address - alignedAddress) + bytes + ); + } + + // We can only read one flash page at a time. + if (bytes > pageSize) { + // bytes should always be a multiple of pageSize (given the code above) + assert(bytes % pageSize == 0); + int pagesRequired = static_cast(bytes / pageSize); + TargetMemoryBuffer memoryBuffer; + + for (auto i = 1; i <= pagesRequired; i++) { + auto pageBuffer = this->readMemory(type, address + (pageSize * i), pageSize); + memoryBuffer.insert(memoryBuffer.end(), pageBuffer.begin(), pageBuffer.end()); + } + + return memoryBuffer; + } + } + + /* + * EDBG AVR8 debug tools behave in a really weird way when responding with more than two packets + * for a single read memory command. The data they return in this case appears to be of little use. + * + * To address this, we make sure we only issue read memory commands that will result in no more than two + * response packets. For calls that require more than this, we simply split them into numerous calls. + */ + + /* + * The subtraction of 20 bytes here is just to account for any other bytes included in the response + * that isn't actually the memory data (like the command ID, version bytes, etc). I could have sought the + * actual value but who has the time. It won't exceed 20 bytes. Bite me. + */ + auto singlePacketSize = static_cast(this->edbgInterface.getUsbHidInputReportSize() - 20); + auto totalResponsePackets = std::ceil(static_cast(bytes) / static_cast(singlePacketSize)); + auto totalReadsRequired = std::ceil(static_cast(totalResponsePackets) / 2); + + if (totalResponsePackets > 2) { + /* + * This call to readMemory() will result in more than two response packets, so split it into multiple calls + * that will result in no more than two response packets per call. + */ + auto output = std::vector(); + + for (float i = 1; i <= totalReadsRequired; i++) { + auto bytesToRead = static_cast((bytes - output.size()) > (singlePacketSize * 2) ? + (singlePacketSize * 2) : bytes - output.size()); + auto data = this->readMemory(type, static_cast(address + output.size()), bytesToRead); + output.insert(output.end(), data.begin(), data.end()); + } + + return output; + } + + auto commandFrame = CommandFrames::Avr8Generic::ReadMemory(); + commandFrame.setType(type); + commandFrame.setAddress(address); + commandFrame.setBytes(bytes); + + auto response = this->edbgInterface.sendAvrCommandFrameAndWaitForResponseFrame(commandFrame); + if (response.getResponseId() == Avr8ResponseId::FAILED) { + throw Avr8CommandFailure("Read memory AVR8 from target command failed", response); + } + + return response.getMemoryBuffer(); +} + +void EdbgAvr8Interface::writeMemory(Avr8MemoryType type, std::uint32_t address, TargetMemoryBuffer buffer) { + if (type == Avr8MemoryType::FLASH_PAGE) { + // TODO: Implement support for writing to flash + throw Exception("Cannot write to flash"); + } + + auto commandFrame = CommandFrames::Avr8Generic::WriteMemory(); + commandFrame.setType(type); + commandFrame.setAddress(address); + commandFrame.setBuffer(buffer); + + auto response = this->edbgInterface.sendAvrCommandFrameAndWaitForResponseFrame(commandFrame); + if (response.getResponseId() == Avr8ResponseId::FAILED) { + throw Avr8CommandFailure("Write memory AVR8 from target command failed", response); + } + + return; +} + +TargetRegisters EdbgAvr8Interface::readGeneralPurposeRegisters(std::set registerIds) { + auto output = TargetRegisters(); + + auto registers = this->readMemory( + this->targetParameters.family == Family::XMEGA ? Avr8MemoryType::REGISTER_FILE : Avr8MemoryType::SRAM, + this->targetParameters.gpRegisterStartAddress.value_or(0x00), + this->targetParameters.gpRegisterSize.value_or(32) + ); + + for (std::size_t registerIndex = 0; registerIndex < registers.size(); registerIndex++) { + if (!registerIds.empty() && registerIds.find(registerIndex) == registerIds.end()) { + continue; + } + + output.push_back(TargetRegister(registerIndex, {registers[registerIndex]})); + } + + return output; +} + +void EdbgAvr8Interface::writeGeneralPurposeRegisters(const TargetRegisters& registers) { + auto gpRegisterSize = this->targetParameters.gpRegisterSize.value_or(32); + auto gpStartAddress = this->targetParameters.gpRegisterStartAddress.value_or(0x00); + + for (const auto& gpRegister : registers) { + auto descriptor = gpRegister.descriptor; + if (gpRegister.descriptor.type != TargetRegisterType::GENERAL_PURPOSE_REGISTER) { + // We are only to update GP registers here + throw Exception("Cannot write non GP register"); + } + + if (!descriptor.id.has_value()) { + throw Exception("Missing GP register ID"); + + } else if ((descriptor.id.value() + 1) > gpRegisterSize || (descriptor.id.value() + 1) < 0) { + throw Exception("Invalid GP register ID: " + std::to_string(descriptor.id.value())); + } + + if (gpRegister.value.size() != 1) { + throw Exception("Invalid GP register value size"); + } + + // TODO: This can be inefficient when updating many registers, maybe do something a little smarter here. + this->writeMemory( + this->configVariant == Avr8ConfigVariant::XMEGA ? Avr8MemoryType::REGISTER_FILE : Avr8MemoryType::SRAM, + static_cast(gpStartAddress + descriptor.id.value()), + gpRegister.value + ); + } +} + +TargetMemoryBuffer EdbgAvr8Interface::readMemory(TargetMemoryType memoryType, std::uint32_t startAddress, std::uint32_t bytes) { + auto avr8MemoryType = Avr8MemoryType::SRAM; + + switch (memoryType) { + case TargetMemoryType::RAM: { + avr8MemoryType = Avr8MemoryType::SRAM; + break; + } + case TargetMemoryType::FLASH: { + if (this->configVariant == Avr8ConfigVariant::DEBUG_WIRE) { + avr8MemoryType = Avr8MemoryType::FLASH_PAGE; + + } else if (this->configVariant == Avr8ConfigVariant::XMEGA || this->configVariant == Avr8ConfigVariant::UPDI) { + avr8MemoryType = Avr8MemoryType::APPL_FLASH; + + } else { + avr8MemoryType = Avr8MemoryType::SPM; + } + break; + } + case TargetMemoryType::EEPROM: { + avr8MemoryType = Avr8MemoryType::EEPROM; + } + } + + return this->readMemory(avr8MemoryType, startAddress, bytes); +} + +void EdbgAvr8Interface::writeMemory(TargetMemoryType memoryType, std::uint32_t startAddress, const TargetMemoryBuffer& buffer) { + auto avr8MemoryType = Avr8MemoryType::SRAM; + + switch (memoryType) { + case TargetMemoryType::RAM: { + avr8MemoryType = Avr8MemoryType::SRAM; + break; + } + case TargetMemoryType::FLASH: { + if (this->configVariant == Avr8ConfigVariant::DEBUG_WIRE) { + avr8MemoryType = Avr8MemoryType::FLASH_PAGE; + + } else if (this->configVariant == Avr8ConfigVariant::MEGAJTAG) { + avr8MemoryType = Avr8MemoryType::FLASH_PAGE; + // TODO: Enable programming mode + + } else if (this->configVariant == Avr8ConfigVariant::XMEGA || this->configVariant == Avr8ConfigVariant::UPDI) { + avr8MemoryType = Avr8MemoryType::APPL_FLASH; + + } else { + avr8MemoryType = Avr8MemoryType::SPM; + } + break; + } + case TargetMemoryType::EEPROM: { + avr8MemoryType = Avr8MemoryType::EEPROM; + } + } + + return this->writeMemory(avr8MemoryType, startAddress, buffer); +} diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/EdbgAvr8Interface.hpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/EdbgAvr8Interface.hpp new file mode 100644 index 00000000..0bf56ac9 --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/EdbgAvr8Interface.hpp @@ -0,0 +1,528 @@ +#pragma once + +#include +#include +#include +#include + +#include "src/DebugToolDrivers/TargetInterfaces/Microchip/AVR/AVR8/Avr8Interface.hpp" +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/Avr8Generic.hpp" +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/EdbgInterface.hpp" +#include "src/Targets/Microchip/AVR/Target.hpp" +#include "src/Targets/Microchip/AVR/AVR8/Family.hpp" + +namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr +{ + using namespace DebugToolDrivers; + using namespace Targets; + using namespace Targets::Microchip::Avr; + using namespace Events; + + using Protocols::CmsisDap::Edbg::EdbgInterface; + using Targets::Microchip::Avr::Avr8Bit::Family; + using Targets::TargetRegister; + using Targets::TargetRegisterMap; + using Targets::TargetMemoryBuffer; + + inline bool operator==(unsigned char rawId, Avr8ResponseId id) { + return static_cast(id) == rawId; + } + + inline bool operator==(Avr8ResponseId id, unsigned char rawId) { + return rawId == id; + } + + /** + * The EdbgAvr8Interface implements the AVR8 Generic EDBG/CMSIS-DAP protocol, as an Avr8Interface. + * + * See the "AVR8 Generic Protocol" section in the DS50002630A document by Microchip, for more information on the + * protocol. + * + * This implementation should work with any Microchip EDBG based CMSIS-DAP debug tool (such as the Atmel-ICE, + * Power Debugger and the MPLAB SNAP debugger (in "AVR mode")). + */ + class EdbgAvr8Interface: public Avr8Interface + { + private: + /** + * The AVR8 Generic protocol is a sub-protocol of the EDBG AVR protocol, which is served via CMSIS-DAP vendor + * commands. + * + * Every EDBG based debug tool that utilises this implementation must provide access to its EDBG interface. + */ + EdbgInterface& edbgInterface; + + /** + * The AVR8 Generic protocol provides two functions: Debugging and programming. The desired function must be + * configured via the setting of the "AVR8_CONFIG_FUNCTION" parameter. + */ + Avr8ConfigFunction configFunction = Avr8ConfigFunction::DEBUGGING; + + /** + * Configuring of the AVR8 Generic protocol depends on some characteristics of the target. + * The "AVR8_CONFIG_VARIANT" parameter allows us to determine which target parameters are required by the + * debug tool. + */ + Avr8ConfigVariant configVariant; + + /** + * Currently, the AVR8 Generic protocol supports 4 physical interfaces: debugWire, JTAG, PDI and UPDI. + * The desired physical interface must be selected by setting the "AVR8_PHY_PHYSICAL" parameter. + */ + Avr8PhysicalInterface physicalInterface; + + /** + * EDBG-based debug tools require target specific parameters such as memory locations, page sizes and + * register addresses. It is the AVR8 target's responsibility to obtain the required information and pass it + * to the Avr8Interface. See Avr8::getTargetParameters() and Avr8::postPromotionConfigure(). + * + * For the EdbgAvr8Interface, we send the required parameters to the debug tool immediately upon receiving + * them. See EdbgAvr8Interface::setTargetParameters(). + */ + Avr8Bit::TargetParameters targetParameters; + + /** + * We keep record of the current target state for caching purposes. We'll only refresh the target state if the + * target is running. If it has already stopped, then we assume it cannot transition to a running state without + * an instruction from us. + * + * @TODO: Review this. Is the above assumption correct? Always? Explore the option of polling the target state. + */ + TargetState targetState = TargetState::UNKNOWN; + + /** + * Upon configuration, the physical interface must be activated on the debug tool. We keep record of this to + * assist in our decision to deactivate the physical interface, when deactivate() is called. + */ + bool physicalInterfaceActivated = false; + + /** + * As with activating the physical interface, we are required to issue the "attach" command to the debug + * tool, in order to start a debug session in the target. + */ + bool targetAttached = false; + + /** + * Because the debugWire module requires control of the reset pin on the target, enabling this module will + * effectively mean losing control of the reset pin. This means users won't be able to use other + * interfaces that require access to the reset pin, such as ISP, until the debugWire module is disabled. + * + * The AVR8 Generic protocol provides a function for temporarily disabling the debugWire module on the target. + * This doesn't change the DWEN fuse and its affect is only temporary - the debugWire module will be + * reactivated upon the user cycling the power to the target. + * + * Bloom is able to temporarily disable the debugWire module, automatically, upon deactivating of the + * target (which usually occurs after a debug session has ended). This allows users to program the target via + * ISP, after they've finished a debug session. After programming the target, the user will need to cycle the + * target power before Bloom can gain access for another debug session. + * + * This feature can be activated via the user's Bloom configuration. + * + * See disableDebugWire() method below. + */ + bool disableDebugWireOnDeactivate = false; + + /** + * Users are required to set their desired physical interface in their Bloom configuration. This would take + * the form of a string, so we map the available options to the appropriate enums. + */ + static inline std::map physicalInterfacesByName = { + {"debugwire", Avr8PhysicalInterface::DEBUG_WIRE}, + {"pdi", Avr8PhysicalInterface::PDI}, +// {"jtag", Avr8PhysicalInterface::JTAG}, // Disabled for now - will add support later +// {"updi", Avr8PhysicalInterface::PDI_1W}, // Disabled for now - will add support later + }; + + /** + * Although users can supply the desired config variant via their Bloom configuration, this is not required. + * This mapping allows us to determine which config variant to select, based on the selected physical + * interface. + */ + static inline std::map configVariantsByPhysicalInterface = { + {Avr8PhysicalInterface::DEBUG_WIRE, Avr8ConfigVariant::DEBUG_WIRE}, + {Avr8PhysicalInterface::PDI, Avr8ConfigVariant::XMEGA}, + {Avr8PhysicalInterface::JTAG, Avr8ConfigVariant::MEGAJTAG}, + {Avr8PhysicalInterface::PDI_1W, Avr8ConfigVariant::UPDI}, + }; + + /** + * Sets an AVR8 parameter on the debug tool. See the Avr8EdbgParameters class and protocol documentation + * for more on available parameters. + * + * @param parameter + * @param value + */ + void setParameter(const Avr8EdbgParameter& parameter, const std::vector& value); + + /** + * Overload for setting parameters with single byte values. + * + * @param parameter + * @param value + */ + void setParameter(const Avr8EdbgParameter& parameter, unsigned char value) { + this->setParameter(parameter, std::vector(1, value)); + } + + /** + * Overload for setting parameters with four byte integer values. + * + * @param parameter + * @param value + */ + void setParameter(const Avr8EdbgParameter& parameter, std::uint32_t value) { + auto paramValue = std::vector(4); + paramValue[0] = static_cast(value); + paramValue[1] = static_cast(value >> 8); + paramValue[2] = static_cast(value >> 16); + paramValue[3] = static_cast(value >> 24); + + this->setParameter(parameter, paramValue); + } + + /** + * Overload for setting parameters with two byte integer values. + * + * @param parameter + * @param value + */ + void setParameter(const Avr8EdbgParameter& parameter, std::uint16_t value) { + auto paramValue = std::vector(2); + paramValue[0] = static_cast(value); + paramValue[1] = static_cast(value >> 8); + + this->setParameter(parameter, paramValue); + } + + /** + * Fetches an AV8 parameter from the debug tool. + * + * @param parameter + * @param size + * @return + */ + std::vector getParameter(const Avr8EdbgParameter& parameter, std::uint8_t size); + + /** + * Sends the "Activate Physical" command to the debug tool, activating the physical interface and thus enabling + * communication between the debug tool and the target. + * + * @param applyExternalReset + */ + void activatePhysical(bool applyExternalReset = false); + + /** + * Sends the "Deactivate Physical" command to the debug tool, which will result in the connection between the + * debug tool and the target being severed. + */ + void deactivatePhysical(); + + /** + * Sends the "Attach" command to the debug tool, which starts a debug session on the target. + */ + void attach(); + + /** + * Sends the "Detach" command to the debug tool, which terminates any active debug session on the target. + */ + void detach(); + + /** + * Fetches any queued events belonging to the AVR8 Generic protocol (such as target break events). + * + * @return + */ + std::unique_ptr getAvrEvent(); + + /** + * Clears (discards) any queued AVR8 Generic protocol events on the debug tool. + */ + void clearEvents(); + + /** + * Reads memory on the target. + * + * This method will handle any alignment requirements for the selected memory type. + * + * See the Avr8MemoryType enum for list of supported AVR8 memory types. + * + * @param type + * The type of memory to access (Flash, EEPROM, SRAM, etc). See protocol documentation for more on this. + * + * @param address + * The start address (byte address) + * + * @param bytes + * Number of bytes to access. + * + * @return + */ + TargetMemoryBuffer readMemory(Avr8MemoryType type, std::uint32_t address, std::uint32_t bytes); + + /** + * Writes memory to the target. + * + * This method will handle any alignment requirements for the selected memory type. + * + * See the Avr8MemoryType enum for list of supported AVR8 memory types. + * + * @param type + * @param address + * @param buffer + */ + void writeMemory(Avr8MemoryType type, std::uint32_t address, TargetMemoryBuffer buffer); + + /** + * Fetches the current target state. + * + * This currently uses AVR BREAK events to determine if a target has stopped. The lack of any + * queued BREAK events leads to the assumption that the target is still running. + */ + void refreshTargetState(); + + /** + * Temporarily disables the debugWire module on the target. This does not affect the DWEN fuse. The module + * will be reactivated upon the cycling of the target power. + */ + void disableDebugWire(); + + /** + * Waits for an AVR event of a specific type. + * + * @tparam AvrEventType + * Type of AVR event to wait for. See AvrEvent class for more. + * + * @param maximumAttempts + * Maximum number of attempts to poll the debug tool for the expected event. + * + * @return + * If an event is found before maximumAttempts is reached, the event will be returned. Otherwise a nullptr + * will be returned. + */ + template + std::unique_ptr waitForAvrEvent(int maximumAttempts = 20) { + int attemptCount = 0; + + while (attemptCount <= maximumAttempts) { + auto genericEvent = this->getAvrEvent(); + + if (genericEvent != nullptr) { + // Attempt to downcast event + auto event = std::unique_ptr(dynamic_cast(genericEvent.release())); + + if (event != nullptr) { + return event; + } + } + + std::this_thread::sleep_for(std::chrono::milliseconds(50)); + attemptCount++; + } + + return nullptr; + } + + /** + * Waits for an AVR BREAK event. + * + * This simply wraps a call to waitForAvrEvent(). An exception will be thrown if the call doesn't + * return a BreakEvent. + * + * This should only be used when a BreakEvent is always expected. + */ + void waitForStoppedEvent(); + + public: + EdbgAvr8Interface(EdbgInterface& edbgInterface) + : edbgInterface(edbgInterface) {}; + + /* + * The public methods below implement the interface defined by the Avr8Interface class. + * See the comments in that class for more info on the expected behaviour of each method. + */ + + /** + * As already mentioned in numerous comments above, the EdbgAvr8Interface requires some configuration from + * the user. This is supplied via the user's Bloom configuration. + * + * @param targetConfig + */ + virtual void configure(const TargetConfig& targetConfig) override; + + /** + * Accepts target parameters from the AVR8 target instance and sends the necessary target parameters to the + * debug tool. + * + * @param config + */ + virtual void setTargetParameters(const Avr8Bit::TargetParameters& config) override; + + /** + * Initialises the AVR8 Generic protocol interface by setting the appropriate parameters on the debug tool. + */ + virtual void init() override; + + /** + * Issues the "stop" command to the debug tool, halting target execution. + */ + virtual void stop() override; + + /** + * Issues the "run" command to the debug tool, resuming execution on the target. + */ + virtual void run() override; + + /** + * Issues the "run to" command to the debug tool, resuming execution on the target, up to a specific byte + * address. The target will dispatch an AVR BREAK event once it reaches the specified address. + * + * @param address + * The (byte) address to run to. + */ + virtual void runTo(std::uint32_t address) override; + + /** + * Issues the "step" command to the debug tool, stepping the execution on the target. The stepping can be + * configured to step in, out or over. But currently we only support stepping in. The target will dispatch + * an AVR BREAK event once it reaches the next instruction. + */ + virtual void step() override; + + /** + * Issues the "reset" command to the debug tool, resetting target execution. + */ + virtual void reset() override; + + /** + * Activates the physical interface and starts a debug session on the target (via attach()). + */ + virtual void activate() override; + + /** + * Terminates any active debug session on the target and severs the connection between the debug tool and + * the target (by deactivating the physical interface). + */ + virtual void deactivate() override; + + /** + * Issues the "PC Read" command to the debug tool, to extract the current program counter. + * + * @return + */ + virtual std::uint32_t getProgramCounter() override; + + /** + * Reads the stack pointer register from the target. + * + * @return + */ + virtual TargetRegister getStackPointerRegister() override; + + /** + * Reads the status register from the target. + * + * @return + */ + virtual TargetRegister getStatusRegister() override; + + /** + * Updates the stack pointer register on ther target. + * + * @param stackPointerRegister + */ + virtual void setStackPointerRegister(const TargetRegister& stackPointerRegister) override; + + /** + * Updates the status register on the target. + * + * @param statusRegister + */ + virtual void setStatusRegister(const TargetRegister& statusRegister) override; + + /** + * Issues the "PC Write" command to the debug tool, setting the program counter on the target. + * + * @param programCounter + * The byte address to set as the program counter. + */ + virtual void setProgramCounter(std::uint32_t programCounter) override; + + /** + * Issues the "Get ID" command to the debug tool, to extract the signature from the target. + * + * @return + */ + virtual TargetSignature getDeviceId() override; + + /** + * Issues the "Software Breakpoint Set" command to the debug tool, setting a software breakpoint at the given + * byte address. + * + * @param address + * The byte address to position the breakpoint. + */ + virtual void setBreakpoint(std::uint32_t address) override; + + /** + * Issues the "Software Breakpoint Clear" command to the debug tool, clearing any breakpoint at the given + * byte address. + * + * @param address + * The byte address of the breakpoint to clear. + */ + virtual void clearBreakpoint(std::uint32_t address) override; + + /** + * Issues the "Software Breakpoint Clear All" command to the debug tool, clearing all software breakpoints + * that were set *in the current debug session*. + * + * If the debug session ended before any of the set breakpoints were cleared, this will *not* clear them. + */ + virtual void clearAllBreakpoints() override; + + /** + * Reads gernal purpose registers from the target. + * + * @param registerIds + * @return + */ + virtual TargetRegisters readGeneralPurposeRegisters(std::set registerIds) override; + + /** + * Writes general purpose registers to target. + * + * @param registers + */ + virtual void writeGeneralPurposeRegisters(const TargetRegisters& registers) override; + + /** + * This is an overloaded method. + * + * Resolves the correct Avr8MemoryType from the given TargetMemoryType and calls readMemory(). + * + * @param memoryType + * @param startAddress + * @param bytes + * @return + */ + virtual TargetMemoryBuffer readMemory(TargetMemoryType memoryType, std::uint32_t startAddress, std::uint32_t bytes) override; + + /** + * This is an overloaded method. + * + * Resolves the correct Avr8MemoryType from the given TargetMemoryType and calls writeMemory(). + * + * @param memoryType + * @param startAddress + * @param buffer + */ + virtual void writeMemory(TargetMemoryType memoryType, std::uint32_t startAddress, const TargetMemoryBuffer& buffer) override; + + /** + * Returns the current state of the target. + * + * @return + */ + virtual TargetState getTargetState() override; + }; +} \ No newline at end of file diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/Events/AVR8Generic/BreakEvent.cpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/Events/AVR8Generic/BreakEvent.cpp new file mode 100644 index 00000000..0e4d2f18 --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/Events/AVR8Generic/BreakEvent.cpp @@ -0,0 +1,29 @@ +#include + +#include "BreakEvent.hpp" +#include "src/Exceptions/Exception.hpp" + +using namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr; +using namespace Bloom::Exceptions; + +void BreakEvent::init(const AvrEvent& event) { + AvrEvent::init(event); + auto& data = this->getEventData(); + + if (data.size() < 8) { + /* + * All BreakEvent packets must consist of at least 9 bytes: + * 1 byte for event ID + * 4 bytes for program counter + * 1 byte for break cause + * 2 bytes for extended info + */ + throw Exception("Failed to process BreakEvent from AvrEvent - unexpected packet size."); + } + + // Program counter consists of 4 bytes + this->programCounter = static_cast((data[4] << 24) | (data[3] << 16) | (data[2] << 8) | data[1]) * 2; + + // Break cause is 1 byte, where 0x01 is 'program breakpoint' and 0x00 'unspecified' + this->breakCause = data[7] == 0x01 ? TargetBreakCause::BREAKPOINT : TargetBreakCause::UNKNOWN; +} diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/Events/AVR8Generic/BreakEvent.hpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/Events/AVR8Generic/BreakEvent.hpp new file mode 100644 index 00000000..e639e808 --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/Events/AVR8Generic/BreakEvent.hpp @@ -0,0 +1,33 @@ +#pragma once + +#include + +#include "../../AvrEvent.hpp" +#include "src/Targets/Microchip/AVR/Target.hpp" + +namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr +{ + using Targets::TargetBreakCause; + + class BreakEvent: public AvrEvent + { + private: + std::uint32_t programCounter; + TargetBreakCause breakCause; + + void init(const AvrEvent& event); + + public: + BreakEvent(const AvrEvent& event) { + this->init(event); + } + + std::uint32_t getProgramCounter() { + return this->programCounter; + } + + TargetBreakCause getBreakCause() { + return this->breakCause; + } + }; +} diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/Exceptions/Avr8CommandFailure.hpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/Exceptions/Avr8CommandFailure.hpp new file mode 100644 index 00000000..d8153fa9 --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/Exceptions/Avr8CommandFailure.hpp @@ -0,0 +1,81 @@ +#pragma once + +#include "src/Exceptions/Exception.hpp" +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/ResponseFrames/AVR8Generic/Avr8GenericResponseFrame.hpp" + +namespace Bloom::Exceptions +{ + using Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr::ResponseFrames::Avr8Generic::Avr8GenericResponseFrame; + class Avr8CommandFailure: public Exception + { + private: + static inline auto failureCodeToDescription = std::map({ + {0x10, "debugWIRE physical error"}, + {0x11, "JTAGM failed to initialise"}, + {0x12, "JTAGM did something strange"}, + {0x13, "JTAG low level error"}, + {0x14, "Unsupported version of JTAGM"}, + {0x15, "JTAG master timed out"}, + {0x16, "JTAG bit banger timed out"}, + {0x17, "Parity error in received data"}, + {0x18, "Did not receive EMPTY byte"}, + {0x19, "PDI physical timed out"}, + {0x1A, "Collision on physical level"}, + {0x1B, "PDI enable failed"}, + {0x20, "Target not found"}, + {0x21, "Failure when increasing baud"}, + {0x22, "Target power not detected"}, + {0x23, "Must run attach command first"}, + {0x24, "Devices > 31"}, + {0x25, "Configured device bits do not add up to detected bits"}, + {0x31, "Physical not activated"}, + {0x32, "Illegal run / stopped state"}, + {0x33, "Invalid config for activate phy"}, + {0x34, "Not a valid memtype"}, + {0x35, "Too many or too few bytes"}, + {0x36, "Asked for a bad address"}, + {0x37, "Asked for badly aligned data"}, + {0x38, "Address not within legal range"}, + {0x39, "Illegal value given"}, + {0x3A, "Illegal target ID"}, + {0x3B, "Clock value out of range"}, + {0x3C, "A timeout occurred"}, + {0x3D, "Read an illegal OCD status"}, + {0x40, "NVM failed to be enabled"}, + {0x41, "NVM failed to be disabled"}, + {0x42, "Illegal control/status bits"}, + {0x43, "CRC mismatch"}, + {0x44, "Failed to enable OCD"}, + {0x50, "Device not under control"}, + {0x60, "Error when reading PC"}, + {0x61, "Error when reading register"}, + {0x70, "Error while reading"}, + {0x71, "Error while writing"}, + {0x72, "Timeout while reading"}, + {0x80, "Invalid breakpoint configuration"}, + {0x81, "Not enough available resources"}, + {0x90, "Feature not available"}, + {0x91, "Command has not been implemented"}, + {0xFF, "Unknown error"}, + }); + + public: + explicit Avr8CommandFailure(const std::string& message) : Exception(message) { + this->message = message; + } + + explicit Avr8CommandFailure(const char* message) : Exception(message) { + this->message = std::string(message); + } + + explicit Avr8CommandFailure(const std::string& message, Avr8GenericResponseFrame& responseFrame) + : Exception(message) { + this->message = message; + + auto responsePayload = responseFrame.getPayload(); + if (responsePayload.size() == 3 && this->failureCodeToDescription.contains(responsePayload[2])) { + this->message += " - Failure reason: " + this->failureCodeToDescription.find(responsePayload[2])->second; + } + } + }; +} diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/ResponseFrames/AVR8Generic/Avr8GenericResponseFrame.hpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/ResponseFrames/AVR8Generic/Avr8GenericResponseFrame.hpp new file mode 100644 index 00000000..7ff882b1 --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/ResponseFrames/AVR8Generic/Avr8GenericResponseFrame.hpp @@ -0,0 +1,31 @@ +#pragma once + +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/ResponseFrames/AvrResponseFrame.hpp" + +namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr::ResponseFrames::Avr8Generic +{ + class Avr8GenericResponseFrame: public AvrResponseFrame + { + public: + Avr8GenericResponseFrame(const std::vector& AVRResponses) : AvrResponseFrame(AVRResponses) {} + Avr8GenericResponseFrame() {} + + /** + * See parent method. + */ + std::vector getPayloadData() override { + /* + * AVR8 data payloads are in little endian form and include two bytes before the data (response ID and + * version byte) as well as an additional byte after the data, known as the 'status code'. + */ + auto data = std::vector( + this->getPayload().begin() + 2, + this->getPayload().end() - 1 + ); + + std::reverse(data.begin(), data.end()); + return data; + } + }; + +} diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/ResponseFrames/AVR8Generic/GetDeviceId.hpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/ResponseFrames/AVR8Generic/GetDeviceId.hpp new file mode 100644 index 00000000..d4b94a33 --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/ResponseFrames/AVR8Generic/GetDeviceId.hpp @@ -0,0 +1,40 @@ +#pragma once + +#include "Avr8GenericResponseFrame.hpp" +#include "src/Targets/Microchip/AVR/Target.hpp" + +namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr::ResponseFrames::Avr8Generic +{ + using namespace Targets::Microchip::Avr; + + class GetDeviceId: public Avr8GenericResponseFrame + { + public: + GetDeviceId(const std::vector& AvrResponses) : Avr8GenericResponseFrame(AvrResponses) {} + GetDeviceId() {} + + TargetSignature extractSignature(Avr8PhysicalInterface physicalInterface) { + auto payloadData = this->getPayloadData(); + + switch (physicalInterface) { + case Avr8PhysicalInterface::DEBUG_WIRE: { + /* + * When using the DebugWire physical interface, the get device ID command will return + * four bytes, where the first can be ignored. + */ + return TargetSignature(payloadData[1], payloadData[2], payloadData[3]); + } + case Avr8PhysicalInterface::PDI: + case Avr8PhysicalInterface::PDI_1W: { + /* + * When using the PDI physical interface, the signature is returned in LSB format. + */ + return TargetSignature(payloadData[3], payloadData[2], payloadData[1]); + } + default: { + return TargetSignature(payloadData[0], payloadData[1], payloadData[2]); + } + } + } + }; +} diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/ResponseFrames/AVR8Generic/GetProgramCounter.hpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/ResponseFrames/AVR8Generic/GetProgramCounter.hpp new file mode 100644 index 00000000..1f73e95d --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/ResponseFrames/AVR8Generic/GetProgramCounter.hpp @@ -0,0 +1,32 @@ +#pragma once + +#include + +#include "Avr8GenericResponseFrame.hpp" +#include "src/Exceptions/Exception.hpp" + +namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr::ResponseFrames::Avr8Generic +{ + using namespace Bloom::Exceptions; + + class GetProgramCounter: public Avr8GenericResponseFrame + { + public: + GetProgramCounter(const std::vector& AVRResponses) : Avr8GenericResponseFrame(AVRResponses) {} + GetProgramCounter() {} + + std::uint32_t extractProgramCounter() { + /* + * The payload for the PC Read command should always consist of six bytes. Thr first two being the + * command ID and version, the other four being the PC. The four PC bytes are little-endian. + */ + auto& payload = this->getPayload(); + if (payload.size() != 6) { + throw Exception("Failed to extract PC from payload of PC read command response frame - unexpected payload size."); + } + + return static_cast(payload[5] << 24 | payload[4] << 16 | payload[3] << 8 | payload[2]) * 2; + } + }; + +} diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/ResponseFrames/AVR8Generic/ReadMemory.hpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/ResponseFrames/AVR8Generic/ReadMemory.hpp new file mode 100644 index 00000000..56465d66 --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/ResponseFrames/AVR8Generic/ReadMemory.hpp @@ -0,0 +1,31 @@ +#pragma once + +#include "Avr8GenericResponseFrame.hpp" +#include "src/Targets/TargetMemory.hpp" + +namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr::ResponseFrames::Avr8Generic +{ + using namespace Bloom::Exceptions; + using Bloom::Targets::TargetMemoryBuffer; + + class ReadMemory: public Avr8GenericResponseFrame + { + public: + ReadMemory(const std::vector& AVRResponses) : Avr8GenericResponseFrame(AVRResponses) {} + ReadMemory() {} + + TargetMemoryBuffer getMemoryBuffer() { + /* + * AVR8 data payloads are typically in little endian form, but this does not apply the data returned + * from the READ MEMORY commands. + */ + auto data = std::vector( + this->getPayload().begin() + 2, + this->getPayload().end() - 1 + ); + + return data; + } + }; + +} diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/ResponseFrames/AvrResponseFrame.cpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/ResponseFrames/AvrResponseFrame.cpp new file mode 100644 index 00000000..ea413093 --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/ResponseFrames/AvrResponseFrame.cpp @@ -0,0 +1,38 @@ +#include + +#include "AvrResponseFrame.hpp" +#include "src/Exceptions/Exception.hpp" + +using namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr; +using namespace Bloom::Exceptions; + +void AvrResponseFrame::initFromAvrResponses(const std::vector& avrResponses) { + // Build a raw frame buffer from the AVRResponse objects and just call initFromRawFrame() + std::vector rawFrame; + + for (auto& avrResponse : avrResponses) { + auto responsePacket = avrResponse.getResponsePacket(); + rawFrame.insert(rawFrame.end(), responsePacket.begin(), responsePacket.end()); + } + + return this->initFromRawFrame(rawFrame); +} + +void AvrResponseFrame::initFromRawFrame(const std::vector& rawFrame) { + if (rawFrame.size() < 4) { + // All AVR response frames must consist of at least four bytes (SOF, sequence ID (two bytes) and + // a protocol handler ID) + throw Exception("Failed to construct AvrResponseFrame - unexpected end to raw frame"); + } + + if (rawFrame[0] != 0x0E) { + // The SOF field must always be 0x0E + throw Exception("Failed to construct AvrResponseFrame - unexpected SOF field value in raw frame"); + } + + this->setSequenceId(static_cast((rawFrame[2] << 8) + rawFrame[1])); + this->setProtocolHandlerId(rawFrame[3]); + + auto& payload = this->getPayload(); + payload.insert(payload.begin(), rawFrame.begin() + 4, rawFrame.end()); +} \ No newline at end of file diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/ResponseFrames/AvrResponseFrame.hpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/ResponseFrames/AvrResponseFrame.hpp new file mode 100644 index 00000000..61e0039e --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/ResponseFrames/AvrResponseFrame.hpp @@ -0,0 +1,88 @@ +#pragma once + +#include +#include +#include +#include + +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/Command.hpp" +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/Edbg.hpp" +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/AvrResponse.hpp" + +namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr +{ + using namespace Edbg; + + class AvrResponseFrame + { + private: + unsigned char SOF = 0x0E; + + /** + * Incrementing from 0x00 + */ + std::uint16_t sequenceID = 1; + + /** + * Destination sub-protocol handler ID + */ + ProtocolHandlerId protocolHandlerID; + + std::vector payload; + + protected: + virtual void initFromRawFrame(const std::vector& rawFrame); + + void setSequenceId(std::uint16_t sequenceId) { + this->sequenceID = sequenceId; + } + + void setProtocolHandlerId(ProtocolHandlerId protocolHandlerId) { + this->protocolHandlerID = protocolHandlerId; + } + + void setProtocolHandlerId(unsigned char protocolHandlerId) { + this->protocolHandlerID = static_cast(protocolHandlerId); + } + + void setPayload(const std::vector& payload) { + this->payload = payload; + } + + public: + explicit AvrResponseFrame(const std::vector& AVRResponses) { + this->initFromAvrResponses(AVRResponses); + } + + explicit AvrResponseFrame() {} + + /** + * An AVRResponse contains a single fragment of an AvrResponseFrame. + * + * This method will construct an AvrResponseFrame from a vector of AVRResponses. + * + * @param avrResponses + */ + void initFromAvrResponses(const std::vector& avrResponses); + + std::uint16_t getSequenceId() const { + return this->sequenceID; + } + + ProtocolHandlerId getProtocolHandlerId() const { + return this->protocolHandlerID; + } + + std::vector& getPayload() { + return this->payload; + } + + unsigned char getResponseId() { + return this->payload[0]; + } + + virtual std::vector getPayloadData() { + return this->getPayload(); + } + }; +} diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/ResponseFrames/DiscoveryResponseFrame.hpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/ResponseFrames/DiscoveryResponseFrame.hpp new file mode 100644 index 00000000..ca36ef49 --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/ResponseFrames/DiscoveryResponseFrame.hpp @@ -0,0 +1,29 @@ +#pragma once + +#include "AvrResponseFrame.hpp" + +namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr::ResponseFrames +{ + class DiscoveryResponseFrame: public AvrResponseFrame + { + public: + DiscoveryResponseFrame(const std::vector& AVRResponses) : AvrResponseFrame(AVRResponses) {} + DiscoveryResponseFrame() {} + + /** + * See parent method. + */ + std::vector getPayloadData() override { + /* + * DISCOVERY payloads include two bytes before the data (response ID and version byte). + */ + auto data = std::vector( + this->getPayload().begin() + 2, + this->getPayload().end() + ); + + return data; + } + }; + +} diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/Edbg.hpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/Edbg.hpp new file mode 100644 index 00000000..da4357da --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/Edbg.hpp @@ -0,0 +1,12 @@ +#pragma once + +namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg +{ + enum class ProtocolHandlerId: unsigned char + { + Discovery = 0x00, + HouseKeeping = 0x01, + Avr8Generic = 0x12, + Avr32Generic = 0x13, + }; +} \ No newline at end of file diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/EdbgInterface.cpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/EdbgInterface.cpp new file mode 100644 index 00000000..a466c246 --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/EdbgInterface.cpp @@ -0,0 +1,91 @@ +#include +#include +#include + +#include "EdbgInterface.hpp" + +using namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg::Avr; +using namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg; +using namespace Bloom::Exceptions; + +Protocols::CmsisDap::Response EdbgInterface::sendAvrCommandFrameAndWaitForResponse( + const Protocols::CmsisDap::Edbg::Avr::AvrCommandFrame& avrCommandFrame +) { + // An AVR command frame can be split into multiple CMSIS-DAP commands. Each command + // containing a fragment of the AvrCommandFrame. + + // Minus 3 to accommodate AVR command meta data + std::size_t maximumCommandPacketSize = (this->getUsbHidInputReportSize() - 3); + + auto avrCommands = avrCommandFrame.generateAvrCommands(maximumCommandPacketSize); + + for (auto& avrCommand : avrCommands) { + // Send command to device + auto response = this->sendCommandAndWaitForResponse(avrCommand); + + if (&avrCommand ==& avrCommands.back()) { + return* response; + } + } + + // This should never happen + throw Exception("Cannot send AVR command frame - failed to generate CMSIS-DAP Vendor (AVR) commands"); +} + +Protocols::CmsisDap::Edbg::Avr::AvrResponse EdbgInterface::getAvrResponse() { + auto cmsisResponse = this->getResponse(); + + if (cmsisResponse->getResponseId() == 0x81) { + // This is an AVR_RSP response + auto avrResponse = Protocols::CmsisDap::Edbg::Avr::AvrResponse(); + avrResponse.init(*cmsisResponse); + return avrResponse; + } else { + throw Exception("Unexpected response to AvrResponseCommand from device"); + } +} + +std::optional EdbgInterface::requestAvrEvent() { + this->sendCommand(AvrEventCommand()); + auto cmsisResponse = this->getResponse(); + + if (cmsisResponse->getResponseId() == 0x82) { + // This is an AVR_EVT response + auto avrEvent = Protocols::CmsisDap::Edbg::Avr::AvrEvent(); + avrEvent.init(*cmsisResponse); + return avrEvent.getEventDataSize() > 0 ? std::optional(avrEvent) : std::nullopt; + } else { + throw Exception("Unexpected response to AvrEventCommand from device"); + } +} + +std::vector EdbgInterface::requestAvrResponses() { + std::vector responses; + AvrResponseCommand responseCommand; + + this->sendCommand(responseCommand); + auto response = this->getAvrResponse(); + responses.push_back(response); + int fragmentCount = response.getFragmentCount(); + + while (responses.size() < fragmentCount) { + // There are more response packets + this->sendCommand(responseCommand); + response = this->getAvrResponse(); + + if (response.getFragmentCount() != fragmentCount) { + throw Exception("Failed to fetch AVRResponse objects - invalid fragment count returned."); + } + + if (response.getFragmentCount() == 0 && response.getFragmentNumber() == 0) { + throw Exception("Failed to fetch AVRResponse objects - unexpected empty response"); + } else if (response.getFragmentNumber() == 0) { + // End of response data ( &this packet can be ignored) + break; + } + + responses.push_back(response); + } + + return responses; +} \ No newline at end of file diff --git a/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/EdbgInterface.hpp b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/EdbgInterface.hpp new file mode 100644 index 00000000..abf9849d --- /dev/null +++ b/src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/EdbgInterface.hpp @@ -0,0 +1,77 @@ +#pragma once + +#include + +#include "src/Exceptions/Exception.hpp" +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/CmsisDapInterface.hpp" +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/AvrCommand.hpp" +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/AvrEventCommand.hpp" +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/AvrEvent.hpp" +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AvrCommandFrame.hpp" +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/AvrResponseCommand.hpp" +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/ResponseFrames/AvrResponseFrame.hpp" +#include "src/DebugToolDrivers/Protocols/CMSIS-DAP/VendorSpecific/EDBG/AVR/CommandFrames/AvrCommandFrame.hpp" + +namespace Bloom::DebugToolDrivers::Protocols::CmsisDap::Edbg +{ + using namespace Protocols::CmsisDap::Edbg::Avr; + using namespace Exceptions; + + /** + * The EdbgInterface class implements the EDBG sub-protocol, which takes the form of numerous CMSIS-DAP vendor + * commands. + */ + class EdbgInterface: public CmsisDapInterface + { + public: + explicit EdbgInterface() = default; + + /** + * Send an AvrCommandFrame to the debug tool and wait for a response. + * + * NOTE: The response this method waits for is *not* an AvrResponseFrame, but rather, just a response from + * the debug tool indicating successful receipt of the AvrCommandFrame. + * See EdbgInterface::sendAvrCommandFrameAndWaitForResponseFrame(). + * + * @param avrCommandFrame + * @return + */ + virtual Protocols::CmsisDap::Response sendAvrCommandFrameAndWaitForResponse( + const Protocols::CmsisDap::Edbg::Avr::AvrCommandFrame& avrCommandFrame + ); + + Protocols::CmsisDap::Edbg::Avr::AvrResponse getAvrResponse(); + + virtual std::vector requestAvrResponses(); + + virtual std::optional requestAvrEvent(); + + + template + typename CommandFrameType::ResponseFrameType sendAvrCommandFrameAndWaitForResponseFrame( + const CommandFrameType& avrCommandFrame + ) { + static_assert( + std::is_base_of::value, + "AVR Command must be base of AvrCommandFrame." + ); + + static_assert( + std::is_base_of::value, + "AVR Command must specify a valid response frame type, derived from AvrResponseFrame." + ); + + auto response = this->sendAvrCommandFrameAndWaitForResponse(avrCommandFrame); + + if (response.getData()[0] != 0x01) { + // The last response packet should always acknowledge receipt of the AvrCommandFrame + throw Exception("Failed to send AvrCommandFrame to device - device did not acknowledge receipt."); + } + + auto responses = this->requestAvrResponses(); + auto responseFrame = typename CommandFrameType::ResponseFrameType(); + responseFrame.initFromAvrResponses(responses); + return responseFrame; + } + }; +} diff --git a/src/DebugToolDrivers/TargetInterfaces/Microchip/AVR/AVR8/Avr8Interface.hpp b/src/DebugToolDrivers/TargetInterfaces/Microchip/AVR/AVR8/Avr8Interface.hpp new file mode 100644 index 00000000..a5e171d1 --- /dev/null +++ b/src/DebugToolDrivers/TargetInterfaces/Microchip/AVR/AVR8/Avr8Interface.hpp @@ -0,0 +1,211 @@ +#pragma once + +#include +#include + +#include "src/Targets/Microchip/AVR/TargetSignature.hpp" +#include "src/Targets/Microchip/AVR/AVR8/TargetParameters.hpp" +#include "src/Targets/TargetState.hpp" +#include "src/Targets/TargetRegister.hpp" +#include "src/Targets/TargetMemory.hpp" +#include "src/ApplicationConfig.hpp" + +namespace Bloom::DebugToolDrivers::TargetInterfaces::Microchip::Avr::Avr8 +{ + using namespace Bloom; + using namespace Targets::Microchip::Avr; + + using Targets::TargetState; + using Targets::TargetRegisterMap; + using Targets::TargetMemoryBuffer; + using Targets::TargetMemoryType; + using Targets::TargetRegister; + using Targets::TargetRegisters; + using Targets::Microchip::Avr::TargetSignature; + + /** + * Interfacing with an AVR8 target can vary significantly, depending on the debug tool being used. + * + * This class describes the interface required for interfacing with AVR8 targets. + * + * Each debug tool that supports interfacing with AVR8 targets must provide an implementation + * of this interface class. For example, the Atmel-ICE provides the EdbgAvr8Interface implementation for + * interfacing with AVR8 targets. See Bloom::DebugToolDrivers::AtmelIce->getAvr8Interface() and + * Bloom::DebugToolDriver->getAvr8Interface() for more on this. + */ + class Avr8Interface + { + public: + /** + * Configures the interface. Any debug tool -> target interface specific configuration should take + * place here. + * + * For example, the EdbgAvr8Interface implementation configures the physical interface and config + * variant here. + * + * @param targetConfig + */ + virtual void configure(const TargetConfig& targetConfig) = 0; + + /** + * Should accept Avr8 target parameters for configuration of the interface. + * + * @param config + */ + virtual void setTargetParameters(const Avr8Bit::TargetParameters& config) = 0; + + /** + * Should initialise the interface between the debug tool and the AVR8 target. + */ + virtual void init() = 0; + + /** + * Should stop execution on that target. + */ + virtual void stop() = 0; + + /** + * Should resume execution on the AVR8 target. + */ + virtual void run() = 0; + + /** + * Continue execution up to a specific byte address. + */ + virtual void runTo(std::uint32_t address) = 0; + + /** + * Step execution on teh AVR8 target. + */ + virtual void step() = 0; + + /** + * Should reset the AVR8 target. + */ + virtual void reset() = 0; + + /** + * Should activate the physical interface between the debug tool and the AVR8 target. + */ + virtual void activate() = 0; + + /** + * Should deactivate the physical interface between the debug tool and the AVR8 target. + */ + virtual void deactivate() = 0; + + /** + * Should retrieve the AVR8 target signature of the AVR8 target. + * + * This method may invoke stop(), as some interfaces are known to require the target to be in a stopped + * state before the signature can be read. + * + * @return + */ + virtual TargetSignature getDeviceId() = 0; + + /** + * Should set a software breakpoint at a given address. + * + * @param address + */ + virtual void setBreakpoint(std::uint32_t address) = 0; + + /** + * Should remove a software breakpoint at a given address. + * + * @param address + */ + virtual void clearBreakpoint(std::uint32_t address) = 0; + + /** + * Should remove all software and hardware breakpoints on the target. + */ + virtual void clearAllBreakpoints() = 0; + + /** + * Should retrieve the current program counter value from the target. + * + * @return + */ + virtual std::uint32_t getProgramCounter() = 0; + + /** + * Should retrieve the current stack pointer register value from the target. + * + * @return + */ + virtual TargetRegister getStackPointerRegister() = 0; + + /** + * Should retrieve the current status register value from the target. + * + * @return + */ + virtual TargetRegister getStatusRegister() = 0; + + /** + * Should update the program counter value on the target. + * + * @param programCounter + */ + virtual void setProgramCounter(std::uint32_t programCounter) = 0; + + /** + * SHould update the stack pointer register value on the target. + * + * @param stackPointerRegister + */ + virtual void setStackPointerRegister(const TargetRegister& stackPointerRegister) = 0; + + /** + * Should update the status register value on the target. + * + * @param statusRegister + */ + virtual void setStatusRegister(const TargetRegister& statusRegister) = 0; + + /** + * Should read the requested general purpose register from the target. + * + * @param registerIds + * A set of register IDs: 0 -> 31 + * + * @return + */ + virtual TargetRegisters readGeneralPurposeRegisters(std::set registerIds) = 0; + + /** + * Should update the value of general purpose registers. + * + * @param registers + */ + virtual void writeGeneralPurposeRegisters(const TargetRegisters& registers) = 0; + + /** + * Should read memory from the target, for the given memory type. + * + * @param memoryType + * @param startAddress + * @param bytes + * @return + */ + virtual TargetMemoryBuffer readMemory(TargetMemoryType memoryType, std::uint32_t startAddress, std::uint32_t bytes) = 0; + + /** + * Should write memory to the target, for a given memory type. + * + * @param memoryType + * @param startAddress + * @param buffer + */ + virtual void writeMemory(TargetMemoryType memoryType, std::uint32_t startAddress, const TargetMemoryBuffer& buffer) = 0; + + /** + * Should obtain the current target state. + * + * @return + */ + virtual TargetState getTargetState() = 0; + }; +} \ No newline at end of file diff --git a/src/DebugToolDrivers/USB/HID/HidInterface.cpp b/src/DebugToolDrivers/USB/HID/HidInterface.cpp new file mode 100644 index 00000000..741cab04 --- /dev/null +++ b/src/DebugToolDrivers/USB/HID/HidInterface.cpp @@ -0,0 +1,135 @@ +#include +#include +#include +#include + +#include "hidapi.hpp" +#include "HidInterface.hpp" +#include "src/Exceptions/Exception.hpp" +#include "src/Exceptions/DeviceCommunicationFailure.hpp" + +using namespace Bloom::Usb; +using namespace Bloom::Exceptions; + +std::string HidInterface::getDevicePathByInterfaceNumber(const std::uint16_t& interfaceNumber) { + hid_device_info* HIDDeviceInfoList = hid_enumerate(this->getVendorId(), this->getProductId()); + + while (HIDDeviceInfoList != nullptr) { + if (HIDDeviceInfoList->interface_number == interfaceNumber) { + break; + } + + HIDDeviceInfoList = HIDDeviceInfoList->next; + } + + if (HIDDeviceInfoList == nullptr) { + throw std::runtime_error("Failed to match interface number with HID interface."); + } + + auto path = std::string(HIDDeviceInfoList->path); + hid_free_enumeration(HIDDeviceInfoList); + return path; +} + +void HidInterface::init() { + /* + * Because we use the HIDAPI with libusb for our HID interfaces, we must allow the HIDAPI to own the device + * resources (device handle and the interface). However, the HIDAPI does not provide any means to ensure that a + * specific configuration is set against the device. This is why we first open the device via libusb (by calling + * the generic init() method), so that we can set the correct configuration. We then close the device to allow + * the HIDAPI to take ownership. + */ + Interface::init(); + Interface::detachKernelDriver(); + Interface::setConfiguration(0); + Interface::close(); + + hid_init(); + hid_device* hidDevice; + + std::string HIDInterfacePath = this->getDevicePathByInterfaceNumber(this->getNumber()); + Logger::debug("HID device path: " + HIDInterfacePath); + + if ((hidDevice = hid_open_path(HIDInterfacePath.c_str())) == nullptr) { + throw Exception("Failed to open HID device via hidapi."); + } + + if (hidDevice->input_ep_max_packet_size < 1) { + throw Exception("Invalid max packet size for USB endpoint, on interface " + std::to_string(this->getNumber())); + } + + this->setHidDevice(hidDevice); + this->setInputReportSize(static_cast(hidDevice->input_ep_max_packet_size)); + this->setLibUsbDeviceHandle(hidDevice->device_handle); +} + +void HidInterface::close() { + auto hidDevice = this->getHidDevice(); + + if (hidDevice != nullptr) { + this->setLibUsbDeviceHandle(nullptr); + hid_close(hidDevice); + // hid_close() releases the interface + Interface::setClaimed(false); + } + + hid_exit(); + Interface::close(); +} + +std::size_t HidInterface::read(unsigned char* buffer, std::size_t maxLength, unsigned int timeout) { + int transferred; + + if ((transferred = hid_read_timeout(this->getHidDevice(), buffer, maxLength, + timeout == 0 ? -1 : static_cast(timeout))) == -1 + ) { + throw DeviceCommunicationFailure("Failed to read from HID device."); + } + + return static_cast(transferred); +} + +void HidInterface::write(unsigned char* buffer, std::size_t length) { + int transferred; + + if ((transferred = hid_write(this->getHidDevice(), buffer, length)) != length) { + Logger::debug("Attempted to write " + std::to_string(length) + + " bytes to HID interface. Bytes written: " + std::to_string(transferred)); + throw DeviceCommunicationFailure("Failed to write data to HID interface."); + } +} + +void HidInterface::write(std::vector buffer) { + if (buffer.size() > this->getInputReportSize()) { + throw Exception("Cannot send data via HID interface - data exceeds maximum packet size."); + + } else if (buffer.size() < this->getInputReportSize()) { + /* + * Every report we send via the USB HID interface should be of a fixed size. + * In the event of a report being too small, we just fill the buffer vector with 0. + */ + buffer.resize(this->getInputReportSize(), 0); + } + + this->write(buffer.data(), buffer.size()); +} + +std::vector HidInterface::read(unsigned int timeout) { + std::vector output; + auto readSize = this->getInputReportSize(); + + // Attempt to read the first HID report packet, and whatever is left after that. + output.resize(readSize); + auto transferredByteCount = this->read(output.data(), readSize, timeout); + auto totalByteCount = transferredByteCount; + + while (transferredByteCount >= readSize) { + output.resize(totalByteCount + readSize); + + transferredByteCount = this->read(output.data() + totalByteCount, readSize, 1); + totalByteCount += transferredByteCount; + } + + output.resize(totalByteCount); + return output; +} diff --git a/src/DebugToolDrivers/USB/HID/HidInterface.hpp b/src/DebugToolDrivers/USB/HID/HidInterface.hpp new file mode 100644 index 00000000..c6528e72 --- /dev/null +++ b/src/DebugToolDrivers/USB/HID/HidInterface.hpp @@ -0,0 +1,117 @@ +#pragma once + +#include +#include +#include + +#include "hidapi.hpp" +#include "src/DebugToolDrivers/USB/Interface.hpp" + +namespace Bloom::Usb +{ + /** + * The HIDInterface uses the HIDAPI library to implement communication with HID endpoints. + * + * Currently, this interface only supports single-report HID implementations. HID interfaces with + * multiple reports will be supported as-and-when we need it. + */ + class HidInterface: public Interface + { + private: + /** + * The HIDAPI library provides a hid_device data structure to represent a USB HID interface. + * + * @see hidapi.hpp or the HIDAPI documentation for more on this. + */ + hid_device* hidDevice = nullptr; + + /** + * All HID reports have a fixed report length. This means that every packet + * we send or receive to/from an HID endpoint must be equal to the report length in size. + * + * The default input report size is 64 bytes, but this is overridden at interface initialisation. + * @see definition of init() for more on this. + */ + std::size_t inputReportSize = 64; + + void setHidDevice(hid_device* hidDevice) { + this->hidDevice = hidDevice; + } + + void setInputReportSize(const std::size_t& inputReportSize) { + this->inputReportSize = inputReportSize; + } + + /** + * Reads a maximum of `maxLength` bytes into `buffer`, from the HID input endpoint. + * + * Keeping this in the private scope to enforce use of vector. See read() + * method in public scope. + * + * @param buffer + * @param maxLength + * @param timeout + * + * @return + * Number of bytes read. + */ + std::size_t read(unsigned char* buffer, std::size_t maxLength, unsigned int timeout); + + /** + * Writes `length` bytes from `buffer` to HID output endpoint. + * + * Keeping this in the private scope to enforce use of vector. + * @see write(std::vector buffer); + * + * @param buffer + * @param length + */ + void write(unsigned char* buffer, std::size_t length); + + protected: + hid_device* getHidDevice() const { + return this->hidDevice; + } + + public: + std::size_t getInputReportSize() { + return 512; + // return this->inputReportSize; + } + + /** + * Claims the USB HID interface, obtains a hid_device instance and configures + */ + void init() override; + + void close() override; + + /** + * Wrapper for write(unsigned char *buffer, int length) + * + * @param buffer + */ + void write(std::vector buffer); + + /** + * Reads as much data as the device has to offer, into a vector. + * + * If `timeout` is set to 0, this method will block until at least one HID report + * packet is received. + * + * @param timeout + * + * @return + * A vector of the data received from the device. + */ + std::vector read(unsigned int timeout = 0); + + /** + * Resolves a device path from a USB interface number. + * + * @param interfaceNumber + * @return + */ + std::string getDevicePathByInterfaceNumber(const std::uint16_t& interfaceNumber); + }; +} diff --git a/src/DebugToolDrivers/USB/HID/hidapi.hpp b/src/DebugToolDrivers/USB/HID/hidapi.hpp new file mode 100644 index 00000000..801c419b --- /dev/null +++ b/src/DebugToolDrivers/USB/HID/hidapi.hpp @@ -0,0 +1,37 @@ +#pragma once + +#include +#include + +struct hid_device_ { + /* Handle to the actual device. */ + libusb_device_handle* device_handle; + + /* Endpoint information */ + int input_endpoint; + int output_endpoint; + int input_ep_max_packet_size; + + /* The interface number of the HID */ + int interface; + + /* Indexes of Strings */ + int manufacturer_index; + int product_index; + int serial_index; + + /* Whether blocking reads are used */ + int blocking; /* boolean */ + + /* Read thread objects */ + pthread_t thread; + pthread_mutex_t mutex; /* Protects input_reports */ + pthread_cond_t condition; + pthread_barrier_t barrier; /* Ensures correct startup sequence */ + int shutdown_thread; + int cancelled; + struct libusb_transfer* transfer; + + /* List of received input reports. */ + struct input_report* input_reports; +}; diff --git a/src/DebugToolDrivers/USB/Interface.cpp b/src/DebugToolDrivers/USB/Interface.cpp new file mode 100644 index 00000000..b0345d94 --- /dev/null +++ b/src/DebugToolDrivers/USB/Interface.cpp @@ -0,0 +1,150 @@ +#include +#include +#include + +#include "Interface.hpp" +#include "src/Logger/Logger.hpp" +#include "src/Exceptions/Exception.hpp" + +using namespace Bloom::Usb; +using namespace Bloom::Exceptions; + + +void Interface::init() { + libusb_device_descriptor deviceDescriptor = {}; + auto deviceHandle = this->getLibUsbDeviceHandle(); + auto libUsbDevice = this->getUSBDevice(); + int libUsbStatusCode; + + if (libUsbDevice == nullptr) { + throw Exception("Cannot open USB device without libusb device pointer."); + } + + if (deviceHandle == nullptr) { + // Obtain a device handle from libusb + if ((libUsbStatusCode = libusb_open(libUsbDevice, &deviceHandle)) < 0) { + throw Exception("Failed to open USB device - error code " + + std::to_string(libUsbStatusCode) + " returned."); + } + } + + if ((libUsbStatusCode = libusb_get_device_descriptor(libUsbDevice, &deviceDescriptor))) { + throw Exception("Failed to obtain USB device descriptor - error code " + + std::to_string(libUsbStatusCode) + " returned."); + } + + this->setLibUsbDeviceHandle(deviceHandle); + this->setInitialised(true); +} + +void Interface::setConfiguration(int configIndex) { + libusb_config_descriptor* configDescriptor = {}; + int libUsbStatusCode; + + if ((libUsbStatusCode = libusb_get_config_descriptor(this->getUSBDevice(), 0, &configDescriptor))) { + throw Exception("Failed to obtain USB configuration descriptor - error code " + + std::to_string(libUsbStatusCode) + " returned."); + } + + if ((libUsbStatusCode = libusb_set_configuration(this->getLibUsbDeviceHandle(), configDescriptor->bConfigurationValue))) { + throw Exception("Failed to set USB configuration - error code " + + std::to_string(libUsbStatusCode) + " returned."); + } + + libusb_free_config_descriptor(configDescriptor); +} + +void Interface::close() { + auto deviceHandle = this->getLibUsbDeviceHandle(); + this->release(); + + if (deviceHandle != nullptr) { + libusb_close(deviceHandle); + this->setLibUsbDeviceHandle(nullptr); + } + + this->setInitialised(false); +} + +void Interface::claim() { + int interfaceNumber = this->getNumber(); + int libUsbStatusCode = 0; + + this->detachKernelDriver(); + + if (libusb_claim_interface(this->getLibUsbDeviceHandle(), interfaceNumber) != 0) { + throw Exception("Failed to claim interface {" + std::to_string(interfaceNumber) + "} on USB device\n"); + } + + this->setClaimed(true); +} + +void Interface::detachKernelDriver() { + int interfaceNumber = this->getNumber(); + int libUsbStatusCode; + + if ((libUsbStatusCode = libusb_kernel_driver_active(this->getLibUsbDeviceHandle(), interfaceNumber)) != 0) { + if (libUsbStatusCode == 1) { + // A kernel driver is active on this interface. Attempt to detach it + if (libusb_detach_kernel_driver(this->getLibUsbDeviceHandle(), interfaceNumber) != 0) { + throw Exception("Failed to detach kernel driver from interface " + + std::to_string(interfaceNumber) + "\n"); + } + } else { + throw Exception("Failed to check for active kernel driver on USB interface."); + } + } +} + +void Interface::release() { + if (this->isClaimed()) { + if (libusb_release_interface(this->getLibUsbDeviceHandle(), this->getNumber()) != 0) { + throw Exception("Failed to release interface {" + std::to_string(this->getNumber()) + "} on USB device\n"); + } + + this->setClaimed(false); + } +} + +int Interface::read(unsigned char* buffer, unsigned char endPoint, size_t length, size_t timeout) { + int totalTransferred = 0; + int transferred = 0; + int libUsbStatusCode = 0; + + while (length > totalTransferred) { + libUsbStatusCode = libusb_interrupt_transfer( + this->getLibUsbDeviceHandle(), + endPoint, + buffer, + static_cast(length), + &transferred, + static_cast(timeout) + ); + + if (libUsbStatusCode != 0 && libUsbStatusCode != -7) { + throw Exception("Failed to read from USB device. Error code returned: " + std::to_string(libUsbStatusCode)); + } + + totalTransferred += transferred; + } + + return transferred; +} + +void Interface::write(unsigned char* buffer, unsigned char endPoint, int length) { + int transferred = 0; + int libUsbStatusCode = 0; + + libUsbStatusCode = libusb_interrupt_transfer( + this->getLibUsbDeviceHandle(), + endPoint, + buffer, + length, + &transferred, + 0 + ); + + if (libUsbStatusCode != 0) { + throw Exception("Failed to read from USB device. Error code returned: " + std::to_string(libUsbStatusCode)); + } +} diff --git a/src/DebugToolDrivers/USB/Interface.hpp b/src/DebugToolDrivers/USB/Interface.hpp new file mode 100644 index 00000000..2cd3f043 --- /dev/null +++ b/src/DebugToolDrivers/USB/Interface.hpp @@ -0,0 +1,130 @@ +#pragma once + +#include +#include +#include + +#include "UsbDevice.hpp" + +namespace Bloom::Usb +{ + class Interface + { + private: + libusb_device* USBDevice = nullptr; + std::uint16_t vendorId = 0; + std::uint16_t productId = 0; + + /** + * With libusb, we can only claim a single USB interface per device handle. For this reason, + * device handles are stored against the interface. Each interface must obtain a new handle before + * claiming. + */ + libusb_device_handle* libUsbDeviceHandle = nullptr; + std::uint8_t number = 0; + std::string name = ""; + bool initialised = false; + bool claimed = false; + + void setInitialised(bool initialised) { + this->initialised = initialised; + } + + protected: + void setClaimed(bool claimed) { + this->claimed = claimed; + } + + public: + explicit Interface(const std::uint8_t& interfaceNumber = 0) { + this->setNumber(interfaceNumber); + } + + libusb_device* getUSBDevice() const { + return this->USBDevice; + } + + void setUSBDevice(libusb_device* USBDevice) { + this->USBDevice = USBDevice; + } + + libusb_device_handle* getLibUsbDeviceHandle() const { + return this->libUsbDeviceHandle; + } + + void setLibUsbDeviceHandle(libusb_device_handle* libUsbDeviceHandle) { + this->libUsbDeviceHandle = libUsbDeviceHandle; + } + + std::uint8_t getNumber() const { + return this->number; + } + + void setNumber(std::uint8_t number) { + this->number = number; + } + + const std::string& getName() const { + return this->name; + } + + void setName(const std::string& name) { + this->name = name; + } + + bool isClaimed() { + return this->claimed; + } + + bool isInitialised() { + return this->initialised; + } + + std::uint16_t getVendorId() const { + return this->vendorId; + } + + void setVendorId(std::uint16_t vendorId) { + this->vendorId = vendorId; + } + + std::uint16_t getProductId() const { + return this->productId; + } + + void setProductId(std::uint16_t productId) { + this->productId = productId; + } + + /** + * Attempts to obtain a device descriptor and device handle via libusb. + */ + virtual void init(); + + virtual void setConfiguration(int configIndex); + + /** + * Releases the interface and closes the device descriptor. + */ + virtual void close(); + + /** + * Attempts to claim the interface + */ + void claim(); + void detachKernelDriver(); + void release(); + + /** + * @TODO Remove or refactor these (read() and write()) - they're not currently used + * + * @param buffer + * @param endPoint + * @param length + * @param timeout + * @return + */ + virtual int read(unsigned char* buffer, unsigned char endPoint, std::size_t length, std::size_t timeout); + virtual void write(unsigned char* buffer, unsigned char endPoint, int length); + }; +} diff --git a/src/DebugToolDrivers/USB/UsbDevice.cpp b/src/DebugToolDrivers/USB/UsbDevice.cpp new file mode 100644 index 00000000..08184bf3 --- /dev/null +++ b/src/DebugToolDrivers/USB/UsbDevice.cpp @@ -0,0 +1,77 @@ +#include +#include +#include +#include +#include +#include +#include + +#include "UsbDevice.hpp" +#include "src/Logger/Logger.hpp" +#include "src/Exceptions/Exception.hpp" + +using Bloom::Usb::UsbDevice; +using namespace Bloom::Exceptions; + +std::vector UsbDevice::findMatchingDevices( + std::optional vendorId, std::optional productId +) { + auto libUsbContext = this->libUsbContext; + libusb_device** devices = nullptr; + libusb_device* device; + std::vector matchedDevices; + ssize_t i = 0, libUsbStatusCode; + + auto vendorIdToMatch = vendorId.value_or(this->vendorId); + auto productIdToMatch = productId.value_or(this->productId); + + if ((libUsbStatusCode = libusb_get_device_list(libUsbContext, &devices)) < 0) { + throw Exception("Failed to retrieve USB devices - return code: '" + std::to_string(libUsbStatusCode) + + "'"); + } + + while ((device = devices[i++]) != nullptr) { + struct libusb_device_descriptor desc = {}; + + if ((libUsbStatusCode = libusb_get_device_descriptor(device, &desc)) < 0) { + Logger::warning("Failed to retrieve USB device descriptor - return code: '" + + std::to_string(libUsbStatusCode) + "'"); + continue; + } + + if (desc.idVendor == vendorIdToMatch && desc.idProduct == productIdToMatch) { + matchedDevices.push_back(device); + } + } + + libusb_free_device_list(devices, 1); + return matchedDevices; +} + +void UsbDevice::init() +{ + libusb_init(&this->libUsbContext); +// libusb_set_option(this->libUsbContext, LIBUSB_OPTION_LOG_LEVEL, LIBUSB_LOG_LEVEL_NONE); + auto devices = this->findMatchingDevices(); + + if (devices.empty()) { + throw Exception("Failed to find USB device with matching vendor & product ID."); + + } else if (devices.size() > 1) { + // TODO: implement support for multiple devices (maybe via serial number?) + throw Exception("Multiple devices of matching vendor & product ID found.\n" + "Yes, as a program I really am too stupid to figure out what to do " + "here, so I'm just going to quit.\n Please ensure that only one debug tool " + "is connected and then try again."); + } + + // For now, just use the first device found. + this->setLibUsbDevice(devices.front()); +} + +void UsbDevice::close() +{ + if (this->libUsbContext != nullptr) { + libusb_exit(this->libUsbContext); + } +} diff --git a/src/DebugToolDrivers/USB/UsbDevice.hpp b/src/DebugToolDrivers/USB/UsbDevice.hpp new file mode 100644 index 00000000..22519c18 --- /dev/null +++ b/src/DebugToolDrivers/USB/UsbDevice.hpp @@ -0,0 +1,54 @@ +#pragma once + +#include +#include +#include +#include +#include + +#include "src/DebugToolDrivers/DebugTool.hpp" + +namespace Bloom::Usb +{ + class UsbDevice + { + private: + libusb_context* libUsbContext = nullptr; + libusb_device* libUsbDevice = nullptr; + std::uint16_t vendorId; + std::uint16_t productId; + + std::vector findMatchingDevices( + std::optional vendorId = std::nullopt, std::optional productId = std::nullopt + ); + + protected: + void close(); + + public: + void init(); + + UsbDevice(std::uint16_t vendorId, std::uint16_t productId) { + this->vendorId = vendorId; + this->productId = productId; + }; + + ~UsbDevice() = default; + + [[nodiscard]] libusb_device* getLibUsbDevice() const { + return this->libUsbDevice; + } + + void setLibUsbDevice(libusb_device* libUsbDevice) { + this->libUsbDevice = libUsbDevice; + } + + std::uint16_t getVendorId() const { + return this->vendorId; + } + + std::uint16_t getProductId() const { + return this->productId; + } + }; +} diff --git a/src/EventManager/EventListener.cpp b/src/EventManager/EventListener.cpp new file mode 100644 index 00000000..2aedd4c1 --- /dev/null +++ b/src/EventManager/EventListener.cpp @@ -0,0 +1,109 @@ +#include +#include "EventListener.hpp" + +using namespace Bloom; + +std::set EventListener::getRegisteredEventTypeNames() { + return this->registeredEventTypes.getValue(); +} + +void EventListener::clearAllCallbacks() { + auto lock = this->eventTypeToCallbacksMapping.acquireLock(); + this->eventTypeToCallbacksMapping.getReference().clear(); +} + +void EventListener::registerEvent(GenericEventPointer event) { + auto eventName = event->getName(); + Logger::debug("Event \"" + eventName + "\" (" + std::to_string(event->id) + + ") registered for listener " + std::to_string(this->id)); + auto queueLock = this->eventQueueByEventType.acquireLock(); + auto& eventQueueByType = this->eventQueueByEventType.getReference(); + + if (!eventQueueByType.contains(eventName)) { + eventQueueByType.insert( + std::pair>( + eventName, + std::queue() + ) + ); + } + + eventQueueByType[eventName].push(event); + this->eventQueueByEventTypeCV.notify_all(); + + if (this->interruptEventNotifier != nullptr) { + this->interruptEventNotifier->notify(); + } +} + +std::vector EventListener::getEvents() { + auto queueLock = this->eventQueueByEventType.acquireLock(); + auto& eventQueueByType = this->eventQueueByEventType.getReference(); + std::vector output; + + for (auto& eventQueue: eventQueueByType) { + if (eventQueue.second.size() > 0) { + output.push_back(eventQueue.second.front()); + eventQueue.second.pop(); + } + } + + std::sort(output.begin(), output.end(), [](GenericEventPointer a, GenericEventPointer b) { + return a->id < b->id; + }); + + return output; +} + +void EventListener::dispatchEvent(GenericEventPointer event) { + auto eventName = event->getName(); + Logger::debug("Dispatching event " + eventName + "."); + // Dispatch the event to all registered handlers + auto mappingLock = this->eventTypeToCallbacksMapping.acquireLock(); + auto& callbacks = this->eventTypeToCallbacksMapping.getReference().find(eventName)->second; + mappingLock.unlock(); + + for (auto& callback : callbacks) { + callback(event); + } +} + +void EventListener::dispatchCurrentEvents() { + auto events = this->getEvents(); + + for (auto const& event: events) { + dispatchEvent(event); + } +} + +void EventListener::waitAndDispatch(int msTimeout) { + auto queueLock = this->eventQueueByEventType.acquireLock(); + auto& eventQueueByType = this->eventQueueByEventType.getReference(); + auto registeredEventTypes = this->getRegisteredEventTypeNames(); + std::optional event; + + auto eventsFound = [®isteredEventTypes, &event, &eventQueueByType]() -> bool { + for (auto& eventQueue: eventQueueByType) { + if (registeredEventTypes.find(eventQueue.first) != registeredEventTypes.end() + && eventQueue.second.size() > 0 + ) { + return true; + } + } + return false; + }; + + if (msTimeout > 0) { + this->eventQueueByEventTypeCV.wait_for(queueLock, std::chrono::milliseconds(msTimeout), eventsFound); + } else { + this->eventQueueByEventTypeCV.wait(queueLock, eventsFound); + } + + /* + * We don't want the dispatch to block other threads from registering more events. We don't need the + * lock anymore so it's fine to release it here. + */ + queueLock.unlock(); + + this->dispatchCurrentEvents(); +} diff --git a/src/EventManager/EventListener.hpp b/src/EventManager/EventListener.hpp new file mode 100644 index 00000000..3f6604dd --- /dev/null +++ b/src/EventManager/EventListener.hpp @@ -0,0 +1,330 @@ +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "src/EventManager/Events/Events.hpp" +#include "src/Logger/Logger.hpp" +#include "src/Helpers/SyncSafe.hpp" +#include "src/Helpers/EventNotifier.hpp" + +namespace Bloom +{ + using namespace Events; + + /** + * The EventListener allows specific threads the ability to handle any events, from other threads, that + * are of interest. + * + * Usage is fairly simple: + * - Thread A creates an instance to EventListener. + * - Thread A registers callbacks for specific event types via EventListener::registerCallbackForEventType(). + * - Thread A waits for events via EventListener::waitAndDispatch() (or similar methods). + * - Thread B triggers an event of a type that Thread A registered a callback for. + * - Thread A is woken and the triggered event is dispatched to the registered callbacks for the event type. + * + * Events are distributed with shared pointers to const event objects, as each registered handler will own + * the memory (but should never make any changes to it, hence the const state). Once the final handler has + * processed the event, the shared pointer reference count will reach 0 and the event object will be destroyed. + * The type of object within the shared pointers will match that of the specific event type, once it reaches the + * callback functions. We do this by downcasting the events before we dispatch them to the callback functions. + * + * @TODO Whilst event managing should be thread safe, the same cannot be said for all of the event types. + * We need to ensure that all event types are thread safe. + */ + class EventListener + { + private: + /** + * Human readable name for event listeners. + * + * TODO: This was useful during development, but may no longer be needed. + */ + std::string name; + + /** + * Each event listener is supplied an ID upon registering with the EventManager. + */ + size_t id = 0; + + /** + * Holds all events registered to this listener. + * + * Events are grouped by event type name, and removed from their queue just *before* the dispatching to + * registered handlers begins. + */ + SyncSafe>> eventQueueByEventType; + std::condition_variable eventQueueByEventTypeCV; + + /** + * A mapping of event type names to a vector of callback functions. Events will be dispatched to these + * callback functions, during a call to EventListener::waiteAndDispatch(). + * + * Each callback will be passed an std::shared_ptr of the event (we downcast the events in + * EventListener::waiteAndDispatch() before dispatching them). + */ + SyncSafe>>> eventTypeToCallbacksMapping; + SyncSafe> registeredEventTypes; + + std::shared_ptr interruptEventNotifier = nullptr; + + std::vector getEvents(); + + public: + explicit EventListener(const std::string& name) : name(name) {}; + + void setId(size_t id) { + this->id = id; + }; + + size_t getId() const { + return this->id; + }; + + /** + * Generates a list of event types names currently registered in the listener. + * + * @return + */ + std::set getRegisteredEventTypeNames(); + + /** + * Registers an event with the event listener + * + * @param event + */ + void registerEvent(GenericEventPointer event); + + void setInterruptEventNotifier(std::shared_ptr interruptEventNotifier) { + this->interruptEventNotifier = interruptEventNotifier; + } + + /** + * Registers a callback function for an event type. The callback function will be + * invoked upon an event of type EventType being dispatched to the listener. + * + * @tparam EventType + * @param callback + */ + template + void registerCallbackForEventType(std::function)> callback) { + // We encapsulate the callback in a lambda to handle the downcasting. + std::function parentCallback = + [callback] (GenericEventPointer event) { + // Downcast the event to the expected type + callback(std::dynamic_pointer_cast(event)); + } + ; + + auto mappingLock = this->eventTypeToCallbacksMapping.acquireLock(); + auto& mapping = this->eventTypeToCallbacksMapping.getReference(); + + if (mapping.find(EventType::name) == mapping.end()) { + /* + * Multiple callbacks can be registered for a single event type. + * + * We have no callbacks for this event type registered in this listener, so setup + * the type name to callback vector mapping. + */ + mapping.insert( + std::pair>>( + EventType::name, + std::vector>() + ) + ); + } + + mapping[EventType::name].push_back(parentCallback); + auto registeredEventTypesLock = this->registeredEventTypes.acquireLock(); + this->registeredEventTypes.getReference().insert(EventType::name); + } + + /** + * Waits for an event (of type EventTypeA, EventTypeB or EventTypeC) to be dispatched to the listener. + * Then returns the event object. If timeout is reached, an std::nullopt object will be returned. + * + * @tparam EventType + * @param timeout + * Millisecond duration to wait for an event to be dispatched to the listener. + * A value of std::nullopt will disable the timeout, meaning the function will block until the appropriate + * event has been dispatched. + * + * @param correlationId + * If a correlation ID is provided, this function will ignore any events that do not contain a matching + * correlation ID. + * + * @return + * If only one event type is passed (EventTypeA), an std::optional will be returned, carrying an + * event pointer to that event type (or std::nullopt if timeout was reached). If numerous event types are + * passed, an std::optional will carry an std::variant of the event pointers to the passed event types + * (or std::nullopt if timeout was reached). + */ + template + auto waitForEvent( + std::optional timeout = std::nullopt, + std::optional correlationId = std::nullopt + ) { + // Different return types, depending on how many event type arguments are passed in. + using MonoType = std::optional>; + using BiVariantType = std::optional< + std::variant< + std::monostate, + EventPointer, + EventPointer + > + >; + using TriVariantType = std::optional< + std::variant< + std::monostate, + EventPointer, + EventPointer, + EventPointer + > + >; + using ReturnType = typename std::conditional< + !std::is_same_v && !std::is_same_v, + TriVariantType, + typename std::conditional, + BiVariantType, + MonoType + >::type + >::type; + + ReturnType output = std::nullopt; + + auto queueLock = this->eventQueueByEventType.acquireLock(); + auto& eventQueueByType = this->eventQueueByEventType.getReference(); + + auto eventTypeNames = std::set({EventTypeA::name}); + auto eventTypeNamesToDeRegister = std::set(); + + if constexpr (!std::is_same_v) { + static_assert(std::is_base_of_v, "All event types must be derived from the Event base class."); + eventTypeNames.insert(EventTypeB::name); + } + + if constexpr (!std::is_same_v) { + static_assert(std::is_base_of_v, "All event types must be derived from the Event base class."); + eventTypeNames.insert(EventTypeC::name); + } + + { + auto registeredEventTypesLock = this->registeredEventTypes.acquireLock(); + auto& registeredEventTypes = this->registeredEventTypes.getReference(); + + for (const auto& eventTypeName : eventTypeNames) { + if (registeredEventTypes.find(eventTypeName) == registeredEventTypes.end()) { + registeredEventTypes.insert(eventTypeName); + eventTypeNamesToDeRegister.insert(eventTypeName); + } + } + } + + GenericEventPointer foundEvent = nullptr; + auto eventsFound = [&eventTypeNames, &eventQueueByType, &correlationId, &foundEvent]() -> bool { + for (const auto& eventTypeName : eventTypeNames) { + if (eventQueueByType.find(eventTypeName) != eventQueueByType.end() + && eventQueueByType.find(eventTypeName)->second.size() > 0 + ) { + auto& queue = eventQueueByType.find(eventTypeName)->second; + while (queue.size() > 0) { + auto event = queue.front(); + + if (!correlationId.has_value() + || (event->correlationId.has_value() && event->correlationId == correlationId) + ) { + foundEvent = event; + queue.pop(); + return true; + } + + // Events that match in type but not correlation ID are disregarded + queue.pop(); + } + } + } + + return false; + }; + + if (timeout.has_value()) { + this->eventQueueByEventTypeCV.wait_for(queueLock, timeout.value(), eventsFound); + + } else { + this->eventQueueByEventTypeCV.wait(queueLock, eventsFound); + } + + if (!eventTypeNamesToDeRegister.empty()) { + auto registeredEventTypesLock = this->registeredEventTypes.acquireLock(); + auto& registeredEventTypes = this->registeredEventTypes.getReference(); + + for (const auto& eventTypeName : eventTypeNamesToDeRegister) { + registeredEventTypes.erase(eventTypeName); + } + } + + if (foundEvent != nullptr) { + // If we're looking for multiple event types, use an std::variant. + if constexpr (!std::is_same_v || !std::is_same_v) { + if (foundEvent->getName() == EventTypeA::name) { + output = std::optional(std::dynamic_pointer_cast(foundEvent)); + + } else if constexpr (!std::is_same_v) { + if (foundEvent->getName() == EventTypeB::name) { + output = std::optional(std::dynamic_pointer_cast(foundEvent)); + } + } + + if constexpr (!std::is_same_v) { + if (foundEvent->getName() == EventTypeC::name) { + output = std::optional(std::dynamic_pointer_cast(foundEvent)); + } + } + + } else { + if (foundEvent->getName() == EventTypeA::name) { + output = std::dynamic_pointer_cast(foundEvent); + } + } + } + + return output; + } + + /** + * Waits for new events with types that have been registered with registerCallbackForEventType() and dispatches + * any events to their appropriate registered callback handlers. + * + * This method will return after one event has been handled. + */ + void waitAndDispatch(int msTimeout = 0); + + void dispatchEvent(GenericEventPointer event); + + void dispatchCurrentEvents(); + + /** + * Removes all callbacks registered for the event listener. + */ + void clearAllCallbacks(); + }; + + /** + * Every component within Bloom that requires access to events will possess an instance to the EventListener class. + * At some point (usually at component initialisation), the event listener will be registered with the EventManager, + * using EventManager::registerListener(). Upon registering the listener, the EventManager obtains partial ownership + * of the event listener. + * + * In other words, event listeners are managed by numerous entities and that's why we use a shared_ptr here. + */ + using EventListenerPointer = std::shared_ptr; +} diff --git a/src/EventManager/EventManager.cpp b/src/EventManager/EventManager.cpp new file mode 100644 index 00000000..9c67f867 --- /dev/null +++ b/src/EventManager/EventManager.cpp @@ -0,0 +1,26 @@ +#include "EventManager.hpp" + +using namespace Bloom; + +void EventManager::registerListener(std::shared_ptr listener) { + auto registerListenersLock = std::unique_lock(this->registerListenerMutex); + size_t newId = this->registeredListeners.size() + 1; + + this->registeredListeners.insert(std::pair>(newId, listener)); + listener->setId(newId); +} + +void EventManager::deregisterListener(size_t listenerId) { + auto registerListenersLock = std::unique_lock(this->registerListenerMutex); + this->registeredListeners.erase(listenerId); +} + +void EventManager::triggerEvent(std::shared_ptr event) { + auto registerListenersLock = std::unique_lock(this->registerListenerMutex); + for(auto const& [listenerId, listener] : this->registeredListeners) { + auto registeredEventTypes = listener->getRegisteredEventTypeNames(); + if (registeredEventTypes.find(event->getName()) != registeredEventTypes.end()) { + listener->registerEvent(event); + } + } +} diff --git a/src/EventManager/EventManager.hpp b/src/EventManager/EventManager.hpp new file mode 100644 index 00000000..14b6c809 --- /dev/null +++ b/src/EventManager/EventManager.hpp @@ -0,0 +1,32 @@ +#pragma once + +#include +#include +#include +#include "Events/Events.hpp" +#include "EventListener.hpp" + +namespace Bloom +{ + class EventManager + { + private: + /** + * A mapping of listener IDs to registered listeners. Each registered listener is given an interger ID. + */ + std::map> registeredListeners; + std::mutex registerListenerMutex; + + public: + /** + * Generates a new registered listener. + * + * @param listenerName + */ + void registerListener(std::shared_ptr listener); + void deregisterListener(size_t listenerId); + + void triggerEvent(GenericEventPointer event); + }; + +} diff --git a/src/EventManager/Events/BreakpointRemovedOnTarget.hpp b/src/EventManager/Events/BreakpointRemovedOnTarget.hpp new file mode 100644 index 00000000..81c6b1c9 --- /dev/null +++ b/src/EventManager/Events/BreakpointRemovedOnTarget.hpp @@ -0,0 +1,16 @@ +#pragma once + +#include "Event.hpp" + +namespace Bloom::Events +{ + class BreakpointRemovedOnTarget: public Event + { + public: + static inline const std::string name = "BreakpointRemovedOnTarget"; + + std::string getName() const override { + return BreakpointRemovedOnTarget::name; + } + }; +} diff --git a/src/EventManager/Events/BreakpointSetOnTarget.hpp b/src/EventManager/Events/BreakpointSetOnTarget.hpp new file mode 100644 index 00000000..cab75bc9 --- /dev/null +++ b/src/EventManager/Events/BreakpointSetOnTarget.hpp @@ -0,0 +1,17 @@ +#pragma once + +#include +#include "Event.hpp" + +namespace Bloom::Events +{ + class BreakpointSetOnTarget: public Event + { + public: + static inline const std::string name = "BreakpointSetOnTarget"; + + std::string getName() const override { + return BreakpointSetOnTarget::name; + } + }; +} diff --git a/src/EventManager/Events/DebugServerStateChanged.hpp b/src/EventManager/Events/DebugServerStateChanged.hpp new file mode 100644 index 00000000..ddb690b9 --- /dev/null +++ b/src/EventManager/Events/DebugServerStateChanged.hpp @@ -0,0 +1,25 @@ +#pragma once + +#include +#include "Event.hpp" + +namespace Bloom::Events +{ + class DebugServerStateChanged: public Event + { + private: + ThreadState state; + public: + DebugServerStateChanged(ThreadState state) : state(state) {}; + + static inline const std::string name = "DebugServerStateChanged"; + + std::string getName() const override { + return DebugServerStateChanged::name; + } + + ThreadState getState() const { + return this->state; + } + }; +} diff --git a/src/EventManager/Events/DebugSessionFinished.hpp b/src/EventManager/Events/DebugSessionFinished.hpp new file mode 100644 index 00000000..b7e2f1c7 --- /dev/null +++ b/src/EventManager/Events/DebugSessionFinished.hpp @@ -0,0 +1,16 @@ +#pragma once + +#include "Event.hpp" + +namespace Bloom::Events +{ + class DebugSessionFinished: public Event + { + public: + static inline const std::string name = "DebugSessionFinished"; + + std::string getName() const override { + return DebugSessionFinished::name; + } + }; +} diff --git a/src/EventManager/Events/DebugSessionStarted.hpp b/src/EventManager/Events/DebugSessionStarted.hpp new file mode 100644 index 00000000..9639d5c9 --- /dev/null +++ b/src/EventManager/Events/DebugSessionStarted.hpp @@ -0,0 +1,16 @@ +#pragma once + +#include "Event.hpp" + +namespace Bloom::Events +{ + class DebugSessionStarted: public Event + { + public: + static inline const std::string name = "DebugSessionStarted"; + + std::string getName() const override { + return DebugSessionStarted::name; + } + }; +} diff --git a/src/EventManager/Events/Event.hpp b/src/EventManager/Events/Event.hpp new file mode 100644 index 00000000..062eec2f --- /dev/null +++ b/src/EventManager/Events/Event.hpp @@ -0,0 +1,34 @@ +#pragma once + +#include +#include +#include +#include + +#include "src/Helpers/DateTime.hpp" + +namespace Bloom::Events +{ + static_assert(std::atomic::is_always_lock_free); + + class Event + { + private: + QDateTime createdTimestamp = DateTime::currentDateTime(); + static inline std::atomic lastEventId = 0; + + public: + int id = ++(this->lastEventId); + std::optional correlationId; + + static inline const std::string name = "GenericEvent"; + + virtual std::string getName() const { + return Event::name; + } + + long getCreatedEpochTimestamp() const { + return this->createdTimestamp.toMSecsSinceEpoch(); + } + }; +} diff --git a/src/EventManager/Events/Events.hpp b/src/EventManager/Events/Events.hpp new file mode 100644 index 00000000..1d6cd1fe --- /dev/null +++ b/src/EventManager/Events/Events.hpp @@ -0,0 +1,49 @@ +#pragma once + +#include + +#include "Event.hpp" +#include "StopTargetExecution.hpp" +#include "ResumeTargetExecution.hpp" +#include "ResetTarget.hpp" +#include "DebugSessionStarted.hpp" +#include "DebugSessionFinished.hpp" +#include "TargetControllerStateChanged.hpp" +#include "TargetControllerStopped.hpp" +#include "ShutdownTargetController.hpp" +#include "TargetControllerErrorOccurred.hpp" +#include "ShutdownApplication.hpp" +#include "DebugServerStateChanged.hpp" +#include "ShutdownDebugServer.hpp" +#include "RetrieveRegistersFromTarget.hpp" +#include "RegistersRetrievedFromTarget.hpp" +#include "WriteRegistersToTarget.hpp" +#include "RegistersWrittenToTarget.hpp" +#include "TargetExecutionResumed.hpp" +#include "TargetExecutionStopped.hpp" +#include "RetrieveMemoryFromTarget.hpp" +#include "MemoryRetrievedFromTarget.hpp" +#include "WriteMemoryToTarget.hpp" +#include "MemoryWrittenToTarget.hpp" +#include "SetBreakpointOnTarget.hpp" +#include "RemoveBreakpointOnTarget.hpp" +#include "BreakpointSetOnTarget.hpp" +#include "BreakpointRemovedOnTarget.hpp" +#include "StepTargetExecution.hpp" +#include "SetProgramCounterOnTarget.hpp" +#include "ProgramCounterSetOnTarget.hpp" +#include "ExtractTargetDescriptor.hpp" +#include "TargetDescriptorExtracted.hpp" +#include "InsightStateChanged.hpp" +#include "RetrieveTargetPinStates.hpp" +#include "TargetPinStatesRetrieved.hpp" +#include "SetTargetPinState.hpp" +#include "TargetIoPortsUpdated.hpp" + +namespace Bloom::Events +{ + template + using EventPointer = std::shared_ptr; + + using GenericEventPointer = EventPointer; +} diff --git a/src/EventManager/Events/ExtractTargetDescriptor.hpp b/src/EventManager/Events/ExtractTargetDescriptor.hpp new file mode 100644 index 00000000..04c744ac --- /dev/null +++ b/src/EventManager/Events/ExtractTargetDescriptor.hpp @@ -0,0 +1,18 @@ +#pragma once + +#include + +#include "Event.hpp" + +namespace Bloom::Events +{ + class ExtractTargetDescriptor: public Event + { + public: + static inline const std::string name = "ExtractTargetDescriptor"; + + std::string getName() const override { + return ExtractTargetDescriptor::name; + } + }; +} diff --git a/src/EventManager/Events/InsightStateChanged.hpp b/src/EventManager/Events/InsightStateChanged.hpp new file mode 100644 index 00000000..da585f58 --- /dev/null +++ b/src/EventManager/Events/InsightStateChanged.hpp @@ -0,0 +1,27 @@ +#pragma once + +#include "Event.hpp" +#include "src/Helpers/Thread.hpp" + +namespace Bloom::Events +{ + class InsightStateChanged: public Event + { + private: + ThreadState state; + public: + InsightStateChanged(ThreadState state) : state(state) { + + }; + + static inline const std::string name = "InsightStateChanged"; + + std::string getName() const override { + return InsightStateChanged::name; + } + + ThreadState getState() const { + return this->state; + } + }; +} diff --git a/src/EventManager/Events/MemoryRetrievedFromTarget.hpp b/src/EventManager/Events/MemoryRetrievedFromTarget.hpp new file mode 100644 index 00000000..98a34b95 --- /dev/null +++ b/src/EventManager/Events/MemoryRetrievedFromTarget.hpp @@ -0,0 +1,21 @@ +#pragma once + +#include + +#include "Event.hpp" +#include "src/Targets/TargetMemory.hpp" + +namespace Bloom::Events +{ + using Targets::TargetMemoryBuffer; + class MemoryRetrievedFromTarget: public Event + { + public: + static inline const std::string name = "MemoryRetrievedFromTarget"; + TargetMemoryBuffer data; + + std::string getName() const override { + return MemoryRetrievedFromTarget::name; + } + }; +} diff --git a/src/EventManager/Events/MemoryWrittenToTarget.hpp b/src/EventManager/Events/MemoryWrittenToTarget.hpp new file mode 100644 index 00000000..e6f1494f --- /dev/null +++ b/src/EventManager/Events/MemoryWrittenToTarget.hpp @@ -0,0 +1,21 @@ +#pragma once + +#include "Event.hpp" +#include "src/Targets/TargetMemory.hpp" + +namespace Bloom::Events +{ + using Bloom::Targets::TargetMemoryBuffer; + + class MemoryWrittenToTarget: public Event + { + public: + static inline const std::string name = "MemoryWrittenToTarget"; + + std::string getName() const override { + return MemoryWrittenToTarget::name; + } + + MemoryWrittenToTarget() = default; + }; +} diff --git a/src/EventManager/Events/ProgramCounterSetOnTarget.hpp b/src/EventManager/Events/ProgramCounterSetOnTarget.hpp new file mode 100644 index 00000000..00a0e9db --- /dev/null +++ b/src/EventManager/Events/ProgramCounterSetOnTarget.hpp @@ -0,0 +1,16 @@ +#pragma once + +#include "Event.hpp" + +namespace Bloom::Events +{ + class ProgramCounterSetOnTarget: public Event + { + public: + static inline const std::string name = "ProgramCounterSetOnTarget"; + + std::string getName() const override { + return ProgramCounterSetOnTarget::name; + } + }; +} diff --git a/src/EventManager/Events/RegistersRetrievedFromTarget.hpp b/src/EventManager/Events/RegistersRetrievedFromTarget.hpp new file mode 100644 index 00000000..61d43e61 --- /dev/null +++ b/src/EventManager/Events/RegistersRetrievedFromTarget.hpp @@ -0,0 +1,22 @@ +#pragma once + +#include + +#include "Event.hpp" +#include "src/Targets/TargetRegister.hpp" + +namespace Bloom::Events +{ + using Targets::TargetRegisters; + + class RegistersRetrievedFromTarget: public Event + { + public: + static inline const std::string name = "RegistersRetrievedFromTarget"; + TargetRegisters registers; + + std::string getName() const override { + return RegistersRetrievedFromTarget::name; + } + }; +} diff --git a/src/EventManager/Events/RegistersWrittenToTarget.hpp b/src/EventManager/Events/RegistersWrittenToTarget.hpp new file mode 100644 index 00000000..58a6cdb9 --- /dev/null +++ b/src/EventManager/Events/RegistersWrittenToTarget.hpp @@ -0,0 +1,18 @@ +#pragma once + +#include + +#include "Event.hpp" + +namespace Bloom::Events +{ + class RegistersWrittenToTarget: public Event + { + public: + static inline const std::string name = "RegistersWrittenToTarget"; + + std::string getName() const override { + return RegistersWrittenToTarget::name; + } + }; +} diff --git a/src/EventManager/Events/RemoveBreakpointOnTarget.hpp b/src/EventManager/Events/RemoveBreakpointOnTarget.hpp new file mode 100644 index 00000000..c50a3fc9 --- /dev/null +++ b/src/EventManager/Events/RemoveBreakpointOnTarget.hpp @@ -0,0 +1,23 @@ +#pragma once + +#include + +#include "Event.hpp" +#include "src/Targets/TargetBreakpoint.hpp" + +namespace Bloom::Events +{ + using Targets::TargetBreakpoint; + + class RemoveBreakpointOnTarget: public Event + { + public: + static inline const std::string name = "RemoveBreakpointOnTarget"; + std::uint32_t address; + TargetBreakpoint breakpoint; + + std::string getName() const override { + return RemoveBreakpointOnTarget::name; + } + }; +} diff --git a/src/EventManager/Events/ResetTarget.hpp b/src/EventManager/Events/ResetTarget.hpp new file mode 100644 index 00000000..368c66ac --- /dev/null +++ b/src/EventManager/Events/ResetTarget.hpp @@ -0,0 +1,16 @@ +#pragma once + +#include "Event.hpp" + +namespace Bloom::Events +{ + class ResetTarget: public Event + { + public: + static inline const std::string name = "ResetTargetEvent"; + + std::string getName() const override { + return ResetTarget::name; + } + }; +} diff --git a/src/EventManager/Events/ResumeTargetExecution.hpp b/src/EventManager/Events/ResumeTargetExecution.hpp new file mode 100644 index 00000000..8f403dba --- /dev/null +++ b/src/EventManager/Events/ResumeTargetExecution.hpp @@ -0,0 +1,22 @@ +#pragma once + +#include + +#include "Event.hpp" + +namespace Bloom::Events +{ + class ResumeTargetExecution: public Event + { + public: + static inline const std::string name = "ResumeTargetExecutionEvent"; + std::optional fromProgramCounter; + + std::string getName() const override { + return ResumeTargetExecution::name; + } + + ResumeTargetExecution() = default; + ResumeTargetExecution(std::uint32_t fromProgramCounter) : fromProgramCounter(fromProgramCounter) {}; + }; +} diff --git a/src/EventManager/Events/RetrieveMemoryFromTarget.hpp b/src/EventManager/Events/RetrieveMemoryFromTarget.hpp new file mode 100644 index 00000000..84373d68 --- /dev/null +++ b/src/EventManager/Events/RetrieveMemoryFromTarget.hpp @@ -0,0 +1,24 @@ +#pragma once + +#include + +#include "Event.hpp" +#include "src/Targets/TargetMemory.hpp" + +namespace Bloom::Events +{ + using Targets::TargetMemoryType; + + class RetrieveMemoryFromTarget: public Event + { + public: + static inline const std::string name = "RetrieveMemoryFromTarget"; + TargetMemoryType memoryType = TargetMemoryType::RAM; + std::uint32_t startAddress; + std::uint32_t bytes; + + std::string getName() const override { + return RetrieveMemoryFromTarget::name; + } + }; +} diff --git a/src/EventManager/Events/RetrieveRegistersFromTarget.hpp b/src/EventManager/Events/RetrieveRegistersFromTarget.hpp new file mode 100644 index 00000000..ae6f8b48 --- /dev/null +++ b/src/EventManager/Events/RetrieveRegistersFromTarget.hpp @@ -0,0 +1,22 @@ +#pragma once + +#include + +#include "Event.hpp" +#include "src/Targets/TargetRegister.hpp" + +namespace Bloom::Events +{ + using Bloom::Targets::TargetRegisterDescriptors; + + class RetrieveRegistersFromTarget: public Event + { + public: + static inline const std::string name = "RetrieveRegistersFromTarget"; + TargetRegisterDescriptors descriptors; + + std::string getName() const override { + return RetrieveRegistersFromTarget::name; + } + }; +} diff --git a/src/EventManager/Events/RetrieveTargetPinStates.hpp b/src/EventManager/Events/RetrieveTargetPinStates.hpp new file mode 100644 index 00000000..99849d98 --- /dev/null +++ b/src/EventManager/Events/RetrieveTargetPinStates.hpp @@ -0,0 +1,19 @@ +#pragma once + +#include + +#include "Event.hpp" + +namespace Bloom::Events +{ + class RetrieveTargetPinStates: public Event + { + public: + static inline const std::string name = "RetrieveTargetPinStates"; + int variantId; + + std::string getName() const override { + return RetrieveTargetPinStates::name; + } + }; +} diff --git a/src/EventManager/Events/SetBreakpointOnTarget.hpp b/src/EventManager/Events/SetBreakpointOnTarget.hpp new file mode 100644 index 00000000..16dce3c2 --- /dev/null +++ b/src/EventManager/Events/SetBreakpointOnTarget.hpp @@ -0,0 +1,23 @@ +#pragma once + +#include + +#include "Event.hpp" +#include "src/Targets/TargetBreakpoint.hpp" + +namespace Bloom::Events +{ + using Targets::TargetBreakpoint; + + class SetBreakpointOnTarget: public Event + { + public: + static inline const std::string name = "SetBreakpointOnTarget"; + std::uint32_t address; + TargetBreakpoint breakpoint; + + std::string getName() const override { + return SetBreakpointOnTarget::name; + } + }; +} diff --git a/src/EventManager/Events/SetProgramCounterOnTarget.hpp b/src/EventManager/Events/SetProgramCounterOnTarget.hpp new file mode 100644 index 00000000..1f319e6f --- /dev/null +++ b/src/EventManager/Events/SetProgramCounterOnTarget.hpp @@ -0,0 +1,17 @@ +#pragma once + +#include "Event.hpp" + +namespace Bloom::Events +{ + class SetProgramCounterOnTarget: public Event + { + public: + static inline const std::string name = "SetProgramCounterOnTarget"; + std::uint32_t address; + + std::string getName() const override { + return SetProgramCounterOnTarget::name; + } + }; +} diff --git a/src/EventManager/Events/SetTargetPinState.hpp b/src/EventManager/Events/SetTargetPinState.hpp new file mode 100644 index 00000000..08b1778d --- /dev/null +++ b/src/EventManager/Events/SetTargetPinState.hpp @@ -0,0 +1,22 @@ +#pragma once + +#include + +#include "Event.hpp" +#include "src/Targets/TargetPinDescriptor.hpp" + +namespace Bloom::Events +{ + class SetTargetPinState: public Event + { + public: + static inline const std::string name = "SetTargetPinState"; + int variantId; + Targets::TargetPinDescriptor pinDescriptor; + Targets::TargetPinState pinState; + + std::string getName() const override { + return SetTargetPinState::name; + } + }; +} diff --git a/src/EventManager/Events/ShutdownApplication.hpp b/src/EventManager/Events/ShutdownApplication.hpp new file mode 100644 index 00000000..1cf2b882 --- /dev/null +++ b/src/EventManager/Events/ShutdownApplication.hpp @@ -0,0 +1,16 @@ +#pragma once + +#include "Event.hpp" + +namespace Bloom::Events +{ + class ShutdownApplication: public Event + { + public: + static inline const std::string name = "ShutdownApplicationEvent"; + + std::string getName() const override { + return ShutdownApplication::name; + } + }; +} diff --git a/src/EventManager/Events/ShutdownDebugServer.hpp b/src/EventManager/Events/ShutdownDebugServer.hpp new file mode 100644 index 00000000..470b8e07 --- /dev/null +++ b/src/EventManager/Events/ShutdownDebugServer.hpp @@ -0,0 +1,16 @@ +#pragma once + +#include "Event.hpp" + +namespace Bloom::Events +{ + class ShutdownDebugServer: public Event + { + public: + static inline const std::string name = "ShutdownDebugServer"; + + std::string getName() const override { + return ShutdownDebugServer::name; + } + }; +} diff --git a/src/EventManager/Events/ShutdownTargetController.hpp b/src/EventManager/Events/ShutdownTargetController.hpp new file mode 100644 index 00000000..2618c661 --- /dev/null +++ b/src/EventManager/Events/ShutdownTargetController.hpp @@ -0,0 +1,16 @@ +#pragma once + +#include "Event.hpp" + +namespace Bloom::Events +{ + class ShutdownTargetController: public Event + { + public: + static inline const std::string name = "ShutdownTargetControllerEvent"; + + std::string getName() const override { + return ShutdownTargetController::name; + } + }; +} diff --git a/src/EventManager/Events/StepTargetExecution.hpp b/src/EventManager/Events/StepTargetExecution.hpp new file mode 100644 index 00000000..86ab4ace --- /dev/null +++ b/src/EventManager/Events/StepTargetExecution.hpp @@ -0,0 +1,22 @@ +#pragma once + +#include + +#include "Event.hpp" + +namespace Bloom::Events +{ + class StepTargetExecution: public Event + { + public: + static inline const std::string name = "StepTargetExecution"; + std::optional fromProgramCounter; + + std::string getName() const override { + return StepTargetExecution::name; + } + + StepTargetExecution() = default; + StepTargetExecution(std::uint32_t fromProgramCounter) : fromProgramCounter(fromProgramCounter) {}; + }; +} diff --git a/src/EventManager/Events/StopTargetExecution.hpp b/src/EventManager/Events/StopTargetExecution.hpp new file mode 100644 index 00000000..d1440d9e --- /dev/null +++ b/src/EventManager/Events/StopTargetExecution.hpp @@ -0,0 +1,16 @@ +#pragma once + +#include "Event.hpp" + +namespace Bloom::Events +{ + class StopTargetExecution: public Event + { + public: + static inline const std::string name = "StopTargetEvent"; + + std::string getName() const override { + return StopTargetExecution::name; + } + }; +} diff --git a/src/EventManager/Events/TargetControllerErrorOccurred.hpp b/src/EventManager/Events/TargetControllerErrorOccurred.hpp new file mode 100644 index 00000000..7ca9dd21 --- /dev/null +++ b/src/EventManager/Events/TargetControllerErrorOccurred.hpp @@ -0,0 +1,18 @@ +#pragma once + +#include "Event.hpp" + +namespace Bloom::Events +{ + class TargetControllerErrorOccurred: public Event + { + public: + static inline const std::string name = "TargetControllerErrorOccurred"; + + TargetControllerErrorOccurred() = default; + + std::string getName() const override { + return TargetControllerErrorOccurred::name; + } + }; +} diff --git a/src/EventManager/Events/TargetControllerStateChanged.hpp b/src/EventManager/Events/TargetControllerStateChanged.hpp new file mode 100644 index 00000000..5b3bbeca --- /dev/null +++ b/src/EventManager/Events/TargetControllerStateChanged.hpp @@ -0,0 +1,28 @@ +#pragma once + +#include "Event.hpp" +#include "src/Helpers/Thread.hpp" + +namespace Bloom::Events +{ + + class TargetControllerStateChanged: public Event + { + private: + ThreadState state; + public: + TargetControllerStateChanged(ThreadState state) : state(state) { + + }; + + static inline const std::string name = "TargetControllerStateChanged"; + + std::string getName() const override { + return TargetControllerStateChanged::name; + } + + ThreadState getState() const { + return this->state; + } + }; +} diff --git a/src/EventManager/Events/TargetControllerStopped.hpp b/src/EventManager/Events/TargetControllerStopped.hpp new file mode 100644 index 00000000..669b69e8 --- /dev/null +++ b/src/EventManager/Events/TargetControllerStopped.hpp @@ -0,0 +1,21 @@ +#pragma once + +#include +#include "Event.hpp" + +namespace Bloom::Events +{ + class TargetControllerStopped: public Event + { + private: + bool stoppedAbruptly = false; + std::optional caughtException; + + public: + static inline const std::string name = "TargetControllerStoppedEvent"; + + std::string getName() const override { + return TargetControllerStopped::name; + } + }; +} diff --git a/src/EventManager/Events/TargetDescriptorExtracted.hpp b/src/EventManager/Events/TargetDescriptorExtracted.hpp new file mode 100644 index 00000000..1469c40c --- /dev/null +++ b/src/EventManager/Events/TargetDescriptorExtracted.hpp @@ -0,0 +1,20 @@ +#pragma once + +#include + +#include "Event.hpp" +#include "src/Targets/TargetDescriptor.hpp" + +namespace Bloom::Events +{ + class TargetDescriptorExtracted: public Event + { + public: + static inline const std::string name = "TargetDescriptorExtracted"; + Targets::TargetDescriptor targetDescriptor; + + std::string getName() const override { + return TargetDescriptorExtracted::name; + } + }; +} diff --git a/src/EventManager/Events/TargetExecutionResumed.hpp b/src/EventManager/Events/TargetExecutionResumed.hpp new file mode 100644 index 00000000..39d593d8 --- /dev/null +++ b/src/EventManager/Events/TargetExecutionResumed.hpp @@ -0,0 +1,18 @@ +#pragma once + +#include "Event.hpp" + +namespace Bloom::Events +{ + class TargetExecutionResumed: public Event + { + public: + static inline const std::string name = "TargetExecutionResumed"; + + TargetExecutionResumed() = default; + + std::string getName() const override { + return TargetExecutionResumed::name; + } + }; +} diff --git a/src/EventManager/Events/TargetExecutionStopped.hpp b/src/EventManager/Events/TargetExecutionStopped.hpp new file mode 100644 index 00000000..219d900f --- /dev/null +++ b/src/EventManager/Events/TargetExecutionStopped.hpp @@ -0,0 +1,26 @@ +#pragma once + +#include + +#include "Event.hpp" +#include "src/Targets/Target.hpp" + +namespace Bloom::Events +{ + using Targets::TargetBreakCause; + + class TargetExecutionStopped: public Event + { + public: + static inline const std::string name = "TargetExecutionStopped"; + std::uint32_t programCounter; + TargetBreakCause breakCause; + + TargetExecutionStopped(std::uint32_t programCounter, TargetBreakCause breakCause) : + programCounter(programCounter), breakCause(breakCause) {} + + std::string getName() const override { + return TargetExecutionStopped::name; + } + }; +} diff --git a/src/EventManager/Events/TargetIoPortsUpdated.hpp b/src/EventManager/Events/TargetIoPortsUpdated.hpp new file mode 100644 index 00000000..eb5bd7b9 --- /dev/null +++ b/src/EventManager/Events/TargetIoPortsUpdated.hpp @@ -0,0 +1,18 @@ +#pragma once + +#include + +#include "Event.hpp" + +namespace Bloom::Events +{ + class TargetIoPortsUpdated: public Event + { + public: + static inline const std::string name = "TargetIoPortsUpdated"; + + std::string getName() const override { + return TargetIoPortsUpdated::name; + } + }; +} diff --git a/src/EventManager/Events/TargetPinStatesRetrieved.hpp b/src/EventManager/Events/TargetPinStatesRetrieved.hpp new file mode 100644 index 00000000..2dd7d52d --- /dev/null +++ b/src/EventManager/Events/TargetPinStatesRetrieved.hpp @@ -0,0 +1,22 @@ +#pragma once + +#include +#include + +#include "Event.hpp" +#include "src/Targets/TargetPinDescriptor.hpp" + +namespace Bloom::Events +{ + class TargetPinStatesRetrieved: public Event + { + public: + static inline const std::string name = "TargetPinStatesRetrieved"; + int variantId; + std::map pinSatesByNumber; + + std::string getName() const override { + return TargetPinStatesRetrieved::name; + } + }; +} diff --git a/src/EventManager/Events/WriteMemoryToTarget.hpp b/src/EventManager/Events/WriteMemoryToTarget.hpp new file mode 100644 index 00000000..c2bbb384 --- /dev/null +++ b/src/EventManager/Events/WriteMemoryToTarget.hpp @@ -0,0 +1,28 @@ +#pragma once + +#include + +#include "Event.hpp" +#include "src/Targets/TargetMemory.hpp" + +namespace Bloom::Events +{ + using Bloom::Targets::TargetMemoryBuffer; + + class WriteMemoryToTarget: public Event + { + public: + static inline const std::string name = "WriteMemoryToTarget"; + TargetMemoryType memoryType; + std::uint32_t startAddress; + TargetMemoryBuffer buffer; + + std::string getName() const override { + return WriteMemoryToTarget::name; + } + + WriteMemoryToTarget() = default; + WriteMemoryToTarget(TargetMemoryType memoryType, std::uint32_t startAddress, const TargetMemoryBuffer& buffer) + : memoryType(memoryType), startAddress(startAddress), buffer(buffer) {}; + }; +} diff --git a/src/EventManager/Events/WriteRegistersToTarget.hpp b/src/EventManager/Events/WriteRegistersToTarget.hpp new file mode 100644 index 00000000..ccb7e94c --- /dev/null +++ b/src/EventManager/Events/WriteRegistersToTarget.hpp @@ -0,0 +1,25 @@ +#pragma once + +#include + +#include "Event.hpp" +#include "src/Targets/TargetRegister.hpp" + +namespace Bloom::Events +{ + using Bloom::Targets::TargetRegister; + + class WriteRegistersToTarget: public Event + { + public: + static inline const std::string name = "WriteRegistersToTarget"; + TargetRegisters registers; + + std::string getName() const override { + return WriteRegistersToTarget::name; + } + + WriteRegistersToTarget() = default; + WriteRegistersToTarget(const TargetRegisters& registers) : registers(registers) {}; + }; +} diff --git a/src/Exceptions/DebugServerInterrupted.hpp b/src/Exceptions/DebugServerInterrupted.hpp new file mode 100644 index 00000000..3abe1069 --- /dev/null +++ b/src/Exceptions/DebugServerInterrupted.hpp @@ -0,0 +1,12 @@ +#pragma once + +#include "Exception.hpp" +namespace Bloom::Exceptions +{ + class DebugServerInterrupted: public Exception + { + public: + explicit DebugServerInterrupted() = default; + + }; +} diff --git a/src/Exceptions/DeviceCommunicationFailure.hpp b/src/Exceptions/DeviceCommunicationFailure.hpp new file mode 100644 index 00000000..3c050a66 --- /dev/null +++ b/src/Exceptions/DeviceCommunicationFailure.hpp @@ -0,0 +1,18 @@ +#pragma once + +#include "Exception.hpp" + +namespace Bloom::Exceptions +{ + class DeviceCommunicationFailure: public Exception + { + public: + explicit DeviceCommunicationFailure(const std::string& message) : Exception(message) { + this->message = message; + } + + explicit DeviceCommunicationFailure(const char* message) : Exception(message) { + this->message = std::string(message); + } + }; +} diff --git a/src/Exceptions/Exception.hpp b/src/Exceptions/Exception.hpp new file mode 100644 index 00000000..6e317d13 --- /dev/null +++ b/src/Exceptions/Exception.hpp @@ -0,0 +1,30 @@ +#pragma once + +#include +namespace Bloom::Exceptions +{ + class Exception: public std::runtime_error + { + protected: + std::string message; + + public: + explicit Exception() : std::runtime_error("") {} + + explicit Exception(const std::string& message) : std::runtime_error(message.c_str()) { + this->message = message; + } + + explicit Exception(const char* message) : std::runtime_error(message) { + this->message = std::string(message); + } + + const char* what() const noexcept override { + return this->message.c_str(); + } + + std::string getMessage() const { + return this->message; + } + }; +} \ No newline at end of file diff --git a/src/Exceptions/InvalidConfig.hpp b/src/Exceptions/InvalidConfig.hpp new file mode 100644 index 00000000..e43e0ea1 --- /dev/null +++ b/src/Exceptions/InvalidConfig.hpp @@ -0,0 +1,17 @@ +#pragma once + +#include "Exception.hpp" +namespace Bloom::Exceptions +{ + class InvalidConfig: public Exception + { + public: + explicit InvalidConfig(const std::string& message) : Exception(message) { + this->message = message; + } + + explicit InvalidConfig(const char* message) : Exception(message) { + this->message = std::string(message); + } + }; +} diff --git a/src/Exceptions/TargetControllerStartupFailure.hpp b/src/Exceptions/TargetControllerStartupFailure.hpp new file mode 100644 index 00000000..343306ef --- /dev/null +++ b/src/Exceptions/TargetControllerStartupFailure.hpp @@ -0,0 +1,17 @@ +#pragma once + +#include "Exception.hpp" +namespace Bloom::Exceptions +{ + class TargetControllerStartupFailure: public Exception + { + public: + explicit TargetControllerStartupFailure(const std::string& message) : Exception(message) { + this->message = message; + } + + explicit TargetControllerStartupFailure(const char* message) : Exception(message) { + this->message = std::string(message); + } + }; +} diff --git a/src/Generated/resources.cpp b/src/Generated/resources.cpp new file mode 100644 index 00000000..d29e850b --- /dev/null +++ b/src/Generated/resources.cpp @@ -0,0 +1,1018 @@ +/**************************************************************************** +** Resource object code +** +** Created by: The Resource Compiler for Qt version 5.12.8 +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +static const unsigned char qt_resource_data[] = { + // /home/nav/Projects/Bloom/resources/help.txt + 0x0,0x0,0x2,0x46, + 0x41, + 0x20,0x4c,0x69,0x6e,0x75,0x78,0x2d,0x62,0x61,0x73,0x65,0x64,0x20,0x64,0x65,0x62, + 0x75,0x67,0x20,0x69,0x6e,0x74,0x65,0x72,0x66,0x61,0x63,0x65,0x20,0x66,0x6f,0x72, + 0x20,0x65,0x6d,0x62,0x65,0x64,0x64,0x65,0x64,0x20,0x73,0x79,0x73,0x74,0x65,0x6d, + 0x73,0x20,0x64,0x65,0x76,0x65,0x6c,0x6f,0x70,0x6d,0x65,0x6e,0x74,0x2e,0xa,0xa, + 0x55,0x73,0x61,0x67,0x65,0x3a,0xa,0x20,0x20,0x62,0x6c,0x6f,0x6f,0x6d,0x20,0x5b, + 0x45,0x4e,0x56,0x49,0x52,0x4f,0x4e,0x4d,0x45,0x4e,0x54,0x5f,0x4e,0x41,0x4d,0x45, + 0x2f,0x43,0x4f,0x4d,0x4d,0x41,0x4e,0x44,0x5d,0xa,0xa,0x49,0x66,0x20,0x6e,0x6f, + 0x20,0x65,0x6e,0x76,0x69,0x72,0x6f,0x6e,0x6d,0x65,0x6e,0x74,0x20,0x6e,0x61,0x6d, + 0x65,0x20,0x6f,0x72,0x20,0x63,0x6f,0x6d,0x6d,0x61,0x6e,0x64,0x20,0x69,0x73,0x20, + 0x70,0x72,0x6f,0x76,0x69,0x64,0x65,0x64,0x2c,0x20,0x42,0x6c,0x6f,0x6f,0x6d,0x20, + 0x77,0x69,0x6c,0x6c,0x20,0x66,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x20,0x74,0x6f, + 0x20,0x74,0x68,0x65,0x20,0x65,0x6e,0x76,0x69,0x72,0x6f,0x6e,0x6d,0x65,0x6e,0x74, + 0x20,0x6e,0x61,0x6d,0x65,0x64,0x20,0x22,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x22, + 0x2e,0xa,0x49,0x66,0x20,0x6e,0x6f,0x20,0x73,0x75,0x63,0x68,0x20,0x65,0x6e,0x76, + 0x69,0x72,0x6f,0x6e,0x6d,0x65,0x6e,0x74,0x20,0x65,0x78,0x69,0x73,0x74,0x73,0x2c, + 0x20,0x42,0x6c,0x6f,0x6f,0x6d,0x20,0x77,0x69,0x6c,0x6c,0x20,0x65,0x78,0x69,0x74, + 0x2e,0xa,0xa,0x43,0x6f,0x6d,0x6d,0x61,0x6e,0x64,0x73,0x3a,0xa,0x20,0x20,0x2d, + 0x2d,0x68,0x65,0x6c,0x70,0x2c,0x20,0x2d,0x68,0x20,0x20,0x20,0x20,0x20,0x20,0x44, + 0x69,0x73,0x70,0x6c,0x61,0x79,0x73,0x20,0x74,0x68,0x69,0x73,0x20,0x68,0x65,0x6c, + 0x70,0x20,0x74,0x65,0x78,0x74,0x2e,0xa,0x20,0x20,0x2d,0x2d,0x76,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x2c,0x20,0x2d,0x76,0x20,0x20,0x20,0x44,0x69,0x73,0x70,0x6c,0x61, + 0x79,0x73,0x20,0x74,0x68,0x65,0x20,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x20,0x76, + 0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x6e,0x75,0x6d,0x62,0x65,0x72,0x2e,0xa,0x20, + 0x20,0x69,0x6e,0x69,0x74,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x43,0x72,0x65,0x61,0x74,0x65,0x73,0x20,0x61,0x20,0x6e,0x65,0x77,0x20,0x42, + 0x6c,0x6f,0x6f,0x6d,0x20,0x70,0x72,0x6f,0x6a,0x65,0x63,0x74,0x20,0x63,0x6f,0x6e, + 0x66,0x69,0x67,0x75,0x72,0x61,0x74,0x69,0x6f,0x6e,0x20,0x66,0x69,0x6c,0x65,0x20, + 0x28,0x62,0x6c,0x6f,0x6f,0x6d,0x2e,0x6a,0x73,0x6f,0x6e,0x29,0x20,0x69,0x6e,0x20, + 0x74,0x68,0x65,0x20,0x77,0x6f,0x72,0x6b,0x69,0x6e,0x67,0x20,0x64,0x69,0x72,0x65, + 0x63,0x74,0x6f,0x72,0x79,0x2e,0xa,0xa,0x46,0x6f,0x72,0x20,0x6d,0x6f,0x72,0x65, + 0x20,0x69,0x6e,0x66,0x6f,0x72,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x20,0x6f,0x6e,0x20, + 0x67,0x65,0x74,0x74,0x69,0x6e,0x67,0x20,0x73,0x74,0x61,0x72,0x74,0x65,0x64,0x20, + 0x77,0x69,0x74,0x68,0x20,0x42,0x6c,0x6f,0x6f,0x6d,0x2c,0x20,0x70,0x6c,0x65,0x61, + 0x73,0x65,0x20,0x76,0x69,0x73,0x69,0x74,0x20,0x68,0x74,0x74,0x70,0x73,0x3a,0x2f, + 0x2f,0x62,0x6c,0x6f,0x6f,0x6d,0x2e,0x6f,0x73,0x63,0x69,0x6c,0x6c,0x61,0x74,0x65, + 0x2e,0x69,0x6f,0x2f,0x67,0x65,0x74,0x74,0x69,0x6e,0x67,0x2d,0x73,0x74,0x61,0x72, + 0x74,0x65,0x64,0x2e,0xa, + // /home/nav/Projects/Bloom/resources/bloom.template.json + 0x0,0x0,0x1,0x1a, + 0x7b, + 0xa,0x20,0x20,0x22,0x65,0x6e,0x76,0x69,0x72,0x6f,0x6e,0x6d,0x65,0x6e,0x74,0x73, + 0x22,0x3a,0x20,0x7b,0xa,0x20,0x20,0x20,0x20,0x22,0x64,0x65,0x66,0x61,0x75,0x6c, + 0x74,0x22,0x3a,0x20,0x7b,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x22,0x64,0x65,0x62, + 0x75,0x67,0x54,0x6f,0x6f,0x6c,0x4e,0x61,0x6d,0x65,0x22,0x3a,0x20,0x22,0x61,0x74, + 0x6d,0x65,0x6c,0x2d,0x69,0x63,0x65,0x22,0x2c,0xa,0xa,0x20,0x20,0x20,0x20,0x20, + 0x20,0x22,0x74,0x61,0x72,0x67,0x65,0x74,0x22,0x3a,0x20,0x7b,0xa,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x22,0x6e,0x61,0x6d,0x65,0x22,0x3a,0x20,0x22,0x61,0x76, + 0x72,0x38,0x22,0x2c,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x22,0x70,0x68, + 0x79,0x73,0x69,0x63,0x61,0x6c,0x49,0x6e,0x74,0x65,0x72,0x66,0x61,0x63,0x65,0x22, + 0x3a,0x20,0x22,0x64,0x65,0x62,0x75,0x67,0x57,0x69,0x72,0x65,0x22,0xa,0x20,0x20, + 0x20,0x20,0x20,0x20,0x7d,0x2c,0xa,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x22,0x64, + 0x65,0x62,0x75,0x67,0x53,0x65,0x72,0x76,0x65,0x72,0x22,0x3a,0x20,0x7b,0xa,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x22,0x6e,0x61,0x6d,0x65,0x22,0x3a,0x20,0x22, + 0x61,0x76,0x72,0x2d,0x67,0x64,0x62,0x2d,0x72,0x73,0x70,0x22,0xa,0x20,0x20,0x20, + 0x20,0x20,0x20,0x7d,0xa,0x20,0x20,0x20,0x20,0x7d,0xa,0x20,0x20,0x7d,0x2c,0xa, + 0xa,0x20,0x20,0x22,0x69,0x6e,0x73,0x69,0x67,0x68,0x74,0x22,0x3a,0x20,0x7b,0xa, + 0x20,0x20,0x20,0x20,0x22,0x65,0x6e,0x61,0x62,0x6c,0x65,0x64,0x22,0x3a,0x20,0x74, + 0x72,0x75,0x65,0xa,0x20,0x20,0x7d,0xa,0x7d, + // /home/nav/Projects/Bloom/src/Insight/UserInterfaces/InsightWindow/UiFiles/AboutWindow.ui + 0x0,0x0,0x2,0x10, + 0x0, + 0x0,0xa,0x8e,0x78,0x9c,0xed,0x56,0x5d,0x6f,0xd3,0x30,0x14,0x7d,0xdf,0xaf,0x30, + 0xe6,0x39,0xf5,0x10,0x8,0x4d,0xc5,0xcd,0x94,0xd,0x26,0x1e,0x3a,0x4,0xa2,0x6c, + 0xf,0xd3,0x1e,0x9c,0xe4,0xb6,0xb5,0x70,0x7c,0x2b,0xdb,0x59,0x53,0x7e,0xfd,0x1c, + 0xa7,0x5d,0x3f,0x96,0x76,0x43,0x55,0xc5,0x26,0xd1,0xa7,0x5e,0xfb,0x9e,0x93,0xe3, + 0xe3,0x9b,0xa3,0xf0,0xd3,0xaa,0x50,0xe4,0xe,0x8c,0x95,0xa8,0x7b,0xf4,0x5d,0xe7, + 0x98,0x12,0xd0,0x19,0xe6,0x52,0x8f,0x7a,0xf4,0xd7,0xe0,0x22,0x3a,0xa1,0xa7,0xf1, + 0x11,0x2f,0xe5,0xb2,0xe9,0x83,0x6f,0x8a,0x8f,0x88,0xff,0xf1,0xa9,0xcc,0x47,0xe0, + 0x48,0xa6,0x84,0xb5,0x3d,0xfa,0xe3,0x52,0x48,0x7d,0x2d,0x75,0x8e,0x53,0x4a,0xb4, + 0x28,0xa0,0x47,0x45,0x8a,0xa5,0x8b,0xa6,0xcd,0x5a,0x3,0xa,0xc0,0x89,0xc1,0x9, + 0x18,0x37,0x9b,0xb7,0x35,0xd,0x3,0xe9,0x14,0xd0,0x98,0x5b,0x67,0xfc,0xe3,0xe3, + 0xa4,0xc6,0x72,0x36,0xaf,0x38,0x5b,0x60,0xb6,0xd3,0x14,0xa2,0x92,0x85,0xfc,0x3, + 0xb9,0x27,0x49,0x11,0x55,0x3c,0x14,0xca,0x2,0x67,0xe1,0xff,0x2a,0xc1,0x92,0x61, + 0xe3,0x4,0xd7,0xa1,0x5c,0xa8,0xcf,0x50,0x3b,0x7f,0x24,0x30,0x2b,0xd2,0x3,0x4a, + 0x89,0x99,0xd7,0xf6,0x80,0xba,0x3a,0xc3,0xaa,0x1f,0x96,0x36,0x1a,0x43,0xb3,0x74, + 0x50,0x10,0xa1,0xe4,0x48,0x17,0xa0,0x9d,0x6f,0x77,0xdd,0x6e,0x52,0x97,0x5f,0xcf, + 0x7d,0xfd,0x88,0xfc,0x79,0xd2,0x52,0x85,0x58,0x44,0xd2,0x2b,0xa4,0x2b,0xc7,0x59, + 0xc3,0xb3,0x86,0xa0,0x45,0x11,0xab,0x25,0x1d,0x4e,0x69,0x5f,0xa4,0xa0,0x16,0x42, + 0xe7,0x63,0x13,0xa9,0xb0,0xd8,0x4e,0x10,0x48,0x36,0xee,0xd2,0x41,0xd5,0xe6,0xe6, + 0x1a,0x64,0x3e,0x1a,0x67,0xb5,0x17,0xf,0x83,0xb2,0xfd,0x9,0x2d,0x13,0xb4,0xbe, + 0xff,0x22,0xc,0x53,0x52,0xff,0x3e,0xa4,0x5b,0xfc,0xcd,0xcd,0xf9,0xe7,0x64,0x90, + 0xdc,0xec,0xee,0x16,0xc4,0xba,0x99,0xa,0x2f,0x81,0x42,0xd3,0x25,0x6f,0xdf,0x5f, + 0x9c,0x7c,0x4c,0x8e,0x3f,0x51,0x32,0x36,0x30,0xec,0xd1,0xb1,0x73,0x13,0xdb,0x65, + 0x2c,0xc,0x62,0x7,0x6d,0x26,0x95,0x12,0xe,0x3a,0x12,0x19,0x8d,0x77,0x6c,0x72, + 0x26,0x76,0xeb,0xbc,0xbd,0x8d,0xf7,0xbf,0xcb,0x36,0x8f,0x7c,0xa1,0xbf,0x54,0xfe, + 0x56,0xb4,0x50,0x7d,0x6f,0xb2,0x7d,0xca,0xb0,0x10,0x1b,0xce,0x94,0x8b,0x4,0x79, + 0xed,0x93,0x25,0x4a,0x37,0x46,0x73,0xc8,0xd9,0xfa,0x26,0xee,0xc8,0x25,0x8e,0x45, + 0x51,0x40,0xfe,0xaa,0x5e,0x48,0x3b,0x11,0x19,0x98,0x45,0x64,0xfd,0xc,0xd5,0x5f, + 0x58,0x84,0x46,0x7a,0x7a,0xe1,0x64,0x88,0xe3,0x6d,0xa8,0x80,0x4,0x5d,0x16,0x71, + 0x2d,0xeb,0xca,0xe3,0x65,0x26,0x14,0x67,0x61,0x69,0xf,0x97,0x1a,0xf1,0xff,0x78, + 0xb8,0xd0,0x46,0x2f,0x24,0xb9,0xbc,0x1d,0x3a,0xfe,0x8e,0x53,0x30,0x90,0x93,0x74, + 0xb6,0x67,0x94,0xd5,0xa9,0x11,0x59,0x2c,0x4d,0x6,0xc4,0xe2,0xd0,0x4d,0x85,0x81, + 0x3a,0xc3,0x82,0xed,0xfa,0x7f,0x94,0xad,0xec,0x3c,0x9e,0x36,0xce,0x9a,0x2f,0xa5, + 0x95,0x4f,0xb6,0x35,0xfc,0xb2,0xe2,0xac,0x94,0xf1,0x3d,0x77,0x28,0xa3,0xda, + // /home/nav/Projects/Bloom/src/Insight/UserInterfaces/InsightWindow/UiFiles/InsightWindow.ui + 0x0,0x0,0x5,0x50, + 0x0, + 0x0,0x25,0xca,0x78,0x9c,0xed,0x5a,0x5b,0x6f,0xdb,0x36,0x14,0x7e,0xcf,0xaf,0xe0, + 0xfc,0x3c,0x45,0xe,0xb0,0x1,0x43,0xa0,0xa8,0x48,0xda,0xb5,0x31,0x90,0x76,0x59, + 0xea,0x34,0xcf,0xb4,0x44,0xdb,0xc4,0x28,0x52,0x20,0x29,0x27,0xd9,0xaf,0x2f,0x45, + 0xea,0x62,0x5d,0x4d,0xca,0x69,0x32,0x60,0x4d,0x5e,0x2c,0xfa,0x9c,0x8f,0xe7,0xc6, + 0x73,0xa1,0x1c,0xbc,0x7b,0x4a,0x8,0xd8,0x21,0x2e,0x30,0xa3,0x17,0xb3,0xb3,0xd3, + 0xf9,0xc,0x20,0x1a,0xb1,0x18,0xd3,0xcd,0xc5,0xec,0x7e,0xf9,0xd1,0xfb,0x63,0xf6, + 0x2e,0x3c,0x9,0x32,0x5c,0x13,0xfd,0xa6,0x88,0xc2,0x13,0xa0,0xfe,0x82,0x47,0x1c, + 0x6f,0x90,0x4,0x11,0x81,0x42,0x5c,0xcc,0xfe,0xfe,0xc,0x31,0x7d,0xc0,0x34,0x66, + 0x8f,0x33,0x40,0x61,0x82,0x2e,0x66,0x89,0x5a,0xf1,0x1e,0xcd,0x92,0xe1,0xd1,0x7c, + 0x29,0x67,0x29,0xe2,0xf2,0xb9,0xa4,0xc2,0x14,0x27,0x59,0x72,0x8d,0xf0,0x66,0x2b, + 0x67,0x61,0x40,0xb3,0x64,0x85,0x78,0xf8,0xfb,0x7c,0x1e,0xf8,0xc5,0xe7,0xc0,0x2f, + 0x79,0xe,0xc2,0x3c,0xe0,0x58,0x6e,0x6b,0x94,0xb3,0xb9,0x23,0x8c,0x11,0x77,0x89, + 0x25,0x41,0xa,0x45,0x48,0xae,0x6c,0x11,0x5e,0x11,0xc6,0x92,0xc0,0x2f,0x9e,0xac, + 0xa4,0x81,0x4f,0x38,0xc1,0xff,0xa2,0x58,0x81,0xac,0x18,0x23,0xe1,0x1a,0x12,0x81, + 0x2,0x5f,0x7f,0xde,0x7,0xa8,0x11,0xda,0xe6,0x44,0x34,0xbb,0x82,0xbc,0xb2,0xa5, + 0x7a,0xf4,0x56,0xea,0xb9,0xde,0xb3,0x6f,0x5f,0xa,0x25,0xde,0xa1,0x92,0xb7,0x49, + 0xab,0xe9,0x3b,0xc2,0x34,0xe1,0xfa,0x24,0x1b,0x92,0xae,0x14,0x6d,0x8d,0x9,0xf2, + 0x72,0xf9,0xfa,0xf6,0x6b,0xc9,0x27,0x9b,0x86,0xfd,0xa8,0x58,0x47,0xed,0x5a,0xe1, + 0xc0,0x38,0x86,0x91,0x54,0x21,0x58,0x0,0x45,0x84,0x9,0xe4,0x61,0x2a,0x74,0xd4, + 0xf8,0x7d,0x1c,0xc3,0xe4,0x5d,0xea,0x5e,0x59,0xd1,0xd3,0x10,0xa9,0x26,0x2f,0xc4, + 0xfe,0xf3,0x9,0xcb,0x4a,0x87,0x7e,0xe0,0x31,0xc5,0x7c,0x23,0x67,0xdb,0xf,0xc6, + 0xde,0xe,0x5e,0xd8,0x22,0x92,0x4e,0xf4,0xc2,0xb5,0x62,0x9d,0xe6,0x5,0x45,0x48, + 0x3d,0x25,0x91,0x54,0x9c,0x9e,0x90,0x90,0x4b,0x14,0x7b,0x19,0x27,0xfd,0xe,0xe9, + 0x63,0xe6,0x28,0x65,0x5c,0x7a,0x58,0x88,0xc,0x9,0x6b,0x56,0x81,0x52,0xc8,0xa1, + 0x64,0xdc,0x7e,0x23,0xb8,0x62,0x99,0xf4,0x62,0xc,0x9,0xdb,0x64,0xe8,0x70,0xc4, + 0xc,0xaa,0xf6,0xa2,0xc1,0xf3,0xc9,0x6c,0x0,0xbe,0x9a,0xd,0x5e,0x3a,0x8e,0x6, + 0xd4,0xea,0x1a,0xfd,0x45,0x95,0xba,0xd3,0xf0,0xe0,0x92,0x82,0x45,0xbe,0xc3,0x2b, + 0x29,0xd5,0x72,0xf0,0x8b,0x6a,0x74,0x99,0x63,0xbf,0xd6,0x21,0x6f,0x87,0x6f,0x9d, + 0x5f,0x5b,0x41,0xdb,0xa1,0xac,0x73,0xc0,0x1e,0x65,0xcf,0x36,0xed,0x3c,0xf2,0xa0, + 0x1f,0xdb,0xa5,0x85,0xc0,0x67,0xa5,0x75,0x45,0xf4,0xed,0x8a,0x3d,0xdd,0xe8,0x25, + 0x8b,0xc,0x23,0x52,0x18,0x29,0x53,0xd,0x79,0xa1,0x28,0xc8,0x75,0x69,0xee,0x31, + 0xd9,0x88,0x39,0x3b,0xc5,0x96,0x6f,0x30,0xfd,0x41,0x7b,0x61,0x89,0x92,0x1,0xe4, + 0x7e,0x2b,0x56,0xbe,0x80,0x31,0xea,0x2b,0xc1,0x43,0xec,0x4b,0x55,0x8d,0xf7,0xa, + 0xbe,0xe1,0xf7,0xa4,0x5a,0xed,0xa9,0xfb,0x56,0x60,0x99,0x94,0x8c,0x96,0x78,0x1c, + 0xad,0x39,0x12,0x5b,0xf,0xb3,0xbc,0xc,0xa6,0x48,0xc7,0x8d,0xb7,0x92,0x43,0x76, + 0x6b,0xa0,0xb7,0xc,0x8e,0x23,0x66,0xc3,0xa6,0x59,0x73,0x5a,0x91,0x47,0x9f,0xd, + 0xb5,0xe6,0x88,0xb1,0x80,0x2b,0x82,0x62,0xb6,0x5e,0x87,0xe7,0x7e,0xc4,0x92,0x54, + 0x1d,0x80,0xd8,0x5f,0x98,0xe2,0xed,0xdf,0xb,0xc4,0x17,0x54,0x22,0xbe,0x86,0x11, + 0x12,0xe5,0xb2,0xe9,0x3c,0xfd,0x45,0x2,0x37,0x6a,0xb1,0x54,0xb6,0x84,0x3a,0x15, + 0xbb,0x4d,0xe0,0xef,0x3,0xdb,0x8b,0x43,0x19,0x4f,0x54,0x4e,0xa1,0x47,0xca,0x62, + 0x44,0xa8,0xc0,0xec,0x8c,0xe7,0x5b,0x5b,0x6f,0x2c,0x86,0x3b,0xb4,0xed,0x24,0xa8, + 0x82,0x65,0x89,0x53,0x5b,0x8f,0x56,0x59,0x5e,0xeb,0x5,0x3e,0xdd,0x2e,0xfe,0x2, + 0xb7,0x98,0xe6,0x35,0x4c,0x22,0x31,0x9e,0x25,0xa7,0x88,0x5c,0x27,0xb0,0x69,0x14, + 0xc3,0xdf,0x2a,0xfb,0xf6,0x9e,0xee,0xc9,0x87,0x5e,0x79,0x4b,0xaa,0xa1,0x67,0xfc, + 0xdc,0xb7,0xf2,0xea,0xf5,0x58,0x5e,0x6d,0x30,0x3a,0xe5,0xd8,0x6,0xe7,0xe1,0x1c, + 0xd8,0x20,0xb7,0x75,0x8c,0x4b,0x1e,0x7e,0xd,0x79,0x86,0xdd,0xd6,0x20,0x1b,0x75, + 0xa1,0xca,0x8f,0x36,0x5e,0x6c,0x0,0x4e,0xf5,0x68,0x47,0x78,0x0,0x9,0xde,0x50, + 0x55,0xc1,0xa5,0x82,0x91,0xe7,0xe7,0x97,0xf9,0xe3,0xf5,0x7b,0x94,0xa7,0x18,0x7, + 0xac,0x3e,0x2d,0x6f,0xe0,0xa,0x91,0x3d,0x25,0xf7,0x8a,0x40,0x46,0xe1,0xe,0x62, + 0x92,0xe7,0x46,0xc7,0x4d,0xf4,0x46,0xad,0x28,0xd8,0x61,0x81,0x35,0xd2,0xf8,0xe0, + 0x7b,0xec,0x36,0x7,0x3a,0xb7,0x51,0xa8,0x22,0x43,0xa9,0xbc,0x55,0x5b,0x1,0x60, + 0x1,0x28,0x93,0xa0,0x32,0x5,0x58,0x33,0xe,0xe4,0x56,0x2d,0xab,0xde,0x5c,0x59, + 0xf2,0x14,0xdc,0x12,0x4,0x5,0x2,0xa6,0x7b,0x2e,0xbe,0x62,0x40,0x5f,0xe,0x80, + 0x18,0xed,0x10,0xc9,0x5,0x14,0x60,0xf5,0xac,0x8c,0x8e,0xa3,0x7f,0xf2,0xbe,0x3e, + 0x1f,0xad,0x80,0x17,0x2,0xa7,0x96,0x78,0x54,0xf6,0x89,0x26,0x3c,0x9c,0x44,0xbb, + 0x1c,0x76,0xc7,0xc9,0xd0,0x9a,0x23,0x60,0x93,0xf4,0x6d,0xe4,0xb0,0xd9,0x3b,0xf8, + 0xc5,0xf3,0xc0,0x52,0xbb,0x6,0xdc,0x5d,0x7e,0xde,0x77,0xe5,0x23,0x26,0x4,0xac, + 0x90,0x5a,0x92,0x9c,0xc5,0x59,0x84,0x62,0xf5,0x11,0x40,0x40,0x54,0x81,0xe2,0xe5, + 0x5d,0x16,0xf0,0xbc,0xf0,0x44,0x83,0x8c,0x6d,0xa2,0xe5,0xb0,0xa1,0xd4,0xd4,0x3, + 0x99,0xa5,0x6c,0xc1,0xb6,0x5f,0x71,0x8c,0xf4,0xc5,0x8c,0x2d,0xa2,0x46,0x6d,0x45, + 0xbe,0x31,0xf5,0x7,0xcc,0x8d,0xb6,0x6e,0x60,0x1a,0x50,0x4d,0x8,0x49,0x98,0xe7, + 0x97,0xbb,0xbc,0x5d,0x59,0xb2,0x1b,0xb4,0x56,0xd3,0x8d,0x5e,0x75,0x12,0xac,0x8e, + 0x45,0x27,0xb6,0x91,0xc1,0xc2,0x59,0x95,0xa1,0x9a,0xe8,0xa,0xa4,0xc1,0x3a,0x65, + 0xc9,0x59,0x9c,0x69,0x16,0xe9,0xd3,0xa4,0x2c,0xa6,0xff,0x9,0x45,0xdc,0x78,0x7, + 0x2b,0xd9,0x92,0xa5,0x13,0x15,0x3a,0x38,0xde,0x14,0xa7,0xff,0xe,0x26,0x57,0x72, + 0xa2,0xd5,0xf4,0x46,0x43,0xad,0xf1,0x54,0x40,0xd,0x5a,0xd6,0x1b,0x23,0xe3,0x5e, + 0xd2,0xaa,0xea,0xc0,0x64,0x79,0xa7,0x7,0x9c,0x61,0x2f,0xb2,0xb1,0x7b,0x7c,0x38, + 0x25,0x46,0xc3,0x52,0xd4,0x8,0xeb,0x6c,0xea,0x22,0xdc,0x9e,0x40,0x7,0x5,0x78, + 0xeb,0x29,0x61,0xcd,0xd8,0x78,0x3f,0x37,0xd2,0x50,0x2,0x15,0x30,0x48,0x46,0xdb, + 0x8b,0xd9,0xd9,0x7c,0xfe,0xab,0xfa,0x9f,0x3a,0x34,0x74,0x73,0xc4,0xb1,0x6d,0xff, + 0x11,0x88,0x83,0x19,0x23,0xaf,0x4c,0x36,0x3,0xc5,0x58,0xb3,0x6b,0xda,0xb7,0xfc, + 0xe,0x57,0xda,0xf6,0xb7,0xc7,0x4d,0xc8,0x1a,0xa1,0x38,0xd8,0xc5,0x59,0xd7,0xb3, + 0xb1,0x5b,0xd7,0xe7,0x34,0xd1,0x3b,0x75,0x55,0x13,0x7d,0x71,0x37,0xf2,0xee,0xa4, + 0x81,0x60,0xe1,0xc,0xa5,0xda,0x86,0xc3,0x44,0x8d,0x5a,0x59,0x3e,0xdb,0x78,0x3b, + 0x48,0x6,0xef,0x6c,0x3b,0xf8,0xc7,0x4d,0x2,0xa5,0x67,0xbc,0x1f,0xe7,0x8e,0x5e, + 0x29,0x27,0x87,0xd0,0xad,0xb1,0x15,0x78,0x6f,0x6c,0x5,0xbe,0xe5,0xb6,0xfa,0x19, + 0x4b,0x55,0x2c,0xe5,0xf,0x6f,0x75,0xae,0xbf,0x28,0x98,0x9f,0xae,0xa8,0x5c,0x81, + 0xe3,0xb7,0x72,0xc4,0xe2,0xc3,0xff,0xd4,0xd,0xad,0xdf,0x9,0x14,0x8e,0xd8,0x41, + 0x8e,0x21,0x95,0xde,0xc0,0xcf,0x6,0x6,0xc1,0x1d,0x7f,0x4e,0x30,0x88,0x33,0xfe, + 0x33,0x83,0x41,0xb6,0x23,0x73,0x6c,0x8c,0xd6,0x30,0x23,0xf2,0xde,0x29,0x8e,0xb4, + 0x78,0x92,0x67,0x93,0x25,0xb5,0x63,0x18,0x79,0x75,0xdf,0xe3,0x33,0x17,0x5,0xfa, + 0x5f,0xee,0xbb,0xdd,0xe,0x15,0x47,0xe7,0xb,0x3,0x22,0x4b,0xf3,0xab,0x2a,0x14, + 0x83,0x42,0x1e,0x51,0x5f,0x89,0xb9,0x5f,0x5b,0x39,0x7b,0xd4,0xe9,0x9a,0xaa,0xf3, + 0x2,0xb4,0xcf,0x92,0x3d,0x6f,0xfa,0xa7,0xed,0x7a,0xe8,0x52,0xea,0x25,0xe7,0x8b, + 0x2e,0x56,0x93,0xbf,0x7e,0xa,0xfc,0xc,0x87,0xdf,0x1,0x62,0xa3,0xd4,0xbc, + // /home/nav/Projects/Bloom/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/DIP/Stylesheets/DualInlinePackage.qss + 0x0,0x0,0x1,0xae, + 0x23, + 0x74,0x61,0x72,0x67,0x65,0x74,0x2d,0x70,0x69,0x6e,0x2d,0x6e,0x75,0x6d,0x62,0x65, + 0x72,0x2c,0xa,0x23,0x74,0x61,0x72,0x67,0x65,0x74,0x2d,0x70,0x69,0x6e,0x2d,0x6e, + 0x75,0x6d,0x62,0x65,0x72,0x20,0x7b,0xa,0x20,0x20,0x20,0x20,0x66,0x6f,0x6e,0x74, + 0x2d,0x73,0x69,0x7a,0x65,0x3a,0x20,0x31,0x34,0x70,0x78,0x3b,0xa,0x7d,0xa,0xa, + 0x23,0x74,0x61,0x72,0x67,0x65,0x74,0x2d,0x70,0x69,0x6e,0x2d,0x6e,0x61,0x6d,0x65, + 0x2c,0xa,0x23,0x74,0x61,0x72,0x67,0x65,0x74,0x2d,0x70,0x69,0x6e,0x2d,0x64,0x69, + 0x72,0x65,0x63,0x74,0x69,0x6f,0x6e,0x20,0x7b,0xa,0x20,0x20,0x20,0x20,0x66,0x6f, + 0x6e,0x74,0x2d,0x73,0x69,0x7a,0x65,0x3a,0x20,0x31,0x31,0x70,0x78,0x3b,0xa,0x7d, + 0xa,0xa,0x23,0x74,0x61,0x72,0x67,0x65,0x74,0x2d,0x70,0x69,0x6e,0x2d,0x6e,0x61, + 0x6d,0x65,0x20,0x7b,0xa,0x20,0x20,0x20,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x20, + 0x23,0x61,0x36,0x61,0x37,0x61,0x61,0x3b,0xa,0x7d,0xa,0xa,0x23,0x74,0x61,0x72, + 0x67,0x65,0x74,0x2d,0x70,0x69,0x6e,0x2d,0x64,0x69,0x72,0x65,0x63,0x74,0x69,0x6f, + 0x6e,0x20,0x7b,0xa,0x20,0x20,0x20,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x23, + 0x38,0x61,0x38,0x61,0x38,0x64,0x3b,0xa,0x7d,0xa,0xa,0x23,0x74,0x61,0x72,0x67, + 0x65,0x74,0x2d,0x70,0x69,0x6e,0x2d,0x6e,0x75,0x6d,0x62,0x65,0x72,0x2d,0x74,0x6f, + 0x70,0x20,0x7b,0xa,0x7d,0xa,0xa,0x23,0x74,0x61,0x72,0x67,0x65,0x74,0x2d,0x62, + 0x6f,0x64,0x79,0x20,0x7b,0xa,0x20,0x20,0x20,0x20,0x71,0x70,0x72,0x6f,0x70,0x65, + 0x72,0x74,0x79,0x2d,0x62,0x6f,0x64,0x79,0x43,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x23, + 0x41,0x36,0x41,0x38,0x41,0x42,0x3b,0xa,0x20,0x20,0x20,0x20,0x71,0x70,0x72,0x6f, + 0x70,0x65,0x72,0x74,0x79,0x2d,0x64,0x69,0x73,0x61,0x62,0x6c,0x65,0x41,0x6c,0x70, + 0x68,0x61,0x4c,0x65,0x76,0x65,0x6c,0x3a,0x20,0x31,0x30,0x30,0x3b,0xa,0x7d,0xa, + 0xa,0x23,0x74,0x61,0x72,0x67,0x65,0x74,0x2d,0x70,0x69,0x6e,0x2d,0x62,0x6f,0x64, + 0x79,0x20,0x7b,0xa,0x20,0x20,0x20,0x20,0x71,0x70,0x72,0x6f,0x70,0x65,0x72,0x74, + 0x79,0x2d,0x62,0x6f,0x64,0x79,0x43,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x23,0x41,0x36, + 0x41,0x38,0x41,0x42,0x3b,0xa,0x20,0x20,0x20,0x20,0x71,0x70,0x72,0x6f,0x70,0x65, + 0x72,0x74,0x79,0x2d,0x64,0x69,0x73,0x61,0x62,0x6c,0x65,0x41,0x6c,0x70,0x68,0x61, + 0x4c,0x65,0x76,0x65,0x6c,0x3a,0x20,0x31,0x30,0x30,0x3b,0xa,0x7d, + // /home/nav/Projects/Bloom/src/Insight/UserInterfaces/InsightWindow/Images/refresh.svg + 0x0,0x0,0x7,0x74, + 0x3c, + 0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e, + 0x30,0x22,0x20,0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22,0x55,0x54,0x46, + 0x2d,0x38,0x22,0x20,0x73,0x74,0x61,0x6e,0x64,0x61,0x6c,0x6f,0x6e,0x65,0x3d,0x22, + 0x6e,0x6f,0x22,0x3f,0x3e,0xa,0x3c,0x73,0x76,0x67,0xa,0x20,0x20,0x20,0x78,0x6d, + 0x6c,0x6e,0x73,0x3a,0x64,0x63,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x70, + 0x75,0x72,0x6c,0x2e,0x6f,0x72,0x67,0x2f,0x64,0x63,0x2f,0x65,0x6c,0x65,0x6d,0x65, + 0x6e,0x74,0x73,0x2f,0x31,0x2e,0x31,0x2f,0x22,0xa,0x20,0x20,0x20,0x78,0x6d,0x6c, + 0x6e,0x73,0x3a,0x63,0x63,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x63,0x72, + 0x65,0x61,0x74,0x69,0x76,0x65,0x63,0x6f,0x6d,0x6d,0x6f,0x6e,0x73,0x2e,0x6f,0x72, + 0x67,0x2f,0x6e,0x73,0x23,0x22,0xa,0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a, + 0x72,0x64,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e, + 0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x30,0x32,0x2f,0x32, + 0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,0x6e,0x74,0x61,0x78,0x2d,0x6e,0x73,0x23, + 0x22,0xa,0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x73,0x76,0x67,0x3d,0x22, + 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0xa,0x20,0x20,0x20,0x78, + 0x6d,0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77, + 0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67, + 0x22,0xa,0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x73,0x6f,0x64,0x69,0x70, + 0x6f,0x64,0x69,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x73,0x6f,0x64,0x69, + 0x70,0x6f,0x64,0x69,0x2e,0x73,0x6f,0x75,0x72,0x63,0x65,0x66,0x6f,0x72,0x67,0x65, + 0x2e,0x6e,0x65,0x74,0x2f,0x44,0x54,0x44,0x2f,0x73,0x6f,0x64,0x69,0x70,0x6f,0x64, + 0x69,0x2d,0x30,0x2e,0x64,0x74,0x64,0x22,0xa,0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e, + 0x73,0x3a,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,0x65,0x3d,0x22,0x68,0x74,0x74,0x70, + 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,0x65,0x2e, + 0x6f,0x72,0x67,0x2f,0x6e,0x61,0x6d,0x65,0x73,0x70,0x61,0x63,0x65,0x73,0x2f,0x69, + 0x6e,0x6b,0x73,0x63,0x61,0x70,0x65,0x22,0xa,0x20,0x20,0x20,0x77,0x69,0x64,0x74, + 0x68,0x3d,0x22,0x33,0x30,0x22,0xa,0x20,0x20,0x20,0x68,0x65,0x69,0x67,0x68,0x74, + 0x3d,0x22,0x33,0x30,0x22,0xa,0x20,0x20,0x20,0x76,0x69,0x65,0x77,0x42,0x6f,0x78, + 0x3d,0x22,0x30,0x20,0x30,0x20,0x33,0x30,0x20,0x33,0x30,0x22,0xa,0x20,0x20,0x20, + 0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31,0x22,0xa,0x20,0x20, + 0x20,0x69,0x64,0x3d,0x22,0x73,0x76,0x67,0x32,0x36,0x36,0x34,0x22,0xa,0x20,0x20, + 0x20,0x73,0x6f,0x64,0x69,0x70,0x6f,0x64,0x69,0x3a,0x64,0x6f,0x63,0x6e,0x61,0x6d, + 0x65,0x3d,0x22,0x72,0x65,0x66,0x72,0x65,0x73,0x68,0x2e,0x73,0x76,0x67,0x22,0xa, + 0x20,0x20,0x20,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,0x65,0x3a,0x76,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x2e,0x31,0x20,0x28,0x31,0x2e,0x30,0x2e, + 0x31,0x2b,0x72,0x37,0x35,0x29,0x22,0x3e,0xa,0x20,0x20,0x3c,0x6d,0x65,0x74,0x61, + 0x64,0x61,0x74,0x61,0xa,0x20,0x20,0x20,0x20,0x20,0x69,0x64,0x3d,0x22,0x6d,0x65, + 0x74,0x61,0x64,0x61,0x74,0x61,0x32,0x36,0x37,0x30,0x22,0x3e,0xa,0x20,0x20,0x20, + 0x20,0x3c,0x72,0x64,0x66,0x3a,0x52,0x44,0x46,0x3e,0xa,0x20,0x20,0x20,0x20,0x20, + 0x20,0x3c,0x63,0x63,0x3a,0x57,0x6f,0x72,0x6b,0xa,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x72,0x64,0x66,0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d,0x22,0x22,0x3e, + 0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x64,0x63,0x3a,0x66,0x6f,0x72, + 0x6d,0x61,0x74,0x3e,0x69,0x6d,0x61,0x67,0x65,0x2f,0x73,0x76,0x67,0x2b,0x78,0x6d, + 0x6c,0x3c,0x2f,0x64,0x63,0x3a,0x66,0x6f,0x72,0x6d,0x61,0x74,0x3e,0xa,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x64,0x63,0x3a,0x74,0x79,0x70,0x65,0xa,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x72,0x64,0x66,0x3a,0x72,0x65, + 0x73,0x6f,0x75,0x72,0x63,0x65,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x70, + 0x75,0x72,0x6c,0x2e,0x6f,0x72,0x67,0x2f,0x64,0x63,0x2f,0x64,0x63,0x6d,0x69,0x74, + 0x79,0x70,0x65,0x2f,0x53,0x74,0x69,0x6c,0x6c,0x49,0x6d,0x61,0x67,0x65,0x22,0x20, + 0x2f,0x3e,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x64,0x63,0x3a,0x74, + 0x69,0x74,0x6c,0x65,0x20,0x2f,0x3e,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f, + 0x63,0x63,0x3a,0x57,0x6f,0x72,0x6b,0x3e,0xa,0x20,0x20,0x20,0x20,0x3c,0x2f,0x72, + 0x64,0x66,0x3a,0x52,0x44,0x46,0x3e,0xa,0x20,0x20,0x3c,0x2f,0x6d,0x65,0x74,0x61, + 0x64,0x61,0x74,0x61,0x3e,0xa,0x20,0x20,0x3c,0x64,0x65,0x66,0x73,0xa,0x20,0x20, + 0x20,0x20,0x20,0x69,0x64,0x3d,0x22,0x64,0x65,0x66,0x73,0x32,0x36,0x36,0x38,0x22, + 0x20,0x2f,0x3e,0xa,0x20,0x20,0x3c,0x73,0x6f,0x64,0x69,0x70,0x6f,0x64,0x69,0x3a, + 0x6e,0x61,0x6d,0x65,0x64,0x76,0x69,0x65,0x77,0xa,0x20,0x20,0x20,0x20,0x20,0x70, + 0x61,0x67,0x65,0x63,0x6f,0x6c,0x6f,0x72,0x3d,0x22,0x23,0x33,0x63,0x33,0x66,0x34, + 0x31,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x63,0x6f, + 0x6c,0x6f,0x72,0x3d,0x22,0x23,0x36,0x36,0x36,0x36,0x36,0x36,0x22,0xa,0x20,0x20, + 0x20,0x20,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x6f,0x70,0x61,0x63,0x69,0x74,0x79, + 0x3d,0x22,0x31,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x6f,0x62,0x6a,0x65,0x63,0x74, + 0x74,0x6f,0x6c,0x65,0x72,0x61,0x6e,0x63,0x65,0x3d,0x22,0x31,0x30,0x22,0xa,0x20, + 0x20,0x20,0x20,0x20,0x67,0x72,0x69,0x64,0x74,0x6f,0x6c,0x65,0x72,0x61,0x6e,0x63, + 0x65,0x3d,0x22,0x31,0x30,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x67,0x75,0x69,0x64, + 0x65,0x74,0x6f,0x6c,0x65,0x72,0x61,0x6e,0x63,0x65,0x3d,0x22,0x31,0x30,0x22,0xa, + 0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,0x65,0x3a,0x70,0x61, + 0x67,0x65,0x6f,0x70,0x61,0x63,0x69,0x74,0x79,0x3d,0x22,0x30,0x22,0xa,0x20,0x20, + 0x20,0x20,0x20,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,0x65,0x3a,0x70,0x61,0x67,0x65, + 0x73,0x68,0x61,0x64,0x6f,0x77,0x3d,0x22,0x32,0x22,0xa,0x20,0x20,0x20,0x20,0x20, + 0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,0x65,0x3a,0x77,0x69,0x6e,0x64,0x6f,0x77,0x2d, + 0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x32,0x35,0x36,0x30,0x22,0xa,0x20,0x20,0x20, + 0x20,0x20,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,0x65,0x3a,0x77,0x69,0x6e,0x64,0x6f, + 0x77,0x2d,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22,0x31,0x33,0x35,0x33,0x22,0xa, + 0x20,0x20,0x20,0x20,0x20,0x69,0x64,0x3d,0x22,0x6e,0x61,0x6d,0x65,0x64,0x76,0x69, + 0x65,0x77,0x32,0x36,0x36,0x36,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x73,0x68,0x6f, + 0x77,0x67,0x72,0x69,0x64,0x3d,0x22,0x66,0x61,0x6c,0x73,0x65,0x22,0xa,0x20,0x20, + 0x20,0x20,0x20,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,0x65,0x3a,0x7a,0x6f,0x6f,0x6d, + 0x3d,0x22,0x32,0x39,0x2e,0x36,0x39,0x38,0x34,0x38,0x35,0x22,0xa,0x20,0x20,0x20, + 0x20,0x20,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,0x65,0x3a,0x63,0x78,0x3d,0x22,0x32, + 0x31,0x2e,0x38,0x34,0x33,0x36,0x38,0x33,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x69, + 0x6e,0x6b,0x73,0x63,0x61,0x70,0x65,0x3a,0x63,0x79,0x3d,0x22,0x31,0x36,0x2e,0x33, + 0x33,0x38,0x33,0x34,0x37,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,0x73, + 0x63,0x61,0x70,0x65,0x3a,0x77,0x69,0x6e,0x64,0x6f,0x77,0x2d,0x78,0x3d,0x22,0x36, + 0x30,0x30,0x30,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,0x73,0x63,0x61, + 0x70,0x65,0x3a,0x77,0x69,0x6e,0x64,0x6f,0x77,0x2d,0x79,0x3d,0x22,0x32,0x34,0x22, + 0xa,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,0x65,0x3a,0x77, + 0x69,0x6e,0x64,0x6f,0x77,0x2d,0x6d,0x61,0x78,0x69,0x6d,0x69,0x7a,0x65,0x64,0x3d, + 0x22,0x31,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70, + 0x65,0x3a,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2d,0x6c,0x61,0x79,0x65,0x72,0x3d, + 0x22,0x73,0x76,0x67,0x32,0x36,0x36,0x34,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x69, + 0x6e,0x6b,0x73,0x63,0x61,0x70,0x65,0x3a,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, + 0x2d,0x72,0x6f,0x74,0x61,0x74,0x69,0x6f,0x6e,0x3d,0x22,0x30,0x22,0x20,0x2f,0x3e, + 0xa,0x20,0x20,0x3c,0x70,0x61,0x74,0x68,0xa,0x20,0x20,0x20,0x20,0x20,0x64,0x3d, + 0x22,0x4d,0x20,0x31,0x32,0x2c,0x31,0x35,0x20,0x37,0x2e,0x35,0x33,0x37,0x2c,0x31, + 0x39,0x2e,0x39,0x36,0x39,0x20,0x33,0x2c,0x31,0x35,0x20,0x68,0x20,0x33,0x20,0x63, + 0x20,0x30,0x2c,0x2d,0x34,0x2e,0x39,0x37,0x20,0x34,0x2e,0x30,0x33,0x2c,0x2d,0x39, + 0x20,0x39,0x2c,0x2d,0x39,0x20,0x32,0x2e,0x33,0x39,0x35,0x2c,0x30,0x20,0x34,0x2e, + 0x35,0x36,0x35,0x2c,0x30,0x2e,0x39,0x34,0x32,0x20,0x36,0x2e,0x31,0x37,0x39,0x2c, + 0x32,0x2e,0x34,0x36,0x38,0x20,0x6c,0x20,0x2d,0x32,0x2e,0x30,0x30,0x34,0x2c,0x32, + 0x2e,0x32,0x33,0x31,0x20,0x43,0x20,0x31,0x38,0x2e,0x30,0x39,0x34,0x2c,0x39,0x2e, + 0x36,0x34,0x39,0x20,0x31,0x36,0x2e,0x36,0x32,0x32,0x2c,0x39,0x20,0x31,0x35,0x2c, + 0x39,0x20,0x31,0x31,0x2e,0x36,0x39,0x31,0x2c,0x39,0x20,0x39,0x2c,0x31,0x31,0x2e, + 0x36,0x39,0x31,0x20,0x39,0x2c,0x31,0x35,0x20,0x5a,0x20,0x4d,0x20,0x32,0x32,0x2e, + 0x34,0x36,0x33,0x2c,0x31,0x30,0x2e,0x30,0x33,0x31,0x20,0x31,0x38,0x2c,0x31,0x35, + 0x20,0x68,0x20,0x33,0x20,0x63,0x20,0x30,0x2c,0x33,0x2e,0x33,0x30,0x39,0x20,0x2d, + 0x32,0x2e,0x36,0x39,0x31,0x2c,0x36,0x20,0x2d,0x36,0x2c,0x36,0x20,0x2d,0x31,0x2e, + 0x36,0x32,0x33,0x2c,0x30,0x20,0x2d,0x33,0x2e,0x30,0x39,0x34,0x2c,0x2d,0x30,0x2e, + 0x36,0x35,0x20,0x2d,0x34,0x2e,0x31,0x37,0x35,0x2c,0x2d,0x31,0x2e,0x36,0x39,0x39, + 0x20,0x4c,0x20,0x38,0x2e,0x38,0x32,0x31,0x2c,0x32,0x31,0x2e,0x35,0x33,0x32,0x20, + 0x43,0x20,0x31,0x30,0x2e,0x34,0x33,0x34,0x2c,0x32,0x33,0x2e,0x30,0x35,0x38,0x20, + 0x31,0x32,0x2e,0x36,0x30,0x35,0x2c,0x32,0x34,0x20,0x31,0x35,0x2c,0x32,0x34,0x20, + 0x63,0x20,0x34,0x2e,0x39,0x37,0x2c,0x30,0x20,0x39,0x2c,0x2d,0x34,0x2e,0x30,0x33, + 0x20,0x39,0x2c,0x2d,0x39,0x20,0x68,0x20,0x33,0x20,0x7a,0x22,0xa,0x20,0x20,0x20, + 0x20,0x20,0x69,0x64,0x3d,0x22,0x70,0x61,0x74,0x68,0x32,0x36,0x36,0x32,0x22,0xa, + 0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x79,0x6c,0x65,0x3d,0x22,0x66,0x69,0x6c,0x6c, + 0x3a,0x23,0x61,0x36,0x61,0x38,0x61,0x62,0x3b,0x66,0x69,0x6c,0x6c,0x2d,0x6f,0x70, + 0x61,0x63,0x69,0x74,0x79,0x3a,0x31,0x22,0x20,0x2f,0x3e,0xa,0x3c,0x2f,0x73,0x76, + 0x67,0x3e,0xa, + // /home/nav/Projects/Bloom/src/Insight/UserInterfaces/InsightWindow/Images/RAM.svg + 0x0,0x0,0x4,0x5b, + 0x0, + 0x0,0x10,0xf1,0x78,0x9c,0xe5,0x57,0xcb,0x8e,0xdb,0x36,0x14,0xdd,0xe7,0x2b,0x4, + 0xcd,0x26,0x41,0x20,0x4a,0x14,0x49,0xbd,0x62,0x39,0x68,0x30,0x8,0xd0,0x45,0x81, + 0x22,0x4d,0xd1,0x35,0x2d,0xd2,0xb6,0x30,0x92,0x68,0x48,0xf4,0xd8,0xce,0xd7,0xf7, + 0x52,0x4f,0xdb,0xf2,0x34,0x93,0x4e,0x51,0x14,0x53,0x3,0x86,0xcd,0xfb,0x22,0xcf, + 0xe1,0xb9,0xa4,0xb4,0xf8,0x78,0x2c,0xb,0xeb,0x51,0xd6,0x4d,0xae,0xaa,0xd4,0xc6, + 0xc8,0xb3,0x2d,0x59,0x65,0x4a,0xe4,0xd5,0x26,0xb5,0x7f,0xff,0xfa,0xd9,0x89,0x6c, + 0xab,0xd1,0xbc,0x12,0xbc,0x50,0x95,0x4c,0xed,0x4a,0xd9,0x1f,0x97,0x6f,0x16,0xcd, + 0xe3,0xe6,0x8d,0x65,0x59,0x90,0x5c,0x35,0x89,0xc8,0x52,0x7b,0xab,0xf5,0x2e,0x71, + 0xdd,0xdd,0xbe,0x2e,0x90,0xaa,0x37,0xae,0xc8,0x5c,0x59,0xc8,0x52,0x56,0xba,0x71, + 0x31,0xc2,0xae,0x3d,0x85,0x67,0x53,0x78,0x56,0x4b,0xae,0xf3,0x47,0x99,0xa9,0xb2, + 0x54,0x55,0xd3,0x66,0x56,0xcd,0xdd,0x59,0x70,0x2d,0xd6,0x63,0xf4,0xe1,0x70,0x40, + 0x7,0xd2,0x6,0xe1,0x38,0x8e,0x5d,0xcf,0x77,0x7d,0xdf,0x81,0x8,0xa7,0x39,0x55, + 0x9a,0x1f,0x9d,0xcb,0x54,0x58,0xe3,0xad,0x54,0xdf,0xf3,0x3c,0x17,0x7c,0x53,0xe4, + 0xf3,0xa2,0x92,0x6,0x58,0xd9,0xc1,0x77,0xc,0x1f,0xc,0xa8,0x51,0xfb,0x3a,0x93, + 0x6b,0xc8,0x93,0xa8,0x92,0xda,0xbd,0xff,0x7a,0x3f,0x3a,0x1d,0xf,0x9,0x2d,0xce, + 0xca,0xe4,0xd5,0x43,0x93,0xf1,0x9d,0xbc,0x98,0x75,0x30,0x76,0xc,0xf0,0x52,0x36, + 0x3b,0x9e,0xc9,0xc6,0x1d,0xec,0x6d,0xfe,0x21,0x17,0x7a,0x9b,0xda,0x3e,0x6b,0x47, + 0x5b,0x99,0x6f,0xb6,0x7a,0x1c,0x3e,0xe6,0xf2,0xf0,0x49,0x1d,0x53,0xdb,0xb3,0x3c, + 0x2b,0x40,0x1,0xa6,0x2c,0x22,0xfe,0xf4,0xaf,0xb,0x9a,0x36,0x1a,0xb7,0x86,0x5c, + 0xa4,0x36,0xa0,0xc4,0x2c,0xc,0xba,0x71,0x3f,0x5f,0x72,0x2e,0x9,0x84,0xad,0xb7, + 0xed,0xcf,0xfb,0x3a,0x64,0xef,0xda,0xb8,0x1,0x5d,0x22,0x54,0x66,0x96,0x9b,0xda, + 0x5f,0x7e,0xfa,0x5,0x19,0xbe,0x96,0xe0,0x5e,0x8,0xb9,0x6e,0x4c,0x58,0x37,0x81, + 0x19,0xc1,0xc,0x20,0x2d,0xb7,0xf5,0x8e,0xc9,0x26,0x53,0x98,0x85,0x4f,0xb1,0x2b, + 0xde,0x74,0x60,0x2d,0x6b,0xc7,0x37,0x20,0x8c,0x42,0xd5,0xa9,0x7d,0x47,0x32,0xb2, + 0xa6,0xb8,0x77,0xac,0x54,0x2d,0x64,0x3d,0xb8,0x82,0xf6,0x73,0xe1,0x52,0x40,0x5e, + 0xae,0x4f,0x9d,0x9e,0xfb,0xda,0x3,0x30,0x53,0x75,0xf2,0xdf,0xf2,0x36,0x5b,0x2e, + 0xd4,0x1,0x88,0xbd,0x76,0x7e,0x53,0xaa,0x4c,0x6d,0x32,0xb3,0x67,0xc0,0x7a,0x8c, + 0x22,0x1f,0x53,0x12,0xcd,0x9d,0x66,0x1a,0x8c,0x62,0x3f,0xa,0xc3,0xd9,0x74,0xc0, + 0xde,0xde,0xf4,0x88,0xb3,0xaf,0x72,0xd,0x3a,0xdc,0x1d,0x67,0xe9,0xfb,0xba,0x36, + 0x1,0x5,0x3f,0x49,0x40,0xdb,0xfe,0x90,0x27,0xcb,0xd4,0x4a,0x43,0x3f,0x99,0x6d, + 0x1b,0x70,0x37,0x5b,0x75,0xd8,0xd4,0x86,0xd9,0x35,0x2f,0x46,0x6a,0x9f,0x9c,0xee, + 0x90,0x57,0x80,0xdd,0xe9,0x95,0x46,0x28,0x9d,0xf1,0xd7,0x47,0xc,0xea,0xc3,0x84, + 0xcd,0x96,0xd3,0x87,0x1c,0x8d,0x36,0x83,0xa7,0xa,0x9c,0x4c,0xf9,0x27,0x7c,0x25, + 0x3f,0xe6,0x65,0xfe,0x4d,0xa,0xb3,0x43,0xbd,0x68,0x4a,0xa9,0xb9,0xe0,0x9a,0x4f, + 0x52,0x19,0x2c,0x20,0x2d,0xd2,0xca,0xe,0xa2,0xe0,0x30,0x48,0xbe,0xdc,0x7f,0xee, + 0x46,0x30,0xce,0xb2,0xe4,0xf,0x55,0x3f,0xf4,0x43,0xf8,0x98,0x0,0xbe,0x52,0x7b, + 0x58,0xba,0xbd,0x1c,0xcd,0xb,0x91,0x25,0xd0,0xbe,0x25,0xd7,0xcb,0xbc,0x4,0x9, + 0x98,0xce,0x7f,0xf,0xed,0xba,0x70,0x27,0xc7,0x45,0xb0,0x3e,0xed,0xe4,0x54,0xb4, + 0x2b,0x5b,0xcb,0xee,0x1c,0xb8,0x79,0x18,0x8a,0xac,0xcc,0x4d,0x92,0xfb,0x9b,0xce, + 0x8b,0xe2,0x67,0x33,0x49,0x8f,0xec,0xac,0x68,0xae,0xb,0xb9,0x6c,0xe7,0xec,0xfe, + 0xe,0x28,0xdc,0x1e,0x46,0xf,0xd2,0x3d,0x43,0xb9,0x70,0x7,0x1a,0xda,0xd1,0xe6, + 0x8a,0xd0,0x4d,0xad,0xf6,0xbb,0x52,0x9,0xd9,0x4b,0xc7,0x9e,0xe8,0xbb,0x2d,0xa5, + 0x82,0xaf,0x64,0x91,0xda,0xbf,0xe6,0x55,0x33,0x28,0x48,0x9f,0xa,0x48,0xef,0x7b, + 0x26,0xc1,0x1f,0xca,0xfc,0xe8,0xac,0xa,0x59,0x9,0xc7,0x14,0x4e,0x2a,0x43,0x4f, + 0x31,0x6e,0x80,0xcc,0xf4,0x0,0x6a,0x96,0xb9,0x6,0xe8,0xc9,0x1d,0x5f,0xaf,0xf0, + 0x8a,0xb4,0x3,0x67,0xf2,0x35,0xba,0x56,0xf,0x32,0xe9,0x3b,0xbd,0x1f,0x76,0x42, + 0x4c,0xe0,0xe8,0x9,0x43,0x8f,0xe,0x46,0x60,0x52,0xd6,0x5,0x28,0x44,0x27,0xa3, + 0x4d,0x70,0x68,0xdb,0xba,0xe6,0x27,0x58,0x4f,0x25,0x7,0xeb,0x58,0xde,0x1e,0xd6, + 0x64,0x90,0x9b,0x35,0x42,0xb3,0x46,0xa3,0xb1,0x97,0xbb,0x87,0x2,0x1a,0x7a,0x51, + 0x14,0x91,0xd1,0x33,0xc8,0xdc,0x43,0x61,0xe4,0x85,0x7e,0x3c,0x3a,0x8c,0xb8,0x11, + 0xf6,0xa8,0x87,0x19,0x1d,0x8d,0xa0,0x69,0x8a,0x28,0xa1,0xc4,0x27,0xd1,0xb8,0xbb, + 0x7f,0x4d,0xc9,0x4d,0x32,0xff,0x6b,0x44,0x39,0xec,0xc5,0x54,0xc5,0x31,0xa5,0x24, + 0xc,0xff,0x7,0x54,0x39,0xf4,0x85,0x64,0x11,0x14,0x45,0xcc,0x63,0x67,0xc6,0x57, + 0x4b,0x56,0xf0,0xa3,0x54,0xb1,0x38,0x8,0xbf,0xdf,0x84,0x18,0x31,0x1a,0x11,0x1a, + 0x7,0xaf,0x8a,0x2c,0xe6,0xc4,0xff,0x0,0x5d,0x37,0x1a,0xb1,0xa5,0x8b,0xb2,0x98, + 0xbd,0x32,0xba,0xa8,0x43,0x5e,0x4c,0xd8,0xcd,0x66,0xbc,0x26,0x6c,0xe1,0x6e,0x6e, + 0xde,0xbe,0xfd,0x65,0xfa,0x49,0x89,0xd3,0xf5,0x3d,0xfb,0xbd,0x8b,0x79,0x0,0xd5, + 0x93,0x2f,0xf2,0x66,0x7,0x76,0x78,0x79,0x28,0x72,0x60,0x60,0x82,0xfe,0xfc,0x6b, + 0x37,0x6b,0x3f,0x97,0x3b,0xe3,0xd,0x3b,0x73,0xce,0xeb,0xb0,0x2d,0x1e,0x21,0xfe, + 0xb4,0x59,0x63,0xa,0xa2,0x81,0x1f,0x52,0x36,0x23,0x1d,0xb3,0xc8,0xbb,0xa6,0x9b, + 0x20,0x82,0x19,0x66,0x33,0xae,0x81,0x55,0x66,0x8e,0xbd,0xf0,0x9c,0x6a,0x8c,0x88, + 0x17,0x86,0xa1,0x7f,0xd5,0xca,0x84,0x90,0x30,0xa0,0xcf,0x6d,0xe5,0x7f,0xd,0xab, + 0x7f,0x8d,0x15,0x9e,0xf1,0x59,0x40,0xc1,0x33,0x43,0xeb,0x23,0x3f,0x24,0x38,0x66, + 0xe4,0xb2,0x13,0xe1,0xd8,0x22,0x71,0xc0,0x2e,0xd1,0x46,0xbe,0x11,0xe0,0x8f,0x60, + 0xfd,0x3b,0x1d,0xe7,0xd3,0x80,0x84,0xfe,0xb,0x5a,0xee,0x43,0xfb,0x98,0xec,0xc0, + 0xab,0x9,0xbc,0x6e,0xe5,0xd5,0x26,0xe1,0x7b,0xad,0x6e,0xd1,0x34,0xbb,0xc,0x81, + 0xa6,0x88,0xe2,0xd0,0xbf,0x29,0xa,0x1c,0xb0,0x20,0xbe,0xa2,0x89,0x44,0x71,0x80, + 0xcf,0xb8,0x3,0x9a,0x1c,0x86,0x7c,0x2f,0x88,0x3,0x7f,0xba,0x3f,0x74,0xcd,0xab, + 0xc6,0x3c,0xa9,0xc3,0xcc,0xe6,0x25,0x48,0xbe,0x8d,0xbd,0x77,0xe7,0xed,0xb9,0x30, + 0xcf,0xf4,0xcb,0x37,0x7f,0x2,0x6d,0x7b,0xe4,0xd1, + // /home/nav/Projects/Bloom/src/Insight/UserInterfaces/InsightWindow/Images/BloomIcon.svg + 0x0,0x0,0x8,0xd1, + 0x0, + 0x0,0x44,0xa5,0x78,0x9c,0xed,0x5c,0x59,0x6f,0xdb,0x46,0x10,0x7e,0xcf,0xaf,0x20, + 0x98,0x97,0x16,0x35,0x8f,0xdd,0xe5,0xb1,0x54,0x25,0x17,0x48,0x83,0xa2,0x29,0x1a, + 0xa0,0xe8,0xf9,0x28,0xd0,0xe4,0x4a,0x62,0x42,0x71,0x89,0x25,0x75,0xf9,0xd7,0x77, + 0x96,0x37,0x2d,0xca,0xb6,0x6c,0x2b,0x56,0x1c,0xd3,0x30,0x24,0xee,0xcc,0x1e,0xf3, + 0xcd,0xb5,0x97,0x3d,0xfe,0x69,0xbb,0x8c,0x95,0x35,0x13,0x59,0xc4,0x93,0x89,0x8a, + 0x74,0x53,0x55,0x58,0x12,0xf0,0x30,0x4a,0xe6,0x13,0xf5,0x9f,0xbf,0x7f,0xd1,0xa8, + 0xaa,0x64,0xb9,0x9f,0x84,0x7e,0xcc,0x13,0x36,0x51,0x13,0xae,0xfe,0x74,0xf9,0x66, + 0x9c,0xad,0xe7,0x6f,0x14,0x45,0x81,0xca,0x49,0x36,0xa,0x83,0x89,0xba,0xc8,0xf3, + 0x74,0x64,0x18,0xe9,0x4a,0xc4,0x3a,0x17,0x73,0x23,0xc,0xc,0x16,0xb3,0x25,0x4b, + 0xf2,0xcc,0x40,0x3a,0x32,0xd4,0x96,0x3d,0x68,0xd9,0x3,0xc1,0xfc,0x3c,0x5a,0xb3, + 0x80,0x2f,0x97,0x3c,0xc9,0x8a,0x9a,0x49,0xf6,0xb6,0xc3,0x2c,0xc2,0x59,0xc3,0xbd, + 0xd9,0x6c,0xf4,0xd,0x29,0x98,0x90,0xe7,0x79,0x86,0x89,0xd,0x8c,0x35,0xe0,0xd0, + 0xb2,0x5d,0x92,0xfb,0x5b,0xad,0x5f,0x15,0xc6,0x38,0x54,0x15,0x9b,0xa6,0x69,0x0, + 0xad,0xe5,0xbc,0x1f,0xd7,0x28,0x3,0x54,0x52,0xf8,0x6d,0xd8,0xeb,0x2,0x3d,0xe3, + 0x2b,0x11,0xb0,0x19,0xd4,0x63,0x7a,0xc2,0x72,0xe3,0xfd,0xdf,0xef,0x1b,0xa2,0x66, + 0xea,0x61,0x1e,0x76,0x9a,0x89,0x92,0xcf,0x59,0xe0,0xa7,0xac,0xd7,0x6b,0x5d,0x58, + 0x22,0xe0,0x2f,0x59,0x96,0xfa,0x1,0xcb,0x8c,0xba,0xbc,0xa8,0xbf,0x89,0xc2,0x7c, + 0x1,0x4a,0x32,0xcd,0xe2,0x75,0xc1,0xa2,0xf9,0x22,0x6f,0xdf,0xd7,0x11,0xdb,0xbc, + 0xe3,0xdb,0x89,0x6a,0x2a,0xa6,0x82,0x1d,0xdd,0xb2,0x29,0x21,0xa4,0xf9,0x66,0x95, + 0x4c,0xad,0xaa,0x51,0x51,0x10,0x85,0x13,0x15,0xe4,0xa4,0xe5,0x4b,0xd5,0xdd,0xa8, + 0x6b,0x11,0x3a,0x52,0xbe,0x2b,0x3e,0x7e,0x10,0xae,0xfd,0x7d,0xc1,0x57,0xb,0x37, + 0xa,0x79,0x20,0x47,0x3b,0x51,0xdf,0xc5,0x9c,0x2f,0x3f,0x4,0x3c,0x59,0x23,0xbd, + 0x86,0xad,0x69,0x8d,0x6d,0x53,0x2e,0x72,0x6d,0x16,0xc5,0xac,0xe4,0x36,0x16,0x7c, + 0xc9,0x40,0xce,0xb5,0xf1,0x87,0xe0,0x9f,0x58,0x0,0x46,0x52,0x34,0x60,0x64,0x22, + 0x30,0x3e,0x24,0x99,0x14,0xcc,0xf8,0x27,0x63,0xe2,0x43,0x92,0x33,0x31,0x2b,0xa0, + 0xa8,0x8a,0xff,0x8b,0x92,0x90,0x6f,0x8c,0xf,0x4b,0x7f,0xce,0xaa,0x5a,0x55,0xb7, + 0x69,0x32,0xdc,0xed,0x36,0x4c,0x41,0x67,0x9e,0x33,0x48,0xdc,0xd5,0xc4,0x4b,0xa0, + 0x8e,0x43,0x36,0xcb,0x24,0x57,0x9,0x8b,0x7c,0xc3,0x5,0x1,0x48,0x4d,0xc5,0xd4, + 0xcf,0x17,0x1a,0x9b,0xcd,0x60,0xd4,0x25,0xab,0xa2,0x94,0x6f,0x13,0x35,0xe5,0x1b, + 0xc0,0x2d,0x17,0xfc,0x73,0xa9,0xb0,0xba,0xa1,0x4e,0x15,0x6c,0x5a,0xa4,0xa5,0x65, + 0xd3,0x75,0x94,0x45,0x57,0x31,0x40,0x92,0x8b,0x55,0x5b,0x29,0x4e,0x59,0xab,0x81, + 0xa6,0x94,0xcf,0x66,0x19,0xcb,0xa7,0x29,0x8f,0xc0,0xab,0x26,0xaa,0x75,0x61,0xea, + 0x26,0x75,0xa9,0x6d,0x52,0xaf,0x65,0xca,0x40,0xaa,0x86,0xa5,0xd7,0x68,0x24,0xb1, + 0x4c,0x79,0xec,0xe7,0x5c,0x4c,0xf3,0x9d,0xb4,0xc0,0x9f,0x57,0x57,0x51,0xf0,0x8e, + 0x5d,0x47,0x4c,0xfc,0xc6,0x17,0x7e,0x32,0xcc,0x7b,0xc5,0x72,0x1f,0xac,0x4a,0xc7, + 0x6d,0x27,0xb9,0xf,0xbd,0xc4,0x51,0xc2,0x0,0x92,0xaa,0xad,0x6b,0x26,0x78,0x61, + 0xa1,0xad,0x14,0x40,0xff,0x4,0x23,0xa9,0x18,0xd8,0x36,0x17,0xe9,0xd4,0x17,0x41, + 0xc3,0xb0,0x8c,0xa0,0x17,0x68,0x6,0x3e,0x41,0x9c,0xb6,0xf5,0xc0,0x8f,0xd9,0xb4, + 0xb6,0xf6,0xa6,0x98,0x25,0xe1,0xc1,0x2e,0x15,0xe3,0x8,0x35,0x65,0x69,0x24,0xf8, + 0x2d,0xa,0x42,0xc7,0x2a,0xe8,0xa8,0xde,0xef,0x65,0x24,0xc4,0x7d,0x22,0x23,0x31, + 0xc1,0x48,0x10,0xc1,0xd8,0x43,0xf6,0xab,0x89,0x3c,0x99,0x89,0x10,0xfb,0xc,0x4c, + 0xe4,0x68,0x33,0x7d,0x35,0x91,0x2f,0x68,0x22,0xd8,0x3b,0xa9,0x89,0x64,0xd1,0x32, + 0x8d,0xa3,0xd9,0xee,0x96,0x1,0x3c,0x38,0x84,0x64,0x39,0x4b,0xb3,0x6e,0x41,0xbe, + 0x10,0x2c,0x5b,0xf0,0x38,0x94,0xfa,0x33,0xdd,0x8e,0x99,0x2c,0x39,0xcf,0x17,0x53, + 0x3f,0x99,0xc7,0xc,0x6a,0x10,0xc7,0x6c,0x48,0xb,0x6,0x8d,0x8b,0x69,0x16,0x5d, + 0x43,0xa7,0x6d,0x71,0x3d,0xee,0x29,0xa4,0xf1,0x68,0x1d,0x85,0x2b,0x3f,0x9e,0xca, + 0x61,0x43,0xed,0x99,0x1f,0x67,0x6c,0x9f,0xf1,0xd3,0x2a,0xcb,0xa7,0x1,0x7,0x65, + 0x66,0x1,0xab,0xb9,0x9e,0xde,0x9d,0xf0,0x53,0xa5,0xe5,0x57,0x77,0x3a,0x89,0x3b, + 0x9d,0x36,0x29,0xdf,0xed,0x4e,0xe8,0x68,0x7f,0xfe,0xa6,0xdd,0x9,0x1d,0x9d,0x21, + 0x5f,0xdd,0x49,0xf9,0x72,0xee,0x84,0x8e,0x8e,0x76,0x4f,0xed,0x4e,0xf,0x9e,0xbd, + 0x7c,0x93,0xee,0x64,0xbe,0xae,0x7,0xca,0xe7,0x3c,0xdd,0xc9,0x3c,0xed,0x7a,0xe0, + 0x6e,0x77,0x32,0x1f,0x3c,0x7b,0xb9,0xc3,0x9d,0x90,0x85,0xa9,0xed,0xbe,0x3c,0x97, + 0x92,0x1b,0x88,0xaf,0x2e,0x55,0x3c,0xe7,0xe8,0x52,0xa0,0x9e,0xa3,0x23,0xde,0x93, + 0xba,0x14,0xc,0xe0,0xc1,0x33,0x98,0x6f,0xd7,0xa5,0x5e,0xb7,0x24,0xca,0xe7,0x3c, + 0x5d,0x8a,0x3e,0xef,0x96,0x4,0xc,0xe0,0x44,0x5b,0x12,0x2f,0x70,0xca,0x7,0x60, + 0xbd,0x6e,0x48,0x94,0xcf,0x99,0x3a,0xd3,0xb3,0x9f,0x12,0x20,0xcf,0x7d,0x5d,0x15, + 0x9c,0xb3,0x89,0xb8,0x27,0x5e,0x15,0xdc,0xd1,0xfb,0x89,0x77,0xcc,0x6e,0xef,0xdd, + 0x79,0x56,0xd9,0x8f,0x3f,0x63,0x6d,0x7a,0x17,0x9d,0xde,0xb6,0x13,0x15,0xeb,0xd8, + 0xa6,0x14,0xdb,0x6d,0x83,0x3b,0xb0,0x30,0xdd,0x72,0x28,0xf2,0x10,0x6d,0xa,0x2b, + 0x1b,0xc3,0xc0,0x4e,0x1d,0x52,0x9d,0x35,0xcb,0xa7,0x3e,0xa4,0xc7,0x30,0xf1,0x23, + 0xb6,0x65,0xdb,0xbd,0x41,0x8b,0x62,0xb4,0xd8,0xab,0xba,0x1f,0x1b,0xf2,0xc8,0xb9, + 0xf8,0xd6,0x9c,0xb0,0xcb,0x3,0xf3,0x50,0x1e,0xed,0xbf,0x69,0x6a,0x5d,0xf9,0x4d, + 0x5a,0x4a,0xfd,0x39,0xb,0x78,0xcc,0xc5,0x44,0x7d,0x4b,0x2,0x32,0x6b,0xce,0x2e, + 0xaf,0xb8,0x8,0x99,0xa8,0x49,0x4e,0xf1,0xf4,0x48,0x3c,0xf5,0x83,0x28,0xdf,0x95, + 0x77,0x3e,0xaa,0xb6,0x5b,0xe0,0xe7,0xac,0xa1,0xf,0x52,0xb3,0x85,0x1f,0xf2,0xd, + 0x88,0x75,0x93,0x78,0xcd,0xf9,0x52,0xa2,0x46,0x31,0xb5,0x70,0x63,0x82,0xd,0x39, + 0xd8,0xca,0xfb,0xa,0x44,0x77,0x1d,0xcf,0xdd,0xab,0x1b,0xc8,0xd1,0x78,0x3a,0xb1, + 0x29,0x6e,0x16,0xd4,0xd,0x31,0xe4,0xc1,0x4a,0x5e,0x27,0xd1,0x56,0x49,0x24,0x23, + 0x52,0xba,0xdd,0xab,0xbe,0x12,0x42,0x32,0xc4,0xfe,0x8e,0x81,0xd0,0xc5,0x87,0x73, + 0xb0,0x19,0xc1,0x73,0x3f,0x2f,0x94,0x5f,0xb,0x8,0xd3,0x89,0xcd,0x5c,0x48,0x80, + 0xbb,0x89,0xff,0x60,0x77,0x9b,0xe2,0x22,0x82,0x56,0x69,0x9e,0x58,0xd6,0x1e,0x50, + 0x15,0x47,0x73,0x4f,0x83,0x34,0x56,0x74,0x93,0x45,0x1a,0x9a,0xed,0x1c,0x6a,0x60, + 0x27,0x9b,0x3f,0x40,0x5b,0xfa,0x5b,0x88,0x7a,0xd7,0x2c,0x6c,0x8d,0x78,0xbc,0x84, + 0x30,0x1b,0xfa,0xb9,0xdf,0x5a,0x4c,0x5d,0x62,0xd7,0xb7,0x19,0x44,0x38,0x1b,0xfd, + 0xf9,0xfe,0x97,0xcb,0xca,0x18,0xc7,0x41,0x30,0xfa,0x8f,0x8b,0xcf,0xb5,0x6d,0x2a, + 0x8a,0x64,0xf0,0xaf,0xf8,0xa,0xc6,0xad,0x5e,0x36,0xc5,0xe3,0x30,0x18,0xcd,0xb8, + 0x58,0xfa,0xf9,0x65,0x24,0x2f,0x60,0xc8,0x1b,0x32,0x3f,0x6c,0x97,0x31,0x18,0x6e, + 0x43,0xe8,0x31,0xcb,0xf0,0xda,0x36,0x5a,0x36,0xb,0x13,0xb7,0xe2,0xbe,0xcc,0xe0, + 0xa5,0xa1,0x30,0x80,0x18,0xe,0x95,0x8c,0xbf,0xf2,0x28,0x8e,0x8b,0x5b,0x1e,0x8d, + 0x6f,0x36,0x8d,0x46,0x79,0xcc,0xda,0xc2,0xb1,0x51,0x8d,0xbe,0x92,0xcd,0xe8,0x8, + 0x37,0x36,0x6a,0xd1,0x8b,0xb7,0xf9,0xd,0x10,0xe7,0x82,0xaf,0xd2,0x25,0xf,0x59, + 0x65,0x2e,0x6a,0xb,0xd9,0xb0,0xf9,0xc4,0xfe,0x15,0x8b,0x27,0xea,0xef,0x92,0xa8, + 0xd4,0x36,0x9a,0xe5,0x3b,0x19,0x5d,0xc2,0x28,0x4b,0xa1,0xd6,0x28,0x4a,0x64,0x72, + 0x51,0x7,0xe2,0xc9,0x20,0xe3,0x8f,0x33,0x10,0x74,0x54,0x79,0x6f,0xf1,0xa2,0x55, + 0xbe,0x37,0x42,0x3f,0x96,0x33,0x80,0x51,0xc2,0x81,0xaf,0xfc,0x5e,0x1a,0xdc,0x8, + 0xe9,0x18,0x23,0xe4,0xd4,0x85,0x45,0x2,0x2c,0xf2,0xdf,0xc8,0xaa,0xcb,0x42,0x1f, + 0xbc,0x54,0x8,0xe8,0xa8,0x5b,0xbd,0x6e,0xdb,0xd4,0x1d,0x84,0x7a,0xdb,0xf4,0x4d, + 0x3c,0x22,0xd6,0x5e,0x5c,0xeb,0xdd,0x21,0x92,0x4f,0x13,0xd7,0xf6,0x28,0x60,0xcb, + 0x1a,0x84,0x41,0x6c,0x5a,0x96,0xc3,0x34,0xe4,0x74,0x3,0x67,0x9f,0x50,0x7,0xbd, + 0xf9,0x83,0x74,0xb3,0x17,0x3e,0x7a,0xba,0xc1,0xb7,0xea,0xa6,0xa2,0xd5,0x31,0x36, + 0x4a,0x32,0x96,0x64,0x91,0xbc,0x89,0x56,0x25,0x89,0x4a,0x79,0x32,0xa9,0xdc,0x50, + 0x5e,0xab,0x9b,0x52,0x6f,0x3e,0xf5,0x3d,0xdf,0xbb,0xb7,0xde,0x60,0xf2,0x83,0x2c, + 0x9b,0xe0,0x87,0x2b,0xae,0x4d,0xeb,0xd2,0xb1,0x15,0x84,0x74,0x87,0x52,0xd3,0xf1, + 0x2e,0x90,0xab,0x63,0x42,0x1c,0xe2,0x28,0xb,0x45,0x3,0xfb,0xa0,0x2e,0xa4,0x61, + 0x65,0xad,0x54,0x5f,0x5d,0x28,0x6e,0x4a,0xaf,0xf7,0x72,0x27,0x31,0xb1,0xd9,0x66, + 0xc1,0x7b,0x8,0x6e,0x39,0x16,0xb5,0xfc,0x67,0x14,0x9c,0xe8,0xd4,0xc5,0x2e,0xb5, + 0x7,0x5,0x77,0x7,0x5,0x77,0x7,0x5,0x87,0x3c,0x7e,0x8c,0xe0,0x94,0x12,0x66, + 0xe1,0x67,0x14,0xdc,0xd1,0x4d,0xdb,0xb5,0xbc,0xc7,0x68,0x5c,0x3a,0x3a,0xb1,0x1c, + 0xac,0x39,0x9a,0xa9,0xb9,0xc3,0xb3,0x9f,0xdb,0xa2,0x15,0x62,0xf2,0xe7,0x59,0x30, + 0x68,0x87,0x6f,0xb9,0x37,0xe3,0x94,0xa3,0x63,0xf,0x3b,0xee,0xfe,0xf4,0xab,0x26, + 0xf4,0xc2,0x14,0x92,0xf7,0xe7,0x30,0xed,0xdc,0xd4,0xd8,0xb5,0x85,0xc7,0xd9,0xc4, + 0xf9,0x44,0x1,0x57,0xf7,0x88,0x6b,0xf,0x1b,0x84,0x43,0xef,0x8a,0x1,0xc8,0x3a, + 0x4a,0x6c,0x8f,0xba,0xe,0x99,0x3d,0x7f,0xc,0xb0,0xf6,0xc5,0x76,0x87,0xc5,0x3e, + 0x10,0x1,0xf0,0xd7,0xa5,0xed,0x26,0x2,0x3c,0x54,0xec,0xbe,0xff,0x6b,0xe4,0x56, + 0xf1,0x87,0x22,0x40,0x67,0x94,0x4d,0x44,0xbc,0x21,0xb4,0x8d,0x3d,0xe4,0xb8,0x75, + 0x69,0xb5,0xe0,0x1e,0x5d,0xad,0xf2,0xbc,0x5b,0x26,0xd7,0xf5,0xa3,0x2,0x91,0xa7, + 0x83,0xc7,0xd6,0x2d,0x44,0x1c,0x19,0x20,0x29,0x8c,0xc2,0x84,0xe9,0x9,0xa0,0x82, + 0x75,0x44,0xa9,0xeb,0x12,0x25,0x6,0x50,0xc0,0xbf,0x89,0x85,0x2f,0x90,0xee,0x9a, + 0xa6,0x6d,0xd3,0x3d,0x93,0x80,0x55,0x1c,0xd5,0xd0,0xe3,0x50,0xa9,0xac,0xe4,0x6c, + 0x50,0x81,0x85,0x9e,0x65,0x59,0xb6,0x73,0x8,0x15,0xad,0x86,0xe5,0x2e,0x5c,0x2c, + 0xcd,0x73,0x1e,0x7,0x4d,0x35,0x77,0x38,0xf,0x68,0x3e,0xca,0x30,0x22,0xf7,0xbe, + 0x30,0xea,0x40,0xf3,0xaf,0x82,0x89,0xe,0x93,0xa2,0x4e,0xca,0x68,0x41,0xa0,0xb6, + 0x76,0x7b,0xc4,0xf8,0xba,0x8c,0xe3,0x63,0xc7,0x38,0xaa,0x88,0xf2,0xaf,0x62,0xeb, + 0xae,0x25,0x83,0xab,0xf2,0xbb,0xe2,0x41,0x0,0x83,0xd5,0x2,0xa1,0x17,0x16,0xb0, + 0x51,0xe4,0x78,0x7,0x1c,0xe6,0x45,0xb9,0xcc,0xc7,0x4e,0x20,0xd9,0x47,0xa5,0x13, + 0x45,0xb4,0xbb,0xdd,0xe5,0xb1,0xe6,0x52,0x25,0xda,0xb3,0x1,0xa6,0x70,0x18,0x93, + 0x58,0x2d,0x30,0x44,0x47,0xb6,0xed,0x78,0xe4,0x80,0xb7,0x68,0xb7,0x2f,0x2e,0xbe, + 0x2e,0xcb,0x80,0x60,0x5a,0xc5,0x9,0xeb,0xa2,0xf1,0x1c,0x48,0xb6,0xbd,0x14,0x53, + 0x9a,0xc4,0x45,0x1b,0x55,0x7,0xad,0xe3,0x71,0xa8,0x90,0xd0,0x75,0x69,0x70,0x8e, + 0xa8,0xd4,0x9e,0x73,0x0,0x95,0x1a,0x94,0x3,0x1e,0xf3,0x52,0x51,0xa9,0xdd,0x6, + 0x50,0xb1,0x74,0x97,0x22,0xda,0xbd,0xd7,0xd5,0xf1,0x97,0x17,0x15,0x2c,0xca,0x10, + 0x1,0x7a,0xef,0xf8,0xca,0xaf,0x4d,0x20,0xb5,0x21,0xbf,0xd4,0x59,0xc5,0xbe,0xa8, + 0x32,0xcd,0x21,0xc3,0xf0,0x5e,0x10,0x30,0xcb,0x2e,0x30,0x1d,0x77,0xd1,0xfa,0x53, + 0xb2,0xfb,0x39,0xcc,0x63,0x91,0x39,0xab,0xf0,0xda,0x33,0x99,0xc6,0x65,0x7e,0x6d, + 0x52,0x8c,0x3d,0x9c,0x63,0xac,0x63,0xb6,0x31,0xce,0x68,0x25,0xdb,0x5b,0x8f,0x61, + 0xad,0x95,0xae,0x3e,0xb8,0xac,0x97,0x73,0x7b,0xbb,0x1a,0xfb,0x14,0xb9,0xf9,0xa, + 0x3e,0x84,0x2d,0xa7,0x7b,0xfe,0x57,0x6e,0x6b,0x58,0x26,0x4,0xa1,0x36,0xde,0xe4, + 0xc2,0x4f,0x32,0xb9,0x67,0x3f,0x51,0x8b,0x73,0xd2,0xef,0x34,0x53,0xf7,0xaa,0xe7, + 0xa2,0xfd,0xfa,0xfd,0x63,0x50,0x7d,0xc6,0x85,0x72,0xf,0x55,0x2,0x6b,0x5c,0xef, + 0x34,0xb8,0x62,0xdd,0xa6,0xb6,0xdd,0xd9,0xff,0xfe,0x12,0xb8,0x9e,0x8b,0xb5,0xca, + 0xdd,0x3,0x72,0x1a,0x5c,0x21,0x3f,0xba,0xdd,0x3f,0xca,0xf9,0x96,0xcc,0x15,0x3f, + 0x12,0xd2,0x7a,0x5f,0xd8,0x1d,0x8e,0x0,0x8f,0x40,0xa8,0x9a,0x5a,0x3d,0x3b,0x42, + 0xe0,0xd0,0x27,0xc1,0xa8,0xf2,0x66,0xfb,0x25,0x60,0x4,0xce,0x79,0x12,0x8c,0x2a, + 0xcf,0xec,0x2c,0xf5,0x83,0x48,0x4,0x31,0xbb,0x81,0xd2,0x61,0x97,0x32,0x75,0x8a, + 0x88,0x5b,0xb,0x37,0x7a,0x6b,0xce,0xe4,0xcf,0x4d,0x54,0x4c,0xc7,0x1,0x5c,0xe8, + 0x53,0xc1,0x52,0x6e,0xf4,0x76,0xe2,0x74,0x79,0x15,0x1,0x66,0xa1,0x9d,0x49,0x55, + 0xb0,0xdb,0x2f,0x13,0xc5,0x8d,0x25,0xa7,0x38,0xe5,0xb4,0xef,0x38,0xb3,0xec,0x1d, + 0x41,0xee,0x5d,0x7e,0xb8,0xeb,0x44,0xb3,0xae,0x70,0xeb,0x79,0xf2,0x61,0xac,0xb, + 0xc,0x86,0xad,0xae,0x3e,0x5d,0xee,0x41,0x8c,0xc0,0xd6,0x5d,0xfb,0x29,0xf1,0xf5, + 0x4c,0xb3,0xf,0x6f,0xb9,0xaf,0xe6,0x38,0x7d,0x80,0xf7,0x4a,0x45,0x81,0x7a,0xf1, + 0xef,0x2a,0x48,0x17,0xe1,0xb1,0xbc,0x5f,0x70,0xf9,0xe6,0x7f,0x8e,0x79,0x41,0x9f, + + // /home/nav/Projects/Bloom/src/Insight/UserInterfaces/InsightWindow/Images/refresh-disabled.svg + 0x0,0x0,0x8,0x19, + 0x3c, + 0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e, + 0x30,0x22,0x20,0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22,0x55,0x54,0x46, + 0x2d,0x38,0x22,0x20,0x73,0x74,0x61,0x6e,0x64,0x61,0x6c,0x6f,0x6e,0x65,0x3d,0x22, + 0x6e,0x6f,0x22,0x3f,0x3e,0xa,0x3c,0x73,0x76,0x67,0xa,0x20,0x20,0x20,0x78,0x6d, + 0x6c,0x6e,0x73,0x3a,0x64,0x63,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x70, + 0x75,0x72,0x6c,0x2e,0x6f,0x72,0x67,0x2f,0x64,0x63,0x2f,0x65,0x6c,0x65,0x6d,0x65, + 0x6e,0x74,0x73,0x2f,0x31,0x2e,0x31,0x2f,0x22,0xa,0x20,0x20,0x20,0x78,0x6d,0x6c, + 0x6e,0x73,0x3a,0x63,0x63,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x63,0x72, + 0x65,0x61,0x74,0x69,0x76,0x65,0x63,0x6f,0x6d,0x6d,0x6f,0x6e,0x73,0x2e,0x6f,0x72, + 0x67,0x2f,0x6e,0x73,0x23,0x22,0xa,0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a, + 0x72,0x64,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e, + 0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x30,0x32,0x2f,0x32, + 0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,0x6e,0x74,0x61,0x78,0x2d,0x6e,0x73,0x23, + 0x22,0xa,0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x73,0x76,0x67,0x3d,0x22, + 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0xa,0x20,0x20,0x20,0x78, + 0x6d,0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77, + 0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67, + 0x22,0xa,0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x73,0x6f,0x64,0x69,0x70, + 0x6f,0x64,0x69,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x73,0x6f,0x64,0x69, + 0x70,0x6f,0x64,0x69,0x2e,0x73,0x6f,0x75,0x72,0x63,0x65,0x66,0x6f,0x72,0x67,0x65, + 0x2e,0x6e,0x65,0x74,0x2f,0x44,0x54,0x44,0x2f,0x73,0x6f,0x64,0x69,0x70,0x6f,0x64, + 0x69,0x2d,0x30,0x2e,0x64,0x74,0x64,0x22,0xa,0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e, + 0x73,0x3a,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,0x65,0x3d,0x22,0x68,0x74,0x74,0x70, + 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,0x65,0x2e, + 0x6f,0x72,0x67,0x2f,0x6e,0x61,0x6d,0x65,0x73,0x70,0x61,0x63,0x65,0x73,0x2f,0x69, + 0x6e,0x6b,0x73,0x63,0x61,0x70,0x65,0x22,0xa,0x20,0x20,0x20,0x77,0x69,0x64,0x74, + 0x68,0x3d,0x22,0x33,0x30,0x22,0xa,0x20,0x20,0x20,0x68,0x65,0x69,0x67,0x68,0x74, + 0x3d,0x22,0x33,0x30,0x22,0xa,0x20,0x20,0x20,0x76,0x69,0x65,0x77,0x42,0x6f,0x78, + 0x3d,0x22,0x30,0x20,0x30,0x20,0x33,0x30,0x20,0x33,0x30,0x22,0xa,0x20,0x20,0x20, + 0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31,0x22,0xa,0x20,0x20, + 0x20,0x69,0x64,0x3d,0x22,0x73,0x76,0x67,0x32,0x36,0x36,0x34,0x22,0xa,0x20,0x20, + 0x20,0x73,0x6f,0x64,0x69,0x70,0x6f,0x64,0x69,0x3a,0x64,0x6f,0x63,0x6e,0x61,0x6d, + 0x65,0x3d,0x22,0x72,0x65,0x66,0x72,0x65,0x73,0x68,0x2d,0x64,0x69,0x73,0x61,0x62, + 0x6c,0x65,0x64,0x2e,0x73,0x76,0x67,0x22,0xa,0x20,0x20,0x20,0x69,0x6e,0x6b,0x73, + 0x63,0x61,0x70,0x65,0x3a,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e, + 0x30,0x2e,0x31,0x20,0x28,0x31,0x2e,0x30,0x2e,0x31,0x2b,0x72,0x37,0x35,0x29,0x22, + 0xa,0x20,0x20,0x20,0x73,0x74,0x79,0x6c,0x65,0x3d,0x22,0x6f,0x70,0x61,0x63,0x69, + 0x74,0x79,0x3a,0x31,0x22,0x3e,0xa,0x20,0x20,0x3c,0x6d,0x65,0x74,0x61,0x64,0x61, + 0x74,0x61,0xa,0x20,0x20,0x20,0x20,0x20,0x69,0x64,0x3d,0x22,0x6d,0x65,0x74,0x61, + 0x64,0x61,0x74,0x61,0x32,0x36,0x37,0x30,0x22,0x3e,0xa,0x20,0x20,0x20,0x20,0x3c, + 0x72,0x64,0x66,0x3a,0x52,0x44,0x46,0x3e,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x3c, + 0x63,0x63,0x3a,0x57,0x6f,0x72,0x6b,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x72,0x64,0x66,0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d,0x22,0x22,0x3e,0xa,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x64,0x63,0x3a,0x66,0x6f,0x72,0x6d,0x61, + 0x74,0x3e,0x69,0x6d,0x61,0x67,0x65,0x2f,0x73,0x76,0x67,0x2b,0x78,0x6d,0x6c,0x3c, + 0x2f,0x64,0x63,0x3a,0x66,0x6f,0x72,0x6d,0x61,0x74,0x3e,0xa,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x3c,0x64,0x63,0x3a,0x74,0x79,0x70,0x65,0xa,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x72,0x64,0x66,0x3a,0x72,0x65,0x73,0x6f, + 0x75,0x72,0x63,0x65,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x70,0x75,0x72, + 0x6c,0x2e,0x6f,0x72,0x67,0x2f,0x64,0x63,0x2f,0x64,0x63,0x6d,0x69,0x74,0x79,0x70, + 0x65,0x2f,0x53,0x74,0x69,0x6c,0x6c,0x49,0x6d,0x61,0x67,0x65,0x22,0x20,0x2f,0x3e, + 0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x64,0x63,0x3a,0x74,0x69,0x74, + 0x6c,0x65,0x20,0x2f,0x3e,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x63,0x63, + 0x3a,0x57,0x6f,0x72,0x6b,0x3e,0xa,0x20,0x20,0x20,0x20,0x3c,0x2f,0x72,0x64,0x66, + 0x3a,0x52,0x44,0x46,0x3e,0xa,0x20,0x20,0x3c,0x2f,0x6d,0x65,0x74,0x61,0x64,0x61, + 0x74,0x61,0x3e,0xa,0x20,0x20,0x3c,0x64,0x65,0x66,0x73,0xa,0x20,0x20,0x20,0x20, + 0x20,0x69,0x64,0x3d,0x22,0x64,0x65,0x66,0x73,0x32,0x36,0x36,0x38,0x22,0x20,0x2f, + 0x3e,0xa,0x20,0x20,0x3c,0x73,0x6f,0x64,0x69,0x70,0x6f,0x64,0x69,0x3a,0x6e,0x61, + 0x6d,0x65,0x64,0x76,0x69,0x65,0x77,0xa,0x20,0x20,0x20,0x20,0x20,0x70,0x61,0x67, + 0x65,0x63,0x6f,0x6c,0x6f,0x72,0x3d,0x22,0x23,0x33,0x63,0x33,0x66,0x34,0x31,0x22, + 0xa,0x20,0x20,0x20,0x20,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x63,0x6f,0x6c,0x6f, + 0x72,0x3d,0x22,0x23,0x36,0x36,0x36,0x36,0x36,0x36,0x22,0xa,0x20,0x20,0x20,0x20, + 0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x6f,0x70,0x61,0x63,0x69,0x74,0x79,0x3d,0x22, + 0x31,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x6f,0x62,0x6a,0x65,0x63,0x74,0x74,0x6f, + 0x6c,0x65,0x72,0x61,0x6e,0x63,0x65,0x3d,0x22,0x31,0x30,0x22,0xa,0x20,0x20,0x20, + 0x20,0x20,0x67,0x72,0x69,0x64,0x74,0x6f,0x6c,0x65,0x72,0x61,0x6e,0x63,0x65,0x3d, + 0x22,0x31,0x30,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x67,0x75,0x69,0x64,0x65,0x74, + 0x6f,0x6c,0x65,0x72,0x61,0x6e,0x63,0x65,0x3d,0x22,0x31,0x30,0x22,0xa,0x20,0x20, + 0x20,0x20,0x20,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,0x65,0x3a,0x70,0x61,0x67,0x65, + 0x6f,0x70,0x61,0x63,0x69,0x74,0x79,0x3d,0x22,0x30,0x22,0xa,0x20,0x20,0x20,0x20, + 0x20,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,0x65,0x3a,0x70,0x61,0x67,0x65,0x73,0x68, + 0x61,0x64,0x6f,0x77,0x3d,0x22,0x32,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x69,0x6e, + 0x6b,0x73,0x63,0x61,0x70,0x65,0x3a,0x77,0x69,0x6e,0x64,0x6f,0x77,0x2d,0x77,0x69, + 0x64,0x74,0x68,0x3d,0x22,0x33,0x34,0x34,0x30,0x22,0xa,0x20,0x20,0x20,0x20,0x20, + 0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,0x65,0x3a,0x77,0x69,0x6e,0x64,0x6f,0x77,0x2d, + 0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22,0x31,0x33,0x35,0x33,0x22,0xa,0x20,0x20, + 0x20,0x20,0x20,0x69,0x64,0x3d,0x22,0x6e,0x61,0x6d,0x65,0x64,0x76,0x69,0x65,0x77, + 0x32,0x36,0x36,0x36,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x73,0x68,0x6f,0x77,0x67, + 0x72,0x69,0x64,0x3d,0x22,0x66,0x61,0x6c,0x73,0x65,0x22,0xa,0x20,0x20,0x20,0x20, + 0x20,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,0x65,0x3a,0x7a,0x6f,0x6f,0x6d,0x3d,0x22, + 0x32,0x39,0x2e,0x36,0x39,0x38,0x34,0x38,0x35,0x22,0xa,0x20,0x20,0x20,0x20,0x20, + 0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,0x65,0x3a,0x63,0x78,0x3d,0x22,0x32,0x31,0x2e, + 0x36,0x35,0x38,0x34,0x33,0x31,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b, + 0x73,0x63,0x61,0x70,0x65,0x3a,0x63,0x79,0x3d,0x22,0x31,0x36,0x2e,0x33,0x32,0x30, + 0x36,0x31,0x32,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,0x73,0x63,0x61, + 0x70,0x65,0x3a,0x77,0x69,0x6e,0x64,0x6f,0x77,0x2d,0x78,0x3d,0x22,0x32,0x35,0x36, + 0x30,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,0x65, + 0x3a,0x77,0x69,0x6e,0x64,0x6f,0x77,0x2d,0x79,0x3d,0x22,0x33,0x34,0x22,0xa,0x20, + 0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,0x65,0x3a,0x77,0x69,0x6e, + 0x64,0x6f,0x77,0x2d,0x6d,0x61,0x78,0x69,0x6d,0x69,0x7a,0x65,0x64,0x3d,0x22,0x31, + 0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,0x65,0x3a, + 0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2d,0x6c,0x61,0x79,0x65,0x72,0x3d,0x22,0x6c, + 0x61,0x79,0x65,0x72,0x34,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,0x73, + 0x63,0x61,0x70,0x65,0x3a,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x2d,0x72,0x6f, + 0x74,0x61,0x74,0x69,0x6f,0x6e,0x3d,0x22,0x30,0x22,0x20,0x2f,0x3e,0xa,0x20,0x20, + 0x3c,0x67,0xa,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,0x65, + 0x3a,0x67,0x72,0x6f,0x75,0x70,0x6d,0x6f,0x64,0x65,0x3d,0x22,0x6c,0x61,0x79,0x65, + 0x72,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x69,0x64,0x3d,0x22,0x6c,0x61,0x79,0x65, + 0x72,0x34,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70, + 0x65,0x3a,0x6c,0x61,0x62,0x65,0x6c,0x3d,0x22,0x4c,0x61,0x79,0x65,0x72,0x20,0x31, + 0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x79,0x6c,0x65,0x3d,0x22,0x6f,0x70, + 0x61,0x63,0x69,0x74,0x79,0x3a,0x30,0x2e,0x33,0x35,0x22,0x3e,0xa,0x20,0x20,0x20, + 0x20,0x3c,0x70,0x61,0x74,0x68,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x64,0x3d, + 0x22,0x4d,0x20,0x31,0x32,0x2c,0x31,0x35,0x20,0x37,0x2e,0x35,0x33,0x37,0x2c,0x31, + 0x39,0x2e,0x39,0x36,0x39,0x20,0x33,0x2c,0x31,0x35,0x20,0x68,0x20,0x33,0x20,0x63, + 0x20,0x30,0x2c,0x2d,0x34,0x2e,0x39,0x37,0x20,0x34,0x2e,0x30,0x33,0x2c,0x2d,0x39, + 0x20,0x39,0x2c,0x2d,0x39,0x20,0x32,0x2e,0x33,0x39,0x35,0x2c,0x30,0x20,0x34,0x2e, + 0x35,0x36,0x35,0x2c,0x30,0x2e,0x39,0x34,0x32,0x20,0x36,0x2e,0x31,0x37,0x39,0x2c, + 0x32,0x2e,0x34,0x36,0x38,0x20,0x6c,0x20,0x2d,0x32,0x2e,0x30,0x30,0x34,0x2c,0x32, + 0x2e,0x32,0x33,0x31,0x20,0x43,0x20,0x31,0x38,0x2e,0x30,0x39,0x34,0x2c,0x39,0x2e, + 0x36,0x34,0x39,0x20,0x31,0x36,0x2e,0x36,0x32,0x32,0x2c,0x39,0x20,0x31,0x35,0x2c, + 0x39,0x20,0x31,0x31,0x2e,0x36,0x39,0x31,0x2c,0x39,0x20,0x39,0x2c,0x31,0x31,0x2e, + 0x36,0x39,0x31,0x20,0x39,0x2c,0x31,0x35,0x20,0x5a,0x20,0x4d,0x20,0x32,0x32,0x2e, + 0x34,0x36,0x33,0x2c,0x31,0x30,0x2e,0x30,0x33,0x31,0x20,0x31,0x38,0x2c,0x31,0x35, + 0x20,0x68,0x20,0x33,0x20,0x63,0x20,0x30,0x2c,0x33,0x2e,0x33,0x30,0x39,0x20,0x2d, + 0x32,0x2e,0x36,0x39,0x31,0x2c,0x36,0x20,0x2d,0x36,0x2c,0x36,0x20,0x2d,0x31,0x2e, + 0x36,0x32,0x33,0x2c,0x30,0x20,0x2d,0x33,0x2e,0x30,0x39,0x34,0x2c,0x2d,0x30,0x2e, + 0x36,0x35,0x20,0x2d,0x34,0x2e,0x31,0x37,0x35,0x2c,0x2d,0x31,0x2e,0x36,0x39,0x39, + 0x20,0x4c,0x20,0x38,0x2e,0x38,0x32,0x31,0x2c,0x32,0x31,0x2e,0x35,0x33,0x32,0x20, + 0x43,0x20,0x31,0x30,0x2e,0x34,0x33,0x34,0x2c,0x32,0x33,0x2e,0x30,0x35,0x38,0x20, + 0x31,0x32,0x2e,0x36,0x30,0x35,0x2c,0x32,0x34,0x20,0x31,0x35,0x2c,0x32,0x34,0x20, + 0x63,0x20,0x34,0x2e,0x39,0x37,0x2c,0x30,0x20,0x39,0x2c,0x2d,0x34,0x2e,0x30,0x33, + 0x20,0x39,0x2c,0x2d,0x39,0x20,0x68,0x20,0x33,0x20,0x7a,0x22,0xa,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x69,0x64,0x3d,0x22,0x70,0x61,0x74,0x68,0x32,0x36,0x36,0x32, + 0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x79,0x6c,0x65,0x3d,0x22, + 0x6f,0x70,0x61,0x63,0x69,0x74,0x79,0x3a,0x31,0x3b,0x66,0x69,0x6c,0x6c,0x3a,0x23, + 0x61,0x36,0x61,0x38,0x61,0x62,0x3b,0x66,0x69,0x6c,0x6c,0x2d,0x6f,0x70,0x61,0x63, + 0x69,0x74,0x79,0x3a,0x31,0x22,0x20,0x2f,0x3e,0xa,0x20,0x20,0x3c,0x2f,0x67,0x3e, + 0xa,0x3c,0x2f,0x73,0x76,0x67,0x3e,0xa, + // /home/nav/Projects/Bloom/src/Insight/UserInterfaces/InsightWindow/Stylesheets/InsightWindow.qss + 0x0,0x0,0x3,0x5d, + 0x0, + 0x0,0xc,0x6b,0x78,0x9c,0xad,0x56,0x5b,0x6f,0xda,0x30,0x14,0x7e,0xe7,0x57,0x44, + 0x43,0x53,0xb7,0xa9,0x19,0x86,0x24,0xac,0xd,0x4f,0x6d,0xa5,0x4a,0x48,0xeb,0x43, + 0xbb,0x56,0x7b,0x36,0x89,0x9,0xd6,0x1c,0x3b,0x73,0x1c,0xa,0x9b,0xf6,0xdf,0x67, + 0x27,0xce,0xc5,0xc1,0x1,0x3a,0x8d,0x4a,0x34,0x39,0x1c,0x7f,0xe7,0xfe,0x1d,0x7f, + 0x72,0x7e,0x8f,0x1c,0xf9,0x89,0x18,0x61,0x3c,0x74,0xc6,0xd1,0x2c,0xf2,0xa3,0xf9, + 0xa2,0x94,0xad,0x19,0x15,0xee,0x1a,0xa6,0x98,0xec,0x43,0xe7,0xe2,0x65,0x55,0x50, + 0x51,0x5c,0x5c,0x3a,0x39,0xa4,0xb9,0x9b,0x23,0x8e,0xd7,0x8b,0xd1,0x9f,0xd1,0xe8, + 0xf1,0x1,0x62,0xfa,0x1d,0xd3,0x98,0xbd,0x6a,0xac,0x15,0x8c,0x7e,0x24,0x9c,0x15, + 0x34,0x76,0x6b,0x58,0xef,0xce,0xbb,0xf7,0xa7,0xa5,0xfe,0x78,0x83,0x60,0x8c,0xb8, + 0xd6,0xcd,0x58,0x8e,0x5,0x66,0x34,0x74,0x38,0x22,0x50,0xe0,0x2d,0x5a,0xc,0x60, + 0x8,0x2e,0xed,0x66,0x90,0x23,0x2a,0x2a,0x95,0x14,0xee,0xdc,0xd,0xc2,0xc9,0x46, + 0x84,0xce,0x2c,0xc8,0x76,0x95,0xf4,0x15,0xc7,0x62,0x13,0x3a,0xb0,0x10,0x4c,0x23, + 0x31,0x2e,0xcd,0xb9,0x82,0x65,0xa1,0x33,0xcd,0x76,0x4e,0xce,0x8,0x8e,0x9d,0x71, + 0x30,0x55,0x7f,0x86,0xca,0x8a,0x9,0xc1,0x52,0xab,0x56,0x19,0x27,0xa2,0xc5,0x2d, + 0xe4,0x61,0x88,0x5,0x4a,0x4f,0xb8,0x9f,0x42,0x9e,0x60,0x29,0x5,0xd5,0x6b,0x69, + 0x5c,0x3f,0x67,0x30,0x8e,0x31,0x4d,0x5c,0x9b,0xac,0xe3,0x81,0xf9,0x3,0xaf,0xc2, + 0xf4,0xfb,0x72,0x82,0xd6,0x5d,0xf1,0x19,0x59,0x5b,0x13,0x6,0xe5,0x11,0x75,0xb0, + 0x53,0xe5,0x1c,0xff,0x42,0xd2,0x6c,0xb,0x54,0x66,0x24,0x74,0x28,0xa3,0xc8,0x12, + 0x7d,0x98,0x71,0x94,0xe7,0x28,0x1e,0x2e,0xf8,0xec,0x7e,0x1e,0xdc,0xdd,0x18,0x47, + 0x6b,0x65,0x3,0xda,0x92,0x2c,0x1d,0x5b,0xf3,0x9e,0x62,0xda,0xd6,0xf9,0x2d,0xa1, + 0xca,0x97,0xa8,0xb,0x34,0xd8,0xe3,0xdd,0xe8,0x6b,0x87,0xb5,0xb7,0x27,0x7c,0x3b, + 0xd2,0xea,0x43,0x16,0xeb,0xf8,0x7,0x7a,0x51,0x45,0xab,0x7b,0x78,0x6,0x40,0x1d, + 0xed,0xa0,0x9b,0x66,0x37,0xd6,0xde,0x49,0x15,0x47,0x4e,0x44,0xf9,0xbf,0x1d,0x8d, + 0x43,0x68,0x13,0x25,0xcc,0x11,0x41,0x91,0x78,0x4b,0x59,0xf5,0xc1,0x18,0xe7,0x70, + 0x45,0x9a,0x83,0xb5,0xf6,0x15,0xb8,0xf2,0xaf,0xfc,0x56,0x5b,0x8e,0x3e,0xc9,0xdc, + 0xb4,0x3c,0x97,0x23,0x59,0x2a,0x28,0x98,0xd9,0x16,0x47,0xc7,0xb4,0x6e,0x82,0x66, + 0x3a,0xea,0xe2,0x28,0x7d,0x50,0x91,0xb,0xdf,0x7c,0xc3,0x31,0x6a,0xbb,0x4d,0x91, + 0x44,0x1d,0x73,0xf0,0x86,0xde,0xa9,0x6d,0x1d,0xf0,0x48,0x35,0x71,0x3,0x1e,0xa, + 0xb4,0x13,0x2e,0x24,0x38,0x51,0x84,0xa0,0x0,0xfa,0x4e,0x8d,0xb1,0x34,0x23,0x73, + 0xfc,0x4,0xd3,0x5b,0x41,0x4f,0x92,0x88,0xc5,0xf7,0x43,0xc6,0xab,0xb3,0xd,0x0, + 0x58,0xc,0x4c,0xd8,0xcf,0x8c,0xb3,0xc,0x71,0xb1,0x77,0x71,0xa4,0xec,0x14,0x9c, + 0x7c,0x78,0x17,0x4e,0x22,0x96,0x66,0x58,0x96,0x6d,0xb2,0xa4,0xb9,0x42,0x9d,0xbc, + 0x48,0x5a,0x5f,0x52,0x81,0xf8,0x1a,0x46,0x28,0xaf,0xc5,0x15,0xb9,0x4f,0x96,0x29, + 0x4c,0xa4,0xf0,0xe9,0xe6,0xe1,0x73,0xbe,0x4d,0xde,0x7d,0xac,0xa0,0x15,0xa0,0xee, + 0xcc,0xca,0xa5,0x63,0x1,0x87,0x1b,0xb6,0x6d,0xa8,0xdf,0x36,0x3b,0xbe,0x17,0x78, + 0x73,0x5b,0x14,0x9d,0xcd,0x21,0x7b,0x84,0x11,0x77,0xd5,0x96,0xb8,0xcb,0xf,0xb6, + 0x66,0x9f,0x2,0xf0,0x7e,0x61,0x5,0x78,0x7c,0x96,0x4f,0xb7,0x85,0x24,0x5d,0x3a, + 0xe8,0x94,0x75,0xef,0x1c,0x94,0xc5,0x58,0x46,0x53,0x3b,0x8d,0x5a,0xc9,0xad,0x6c, + 0xe1,0xaa,0xed,0x3d,0xb3,0xaf,0x9b,0x6d,0xd0,0x97,0x57,0x2d,0x38,0xab,0x93,0x7d, + 0x24,0xa8,0x53,0xf9,0xe,0x40,0x20,0x13,0x7e,0x8e,0xaf,0x6a,0x84,0x15,0xee,0x33, + 0xce,0x86,0xe1,0xfc,0x2f,0xfe,0xb5,0x7f,0x3d,0x48,0x73,0xf3,0xe9,0xdc,0x9b,0x7, + 0xc3,0xcc,0xd8,0xd8,0x53,0x67,0x66,0x36,0xea,0xf3,0x74,0xcc,0xa3,0xf1,0x9a,0x31, + 0xf1,0x3f,0x2e,0x11,0x6d,0x8c,0x2a,0xcd,0xea,0x1b,0x58,0x4b,0xfa,0xcf,0xf7,0x8b, + 0xb2,0x44,0xda,0xdb,0xc7,0xaf,0x70,0x85,0xc8,0xe5,0x68,0x2c,0x64,0x21,0x91,0x70, + 0xb7,0x90,0x63,0x28,0xa3,0x53,0x8c,0xa8,0x4a,0x77,0xd9,0x6a,0x1e,0x70,0xbb,0x6d, + 0x3,0xc,0xe1,0xd8,0x97,0x2,0x90,0x83,0x50,0x86,0xd8,0xdb,0xf2,0xc7,0x29,0xad, + 0xd7,0x8b,0xe0,0xc,0xc3,0x67,0xec,0x11,0x3f,0xf6,0x51,0xa0,0xb1,0x8c,0xe4,0x18, + 0x6b,0x57,0x7b,0xe6,0xf5,0xc2,0x95,0x64,0x96,0x70,0x98,0x4a,0xb0,0x42,0x71,0x95, + 0xf4,0x82,0x14,0xc8,0x5c,0x23,0x4d,0x83,0x1f,0xde,0xf2,0x72,0xb1,0x27,0x32,0x89, + 0x65,0xa8,0xc6,0xf,0xba,0xb2,0xa0,0x5a,0x27,0xfd,0xab,0x99,0xbe,0x81,0x5,0xbd, + 0x59,0xd4,0xe2,0xbe,0x8b,0x14,0xa6,0xc8,0xb2,0x81,0xda,0x85,0xde,0x83,0x5,0x36, + 0x50,0x33,0xd7,0x38,0x36,0x73,0xa3,0x95,0xe6,0x27,0x7a,0x61,0x90,0x24,0xcd,0xd4, + 0xef,0x59,0x21,0x96,0x6d,0xd3,0x74,0x9c,0x9e,0x36,0x57,0x5,0x9b,0x89,0xe1,0xfb, + 0x47,0xd9,0x6c,0xf5,0x83,0x3a,0xff,0x17,0x84,0x3d,0xc3,0x5f, + // /home/nav/Projects/Bloom/src/Insight/UserInterfaces/InsightWindow/Stylesheets/AboutWindow.qss + 0x0,0x0,0x1,0x8d, + 0x2a, + 0x20,0x7b,0xa,0x20,0x20,0x20,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x23,0x63, + 0x32,0x63,0x34,0x63,0x36,0x3b,0xa,0x20,0x20,0x20,0x20,0x66,0x6f,0x6e,0x74,0x2d, + 0x66,0x61,0x6d,0x69,0x6c,0x79,0x3a,0x20,0x27,0x55,0x62,0x75,0x6e,0x74,0x75,0x27, + 0x2c,0x20,0x73,0x61,0x6e,0x73,0x2d,0x73,0x65,0x72,0x69,0x66,0x3b,0xa,0x7d,0xa, + 0xa,0x51,0x4d,0x61,0x69,0x6e,0x57,0x69,0x6e,0x64,0x6f,0x77,0x20,0x7b,0xa,0x20, + 0x20,0x20,0x20,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x2d,0x63,0x6f, + 0x6c,0x6f,0x72,0x3a,0x20,0x23,0x33,0x43,0x33,0x46,0x34,0x31,0x3b,0xa,0x7d,0xa, + 0xa,0xa,0x23,0x62,0x6c,0x6f,0x6f,0x6d,0x2d,0x69,0x63,0x6f,0x6e,0x20,0x7b,0xa, + 0x20,0x20,0x20,0x20,0x6d,0x69,0x6e,0x2d,0x68,0x65,0x69,0x67,0x68,0x74,0x3a,0x20, + 0x31,0x35,0x30,0x70,0x78,0x3b,0xa,0x20,0x20,0x20,0x20,0x6d,0x69,0x6e,0x2d,0x77, + 0x69,0x64,0x74,0x68,0x3a,0x20,0x31,0x35,0x30,0x70,0x78,0x3b,0xa,0x20,0x20,0x20, + 0x20,0x6d,0x61,0x78,0x2d,0x68,0x65,0x69,0x67,0x68,0x74,0x3a,0x20,0x31,0x35,0x30, + 0x70,0x78,0x3b,0xa,0x20,0x20,0x20,0x20,0x6d,0x61,0x78,0x2d,0x77,0x69,0x64,0x74, + 0x68,0x3a,0x20,0x31,0x35,0x30,0x70,0x78,0x3b,0xa,0x20,0x20,0x20,0x20,0x69,0x6d, + 0x61,0x67,0x65,0x3a,0x20,0x75,0x72,0x6c,0x28,0x22,0x3a,0x2f,0x63,0x6f,0x6d,0x70, + 0x69,0x6c,0x65,0x64,0x2f,0x49,0x6e,0x73,0x69,0x67,0x68,0x74,0x2f,0x55,0x73,0x65, + 0x72,0x49,0x6e,0x74,0x65,0x72,0x66,0x61,0x63,0x65,0x73,0x2f,0x49,0x6e,0x73,0x69, + 0x67,0x68,0x74,0x57,0x69,0x6e,0x64,0x6f,0x77,0x2f,0x49,0x6d,0x61,0x67,0x65,0x73, + 0x2f,0x42,0x6c,0x6f,0x6f,0x6d,0x49,0x63,0x6f,0x6e,0x2e,0x73,0x76,0x67,0x22,0x29, + 0x3b,0xa,0x20,0x20,0x20,0x20,0x69,0x6d,0x61,0x67,0x65,0x2d,0x70,0x6f,0x73,0x69, + 0x74,0x69,0x6f,0x6e,0x3a,0x20,0x63,0x65,0x6e,0x74,0x65,0x72,0x3b,0xa,0x7d,0xa, + 0xa,0x23,0x61,0x75,0x74,0x68,0x6f,0x72,0x2d,0x6c,0x61,0x62,0x65,0x6c,0x20,0x7b, + 0xa,0x20,0x20,0x20,0x20,0x66,0x6f,0x6e,0x74,0x2d,0x73,0x69,0x7a,0x65,0x3a,0x20, + 0x31,0x34,0x70,0x78,0x3b,0xa,0x20,0x20,0x20,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3a, + 0x20,0x23,0x61,0x64,0x61,0x64,0x62,0x31,0x3b,0xa,0xa,0x7d, + +}; + +static const unsigned char qt_resource_name[] = { + // compiled + 0x0,0x8, + 0x6,0x47,0xf,0xf4, + 0x0,0x63, + 0x0,0x6f,0x0,0x6d,0x0,0x70,0x0,0x69,0x0,0x6c,0x0,0x65,0x0,0x64, + // Insight + 0x0,0x7, + 0x0,0x59,0xfd,0x54, + 0x0,0x49, + 0x0,0x6e,0x0,0x73,0x0,0x69,0x0,0x67,0x0,0x68,0x0,0x74, + // resources + 0x0,0x9, + 0xa,0x6c,0x78,0x43, + 0x0,0x72, + 0x0,0x65,0x0,0x73,0x0,0x6f,0x0,0x75,0x0,0x72,0x0,0x63,0x0,0x65,0x0,0x73, + // help.txt + 0x0,0x8, + 0xc,0x33,0x56,0x34, + 0x0,0x68, + 0x0,0x65,0x0,0x6c,0x0,0x70,0x0,0x2e,0x0,0x74,0x0,0x78,0x0,0x74, + // bloom.template.json + 0x0,0x13, + 0xb,0xd4,0x81,0x7e, + 0x0,0x62, + 0x0,0x6c,0x0,0x6f,0x0,0x6f,0x0,0x6d,0x0,0x2e,0x0,0x74,0x0,0x65,0x0,0x6d,0x0,0x70,0x0,0x6c,0x0,0x61,0x0,0x74,0x0,0x65,0x0,0x2e,0x0,0x6a,0x0,0x73, + 0x0,0x6f,0x0,0x6e, + // UserInterfaces + 0x0,0xe, + 0xf,0x2,0x65,0xa3, + 0x0,0x55, + 0x0,0x73,0x0,0x65,0x0,0x72,0x0,0x49,0x0,0x6e,0x0,0x74,0x0,0x65,0x0,0x72,0x0,0x66,0x0,0x61,0x0,0x63,0x0,0x65,0x0,0x73, + // InsightWindow + 0x0,0xd, + 0x9,0x6f,0xb1,0xc7, + 0x0,0x49, + 0x0,0x6e,0x0,0x73,0x0,0x69,0x0,0x67,0x0,0x68,0x0,0x74,0x0,0x57,0x0,0x69,0x0,0x6e,0x0,0x64,0x0,0x6f,0x0,0x77, + // Stylesheets + 0x0,0xb, + 0xc,0x2b,0x3c,0xf3, + 0x0,0x53, + 0x0,0x74,0x0,0x79,0x0,0x6c,0x0,0x65,0x0,0x73,0x0,0x68,0x0,0x65,0x0,0x65,0x0,0x74,0x0,0x73, + // Images + 0x0,0x6, + 0x5,0x3,0x7d,0xc3, + 0x0,0x49, + 0x0,0x6d,0x0,0x61,0x0,0x67,0x0,0x65,0x0,0x73, + // TargetWidgets + 0x0,0xd, + 0x8,0xeb,0x64,0xf3, + 0x0,0x54, + 0x0,0x61,0x0,0x72,0x0,0x67,0x0,0x65,0x0,0x74,0x0,0x57,0x0,0x69,0x0,0x64,0x0,0x67,0x0,0x65,0x0,0x74,0x0,0x73, + // UiFiles + 0x0,0x7, + 0xb,0xdd,0x2,0x63, + 0x0,0x55, + 0x0,0x69,0x0,0x46,0x0,0x69,0x0,0x6c,0x0,0x65,0x0,0x73, + // AboutWindow.ui + 0x0,0xe, + 0x6,0x6f,0xcf,0xd9, + 0x0,0x41, + 0x0,0x62,0x0,0x6f,0x0,0x75,0x0,0x74,0x0,0x57,0x0,0x69,0x0,0x6e,0x0,0x64,0x0,0x6f,0x0,0x77,0x0,0x2e,0x0,0x75,0x0,0x69, + // InsightWindow.ui + 0x0,0x10, + 0xb,0x1d,0xc8,0x59, + 0x0,0x49, + 0x0,0x6e,0x0,0x73,0x0,0x69,0x0,0x67,0x0,0x68,0x0,0x74,0x0,0x57,0x0,0x69,0x0,0x6e,0x0,0x64,0x0,0x6f,0x0,0x77,0x0,0x2e,0x0,0x75,0x0,0x69, + // DIP + 0x0,0x3, + 0x0,0x0,0x48,0xe0, + 0x0,0x44, + 0x0,0x49,0x0,0x50, + // DualInlinePackage.qss + 0x0,0x15, + 0xe,0xdb,0xb2,0x43, + 0x0,0x44, + 0x0,0x75,0x0,0x61,0x0,0x6c,0x0,0x49,0x0,0x6e,0x0,0x6c,0x0,0x69,0x0,0x6e,0x0,0x65,0x0,0x50,0x0,0x61,0x0,0x63,0x0,0x6b,0x0,0x61,0x0,0x67,0x0,0x65, + 0x0,0x2e,0x0,0x71,0x0,0x73,0x0,0x73, + // refresh.svg + 0x0,0xb, + 0xc,0x6a,0x21,0xc7, + 0x0,0x72, + 0x0,0x65,0x0,0x66,0x0,0x72,0x0,0x65,0x0,0x73,0x0,0x68,0x0,0x2e,0x0,0x73,0x0,0x76,0x0,0x67, + // RAM.svg + 0x0,0x7, + 0x6,0x60,0x5a,0x67, + 0x0,0x52, + 0x0,0x41,0x0,0x4d,0x0,0x2e,0x0,0x73,0x0,0x76,0x0,0x67, + // BloomIcon.svg + 0x0,0xd, + 0xc,0x4d,0x98,0x7, + 0x0,0x42, + 0x0,0x6c,0x0,0x6f,0x0,0x6f,0x0,0x6d,0x0,0x49,0x0,0x63,0x0,0x6f,0x0,0x6e,0x0,0x2e,0x0,0x73,0x0,0x76,0x0,0x67, + // refresh-disabled.svg + 0x0,0x14, + 0xa,0xb5,0x6f,0x67, + 0x0,0x72, + 0x0,0x65,0x0,0x66,0x0,0x72,0x0,0x65,0x0,0x73,0x0,0x68,0x0,0x2d,0x0,0x64,0x0,0x69,0x0,0x73,0x0,0x61,0x0,0x62,0x0,0x6c,0x0,0x65,0x0,0x64,0x0,0x2e, + 0x0,0x73,0x0,0x76,0x0,0x67, + // InsightWindow.qss + 0x0,0x11, + 0x1,0xdc,0x87,0xc3, + 0x0,0x49, + 0x0,0x6e,0x0,0x73,0x0,0x69,0x0,0x67,0x0,0x68,0x0,0x74,0x0,0x57,0x0,0x69,0x0,0x6e,0x0,0x64,0x0,0x6f,0x0,0x77,0x0,0x2e,0x0,0x71,0x0,0x73,0x0,0x73, + + // AboutWindow.qss + 0x0,0xf, + 0x6,0xfc,0xfe,0x63, + 0x0,0x41, + 0x0,0x62,0x0,0x6f,0x0,0x75,0x0,0x74,0x0,0x57,0x0,0x69,0x0,0x6e,0x0,0x64,0x0,0x6f,0x0,0x77,0x0,0x2e,0x0,0x71,0x0,0x73,0x0,0x73, + +}; + +static const unsigned char qt_resource_struct[] = { + // : + 0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + // :/compiled + 0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x2, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + // :/compiled/Insight + 0x0,0x0,0x0,0x16,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x6, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + // :/compiled/resources + 0x0,0x0,0x0,0x2a,0x0,0x2,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x4, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + // :/compiled/resources/bloom.template.json + 0x0,0x0,0x0,0x58,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x2,0x4a, +0x0,0x0,0x1,0x78,0x79,0xc5,0xd5,0xc8, + // :/compiled/resources/help.txt + 0x0,0x0,0x0,0x42,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0, +0x0,0x0,0x1,0x78,0x87,0xd2,0x36,0xe4, + // :/compiled/Insight/UserInterfaces + 0x0,0x0,0x0,0x84,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x7, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + // :/compiled/Insight/UserInterfaces/InsightWindow + 0x0,0x0,0x0,0xa6,0x0,0x2,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x8, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + // :/compiled/Insight/UserInterfaces/InsightWindow/Images + 0x0,0x0,0x0,0xe2,0x0,0x2,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x13, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + // :/compiled/Insight/UserInterfaces/InsightWindow/TargetWidgets + 0x0,0x0,0x0,0xf4,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x10, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + // :/compiled/Insight/UserInterfaces/InsightWindow/UiFiles + 0x0,0x0,0x1,0x14,0x0,0x2,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0xe, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + // :/compiled/Insight/UserInterfaces/InsightWindow/Stylesheets + 0x0,0x0,0x0,0xc6,0x0,0x2,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0xc, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + // :/compiled/Insight/UserInterfaces/InsightWindow/Stylesheets/InsightWindow.qss + 0x0,0x0,0x2,0x2a,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x29,0x4b, +0x0,0x0,0x1,0x78,0x9e,0x54,0x8a,0x3c, + // :/compiled/Insight/UserInterfaces/InsightWindow/Stylesheets/AboutWindow.qss + 0x0,0x0,0x2,0x52,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x2c,0xac, +0x0,0x0,0x1,0x78,0x9e,0x14,0x65,0xe4, + // :/compiled/Insight/UserInterfaces/InsightWindow/UiFiles/AboutWindow.ui + 0x0,0x0,0x1,0x28,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x3,0x68, +0x0,0x0,0x1,0x78,0x9e,0x1a,0x16,0xf4, + // :/compiled/Insight/UserInterfaces/InsightWindow/UiFiles/InsightWindow.ui + 0x0,0x0,0x1,0x4a,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x5,0x7c, +0x0,0x0,0x1,0x78,0x9e,0x54,0xd9,0x80, + // :/compiled/Insight/UserInterfaces/InsightWindow/TargetWidgets/DIP + 0x0,0x0,0x1,0x70,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x11, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + // :/compiled/Insight/UserInterfaces/InsightWindow/TargetWidgets/DIP/Stylesheets + 0x0,0x0,0x0,0xc6,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x12, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + // :/compiled/Insight/UserInterfaces/InsightWindow/TargetWidgets/DIP/Stylesheets/DualInlinePackage.qss + 0x0,0x0,0x1,0x7c,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0xa,0xd0, +0x0,0x0,0x1,0x78,0x7a,0x53,0x7f,0xed, + // :/compiled/Insight/UserInterfaces/InsightWindow/Images/RAM.svg + 0x0,0x0,0x1,0xc8,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x13,0xfa, +0x0,0x0,0x1,0x78,0xa,0x31,0xaf,0x21, + // :/compiled/Insight/UserInterfaces/InsightWindow/Images/refresh-disabled.svg + 0x0,0x0,0x1,0xfc,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x21,0x2e, +0x0,0x0,0x1,0x78,0x61,0xb7,0xd,0x19, + // :/compiled/Insight/UserInterfaces/InsightWindow/Images/BloomIcon.svg + 0x0,0x0,0x1,0xdc,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x18,0x59, +0x0,0x0,0x1,0x78,0x9d,0xba,0x34,0xe6, + // :/compiled/Insight/UserInterfaces/InsightWindow/Images/refresh.svg + 0x0,0x0,0x1,0xac,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0xc,0x82, +0x0,0x0,0x1,0x78,0x5b,0x19,0xd5,0xd9, + +}; + +#ifdef QT_NAMESPACE +# define QT_RCC_PREPEND_NAMESPACE(name) ::QT_NAMESPACE::name +# define QT_RCC_MANGLE_NAMESPACE0(x) x +# define QT_RCC_MANGLE_NAMESPACE1(a, b) a##_##b +# define QT_RCC_MANGLE_NAMESPACE2(a, b) QT_RCC_MANGLE_NAMESPACE1(a,b) +# define QT_RCC_MANGLE_NAMESPACE(name) QT_RCC_MANGLE_NAMESPACE2( \ + QT_RCC_MANGLE_NAMESPACE0(name), QT_RCC_MANGLE_NAMESPACE0(QT_NAMESPACE)) +#else +# define QT_RCC_PREPEND_NAMESPACE(name) name +# define QT_RCC_MANGLE_NAMESPACE(name) name +#endif + +#ifdef QT_NAMESPACE +namespace QT_NAMESPACE { +#endif + +bool qRegisterResourceData(int, const unsigned char *, const unsigned char *, const unsigned char *); + +bool qUnregisterResourceData(int, const unsigned char *, const unsigned char *, const unsigned char *); + +#ifdef QT_NAMESPACE +} +#endif + +int QT_RCC_MANGLE_NAMESPACE(qInitResources)(); +int QT_RCC_MANGLE_NAMESPACE(qInitResources)() +{ + QT_RCC_PREPEND_NAMESPACE(qRegisterResourceData) + (0x2, qt_resource_struct, qt_resource_name, qt_resource_data); + return 1; +} + +int QT_RCC_MANGLE_NAMESPACE(qCleanupResources)(); +int QT_RCC_MANGLE_NAMESPACE(qCleanupResources)() +{ + QT_RCC_PREPEND_NAMESPACE(qUnregisterResourceData) + (0x2, qt_resource_struct, qt_resource_name, qt_resource_data); + return 1; +} + +namespace { + struct initializer { + initializer() { QT_RCC_MANGLE_NAMESPACE(qInitResources)(); } + ~initializer() { QT_RCC_MANGLE_NAMESPACE(qCleanupResources)(); } + } dummy; +} diff --git a/src/Helpers/BiMap.hpp b/src/Helpers/BiMap.hpp new file mode 100644 index 00000000..9a50345a --- /dev/null +++ b/src/Helpers/BiMap.hpp @@ -0,0 +1,71 @@ +#pragma once + +#include +#include + +namespace Bloom +{ + /** + * Simple bidirectional map + * + * This should only be used for small maps, with small elements (enums, string literals, etc). + * + * TODO: This needs some work - was written as a quick implementation with minimal requirements. + * TODO: Add support for inserting/deleting elements (outside of construction). + * + * @tparam TypeA + * @tparam TypeB + */ + template + class BiMap + { + private: + std::unordered_map map; + std::unordered_map::iterator> flippedMap; + + public: + BiMap(std::initializer_list> elements) { + for (auto it = elements.begin(); it != elements.end(); ++it) { + auto insertResultPair = this->map.insert(std::pair{it->first, it->second}); + this->flippedMap.insert( + std::pair::iterator>{ + it->second, + insertResultPair.first + } + ); + } + } + + bool contains(TypeA key) const { + return this->map.find(key) != this->map.end(); + } + + bool contains(TypeB key) const { + return this->flippedMap.find(key) != this->flippedMap.end(); + } + + std::optional valueAt(TypeA key) const { + std::optional output; + + if (this->contains(key)) { + output = this->map.find(key)->second; + } + + return output; + } + + std::optional valueAt(TypeB key) const { + std::optional output; + + if (this->contains(key)) { + output = this->flippedMap.find(key)->second->first; + } + + return output; + } + + std::unordered_map getMap() { + return this->map; + } + }; +} \ No newline at end of file diff --git a/src/Helpers/DateTime.hpp b/src/Helpers/DateTime.hpp new file mode 100644 index 00000000..03dae083 --- /dev/null +++ b/src/Helpers/DateTime.hpp @@ -0,0 +1,42 @@ +#pragma once + +#include +#include + +namespace Bloom +{ + /** + * Some (maybe all) QDateTime static functions are not thread-safe and thus can result in data races. + * This trivial helper class wraps some of these functions and employs a mutex to prevent data races. + */ + class DateTime + { + private: + static inline std::mutex currentDateTimeMutex; + + public: + /** + * The QDateTime::currentDateTime() static function is not thread-safe. This may be caused by the + * underlying interfacing with the system clock. + * + * @return + */ + static QDateTime currentDateTime() { + auto lock = std::unique_lock(DateTime::currentDateTimeMutex); + return QDateTime::currentDateTime(); + } + + /** + * The QDateTime::timeZoneAbbreviation() is a non-static member function but it may still interface with the + * system clock. This can result in race conditions when called simultaneously to QDateTime::currentDateTime(), + * and so any calls to it must require possession of the mutex. + * + * @param dateTime + * @return + */ + static QString getTimeZoneAbbreviation(const QDateTime& dateTime) { + auto lock = std::unique_lock(DateTime::currentDateTimeMutex); + return dateTime.timeZoneAbbreviation(); + } + }; +} \ No newline at end of file diff --git a/src/Helpers/EventNotifier.hpp b/src/Helpers/EventNotifier.hpp new file mode 100644 index 00000000..2fb1871a --- /dev/null +++ b/src/Helpers/EventNotifier.hpp @@ -0,0 +1,65 @@ +#pragma once + +#include +#include +#include +#include + +#include "src/Exceptions/Exception.hpp" + +namespace Bloom +{ + using namespace Exceptions; + + /** + * The EventNotifier class provides a means to interrupt a thread that is blocked by an IO call. + * + * It's implementation is rather simple: It uses a Linux event file descriptor (sys/eventfd.h), which should be used + * along side epoll() to interrupt a blocking call that is waiting on the epoll file descriptor. + * + * The EventListener can hold an instance to EventNotifier, where it will invoke EventNotifier::notify() everytime + * a new event is registered on the listener. + * + * @TODO: This could do with some cleaning. It's a bit hacky. Also, maybe add the ability to register the event + * file descriptor to an epoll instance within a public method (instead of relying on the caller to do this + * themselves via EventNotifier::getFileDescriptor()). + */ + class EventNotifier + { + private: + int fileDescriptor = -1; + + public: + EventNotifier() = default; + + void init() { + this->fileDescriptor = ::eventfd(0, EFD_NONBLOCK); + + if (this->fileDescriptor < -1) { + throw Exception("Failed to create new eventfd object - error number: " + std::to_string(errno)); + } + } + + int getFileDescriptor() { + return this->fileDescriptor; + } + + void notify() { + if (::eventfd_write(this->fileDescriptor, 1) < 0) { + throw Exception("Failed to increment eventfd counter - error number: " + std::to_string(errno)); + } + } + + void clear() { + eventfd_t counter; + if (::eventfd_read(this->fileDescriptor, &counter) < 0 && errno != EAGAIN) { + throw Exception("Failed to clear EventNotifier object - eventfd_read failed - error number: " + + std::to_string(errno)); + } + } + + void close() { + ::close(this->fileDescriptor); + } + }; +} \ No newline at end of file diff --git a/src/Helpers/SyncSafe.hpp b/src/Helpers/SyncSafe.hpp new file mode 100644 index 00000000..b4064a3d --- /dev/null +++ b/src/Helpers/SyncSafe.hpp @@ -0,0 +1,55 @@ +#pragma once + +#include + +namespace Bloom +{ + /** + * Template for synchronization safe types. + * + * Just a convenient template that allows us to create thread safe types without having to write + * the bloat of mutexes, unique_locks, etc etc. + * + * @TODO Might be an idea to use an off-the-shelf solution for this, as there are a few available. + * + * @tparam Type + */ + template + class SyncSafe + { + private: + std::mutex mutex; + Type value; + public: + SyncSafe() = default; + + explicit SyncSafe(Type value): value(value) { + }; + + void setValue(Type value) { + auto lock = std::unique_lock(this->mutex); + this->value = value; + }; + + Type getValue() { + auto lock = std::unique_lock(this->mutex); + return this->value; + }; + + Type& getReference() { + return this->value; + }; + + void lock() { + this->mutex.lock(); + }; + + void unlock() { + this->mutex.unlock(); + }; + + std::unique_lock acquireLock() { + return std::unique_lock(this->mutex); + }; + }; +} \ No newline at end of file diff --git a/src/Helpers/Thread.hpp b/src/Helpers/Thread.hpp new file mode 100644 index 00000000..eada3da9 --- /dev/null +++ b/src/Helpers/Thread.hpp @@ -0,0 +1,50 @@ +#pragma once + +#include +#include + +#include "SyncSafe.hpp" + +namespace Bloom +{ + enum class ThreadState + { + UNINITIALISED, + READY, + STOPPED, + STARTING, + SHUTDOWN_INITIATED, + }; + + class Thread + { + private: + SyncSafe state = SyncSafe(ThreadState::UNINITIALISED); + + protected: + virtual void setState(ThreadState state) { + this->state.setValue(state); + }; + + /** + * Disables signal interrupts on current thread. + */ + void blockAllSignalsOnCurrentThread() { + sigset_t set = {}; + sigfillset(&set); + sigprocmask(SIG_SETMASK, &set, NULL); + }; + + void setName(std::string name) { + // POSIX thread names cannot exceed 16 characters, including the terminating null byte. + assert(name.size() <= 15); + + pthread_setname_np(pthread_self(), name.c_str()); + } + + public: + virtual ThreadState getState() { + return this->state.getValue(); + }; + }; +} \ No newline at end of file diff --git a/src/Insight/Insight.cpp b/src/Insight/Insight.cpp new file mode 100644 index 00000000..ec9d44e8 --- /dev/null +++ b/src/Insight/Insight.cpp @@ -0,0 +1,144 @@ +#include +#include +#include + +#include "Insight.hpp" +#include "InsightWorker.hpp" +#include "src/Application.hpp" +#include "src/Logger/Logger.hpp" +#include "src/Exceptions/InvalidConfig.hpp" +#include "src/Targets/TargetState.hpp" + +using namespace Bloom; +using namespace Exceptions; + +void Insight::run() { + try { + this->startup(); + + this->workerThread->start(); + this->setState(ThreadState::READY); + Logger::info("Insight ready"); + this->application->exec(); + + } catch (const Exception& exception) { + Logger::error("Insight encountered a fatal error. See below for errors:"); + Logger::error(exception.getMessage()); + + } catch (const std::exception& exception) { + Logger::error("Insight encountered a fatal error. See below for errors:"); + Logger::error(std::string(exception.what())); + } + + this->shutdown(); +} + +void Insight::startup() { + Logger::info("Starting Insight"); + this->setState(ThreadState::STARTING); + this->eventManager.registerListener(this->eventListener); + + this->eventListener->registerCallbackForEventType( + std::bind(&Insight::onShutdownApplicationEvent, this, std::placeholders::_1) + ); + + this->eventListener->registerCallbackForEventType( + std::bind(&Insight::onTargetControllerStateChangedEvent, this, std::placeholders::_1) + ); + + auto targetDescriptor = this->getTargetDescriptor(); + + std::string qtAppName = "Bloom"; + char* appArguments[] = {qtAppName.data()}; + auto appArgCount = 1; +// QCoreApplication::addLibraryPath(QString::fromStdString(Application::getApplicationDirPath() + "/plugins")); + QCoreApplication::setAttribute(Qt::AA_ShareOpenGLContexts, true); + + this->application = new QApplication(appArgCount, appArguments); + this->application->setQuitOnLastWindowClosed(true); + qRegisterMetaType(); + qRegisterMetaType(); + qRegisterMetaType(); + qRegisterMetaType>(); + + this->mainWindow.init(*(this->application), targetDescriptor); + this->mainWindow.show(); + + /* + * We can't run our own event loop here - we have to use Qt's event loop. But we still need to be able to + * process our events. To address this, we use a QTimer to dispatch our events on an interval. + * + * This allows us to use Qt's event loop whilst still being able to process our own events. + */ + auto eventDispatchTimer = new QTimer(this->application); + connect(eventDispatchTimer, &QTimer::timeout, this, &Insight::dispatchEvents); + eventDispatchTimer->start(100); + + // Prepare worker thread + auto worker = new InsightWorker(this->eventManager); + this->workerThread = new QThread(); + this->workerThread->setObjectName("IW"); + worker->moveToThread(this->workerThread); + connect(this->workerThread, &QThread::started, worker, &InsightWorker::startup); + connect(this->workerThread, &QThread::finished, worker, &QObject::deleteLater); + connect(this->workerThread, &QThread::finished, this->workerThread, &QThread::deleteLater); + + connect(worker, &InsightWorker::targetStateUpdated, &(this->mainWindow), &InsightWindow::onTargetStateUpdate); + connect(worker, &InsightWorker::targetProgramCounterUpdated, &(this->mainWindow), &InsightWindow::onTargetProgramCounterUpdate); + connect(worker, &InsightWorker::targetPinStatesUpdated, &(this->mainWindow), &InsightWindow::onTargetPinStatesUpdate); + connect(worker, &InsightWorker::targetIoPortsUpdated, &(this->mainWindow), &InsightWindow::onTargetIoPortsUpdate); + connect(&(this->mainWindow), &InsightWindow::refreshTargetPinStates, worker, &InsightWorker::requestPinStates); + connect(&(this->mainWindow), &InsightWindow::setTargetPinState, worker, &InsightWorker::requestPinStateUpdate); +} + +Targets::TargetDescriptor Insight::getTargetDescriptor() { + auto extractEvent = std::make_shared(); + this->eventManager.triggerEvent(extractEvent); + auto responseEvent = this->eventListener->waitForEvent< + Events::TargetDescriptorExtracted, + Events::TargetControllerErrorOccurred + >(std::chrono::milliseconds(5000), extractEvent->id); + + if (!responseEvent.has_value() + || !std::holds_alternative>(responseEvent.value()) + ) { + throw Exception("Unexpected response from TargetController"); + } + + auto descriptorExtracted = std::get>(responseEvent.value()); + return descriptorExtracted->targetDescriptor; +} + +void Insight::shutdown() { + if (this->getState() == ThreadState::STOPPED) { + return; + } + + Logger::info("Shutting down Insight"); + this->mainWindow.close(); + + if (this->workerThread != nullptr && this->workerThread->isRunning()) { + this->workerThread->quit(); + } + + if (this->application != nullptr) { + this->application->exit(0); + } + + this->setState(ThreadState::STOPPED); +} + +void Insight::onShutdownApplicationEvent(EventPointer) { + /* + * Once Insight shuts down, control of the main thread will be returned to Application::run(), which + * will pickup the ShutdownApplication event and proceed with the shutdown. + */ + this->shutdown(); +} + +void Insight::onTargetControllerStateChangedEvent(EventPointer event) { + if (event->getState() == ThreadState::STOPPED) { + // Something horrible has happened with the TargetController - Insight is useless without the TargetController + this->shutdown(); + } +} diff --git a/src/Insight/Insight.hpp b/src/Insight/Insight.hpp new file mode 100644 index 00000000..b6161a10 --- /dev/null +++ b/src/Insight/Insight.hpp @@ -0,0 +1,92 @@ +#pragma once + +#include +#include + +#include "UserInterfaces/InsightWindow/InsightWindow.hpp" +#include "src/Helpers/Thread.hpp" +#include "src/ApplicationConfig.hpp" +#include "src/EventManager/EventManager.hpp" +#include "src/EventManager/EventListener.hpp" +#include "src/Targets/TargetDescriptor.hpp" + +namespace Bloom +{ + /** + * The Insight component provides a GUI for insight into the target's GPIO state. + * Insight relies heavily on the Qt framework - it's practically a small Qt application. Each supported target + * package variant implements a custom Qt widget that presents the user with the current state of the target's GPIO + * pins, as well as the ability to manipulate the pin states of output pins by clicking on them. + * + * The Insight component occupies the Bloom's main thread. See Application::run() for more. + */ + class Insight: public QObject, public Thread + { + Q_OBJECT + private: + ApplicationConfig applicationConfig; + EnvironmentConfig environmentConfig; + + EventManager& eventManager; + EventListenerPointer eventListener = std::make_shared("InsightEventListener"); + + QApplication* application = nullptr; + InsightWindow mainWindow; + + /** + * Insight consists of two threads - the main thread where the main Qt event loop runs (for the GUI), and + * a single worker thread to handle any blocking/time-expensive operations. + */ + QThread* workerThread; + + void startup(); + + Targets::TargetDescriptor getTargetDescriptor(); + + public: + Insight(EventManager& eventManager): eventManager(eventManager) {}; + + void setApplicationConfig(const ApplicationConfig& applicationConfig) { + this->applicationConfig = applicationConfig; + } + + void setEnvironmentConfig(const EnvironmentConfig& environmentConfig) { + this->environmentConfig = environmentConfig; + } + + /** + * Entry point for Insight. + */ + void run(); + + /** + * Shuts down Insight. Called when the user closes the Insight window. + */ + void shutdown(); + + /** + * Because Insight occupies the main thread, it must handle any application shutdown requests. + * + * @param event + */ + void onShutdownApplicationEvent(EventPointer event); + + /** + * If the something horrible was to happen and the TC dies unexpectedly, Insight will shutdown in response. + * + * @param event + */ + void onTargetControllerStateChangedEvent(EventPointer event); + + /** + * Dispatches any events currently in the queue. + * + * Because Insight is effectively a Qt application, we cannot use our own event loop. We must use Qt's event + * loop. We do this by utilizing a QTimer instance to call this method on an interval. + * See Insight::startup() for more. + */ + void dispatchEvents() { + this->eventListener->dispatchCurrentEvents(); + }; + }; +} diff --git a/src/Insight/InsightWorker.cpp b/src/Insight/InsightWorker.cpp new file mode 100644 index 00000000..bf9dbcdb --- /dev/null +++ b/src/Insight/InsightWorker.cpp @@ -0,0 +1,86 @@ +#include +#include +#include +#include +#include + +#include "src/Application.hpp" +#include "InsightWorker.hpp" +#include "src/Logger/Logger.hpp" +#include "src/Helpers/Thread.hpp" +#include "src/Exceptions/InvalidConfig.hpp" + +using namespace Bloom; +using namespace Exceptions; + +void InsightWorker::startup() { + Logger::debug("Starting InsightWorker thread"); + this->eventManager.registerListener(this->eventListener); + + this->eventListener->registerCallbackForEventType( + std::bind(&InsightWorker::onTargetStoppedEvent, this, std::placeholders::_1) + ); + + this->eventListener->registerCallbackForEventType( + std::bind(&InsightWorker::onTargetResumedEvent, this, std::placeholders::_1) + ); + + this->eventListener->registerCallbackForEventType( + std::bind(&InsightWorker::onTargetPinStatesRetrievedEvent, this, std::placeholders::_1) + ); + + this->eventListener->registerCallbackForEventType( + std::bind(&InsightWorker::onTargetIoPortsUpdatedEvent, this, std::placeholders::_1) + ); + + this->eventDispatchTimer = new QTimer(this); + QTimer::connect(this->eventDispatchTimer, &QTimer::timeout, this, &InsightWorker::dispatchEvents); + this->eventDispatchTimer->start(50); + + this->eventManager.triggerEvent( + std::make_shared(ThreadState::READY) + ); +} + +void InsightWorker::requestPinStates(int variantId) { + auto requestEvent = std::make_shared(); + requestEvent->variantId = variantId; + + this->eventManager.triggerEvent(requestEvent); +} + +void InsightWorker::requestPinStateUpdate( + int variantId, + Bloom::Targets::TargetPinDescriptor pinDescriptor, + Bloom::Targets::TargetPinState pinState +) { + auto updateEvent = std::make_shared(); + updateEvent->variantId = variantId; + updateEvent->pinDescriptor = pinDescriptor; + updateEvent->pinState = pinState; + + this->eventManager.triggerEvent(updateEvent); +} + +void InsightWorker::onTargetStoppedEvent(EventPointer event) { + auto resumedEvent = this->eventListener->waitForEvent(std::chrono::milliseconds(650)); + + if (!resumedEvent.has_value()) { + emit this->targetStateUpdated(TargetState::STOPPED); + emit this->targetProgramCounterUpdated(event->programCounter); + } +} + +void InsightWorker::onTargetResumedEvent(EventPointer event) { + emit this->targetStateUpdated(TargetState::RUNNING); +} + +void InsightWorker::onTargetPinStatesRetrievedEvent(EventPointer event) { + emit this->targetPinStatesUpdated(event->variantId, event->pinSatesByNumber); +} + +void InsightWorker::onTargetIoPortsUpdatedEvent(EventPointer event) { + emit this->targetIoPortsUpdated(); +} + + diff --git a/src/Insight/InsightWorker.hpp b/src/Insight/InsightWorker.hpp new file mode 100644 index 00000000..3ffa5998 --- /dev/null +++ b/src/Insight/InsightWorker.hpp @@ -0,0 +1,58 @@ +#pragma once + +#include +#include + +#include "UserInterfaces/InsightWindow/InsightWindow.hpp" +#include "src/Helpers/Thread.hpp" +#include "src/ApplicationConfig.hpp" +#include "src/EventManager/EventManager.hpp" +#include "src/EventManager/EventListener.hpp" + +namespace Bloom +{ + using namespace Events; + using Targets::TargetState; + + /** + * The InsightWorker runs on a separate thread to the main GUI thread. Its purpose is to handle any + * blocking/time-expensive operations. + */ + class InsightWorker: public QObject + { + Q_OBJECT + private: + EventManager& eventManager; + EventListenerPointer eventListener = std::make_shared("InsightWorkerEventListener"); + + QTimer* eventDispatchTimer = nullptr; + + void onTargetStoppedEvent(EventPointer event); + void onTargetResumedEvent(EventPointer event); + void onTargetPinStatesRetrievedEvent(EventPointer event); + void onTargetIoPortsUpdatedEvent(EventPointer event); + + public: + InsightWorker(EventManager& eventManager): eventManager(eventManager) {}; + + void dispatchEvents() { + this->eventListener->dispatchCurrentEvents(); + } + + public slots: + void startup(); + void requestPinStates(int variantId); + void requestPinStateUpdate( + int variantId, + Bloom::Targets::TargetPinDescriptor pinDescriptor, + Bloom::Targets::TargetPinState pinState + ); + + signals: + void targetStateUpdated(Bloom::Targets::TargetState newState); + void targetProgramCounterUpdated(quint32 programCounter); + void targetPinStatesUpdated(int variantId, Bloom::Targets::TargetPinStateMappingType pinStatesByNumber); + void targetIoPortsUpdated(); + + }; +} diff --git a/src/Insight/UserInterfaces/InsightWindow/AboutWindow.cpp b/src/Insight/UserInterfaces/InsightWindow/AboutWindow.cpp new file mode 100644 index 00000000..e121806c --- /dev/null +++ b/src/Insight/UserInterfaces/InsightWindow/AboutWindow.cpp @@ -0,0 +1,35 @@ +#include +#include + +#include "AboutWindow.hpp" +#include "TargetWidgets/DIP/DualInlinePackageWidget.hpp" +#include "src/Logger/Logger.hpp" +#include "src/Application.hpp" + +using namespace Bloom; +using namespace InsightTargetWidgets; +using namespace Exceptions; + +AboutWindow::AboutWindow(QWidget* parent): QObject(parent) { + auto aboutWindowUiFile = QFile(":/compiled/Insight/UserInterfaces/InsightWindow/UiFiles/AboutWindow.ui"); + auto aboutWindowStylesheet = QFile(":/compiled/Insight/UserInterfaces/InsightWindow/Stylesheets/AboutWindow.qss"); + + if (!aboutWindowUiFile.open(QFile::ReadOnly)) { + throw Exception("Failed to open AboutWindow UI file"); + } + + if (!aboutWindowStylesheet.open(QFile::ReadOnly)) { + throw Exception("Failed to open AboutWindow QSS file"); + } + + auto uiLoader = QUiLoader(); + this->windowWidget = uiLoader.load(&aboutWindowUiFile, parent); + this->windowWidget->setStyleSheet(aboutWindowStylesheet.readAll()); + this->windowWidget->setFixedSize(400, 300); + + auto versionLabel = this->windowWidget->findChild("version-label"); + + if (versionLabel != nullptr) { + versionLabel->setText("Bloom v" + QString::fromStdString(Application::VERSION_STR)); + } +} diff --git a/src/Insight/UserInterfaces/InsightWindow/AboutWindow.hpp b/src/Insight/UserInterfaces/InsightWindow/AboutWindow.hpp new file mode 100644 index 00000000..de62acaf --- /dev/null +++ b/src/Insight/UserInterfaces/InsightWindow/AboutWindow.hpp @@ -0,0 +1,28 @@ +#pragma once + +#include +#include +#include +#include + +namespace Bloom +{ + class AboutWindow: public QObject + { + Q_OBJECT + private: + QWidget* windowWidget = nullptr; + + public: + AboutWindow(QWidget* parent); + + void show() { + if (this->windowWidget != nullptr) { + this->windowWidget->move( + this->windowWidget->parentWidget()->geometry().center() - this->windowWidget->rect().center() + ); + this->windowWidget->show(); + } + } + }; +} diff --git a/src/Insight/UserInterfaces/InsightWindow/Images/BloomIcon.svg b/src/Insight/UserInterfaces/InsightWindow/Images/BloomIcon.svg new file mode 100644 index 00000000..3b1edacf --- /dev/null +++ b/src/Insight/UserInterfaces/InsightWindow/Images/BloomIcon.svg @@ -0,0 +1,494 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Insight/UserInterfaces/InsightWindow/Images/RAM.svg b/src/Insight/UserInterfaces/InsightWindow/Images/RAM.svg new file mode 100644 index 00000000..f42ef82c --- /dev/null +++ b/src/Insight/UserInterfaces/InsightWindow/Images/RAM.svg @@ -0,0 +1,127 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + diff --git a/src/Insight/UserInterfaces/InsightWindow/Images/refresh-disabled.svg b/src/Insight/UserInterfaces/InsightWindow/Images/refresh-disabled.svg new file mode 100644 index 00000000..51d5392a --- /dev/null +++ b/src/Insight/UserInterfaces/InsightWindow/Images/refresh-disabled.svg @@ -0,0 +1,63 @@ + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/src/Insight/UserInterfaces/InsightWindow/Images/refresh.svg b/src/Insight/UserInterfaces/InsightWindow/Images/refresh.svg new file mode 100644 index 00000000..a313c218 --- /dev/null +++ b/src/Insight/UserInterfaces/InsightWindow/Images/refresh.svg @@ -0,0 +1,56 @@ + + + + + + image/svg+xml + + + + + + + + + diff --git a/src/Insight/UserInterfaces/InsightWindow/InsightWindow.cpp b/src/Insight/UserInterfaces/InsightWindow/InsightWindow.cpp new file mode 100644 index 00000000..53c46fea --- /dev/null +++ b/src/Insight/UserInterfaces/InsightWindow/InsightWindow.cpp @@ -0,0 +1,264 @@ +#include +#include + +#include "InsightWindow.hpp" +#include "AboutWindow.hpp" +#include "TargetWidgets/DIP/DualInlinePackageWidget.hpp" +#include "TargetWidgets/QFP/QuadFlatPackageWidget.hpp" +#include "src/Logger/Logger.hpp" +#include "src/Exceptions/Exception.hpp" +#include "src/Targets/TargetDescriptor.hpp" + +using namespace Bloom; +using namespace Exceptions; +using Targets::TargetDescriptor; +using Targets::TargetVariant; +using Targets::TargetPackage; + + +void InsightWindow::init(QApplication& application, TargetDescriptor targetDescriptor) { + this->targetDescriptor = targetDescriptor; + + auto mainWindowUiFile = QFile(":/compiled/Insight/UserInterfaces/InsightWindow/UiFiles/InsightWindow.ui"); + auto mainWindowStylesheet = QFile(":/compiled/Insight/UserInterfaces/InsightWindow/Stylesheets/InsightWindow.qss"); + + if (!mainWindowUiFile.open(QFile::ReadOnly)) { + throw Exception("Failed to open InsightWindow UI file"); + } + + if (!mainWindowStylesheet.open(QFile::ReadOnly)) { + throw Exception("Failed to open InsightWindow stylesheet file"); + } + + auto uiLoader = QUiLoader(this); + this->mainWindowWidget = uiLoader.load(&mainWindowUiFile); + this->mainWindowWidget->setStyleSheet(mainWindowStylesheet.readAll()); + + application.setWindowIcon(QIcon(":/compiled/Insight/UserInterfaces/InsightWindow/Images/BloomIcon.svg")); + this->ioContainerWidget = this->mainWindowWidget->findChild("io-container"); + this->ioUnavailableWidget = this->mainWindowWidget->findChild("io-inspection-unavailable"); + this->mainMenuBar = this->mainWindowWidget->findChild("menu-bar"); + + auto fileMenu = this->mainMenuBar->findChild("file-menu"); + auto helpMenu = this->mainMenuBar->findChild("help-menu"); + auto quitAction = fileMenu->findChild("close-insight"); + auto openReportIssuesUrlAction = helpMenu->findChild("open-report-issues-url"); + auto openAboutWindowAction = helpMenu->findChild("open-about-dialogue"); + + connect(quitAction, &QAction::triggered, this, &InsightWindow::close); + connect(openReportIssuesUrlAction, &QAction::triggered, this, &InsightWindow::openReportIssuesUrl); + connect(openAboutWindowAction, &QAction::triggered, this, &InsightWindow::openAboutWindow); + + this->header = this->mainWindowWidget->findChild("header"); + this->refreshIoInspectionButton = this->header->findChild("refresh-io-inspection-btn"); + + connect(this->refreshIoInspectionButton, &QToolButton::clicked, this, [this] { + if (this->targetState == TargetState::STOPPED && this->selectedVariant != nullptr) { + this->toggleUi(true); + emit this->refreshTargetPinStates(this->selectedVariant->id); + } + }); + + this->footer = this->mainWindowWidget->findChild("footer"); + auto targetNameLabel = this->footer->findChild("target-name"); + auto targetIdLabel = this->footer->findChild("target-id"); + this->targetStatusLabel = this->footer->findChild("target-state"); + this->programCounterValueLabel = this->footer->findChild("target-program-counter-value"); + targetNameLabel->setText(QString::fromStdString(this->targetDescriptor.name)); + targetIdLabel->setText("0x" + QString::fromStdString(this->targetDescriptor.id).remove("0x").toUpper()); + + this->variantMenu = this->footer->findChild("target-variant-menu"); + + for (const auto& targetVariant: this->targetDescriptor.variants) { + auto variantAction = new QAction(this->variantMenu); + variantAction->setText( + QString::fromStdString(targetVariant.name + " (" + targetVariant.packageName + ")") + ); + + if (this->isVariantSupported(targetVariant)) { + connect( + variantAction, + &QAction::triggered, + this, + [this, &targetVariant] { + this->selectVariant(&targetVariant); + } + ); + + } else { + variantAction->setEnabled(false); + variantAction->setText(variantAction->text() + " (unsupported)"); + + }; + + this->variantMenu->addAction(variantAction); + } + + std::copy_if( + this->targetDescriptor.variants.begin(), + this->targetDescriptor.variants.end(), + std::back_inserter(this->supportedVariants), + [this](auto variant) { + return this->isVariantSupported(variant); + } + ); + + Logger::debug("Number of target variants supported by Insight: " + std::to_string(supportedVariants.size())); + + if (!supportedVariants.empty()) { + this->selectVariant(&supportedVariants.front()); + + } else { + if (this->targetDescriptor.variants.empty()) { + this->variantMenu->parentWidget()->hide(); + } + + this->ioUnavailableWidget->show(); + } +} + +void InsightWindow::selectVariant(const TargetVariant* variant) { + if (!this->isVariantSupported(*variant)) { + Logger::error("Attempted to select unsupported target variant."); + return; + } + + if (this->selectedVariant != nullptr && this->selectedVariant->id == variant->id) { + return; + } + + if (this->targetPackageWidget != nullptr) { + this->targetPackageWidget->hide(); + this->targetPackageWidget->deleteLater(); + } + + this->selectedVariant = variant; + this->variantMenu->setTitle(QString::fromStdString(variant->name + " (" + variant->packageName + ")")); + + if (variant->package == TargetPackage::DIP) { + this->targetPackageWidget = new InsightTargetWidgets::Dip::DualInlinePackageWidget( + *variant, + this, + this->ioContainerWidget + ); + + } else if (variant->package == TargetPackage::QFP) { + this->targetPackageWidget = new InsightTargetWidgets::Qfp::QuadFlatPackageWidget( + *variant, + this, + this->ioContainerWidget + ); + } + + if (this->targetPackageWidget != nullptr) { + if (this->targetState == TargetState::STOPPED) { + this->toggleUi(true); + emit this->refreshTargetPinStates(variant->id); + } + + this->targetPackageWidget->show(); + } +} + +void InsightWindow::show() { + this->mainWindowWidget->activateWindow(); + this->mainWindowWidget->show(); +} + +void InsightWindow::close() { + if (this->mainWindowWidget != nullptr) { + this->mainWindowWidget->close(); + } +} + +bool InsightWindow::isVariantSupported(const TargetVariant& variant) { + if (variant.package == TargetPackage::DIP) { + // All DIP variants must have a pin count that is a multiple of two + if (variant.pinDescriptorsByNumber.size() % 2 == 0) { + return true; + } + } + + if (variant.package == TargetPackage::QFP) { + // All QFP variants must have a pin count that is a multiple of four + if (variant.pinDescriptorsByNumber.size() % 4 == 0) { + return true; + } + } + + return false; +} + +void InsightWindow::openReportIssuesUrl() { + QDesktopServices::openUrl(QUrl("https://bloom.oscillate.io/report-issue")); +} + +void InsightWindow::openAboutWindow() { + if (this->aboutWindowWidget == nullptr) { + this->aboutWindowWidget = new AboutWindow(this->mainWindowWidget); + } + + this->aboutWindowWidget->show(); +} + +void InsightWindow::onTargetStateUpdate(TargetState newState) { + this->targetState = newState; + + if (newState == TargetState::RUNNING) { + this->targetStatusLabel->setText("Running"); + this->programCounterValueLabel->setText("-"); + this->toggleUi(true); + + } else if (newState == TargetState::STOPPED) { + this->targetStatusLabel->setText("Stopped"); + + if (this->selectedVariant != nullptr) { + emit this->refreshTargetPinStates(this->selectedVariant->id); + } + + } else { + this->targetStatusLabel->setText("Unknown"); + } +} + +void InsightWindow::onTargetProgramCounterUpdate(quint32 programCounter) { + this->programCounterValueLabel->setText( + "0x" + QString::number(programCounter, 16).toUpper() + " (" + QString::number(programCounter) + ")" + ); +} + +void InsightWindow::onTargetIoPortsUpdate() { + if (this->targetState == TargetState::STOPPED && this->selectedVariant != nullptr) { + emit this->refreshTargetPinStates(this->selectedVariant->id); + } +} + +void InsightWindow::onTargetPinStatesUpdate(int variantId, Bloom::Targets::TargetPinStateMappingType pinStatesByNumber) { + if (this->targetPackageWidget != nullptr + && this->selectedVariant != nullptr + && this->selectedVariant->id == variantId + ) { + this->targetPackageWidget->updatePinStates(pinStatesByNumber); + if (this->uiDisabled) { + this->toggleUi(false); + + } else { + this->targetPackageWidget->repaint(); + } + } +} + +void InsightWindow::togglePinIoState(TargetPinWidget* pinWidget) { + auto pinState = pinWidget->getPinState(); + + // Currently, we only allow users to toggle the IO state of output pins + if (pinState.has_value() + && pinState.value().ioDirection == TargetPinState::IoDirection::OUTPUT + && this->selectedVariant != nullptr + ) { + auto& pinDescriptor = pinWidget->getPinDescriptor(); + pinState.value().ioState = (pinState.value().ioState == TargetPinState::IoState::HIGH) ? + TargetPinState::IoState::LOW : TargetPinState::IoState::HIGH; + emit this->setTargetPinState(this->selectedVariant->id, pinDescriptor, pinState.value()); + } +} \ No newline at end of file diff --git a/src/Insight/UserInterfaces/InsightWindow/InsightWindow.hpp b/src/Insight/UserInterfaces/InsightWindow/InsightWindow.hpp new file mode 100644 index 00000000..7bed5206 --- /dev/null +++ b/src/Insight/UserInterfaces/InsightWindow/InsightWindow.hpp @@ -0,0 +1,97 @@ +#pragma once + +#include +#include +#include +#include +#include +#include + +#include "AboutWindow.hpp" +#include "TargetWidgets/TargetPackageWidget.hpp" +#include "src/Targets/TargetState.hpp" +#include "src/Targets/TargetDescriptor.hpp" +#include "src/Targets/TargetVariant.hpp" + +namespace Bloom +{ + using InsightTargetWidgets::TargetPackageWidget; + using InsightTargetWidgets::TargetPinWidget; + + using Targets::TargetDescriptor; + using Targets::TargetVariant; + using Targets::TargetPackage; + using Targets::TargetState; + using Targets::TargetPinState; + + class InsightWindow: public QObject + { + Q_OBJECT + private: + TargetDescriptor targetDescriptor; + TargetState targetState = TargetState::UNKNOWN; + + QWidget* mainWindowWidget = nullptr; + AboutWindow* aboutWindowWidget = nullptr; + QMenuBar* mainMenuBar = nullptr; + QMenu* variantMenu = nullptr; + + QWidget* header = nullptr; + QToolButton* refreshIoInspectionButton = nullptr; + + QWidget* ioContainerWidget = nullptr; + QWidget* ioUnavailableWidget = nullptr; + TargetPackageWidget* targetPackageWidget = nullptr; + + QWidget* footer = nullptr; + QLabel* targetStatusLabel = nullptr; + QLabel* programCounterValueLabel = nullptr; + + std::vector supportedVariants; + const TargetVariant* selectedVariant = nullptr; + bool uiDisabled = false; + + bool isVariantSupported(const TargetVariant& variant); + + void selectVariant(const TargetVariant* variant); + + void toggleUi(bool disable) { + this->uiDisabled = disable; + + if (this->refreshIoInspectionButton != nullptr) { + this->refreshIoInspectionButton->setDisabled(disable); + this->refreshIoInspectionButton->repaint(); + } + + if (this->ioContainerWidget != nullptr) { + this->ioContainerWidget->setDisabled(disable); + this->ioContainerWidget->repaint(); + } + } + + public: + InsightWindow() = default; + + void init(QApplication& application, Targets::TargetDescriptor targetDescriptor); + + void show(); + + public slots: + void onTargetPinStatesUpdate(int variantId, Bloom::Targets::TargetPinStateMappingType pinStatesByNumber); + void onTargetStateUpdate(TargetState newState); + void onTargetProgramCounterUpdate(quint32 programCounter); + void onTargetIoPortsUpdate(); + void close(); + void openReportIssuesUrl(); + void openAboutWindow(); + void togglePinIoState(TargetPinWidget* pinWidget); + + signals: + void refreshTargetPinStates(int variantId); + void setTargetPinState( + int variantId, + Bloom::Targets::TargetPinDescriptor pinDescriptor, + Bloom::Targets::TargetPinState pinState + ); + }; +} diff --git a/src/Insight/UserInterfaces/InsightWindow/Stylesheets/AboutWindow.qss b/src/Insight/UserInterfaces/InsightWindow/Stylesheets/AboutWindow.qss new file mode 100644 index 00000000..c560033d --- /dev/null +++ b/src/Insight/UserInterfaces/InsightWindow/Stylesheets/AboutWindow.qss @@ -0,0 +1,24 @@ +* { + color: #c2c4c6; + font-family: 'Ubuntu', sans-serif; +} + +QMainWindow { + background-color: #3C3F41; +} + + +#bloom-icon { + min-height: 150px; + min-width: 150px; + max-height: 150px; + max-width: 150px; + image: url(":/compiled/Insight/UserInterfaces/InsightWindow/Images/BloomIcon.svg"); + image-position: center; +} + +#author-label { + font-size: 14px; + color: #adadb1; + +} \ No newline at end of file diff --git a/src/Insight/UserInterfaces/InsightWindow/Stylesheets/InsightWindow.qss b/src/Insight/UserInterfaces/InsightWindow/Stylesheets/InsightWindow.qss new file mode 100644 index 00000000..e809fb52 --- /dev/null +++ b/src/Insight/UserInterfaces/InsightWindow/Stylesheets/InsightWindow.qss @@ -0,0 +1,190 @@ +* { + color: #c2c4c6; + font-family: 'Ubuntu', sans-serif; +} + +QMainWindow { + background-color: #3C3F41; +} + +#header { + position: relative; + background-color: transparent; + max-height: 25px; + width: auto; + border-top: 1px solid #515151; + border-bottom: 1px solid #515151; +} + +QMenuBar::item { + position: relative; + margin: 0; + top: 0; + padding-top: 0; + padding-bottom: 1px; + padding-right: 4px; + padding-left: 4px; + background-color: transparent; + float: left; + font-size: 14px; + border: none; +} + +QMenuBar::item:pressed { + background-color: #2F65CA; +} + +QMenuBar { + border: none; + margin: 0; + padding: 0; + min-height: 24px; + background-color: transparent; + spacing: 0; + color: #c2c4c6; + font-size: 14px; +} + +QMenu { + margin: 0; + padding: 0; + background-color: #3C3F41; + color: #c2c4c6; + border: 1px solid #515151; + min-width: 200px; + font-size: 14px; +} + +QMenu::item { + padding: 4px 5px 4px 25px; + min-width: 200px; +} + +QMenu::item:selected { + background-color: #2F65CA; +} + +QMenu::item:disabled { + color: #808484; +} + +QMenu#help-menu::separator { + border-top: 1px solid #515151; + height: 1px; + margin: 1px 0; +} + +#rhSideBar { + max-width: 25px; + background-color: transparent; + height: auto; + border-left: 1px solid #515151; + text-align: right; +} + +#rhSideBar #inspectRamBtn { + position: relative; + max-width: 25px; + height: 25px; + color: #000; + border: none; + qproperty-icon: url(":/compiled/Insight/UserInterfaces/InsightWindow/Images/RAM.svg"); + icon-size: 25px; +} + +#rhSideBar #inspectRamBtn:hover { + background-color: #343536; + border: none; + +} + +#header-tool-bar { + min-height: 25px; + min-width: 100%; +} + +#header-tool-bar QToolButton { + background-color: transparent; + max-width: 25px; + max-height: 21px; + border: none; + padding: 0; + margin-top: 3px; + margin-bottom: 3px; + margin-left: 2px; +} + +#header-tool-bar QToolButton:hover { + background-color: #505353; + border: none; + padding: 0; +} + +QToolTip { + background-color: #474949; + border: 1px solid #616365; + color: #c2c4c6; + padding: 1px 2px; + font-size: 13px; +} + + +#footer { + position: relative; + background-color: transparent; + padding: 0 3px 0 30px; + max-height: 25px; + width: auto; + border-top: 1px solid #515151; + +} + +#footer QLabel, +#target-variant-menu-bar, +#footer QMenu::item { + font-size: 14px; +} + +#target-variant-menu-bar::item { + padding: 0 10px 0 4px; + border-left: 1px solid #515151; + margin-bottom: 0; +} + +#target-variant-menu-bar::item:selected { + background-color: #4d4e50; +} + +#footer QLabel { + margin-left: 3px; +} + +#target-program-counter-value { + border-color: #515151; + border-style: solid; + border-width: 0 1px 0 0; + padding-right: 5px; + margin-right: 3px; +} + +#target-name { + max-width: 200px; + padding-right: 0; + margin-right: 0; +} + +#target-id { + margin-right: 6px; +} + +#target-variant-menu-bar { + min-height: 25px; +} + +#footer QLayoutItem { + max-width: 100px; +} + +#target-variant-menu::item { + padding: 4px 10px 4px 10px; +} diff --git a/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/DIP/BodyWidget.cpp b/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/DIP/BodyWidget.cpp new file mode 100644 index 00000000..4f05ca52 --- /dev/null +++ b/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/DIP/BodyWidget.cpp @@ -0,0 +1,70 @@ +#include +#include + +#include "BodyWidget.hpp" +#include "src/Logger/Logger.hpp" +#include "src/Exceptions/Exception.hpp" + +using namespace Bloom::InsightTargetWidgets::Dip; +using namespace Bloom::Exceptions; + +void BodyWidget::paintEvent(QPaintEvent* event) { + auto painter = QPainter(this); + this->drawWidget(painter); +} + +void BodyWidget::drawWidget(QPainter& painter) { + auto parentWidget = this->parentWidget(); + + if (parentWidget == nullptr) { + throw Exception("BodyWidget requires a parent widget"); + } + + painter.setRenderHints(QPainter::RenderHint::Antialiasing | QPainter::RenderHint::SmoothPixmapTransform, true); + + // Draw target body +// auto targetBodyColor = QColor("#AFB1B3"); + auto targetBodyColor = this->getBodyColor(); + auto backgroundColor = QColor("#3C3F41"); + + if (!this->isEnabled()) { + targetBodyColor.setAlpha(this->getDisableAlphaLevel()); + } + + painter.setPen(Qt::PenStyle::NoPen); + painter.setBrush(targetBodyColor); + auto parentContainerWidth = parentWidget->width(); +// this->setFixedSize(parentContainerWidth, parentContainerHeight); + auto targetBodyHeight = 150; + auto targetBodyWidth = parentContainerWidth; + + this->setFixedSize(targetBodyWidth, targetBodyHeight); + auto targetBodyPoint = QPoint( + 0, + 0 + ); + + painter.drawRect( + targetBodyPoint.x(), + targetBodyPoint.y(), + targetBodyWidth, + targetBodyHeight + ); + + painter.setPen(Qt::PenStyle::NoPen); + painter.setBrush(backgroundColor); + painter.drawEllipse(QRectF( + targetBodyPoint.x() + 10, + targetBodyPoint.y() + (targetBodyHeight - 30), + 20, + 20 + )); + + painter.drawEllipse(QRectF( + targetBodyPoint.x() - 15, + targetBodyPoint.y() + (targetBodyHeight / 2) - 15, + 30, + 30 + )); +} + diff --git a/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/DIP/BodyWidget.hpp b/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/DIP/BodyWidget.hpp new file mode 100644 index 00000000..a064d503 --- /dev/null +++ b/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/DIP/BodyWidget.hpp @@ -0,0 +1,42 @@ +#pragma once + +#include + +namespace Bloom::InsightTargetWidgets::Dip +{ + class BodyWidget: public QWidget + { + Q_OBJECT + Q_PROPERTY(QColor bodyColor READ getBodyColor WRITE setBodyColor DESIGNABLE true) + Q_PROPERTY(int disableAlphaLevel READ getDisableAlphaLevel WRITE setDisableAlphaLevel DESIGNABLE true) + + private: + QColor bodyColor = QColor("#AFB1B3"); + int disableAlphaLevel = 100; + + protected: + void paintEvent(QPaintEvent* event); + void drawWidget(QPainter& painter); + + public: + BodyWidget(QWidget* parent): QWidget(parent) { + this->setObjectName("target-body"); + } + + QColor getBodyColor() const { + return this->bodyColor; + } + + void setBodyColor(QColor color) { + this->bodyColor = color; + } + + int getDisableAlphaLevel() const { + return this->disableAlphaLevel; + } + + void setDisableAlphaLevel(int level) { + this->disableAlphaLevel = level; + } + }; +} diff --git a/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/DIP/DualInlinePackageWidget.cpp b/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/DIP/DualInlinePackageWidget.cpp new file mode 100644 index 00000000..eaed7f0f --- /dev/null +++ b/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/DIP/DualInlinePackageWidget.cpp @@ -0,0 +1,119 @@ +#include +#include +#include +#include +#include +#include + +#include "../../InsightWindow.hpp" +#include "DualInlinePackageWidget.hpp" +#include "src/Logger/Logger.hpp" +#include "src/Exceptions/Exception.hpp" +#include "PinWidget.hpp" +#include "BodyWidget.hpp" + +using namespace Bloom::InsightTargetWidgets::Dip; +using namespace Bloom::Exceptions; + +DualInlinePackageWidget::DualInlinePackageWidget(const TargetVariant& targetVariant, QObject* insightWindowObj, QWidget* parent): +TargetPackageWidget(targetVariant, insightWindowObj, parent) { + auto stylesheetFile = QFile("/home/nav/Projects/Bloom/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/DIP/Stylesheets/DualInlinePackage.qss"); + stylesheetFile.open(QFile::ReadOnly); + this->setStyleSheet(stylesheetFile.readAll()); + + this->pinWidgets.reserve(targetVariant.pinDescriptorsByNumber.size()); + this->layout = new QVBoxLayout(); + this->layout->setSpacing(8); + this->layout->setMargin(0); + + this->topPinLayout = new QHBoxLayout(); + this->topPinLayout->setSpacing(8); + this->topPinLayout->setDirection(QBoxLayout::Direction::RightToLeft); + this->bottomPinLayout = new QHBoxLayout(); + this->bottomPinLayout->setSpacing(8); + + auto insightWindow = qobject_cast(insightWindowObj); + assert(insightWindow != nullptr); + + for (const auto& [targetPinNumber, targetPinDescriptor]: targetVariant.pinDescriptorsByNumber) { + auto pinWidget = new PinWidget(this, targetPinDescriptor, targetVariant); + this->pinWidgets.push_back(pinWidget); + + if (targetPinNumber <= (targetVariant.pinDescriptorsByNumber.size() / 2)) { + this->bottomPinLayout->addWidget(pinWidget, 0, Qt::AlignmentFlag::AlignHCenter); + } else { + this->topPinLayout->addWidget(pinWidget, 0, Qt::AlignmentFlag::AlignRight); + } + + connect(pinWidget, &TargetPinWidget::toggleIoState, insightWindow, &InsightWindow::togglePinIoState); + } + + this->layout->addLayout(this->topPinLayout); + this->bodyWidget = new BodyWidget(this); + this->layout->addWidget(this->bodyWidget); + this->layout->addLayout(this->bottomPinLayout); + this->setLayout(this->layout); + + auto insightWindowWidget = this->window(); + assert(insightWindowWidget != nullptr); + + insightWindowWidget->setMinimumHeight(500); + insightWindowWidget->setMinimumWidth(1000); +} + +void DualInlinePackageWidget::paintEvent(QPaintEvent* event) { +// Logger::debug("Drawing main package widget"); + + auto painter = QPainter(this); + this->drawWidget(painter); +} + +void DualInlinePackageWidget::resizeEvent(QResizeEvent* event) { +// Logger::debug("RESIZE EVENT"); +} + +void DualInlinePackageWidget::drawWidget(QPainter& painter) { + auto parentWidget = this->parentWidget(); + + if (parentWidget == nullptr) { + throw Exception("DualInlinePackageWidget requires a parent widget"); + } + + auto parentContainerHeight = parentWidget->height(); + auto parentContainerWidth = parentWidget->width(); + + auto width = ((PinWidget::MINIMUM_WIDTH + 8) * static_cast(this->pinWidgets.size() / 2)) + 46; + + this->topPinLayout->setGeometry(QRect(0, 0, width, PinWidget::MAXIMUM_HEIGHT)); + auto bodyGeometry = QRect(0, this->topPinLayout->geometry().height() + 8, width, this->bodyWidget->height()); + this->bodyWidget->setGeometry(bodyGeometry); + this->bottomPinLayout->setGeometry( + QRect( + 0, + bodyGeometry.top() + bodyGeometry.height() + 8, + width, + PinWidget::MAXIMUM_HEIGHT + ) + ); + this->topPinLayout->setContentsMargins( + static_cast(width * 0.04), + 0, + static_cast(width * 0.04), + 0 + ); + this->bottomPinLayout->setContentsMargins( + static_cast(width * 0.04), + 0, + static_cast(width * 0.04), + 0 + ); + + auto height = (PinWidget::MAXIMUM_HEIGHT * 2) + bodyGeometry.height() + (8 * 3); + this->setGeometry( + (parentContainerWidth / 2) - (width / 2), + (parentContainerHeight / 2) - (height / 2), + width, + height + ); +} + diff --git a/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/DIP/DualInlinePackageWidget.hpp b/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/DIP/DualInlinePackageWidget.hpp new file mode 100644 index 00000000..f2ec1fb0 --- /dev/null +++ b/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/DIP/DualInlinePackageWidget.hpp @@ -0,0 +1,37 @@ +#pragma once + +#include +#include +#include +#include + +#include "../TargetPackageWidget.hpp" +#include "PinWidget.hpp" +#include "BodyWidget.hpp" +#include "src/Targets/TargetVariant.hpp" + +namespace Bloom::InsightTargetWidgets::Dip +{ + using Targets::TargetVariant; + + /** + * The DualInlinePackageWidget implements a custom Qt widget for the Dual-inline package target variants. + */ + class DualInlinePackageWidget: public TargetPackageWidget + { + Q_OBJECT + private: + QVBoxLayout* layout = nullptr; + QHBoxLayout* topPinLayout = nullptr; + QHBoxLayout* bottomPinLayout = nullptr; + BodyWidget* bodyWidget = nullptr; + + protected: + void paintEvent(QPaintEvent* event); + void resizeEvent(QResizeEvent* event); + void drawWidget(QPainter& painter); + + public: + DualInlinePackageWidget(const TargetVariant& targetVariant, QObject* insightWindowObj, QWidget* parent); + }; +} diff --git a/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/DIP/PinBodyWidget.cpp b/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/DIP/PinBodyWidget.cpp new file mode 100644 index 00000000..2abc9ad9 --- /dev/null +++ b/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/DIP/PinBodyWidget.cpp @@ -0,0 +1,91 @@ +#include +#include +#include +#include +#include +#include + +#include "PinBodyWidget.hpp" +#include "src/Logger/Logger.hpp" +#include "src/Exceptions/Exception.hpp" + +using namespace Bloom::InsightTargetWidgets::Dip; +using namespace Bloom::Exceptions; + +void PinBodyWidget::paintEvent(QPaintEvent* event) { + auto painter = QPainter(this); + this->drawWidget(painter); +} + +bool PinBodyWidget::event(QEvent* event) +{ + if (this->isEnabled() && this->pinState.has_value() && this->pinState->ioDirection == TargetPinState::IoDirection::OUTPUT) { + switch (event->type()) { + case QEvent::Enter: { + this->hoverActive = true; + this->repaint(); + break; + } + case QEvent::Leave: { + this->hoverActive = false; + this->repaint(); + break; + } + default: { + break; + } + } + } + + return QWidget::event(event); +} + +void PinBodyWidget::drawWidget(QPainter& painter) { + auto parentWidget = this->parentWidget(); + + if (parentWidget == nullptr) { + Logger::error("PinBodyWidget requires a parent widget"); + } + + painter.setRenderHints(QPainter::RenderHint::Antialiasing | QPainter::RenderHint::SmoothPixmapTransform, true); + auto pinWidth = PinBodyWidget::WIDTH; + auto pinHeight = PinBodyWidget::HEIGHT; + this->setFixedSize(pinWidth, pinHeight); + + auto pinColor = this->getBodyColor(); + + if (this->pinDescriptor.type == TargetPinType::VCC) { + pinColor = QColor("#ff3d43"); + + } else if (this->pinDescriptor.type == TargetPinType::GND) { + pinColor = QColor("#575757"); + } + + if (this->pinState.has_value()) { + if (this->pinState->ioState.has_value() + && this->pinState->ioDirection.has_value() + && this->pinState->ioState.value() == TargetPinState::IoState::HIGH + ) { + pinColor = this->pinState->ioDirection.value() == TargetPinState::IoDirection::OUTPUT ? + QColor("#3D7F96") : QColor("#A47E3E"); + } + } + + if (!this->hoverActive) { + pinColor.setAlpha(225); + } + + if (!this->isEnabled()) { + pinColor.setAlpha(this->getDisableAlphaLevel()); + } + + painter.setPen(Qt::PenStyle::NoPen); + painter.setBrush(pinColor); + + painter.drawRect( + 0, + 0, + pinWidth, + pinHeight + ); +} diff --git a/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/DIP/PinBodyWidget.hpp b/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/DIP/PinBodyWidget.hpp new file mode 100644 index 00000000..6484a2ea --- /dev/null +++ b/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/DIP/PinBodyWidget.hpp @@ -0,0 +1,71 @@ +#pragma once + +#include +#include + +#include "src/Targets/TargetPinDescriptor.hpp" + +namespace Bloom::InsightTargetWidgets::Dip +{ + using Targets::TargetPinDescriptor; + using Targets::TargetPinType; + using Targets::TargetPinState; + + class PinBodyWidget: public QWidget + { + Q_OBJECT + Q_PROPERTY(QColor bodyColor READ getBodyColor WRITE setBodyColor DESIGNABLE true) + Q_PROPERTY(int disableAlphaLevel READ getDisableAlphaLevel WRITE setDisableAlphaLevel DESIGNABLE true) + + private: + TargetPinDescriptor pinDescriptor; + std::optional pinState; + QColor bodyColor = QColor("#AFB1B3"); + int disableAlphaLevel = 100; + + protected: + bool hoverActive = false; + void paintEvent(QPaintEvent* event) override; + void drawWidget(QPainter& painter); + bool event(QEvent* event) override; + + void mouseReleaseEvent(QMouseEvent* event) override { + if (event->button() == Qt::MouseButton::LeftButton) { + emit this->clicked(); + } + QWidget::mouseReleaseEvent(event); + } + + public: + static const int WIDTH = 30; + static const int HEIGHT = 40; + + PinBodyWidget(QWidget* parent, const TargetPinDescriptor& pinDescriptor): QWidget(parent), pinDescriptor(pinDescriptor) { + this->setFixedSize(PinBodyWidget::WIDTH, PinBodyWidget::HEIGHT); + this->setObjectName("target-pin-body"); + } + + void setPinState(const TargetPinState& pinState) { + this->pinState = pinState; + } + + QColor getBodyColor() const { + return this->bodyColor; + } + + void setBodyColor(QColor color) { + this->bodyColor = color; + } + + int getDisableAlphaLevel() const { + return this->disableAlphaLevel; + } + + void setDisableAlphaLevel(int level) { + this->disableAlphaLevel = level; + } + + signals: + void clicked(); + }; +} diff --git a/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/DIP/PinWidget.cpp b/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/DIP/PinWidget.cpp new file mode 100644 index 00000000..3f6a1228 --- /dev/null +++ b/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/DIP/PinWidget.cpp @@ -0,0 +1,58 @@ +#include +#include +#include +#include +#include + +#include "PinWidget.hpp" +#include "PinBodyWidget.hpp" +#include "src/Logger/Logger.hpp" + +using namespace Bloom::InsightTargetWidgets::Dip; + +PinWidget::PinWidget(QWidget* parent, const TargetPinDescriptor& pinDescriptor, const TargetVariant& targetVariant): + TargetPinWidget(parent, pinDescriptor, targetVariant) { + this->layout = new QVBoxLayout(); + this->layout->setMargin(0); + this->layout->setSpacing(0); + + this->bodyWidget = new PinBodyWidget(this, this->pinDescriptor); + bool isTopWidget = pinDescriptor.number > (targetVariant.pinDescriptorsByNumber.size() / 2); + + this->layout->setAlignment(isTopWidget ? (Qt::AlignmentFlag::AlignHCenter | Qt::AlignmentFlag::AlignBottom) + : (Qt::AlignmentFlag::AlignHCenter | Qt::AlignmentFlag::AlignTop)); + + this->pinDirectionLabel = new QLabel(this); + this->pinDirectionLabel->setObjectName("target-pin-direction"); + this->pinDirectionLabel->setAlignment(Qt::AlignmentFlag::AlignCenter); + + this->pinNameLabel = new QLabel(this); + this->pinNameLabel->setObjectName("target-pin-name"); + this->pinNameLabel->setText(QString::fromStdString(pinDescriptor.name).toUpper()); + this->pinNameLabel->setAlignment(Qt::AlignmentFlag::AlignCenter); + + this->pinNumberLabel = new QLabel(this); + this->pinNumberLabel->setObjectName("target-pin-number"); + this->pinNumberLabel->setText(QString::number(pinDescriptor.number)); + this->pinNumberLabel->setAlignment(Qt::AlignmentFlag::AlignCenter); + + if (isTopWidget) { + this->layout->setDirection(QBoxLayout::Direction::BottomToTop); + } + + this->layout->addWidget(this->bodyWidget); + this->layout->insertSpacing(1, 3); + this->layout->addWidget(this->pinNumberLabel); + this->layout->insertSpacing(3, 2); + this->layout->addWidget(this->pinNameLabel); + this->layout->insertSpacing(5, 2); + this->layout->addWidget(this->pinDirectionLabel); + this->pinNameLabel->setFixedSize(PinBodyWidget::WIDTH, PinWidget::LABEL_HEIGHT - 2); + this->pinNumberLabel->setFixedSize(PinBodyWidget::WIDTH, PinWidget::LABEL_HEIGHT - 2); + + this->setFixedSize(PinWidget::MINIMUM_WIDTH, PinWidget::MAXIMUM_HEIGHT); + this->setLayout(this->layout); + + connect(this->bodyWidget, &PinBodyWidget::clicked, this, &TargetPinWidget::onWidgetBodyClicked); +} + diff --git a/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/DIP/PinWidget.hpp b/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/DIP/PinWidget.hpp new file mode 100644 index 00000000..5a4f51cd --- /dev/null +++ b/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/DIP/PinWidget.hpp @@ -0,0 +1,59 @@ +#pragma once + +#include +#include + +#include "../TargetPinWidget.hpp" +#include "PinBodyWidget.hpp" +#include "src/Targets/TargetVariant.hpp" + +namespace Bloom::InsightTargetWidgets::Dip +{ + class PinWidget: public TargetPinWidget + { + Q_OBJECT + private: + QVBoxLayout* layout = nullptr; + QLabel* pinNumberLabel = nullptr; + QLabel* pinNameLabel = nullptr; + QLabel* pinDirectionLabel = nullptr; + PinBodyWidget* bodyWidget = nullptr; + + void setLabelColor(QString hexColor) { + auto style = QString("QLabel { color: " + hexColor + "; }"); + if (this->pinNumberLabel != nullptr) { +// this->pinNumberLabel->setStyleSheet(style); + } + + if (this->pinNameLabel != nullptr) { + this->pinNameLabel->setStyleSheet(style); + } + } + + public: + static const int MINIMUM_WIDTH = 30; + static const int MAXIMUM_LABEL_COUNT = 3; + static const int LABEL_HEIGHT = 20; + static const int MAXIMUM_HEIGHT = PinBodyWidget::HEIGHT + (PinWidget::LABEL_HEIGHT * PinWidget::MAXIMUM_LABEL_COUNT); + + PinWidget(QWidget* parent, const TargetPinDescriptor& pinDescriptor, const TargetVariant& targetVariant); + + virtual void updatePinState(const TargetPinState& pinState) override { + TargetPinWidget::updatePinState(pinState); + + if (pinState.ioDirection.has_value()) { + this->pinDirectionLabel->setText(pinState.ioDirection.value() == TargetPinState::IoDirection::INPUT ? + "IN" : "OUT"); + + } else { + this->pinDirectionLabel->setText(""); + } + + if (this->bodyWidget != nullptr) { + this->bodyWidget->setPinState(pinState); + } + + this->setLabelColor(this->pinStateChanged ? "#6FA0FF" : "#a6a7aa"); + } + }; +} diff --git a/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/DIP/Stylesheets/DualInlinePackage.qss b/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/DIP/Stylesheets/DualInlinePackage.qss new file mode 100644 index 00000000..153ad9eb --- /dev/null +++ b/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/DIP/Stylesheets/DualInlinePackage.qss @@ -0,0 +1,30 @@ +#target-pin-number, +#target-pin-number { + font-size: 14px; +} + +#target-pin-name, +#target-pin-direction { + font-size: 11px; +} + +#target-pin-name { + color: #a6a7aa; +} + +#target-pin-direction { + color: #8a8a8d; +} + +#target-pin-number-top { +} + +#target-body { + qproperty-bodyColor: #A6A8AB; + qproperty-disableAlphaLevel: 100; +} + +#target-pin-body { + qproperty-bodyColor: #A6A8AB; + qproperty-disableAlphaLevel: 100; +} \ No newline at end of file diff --git a/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/QFP/BodyWidget.cpp b/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/QFP/BodyWidget.cpp new file mode 100644 index 00000000..d030c6bd --- /dev/null +++ b/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/QFP/BodyWidget.cpp @@ -0,0 +1,51 @@ +#include +#include + +#include "BodyWidget.hpp" +#include "src/Logger/Logger.hpp" + +using namespace Bloom::InsightTargetWidgets::Qfp; + +void BodyWidget::paintEvent(QPaintEvent* event) { + auto painter = QPainter(this); + this->drawWidget(painter); +} + +void BodyWidget::drawWidget(QPainter& painter) { + painter.setRenderHints(QPainter::RenderHint::Antialiasing | QPainter::RenderHint::SmoothPixmapTransform, true); + + auto targetBodyColor = this->getBodyColor(); + auto backgroundColor = QColor("#3C3F41"); + + if (!this->isEnabled()) { + targetBodyColor.setAlpha(this->getDisableAlphaLevel()); + } + + painter.setPen(Qt::PenStyle::NoPen); + painter.setBrush(targetBodyColor); + + auto containerGeometry = this->geometry(); + auto targetBodyWidth = containerGeometry.width() - 16; + auto targetBodyHeight = containerGeometry.height() - 16; + + auto targetBodyPoint = QPoint( + (containerGeometry.width() / 2) - (targetBodyWidth / 2), + (containerGeometry.height() / 2) - (targetBodyHeight / 2) + ); + + painter.drawRect( + targetBodyPoint.x(), + targetBodyPoint.y(), + targetBodyWidth, + targetBodyHeight + ); + + painter.setBrush(backgroundColor); + painter.drawEllipse(QRectF( + targetBodyPoint.x() + 10, + targetBodyPoint.y() + 10, + 15, + 15 + )); +} + diff --git a/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/QFP/BodyWidget.hpp b/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/QFP/BodyWidget.hpp new file mode 100644 index 00000000..8e865042 --- /dev/null +++ b/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/QFP/BodyWidget.hpp @@ -0,0 +1,42 @@ +#pragma once + +#include + +namespace Bloom::InsightTargetWidgets::Qfp +{ + class BodyWidget: public QWidget + { + Q_OBJECT + Q_PROPERTY(QColor bodyColor READ getBodyColor WRITE setBodyColor DESIGNABLE true) + Q_PROPERTY(int disableAlphaLevel READ getDisableAlphaLevel WRITE setDisableAlphaLevel DESIGNABLE true) + + private: + QColor bodyColor = QColor("#AFB1B3"); + int disableAlphaLevel = 100; + + protected: + void paintEvent(QPaintEvent* event); + void drawWidget(QPainter& painter); + + public: + BodyWidget(QWidget* parent): QWidget(parent) { + this->setObjectName("target-body"); + } + + QColor getBodyColor() const { + return this->bodyColor; + } + + void setBodyColor(QColor color) { + this->bodyColor = color; + } + + int getDisableAlphaLevel() const { + return this->disableAlphaLevel; + } + + void setDisableAlphaLevel(int level) { + this->disableAlphaLevel = level; + } + }; +} diff --git a/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/QFP/PinBodyWidget.cpp b/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/QFP/PinBodyWidget.cpp new file mode 100644 index 00000000..9dbb5d6e --- /dev/null +++ b/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/QFP/PinBodyWidget.cpp @@ -0,0 +1,91 @@ +#include +#include +#include +#include +#include +#include + +#include "PinBodyWidget.hpp" +#include "src/Logger/Logger.hpp" +#include "src/Exceptions/Exception.hpp" + +using namespace Bloom::InsightTargetWidgets::Qfp; +using namespace Bloom::Exceptions; + +void PinBodyWidget::paintEvent(QPaintEvent* event) { + auto painter = QPainter(this); + this->drawWidget(painter); +} + +bool PinBodyWidget::event(QEvent* event) +{ + if (this->isEnabled() && this->pinState.has_value() && this->pinState->ioDirection == TargetPinState::IoDirection::OUTPUT) { + switch (event->type()) { + case QEvent::Enter: { + this->hoverActive = true; + this->repaint(); + break; + } + case QEvent::Leave: { + this->hoverActive = false; + this->repaint(); + break; + } + default: { + break; + } + } + } + + return QWidget::event(event); +} + +void PinBodyWidget::drawWidget(QPainter& painter) { + auto parentWidget = this->parentWidget(); + + if (parentWidget == nullptr) { + Logger::error("PinBodyWidget requires a parent widget"); + } + + painter.setRenderHints(QPainter::RenderHint::Antialiasing | QPainter::RenderHint::SmoothPixmapTransform, true); + auto pinWidth = this->isVertical ? PinBodyWidget::WIDTH : PinBodyWidget::HEIGHT; + auto pinHeight = this->isVertical ? PinBodyWidget::HEIGHT : PinBodyWidget::WIDTH; + this->setFixedSize(pinWidth, pinHeight); + + auto pinColor = this->getBodyColor(); + + if (this->pinDescriptor.type == TargetPinType::VCC) { + pinColor = QColor("#ff3d43"); + + } else if (this->pinDescriptor.type == TargetPinType::GND) { + pinColor = QColor("#575757"); + } + + if (this->pinState.has_value()) { + if (this->pinState->ioState.has_value() + && this->pinState->ioDirection.has_value() + && this->pinState->ioState.value() == TargetPinState::IoState::HIGH + ) { + pinColor = this->pinState->ioDirection.value() == TargetPinState::IoDirection::OUTPUT ? + QColor("#3D7F96") : QColor("#A47E3E"); + } + } + + if (!this->hoverActive) { + pinColor.setAlpha(225); + } + + if (!this->isEnabled()) { + pinColor.setAlpha(this->getDisableAlphaLevel()); + } + + painter.setPen(Qt::PenStyle::NoPen); + painter.setBrush(pinColor); + + painter.drawRect( + 0, + 0, + pinWidth, + pinHeight + ); +} \ No newline at end of file diff --git a/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/QFP/PinBodyWidget.hpp b/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/QFP/PinBodyWidget.hpp new file mode 100644 index 00000000..ee1e7c92 --- /dev/null +++ b/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/QFP/PinBodyWidget.hpp @@ -0,0 +1,80 @@ +#pragma once + +#include +#include + +#include "src/Targets/TargetPinDescriptor.hpp" + +namespace Bloom::InsightTargetWidgets::Qfp +{ + using Targets::TargetPinDescriptor; + using Targets::TargetPinType; + using Targets::TargetPinState; + + class PinBodyWidget: public QWidget + { + Q_OBJECT + Q_PROPERTY(QColor bodyColor READ getBodyColor WRITE setBodyColor DESIGNABLE true) + Q_PROPERTY(int disableAlphaLevel READ getDisableAlphaLevel WRITE setDisableAlphaLevel DESIGNABLE true) + + private: + TargetPinDescriptor pinDescriptor; + std::optional pinState; + QColor bodyColor = QColor("#AFB1B3"); + int disableAlphaLevel = 100; + bool isVertical = false; + + protected: + bool hoverActive = false; + void paintEvent(QPaintEvent* event) override; + void drawWidget(QPainter& painter); + bool event(QEvent* event) override; + + void mouseReleaseEvent(QMouseEvent* event) override { + if (event->button() == Qt::MouseButton::LeftButton) { + emit this->clicked(); + } + + QWidget::mouseReleaseEvent(event); + } + + public: + static const int WIDTH = 30; + static const int HEIGHT = 40; + + PinBodyWidget(QWidget* parent, const TargetPinDescriptor& pinDescriptor, bool isVertical): + QWidget(parent), pinDescriptor(pinDescriptor), isVertical(isVertical) { + this->setObjectName("target-pin-body"); + + if (isVertical) { + this->setFixedSize(PinBodyWidget::WIDTH, PinBodyWidget::HEIGHT); + + } else { + this->setFixedSize(PinBodyWidget::HEIGHT, PinBodyWidget::WIDTH); + } + } + + void setPinState(const TargetPinState& pinState) { + this->pinState = pinState; + } + + QColor getBodyColor() const { + return this->bodyColor; + } + + void setBodyColor(QColor color) { + this->bodyColor = color; + } + + int getDisableAlphaLevel() const { + return this->disableAlphaLevel; + } + + void setDisableAlphaLevel(int level) { + this->disableAlphaLevel = level; + } + + signals: + void clicked(); + }; +} diff --git a/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/QFP/PinWidget.cpp b/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/QFP/PinWidget.cpp new file mode 100644 index 00000000..6279df9d --- /dev/null +++ b/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/QFP/PinWidget.cpp @@ -0,0 +1,97 @@ +#include +#include +#include +#include +#include + +#include "PinWidget.hpp" +#include "PinBodyWidget.hpp" +#include "src/Logger/Logger.hpp" + +using namespace Bloom::InsightTargetWidgets::Qfp; + +PinWidget::PinWidget(QWidget* parent, const TargetPinDescriptor& pinDescriptor, const TargetVariant& targetVariant): + TargetPinWidget(parent, pinDescriptor, targetVariant) { + this->layout = new QVBoxLayout(); + this->layout->setMargin(0); + this->layout->setSpacing(0); + + auto pinCountPerLayout = (targetVariant.pinDescriptorsByNumber.size() / 4); + this->isLeftLayout = pinDescriptor.number <= pinCountPerLayout; + this->isBottomLayout = pinDescriptor.number > pinCountPerLayout && pinDescriptor.number <= (pinCountPerLayout * 2); + this->isRightLayout = pinDescriptor.number > (pinCountPerLayout * 2) && pinDescriptor.number <= (pinCountPerLayout * 3); + this->isTopLayout = pinDescriptor.number > (pinCountPerLayout * 3) && pinDescriptor.number <= (pinCountPerLayout * 4); + + this->bodyWidget = new PinBodyWidget(this, this->pinDescriptor, (this->isTopLayout || this->isBottomLayout)); + + this->pinDirectionLabel = new QLabel(this); + this->pinDirectionLabel->setObjectName("target-pin-direction"); + this->pinDirectionLabel->setAlignment(Qt::AlignmentFlag::AlignCenter); + + this->pinNameLabel = new QLabel(this); + this->pinNameLabel->setObjectName("target-pin-name"); + auto pinName = QString::fromStdString(pinDescriptor.name).toUpper(); + pinName.truncate(5); + this->pinNameLabel->setText(pinName); + this->pinNameLabel->setAlignment(Qt::AlignmentFlag::AlignCenter); + + this->pinNumberLabel = new QLabel(this); + this->pinNumberLabel->setObjectName("target-pin-number"); + auto pinNumberText = QString::number(pinDescriptor.number); + pinNumberText.truncate(5); + this->pinNumberLabel->setText(QString::number(pinDescriptor.number)); + this->pinNumberLabel->setAlignment(Qt::AlignmentFlag::AlignCenter); + + if (this->isLeftLayout) { + this->layout->setAlignment((Qt::AlignmentFlag::AlignVCenter | Qt::AlignmentFlag::AlignRight)); + this->layout->setDirection(QBoxLayout::Direction::RightToLeft); + this->setFixedSize(PinWidget::MAXIMUM_HORIZONTAL_WIDTH, PinWidget::MAXIMUM_HORIZONTAL_HEIGHT); + + } else if (this->isBottomLayout) { + this->layout->setAlignment(Qt::AlignmentFlag::AlignHCenter | Qt::AlignmentFlag::AlignTop); + this->layout->setDirection(QBoxLayout::Direction::TopToBottom); + this->setFixedSize(PinWidget::MAXIMUM_VERTICAL_WIDTH, PinWidget::MAXIMUM_VERTICAL_HEIGHT); + + } else if (this->isRightLayout) { + this->layout->setAlignment((Qt::AlignmentFlag::AlignVCenter | Qt::AlignmentFlag::AlignLeft)); + this->layout->setDirection(QBoxLayout::Direction::LeftToRight); + this->setFixedSize(PinWidget::MAXIMUM_HORIZONTAL_WIDTH, PinWidget::MAXIMUM_HORIZONTAL_HEIGHT); + + } else if (this->isTopLayout) { + this->layout->setAlignment((Qt::AlignmentFlag::AlignHCenter | Qt::AlignmentFlag::AlignBottom)); + this->layout->setDirection(QBoxLayout::Direction::BottomToTop); + this->setFixedSize(PinWidget::MAXIMUM_VERTICAL_WIDTH, PinWidget::MAXIMUM_VERTICAL_HEIGHT); + } + + this->layout->addWidget(this->bodyWidget); + this->layout->insertSpacing(1, 3); + + if (this->isLeftLayout || this->isRightLayout) { + auto stackedLabelLayout = new QVBoxLayout(); + stackedLabelLayout->addWidget(this->pinNameLabel); + stackedLabelLayout->insertSpacing(3, 2); + stackedLabelLayout->addWidget(this->pinNumberLabel); + this->layout->insertSpacing(2, 4); + this->layout->addLayout(stackedLabelLayout); + + // Adjust the pin name label width for horizontal pins to accommodate for pin names up to 5 characters in length + this->pinNameLabel->setFixedSize(PinWidget::MAXIMUM_LABEL_WIDTH + 5, PinWidget::MAXIMUM_HORIZONTAL_HEIGHT / 2); + this->pinNumberLabel->setFixedSize(PinWidget::MAXIMUM_LABEL_WIDTH + 5, PinWidget::MAXIMUM_HORIZONTAL_HEIGHT / 2); + + } else if (this-isTopLayout || this->isBottomLayout) { + this->layout->addWidget(this->pinNumberLabel); + this->layout->insertSpacing(3, 2); + this->layout->addWidget(this->pinNameLabel); + + this->pinNameLabel->setFixedSize(PinBodyWidget::WIDTH, PinWidget::LABEL_HEIGHT - 2); + this->pinNumberLabel->setFixedSize(PinBodyWidget::WIDTH, PinWidget::LABEL_HEIGHT - 2); + } + + this->layout->insertSpacing(5, 2); + this->layout->addWidget(this->pinDirectionLabel); + + this->setLayout(this->layout); + + connect(this->bodyWidget, &PinBodyWidget::clicked, this, &TargetPinWidget::onWidgetBodyClicked); +} + diff --git a/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/QFP/PinWidget.hpp b/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/QFP/PinWidget.hpp new file mode 100644 index 00000000..2e273219 --- /dev/null +++ b/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/QFP/PinWidget.hpp @@ -0,0 +1,69 @@ +#pragma once + +#include +#include + +#include "../TargetPinWidget.hpp" +#include "PinBodyWidget.hpp" +#include "src/Targets/TargetVariant.hpp" + +namespace Bloom::InsightTargetWidgets::Qfp +{ + class PinWidget: public TargetPinWidget + { + Q_OBJECT + private: + QVBoxLayout* layout = nullptr; + QLabel* pinNumberLabel = nullptr; + QLabel* pinNameLabel = nullptr; + QLabel* pinDirectionLabel = nullptr; + PinBodyWidget* bodyWidget = nullptr; + + bool isLeftLayout = false; + bool isBottomLayout = false; + bool isRightLayout = false; + bool isTopLayout = false; + + void setLabelColor(QString hexColor) { + auto style = QString("QLabel { color: " + hexColor + "; }"); + if (this->pinNumberLabel != nullptr) { +// this->pinNumberLabel->setStyleSheet(style); + } + + if (this->pinNameLabel != nullptr) { + this->pinNameLabel->setStyleSheet(style); + } + } + + public: + static const int MAXIMUM_SPACING = 8; + static const int MAXIMUM_LABEL_COUNT = 3; + static const int LABEL_HEIGHT = 20; + static const int MAXIMUM_LABEL_WIDTH = PinBodyWidget::WIDTH; + static const int MAXIMUM_LABEL_HEIGHT = 20; + static const int MAXIMUM_HORIZONTAL_WIDTH = PinBodyWidget::HEIGHT + (PinWidget::MAXIMUM_LABEL_WIDTH * PinWidget::MAXIMUM_LABEL_COUNT); + static const int MAXIMUM_HORIZONTAL_HEIGHT = PinBodyWidget::WIDTH; + static const int MAXIMUM_VERTICAL_HEIGHT = PinBodyWidget::HEIGHT + (PinWidget::MAXIMUM_LABEL_HEIGHT * PinWidget::MAXIMUM_LABEL_COUNT); + static const int MAXIMUM_VERTICAL_WIDTH = PinBodyWidget::WIDTH; + + PinWidget(QWidget* parent, const TargetPinDescriptor& pinDescriptor, const TargetVariant& targetVariant); + + virtual void updatePinState(const TargetPinState& pinState) override { + TargetPinWidget::updatePinState(pinState); + + if (pinState.ioDirection.has_value()) { + this->pinDirectionLabel->setText(pinState.ioDirection.value() == TargetPinState::IoDirection::INPUT ? + "IN" : "OUT"); + + } else { + this->pinDirectionLabel->setText(""); + } + + if (this->bodyWidget != nullptr) { + this->bodyWidget->setPinState(pinState); + } + + this->setLabelColor(this->pinStateChanged ? "#6FA0FF" : "#a6a7aa"); + } + }; +} diff --git a/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/QFP/QuadFlatPackageWidget.cpp b/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/QFP/QuadFlatPackageWidget.cpp new file mode 100644 index 00000000..c1502307 --- /dev/null +++ b/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/QFP/QuadFlatPackageWidget.cpp @@ -0,0 +1,213 @@ +#include +#include +#include +#include +#include +#include + +#include "../../InsightWindow.hpp" +#include "QuadFlatPackageWidget.hpp" +#include "src/Logger/Logger.hpp" +#include "src/Exceptions/Exception.hpp" +#include "PinWidget.hpp" +#include "BodyWidget.hpp" + +using namespace Bloom::InsightTargetWidgets::Qfp; +using namespace Bloom::Exceptions; + +QuadFlatPackageWidget::QuadFlatPackageWidget(const TargetVariant& targetVariant, QObject* insightWindowObj, QWidget* parent): +TargetPackageWidget(targetVariant, insightWindowObj, parent) { + assert((targetVariant.pinDescriptorsByNumber.size() % 4) == 0); + + auto stylesheetFile = QFile("/home/nav/Projects/Bloom/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/QFP/Stylesheets/QuadFlatPackage.qss"); + stylesheetFile.open(QFile::ReadOnly); + this->setStyleSheet(stylesheetFile.readAll()); + + this->pinWidgets.reserve(targetVariant.pinDescriptorsByNumber.size()); + this->layout = new QVBoxLayout(); + this->layout->setSpacing(0); + this->layout->setMargin(0); + + this->horizontalLayout = new QHBoxLayout(); + this->horizontalLayout->setSpacing(0); + this->horizontalLayout->setDirection(QBoxLayout::Direction::LeftToRight); + + this->topPinLayout = new QHBoxLayout(); + this->topPinLayout->setSpacing(QuadFlatPackageWidget::PIN_WIDGET_SPACING); + this->topPinLayout->setDirection(QBoxLayout::Direction::RightToLeft); + + this->rightPinLayout = new QVBoxLayout(); + this->rightPinLayout->setSpacing(QuadFlatPackageWidget::PIN_WIDGET_SPACING); + this->rightPinLayout->setDirection(QBoxLayout::Direction::BottomToTop); + + this->bottomPinLayout = new QHBoxLayout(); + this->bottomPinLayout->setSpacing(QuadFlatPackageWidget::PIN_WIDGET_SPACING); + this->bottomPinLayout->setDirection(QBoxLayout::Direction::LeftToRight); + + this->leftPinLayout = new QVBoxLayout(); + this->leftPinLayout->setSpacing(QuadFlatPackageWidget::PIN_WIDGET_SPACING); + this->leftPinLayout->setDirection(QBoxLayout::Direction::TopToBottom); + + auto insightWindow = qobject_cast(insightWindowObj); + assert(insightWindow != nullptr); + + auto pinCountPerLayout = (targetVariant.pinDescriptorsByNumber.size() / 4); + for (const auto& [targetPinNumber, targetPinDescriptor]: targetVariant.pinDescriptorsByNumber) { + auto pinWidget = new PinWidget(this, targetPinDescriptor, targetVariant); + this->pinWidgets.push_back(pinWidget); + + if (targetPinNumber <= pinCountPerLayout) { + this->leftPinLayout->addWidget(pinWidget, 0, Qt::AlignmentFlag::AlignRight); + + } else if (targetPinNumber > pinCountPerLayout && targetPinNumber <= (pinCountPerLayout * 2)) { + this->bottomPinLayout->addWidget(pinWidget, 0, Qt::AlignmentFlag::AlignTop); + + } else if (targetPinNumber > (pinCountPerLayout * 2) && targetPinNumber <= (pinCountPerLayout * 3)) { + this->rightPinLayout->addWidget(pinWidget, 0, Qt::AlignmentFlag::AlignLeft); + + } else if (targetPinNumber > (pinCountPerLayout * 3) && targetPinNumber <= (pinCountPerLayout * 4)) { + this->topPinLayout->addWidget(pinWidget, 0, Qt::AlignmentFlag::AlignBottom); + } + + connect(pinWidget, &TargetPinWidget::toggleIoState, insightWindow, &InsightWindow::togglePinIoState); + } + + this->bodyWidget = new BodyWidget(this); + this->layout->addLayout(this->topPinLayout); + this->horizontalLayout->addLayout(this->leftPinLayout); + this->horizontalLayout->addWidget(this->bodyWidget); + this->horizontalLayout->addLayout(this->rightPinLayout); + this->layout->addLayout(this->horizontalLayout); + this->layout->addLayout(this->bottomPinLayout); + this->setLayout(this->layout); + + auto insightWindowWidget = this->window(); + assert(insightWindowWidget != nullptr); + + insightWindowWidget->setMinimumHeight( + std::max( + 500, + static_cast((PinWidget::MAXIMUM_HORIZONTAL_HEIGHT * pinCountPerLayout) + + (PinWidget::MAXIMUM_VERTICAL_HEIGHT * 2)) + 300 + ) + ); + + insightWindowWidget->setMinimumWidth( + std::max( + 1000, + static_cast((PinWidget::MAXIMUM_VERTICAL_WIDTH * pinCountPerLayout) + + (PinWidget::MAXIMUM_VERTICAL_WIDTH * 2)) + 300 + ) + ); +} + +void QuadFlatPackageWidget::paintEvent(QPaintEvent* event) { + auto painter = QPainter(this); + this->drawWidget(painter); +} + +void QuadFlatPackageWidget::drawWidget(QPainter& painter) { + auto parentWidget = this->parentWidget(); + assert(parentWidget != nullptr); + + auto parentContainerHeight = parentWidget->height(); + auto parentContainerWidth = parentWidget->width(); + +// auto verticalPinWidgetHeight = this->topPinLayout->findChildren().front()->height(); +// auto verticalPinWidgetWidth = this->topPinLayout->findChildren().front()->width(); +// auto horizontalPinWidgetHeight = this->leftPinLayout->findChildren().front()->height(); +// auto horizontalPinWidgetWidth = this->leftPinLayout->findChildren().front()->width(); + + auto verticalPinWidgetHeight = PinWidget::MAXIMUM_VERTICAL_HEIGHT; + auto verticalPinWidgetWidth = PinWidget::MAXIMUM_VERTICAL_WIDTH; + auto horizontalPinWidgetHeight = PinWidget::MAXIMUM_HORIZONTAL_HEIGHT; + auto horizontalPinWidgetWidth = PinWidget::MAXIMUM_HORIZONTAL_WIDTH; + + auto pinCountPerLayout = static_cast(this->pinWidgets.size() / 4); + + auto width = ((horizontalPinWidgetHeight + QuadFlatPackageWidget::PIN_WIDGET_SPACING) * pinCountPerLayout + + QuadFlatPackageWidget::PIN_WIDGET_LAYOUT_PADDING); + + auto containerWidth = width + (horizontalPinWidgetWidth * 2); + + this->topPinLayout->setGeometry(QRect( + horizontalPinWidgetWidth, + 0, + width, + verticalPinWidgetHeight + )); + + this->horizontalLayout->setGeometry(QRect( + 0, + verticalPinWidgetHeight, + containerWidth, + width + )); + + this->leftPinLayout->setGeometry(QRect( + 0, + verticalPinWidgetHeight, + horizontalPinWidgetWidth, + width + )); + + this->bodyWidget->setGeometry(QRect( + horizontalPinWidgetWidth, + verticalPinWidgetHeight, + width, + width + )); + + this->rightPinLayout->setGeometry(QRect( + width + horizontalPinWidgetWidth, + verticalPinWidgetHeight, + horizontalPinWidgetWidth, + width + )); + + this->bottomPinLayout->setGeometry(QRect( + horizontalPinWidgetWidth, + verticalPinWidgetHeight + width, + width, + verticalPinWidgetHeight + )); + + auto pinWidgetLayoutMargin = QuadFlatPackageWidget::PIN_WIDGET_LAYOUT_PADDING / 2; + + this->topPinLayout->setContentsMargins( + pinWidgetLayoutMargin, + 0, + pinWidgetLayoutMargin, + 0 + ); + + this->bottomPinLayout->setContentsMargins( + pinWidgetLayoutMargin, + 0, + pinWidgetLayoutMargin, + 0 + ); + + this->leftPinLayout->setContentsMargins( + 0, + pinWidgetLayoutMargin, + 0, + pinWidgetLayoutMargin + ); + + this->rightPinLayout->setContentsMargins( + 0, + pinWidgetLayoutMargin, + 0, + pinWidgetLayoutMargin + ); + + auto containerHeight = width + (verticalPinWidgetHeight * 2); + this->setGeometry( + (parentContainerWidth / 2) - (containerWidth / 2), + (parentContainerHeight / 2) - (containerHeight / 2), + containerWidth, + containerHeight + ); +} + diff --git a/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/QFP/QuadFlatPackageWidget.hpp b/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/QFP/QuadFlatPackageWidget.hpp new file mode 100644 index 00000000..c3c841a8 --- /dev/null +++ b/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/QFP/QuadFlatPackageWidget.hpp @@ -0,0 +1,41 @@ +#pragma once + +#include +#include +#include +#include + +#include "../TargetPackageWidget.hpp" +#include "PinWidget.hpp" +#include "BodyWidget.hpp" +#include "src/Targets/TargetVariant.hpp" + +namespace Bloom::InsightTargetWidgets::Qfp +{ + using Targets::TargetVariant; + + /** + * QuadFlatPackageWidget implements a custom Qt widget for Quad-flat package variants. + */ + class QuadFlatPackageWidget: public TargetPackageWidget + { + Q_OBJECT + private: + QVBoxLayout* layout = nullptr; + QHBoxLayout* horizontalLayout = nullptr; + QHBoxLayout* topPinLayout = nullptr; + QVBoxLayout* rightPinLayout = nullptr; + QHBoxLayout* bottomPinLayout = nullptr; + QVBoxLayout* leftPinLayout = nullptr; + BodyWidget* bodyWidget = nullptr; + + protected: + void paintEvent(QPaintEvent* event); + void drawWidget(QPainter& painter); + + public: + static const int PIN_WIDGET_LAYOUT_PADDING = 46; + static const int PIN_WIDGET_SPACING = 8; + QuadFlatPackageWidget(const TargetVariant& targetVariant, QObject* insightWindowObj, QWidget* parent); + }; +} diff --git a/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/QFP/Stylesheets/QuadFlatPackage.qss b/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/QFP/Stylesheets/QuadFlatPackage.qss new file mode 100644 index 00000000..d1edd0ad --- /dev/null +++ b/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/QFP/Stylesheets/QuadFlatPackage.qss @@ -0,0 +1,30 @@ +#target-pin-number, +#target-pin-number { + font-size: 14px; +} + +#target-pin-name, +#target-pin-direction { + font-size: 11px; +} + +#target-pin-name { + color: #a6a7aa; +} + +#target-pin-direction { + color: #8a8a8d; +} + +#target-pin-number { +} + +#target-body { + qproperty-bodyColor: #A6A8AB; + qproperty-disableAlphaLevel: 100; +} + +#target-pin-body { + qproperty-bodyColor: #A6A8AB; + qproperty-disableAlphaLevel: 100; +} \ No newline at end of file diff --git a/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/TargetPackageWidget.hpp b/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/TargetPackageWidget.hpp new file mode 100644 index 00000000..b9a62d6a --- /dev/null +++ b/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/TargetPackageWidget.hpp @@ -0,0 +1,39 @@ +#pragma once + +#include +#include +#include + +#include "TargetPinWidget.hpp" +#include "src/Targets/TargetVariant.hpp" +#include "src/Targets/TargetDescriptor.hpp" + +namespace Bloom::InsightTargetWidgets +{ + using Targets::TargetVariant; + using Targets::TargetPinState; + + /** + * Each custom target package widget should be derived from this class. + */ + class TargetPackageWidget: public QWidget + { + Q_OBJECT + protected: + TargetVariant targetVariant; + std::vector pinWidgets; + + public: + TargetPackageWidget(const TargetVariant& targetVariant, QObject* insightWindowObj, QWidget* parent): + QWidget(parent), targetVariant(targetVariant) {}; + + virtual void updatePinStates(std::map pinStatesByNumber) { + for (auto& pinWidget : this->pinWidgets) { + auto pinNumber = pinWidget->getPinNumber(); + if (pinStatesByNumber.contains(pinNumber)) { + pinWidget->updatePinState(pinStatesByNumber.at(pinNumber)); + } + } + } + }; +} diff --git a/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/TargetPinWidget.hpp b/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/TargetPinWidget.hpp new file mode 100644 index 00000000..31e2cc3e --- /dev/null +++ b/src/Insight/UserInterfaces/InsightWindow/TargetWidgets/TargetPinWidget.hpp @@ -0,0 +1,70 @@ +#pragma once + +#include + +#include "src/Targets/TargetVariant.hpp" +#include "src/Targets/TargetPinDescriptor.hpp" + +namespace Bloom::InsightTargetWidgets +{ + using Targets::TargetVariant; + using Targets::TargetPinDescriptor; + using Targets::TargetPinType; + using Targets::TargetPinState; + + class TargetPinWidget: public QWidget + { + Q_OBJECT + protected: + TargetVariant targetVariant; + TargetPinDescriptor pinDescriptor; + std::optional pinState; + bool pinStateChanged = false; + + public: + TargetPinWidget(QWidget* parent, const TargetPinDescriptor& pinDescriptor, const TargetVariant& targetVariant): + QWidget(parent), targetVariant(targetVariant), pinDescriptor(pinDescriptor) { + this->setDisabled(false); + }; + + int getPinNumber() const { + return this->pinDescriptor.number; + } + + const TargetPinDescriptor& getPinDescriptor() const { + return this->pinDescriptor; + } + + std::optional getPinState() const { + return this->pinState; + } + + virtual void updatePinState(const TargetPinState& pinState) { + this->pinStateChanged = !this->pinState.has_value() + || this->pinState->ioState != pinState.ioState + || this->pinState->ioDirection != pinState.ioDirection; + + this->pinState = pinState; + } + + void setDisabled(bool disabled) { + if (pinDescriptor.type != TargetPinType::GND + && pinDescriptor.type != TargetPinType::VCC + && pinDescriptor.type != TargetPinType::UNKNOWN + ) { + QWidget::setDisabled(disabled); + + } else { + QWidget::setDisabled(true); + } + } + + public slots: + void onWidgetBodyClicked() { + emit this->toggleIoState(this); + } + + signals: + void toggleIoState(TargetPinWidget* pinWidget); + }; +} diff --git a/src/Insight/UserInterfaces/InsightWindow/UiFiles/AboutWindow.ui b/src/Insight/UserInterfaces/InsightWindow/UiFiles/AboutWindow.ui new file mode 100644 index 00000000..81daa73a --- /dev/null +++ b/src/Insight/UserInterfaces/InsightWindow/UiFiles/AboutWindow.ui @@ -0,0 +1,62 @@ + + + + About + false + + + + + + + + + + + + Bloom + + + + + + + https://bloom.oscillate.io/ + ]]> + + + true + + + + + + + Nav Mohammed + + + + + + + Qt::Vertical + + + + + + + Powered by open-source software + ]]> + + + true + + + + + + + \ No newline at end of file diff --git a/src/Insight/UserInterfaces/InsightWindow/UiFiles/InsightWindow.ui b/src/Insight/UserInterfaces/InsightWindow/UiFiles/InsightWindow.ui new file mode 100644 index 00000000..2aefe7fd --- /dev/null +++ b/src/Insight/UserInterfaces/InsightWindow/UiFiles/InsightWindow.ui @@ -0,0 +1,189 @@ + + + + 500 + 1000 + Bloom + false + + + + false + + + + File + + + + Exit + + + + + + Help + + + + + + + Getting Started + + + + + Report An Issue + + + + + About + + + + + + + + + + + + 0 + + + 0 + + + + + + + + :/compiled/Insight/UserInterfaces/InsightWindow/Images/refresh-disabled.svg + :/compiled/Insight/UserInterfaces/InsightWindow/Images/refresh.svg + + + + Refresh GPIO Pin States + + + + + + + + + + 0 + + + 0 + + + + + + + false + + IO inspection is not available for this target. Please report this to Bloom developers by clicking Help -> Report An Issue + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + 0 + + + + Target State + + + + + + + + - + + + Program Counter Value + + + + + + + + Target Name + + + + + + + + Target ID + + + + + + + + false + + + true + + + + + No supported variants available + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Logger/Logger.cpp b/src/Logger/Logger.cpp new file mode 100644 index 00000000..17c3f3f0 --- /dev/null +++ b/src/Logger/Logger.cpp @@ -0,0 +1,66 @@ +#include +#include +#include "Logger.hpp" + +using namespace Bloom; + +void Logger::log(const std::string& message, LogLevel logLevel, bool print) { + auto lock = std::unique_lock(Logger::logMutex); + auto logEntry = LogEntry(message, logLevel); + Logger::logEntries.push_back(logEntry); + auto index = Logger::logEntries.size(); + + if (print) { + // Print the timestamp and index in a green font color: + std::cout << "\033[32m"; + std::cout << logEntry.timestamp.toString("yyyy-MM-dd hh:mm:ss ").toStdString() + + DateTime::getTimeZoneAbbreviation(logEntry.timestamp).toStdString(); + + if (!logEntry.threadName.empty()) { + std::cout << " [" << logEntry.threadName << "]"; + } + + // The index serves as an ID for each log entry. Just here for convenience when referencing specific log entries. + std::cout << " [" << index << "]: "; + std::cout << "\033[0m"; + + switch (logLevel) { + case LogLevel::ERROR: { + // Errors in red + std::cout << "\033[31m"; + std::cout << "[ERROR] "; + break; + } + case LogLevel::WARNING: { + // Warnings in yellow + std::cout << "\033[33m"; + std::cout << "[WARNING] "; + break; + } + case LogLevel::INFO: { + std::cout << "[INFO] "; + break; + } + case LogLevel::DEBUG: { + std::cout << "[DEBUG] "; + break; + } + } + + std::cout << logEntry.message << "\033[0m" << std::endl; + } +} + +void Logger::configure(ApplicationConfig& applicationConfig) { + if (applicationConfig.debugLoggingEnabled) { + Logger::debugPrintingEnabled = true; + Logger::debug("Debug log printing has been enabled."); + } +} + +void Logger::silence() { + Logger::debugPrintingEnabled = false; + Logger::infoPrintingEnabled = false; + Logger::errorPrintingEnabled = false; + Logger::warningPrintingEnabled = false; +} diff --git a/src/Logger/Logger.hpp b/src/Logger/Logger.hpp new file mode 100644 index 00000000..3c4e8f0c --- /dev/null +++ b/src/Logger/Logger.hpp @@ -0,0 +1,103 @@ +#pragma once + +#include +#include +#include +#include +#include +#include + +#include "src/ApplicationConfig.hpp" +#include "src/Helpers/DateTime.hpp" + +namespace Bloom +{ + enum class LogLevel + { + INFO = 1, + WARNING = 2, + ERROR = 3, + DEBUG = 4, + }; + + struct LogEntry { + std::string threadName; + std::string message; + LogLevel logLevel; + QDateTime timestamp = DateTime::currentDateTime(); + + LogEntry(std::string message, LogLevel logLevel): message(std::move(message)), logLevel(logLevel) { + // Get thread name + std::array threadNameBuf; + + if (pthread_getname_np(pthread_self(), threadNameBuf.data(), threadNameBuf.size()) == 0) { + /* + * The name of the main thread is also the name of the process, so we have to name the + * main thread "Bloom" (to prevent confusion). + * + * We override the main thread name when printing logs, to keep the format of the thread name in the + * logs consistent. + */ + this->threadName = std::string(threadNameBuf.data()); + this->threadName = this->threadName == "Bloom" ? "MT" : this->threadName; + } + }; + }; + + /** + * Super simple thread safe static Logger class for basic logging. + * + * TODO: Add the ability to dump the logs to a file. + */ + class Logger + { + private: + /** + * We keep a record of every log entry for future processing. Maybe dumping to a file or something + * of that nature when a fatal error occurs. + */ + static inline std::vector logEntries; + + static inline bool errorPrintingEnabled = true; + static inline bool warningPrintingEnabled = true; + static inline bool infoPrintingEnabled = true; + static inline bool debugPrintingEnabled = false; + + static inline std::mutex logMutex; + + static void log(const std::string& message, LogLevel logLevel, bool print); + + public: + static void setInfoPrinting(bool enabled) { + Logger::infoPrintingEnabled = enabled; + } + + static void setWarningPrinting(bool enabled) { + Logger::warningPrintingEnabled = enabled; + } + + static void setErrorPrinting(bool enabled) { + Logger::errorPrintingEnabled = enabled; + } + + static void info(const std::string& message) { + Logger::log(message, LogLevel::INFO, Logger::infoPrintingEnabled); + } + + static void warning(const std::string& message) { + Logger::log(message, LogLevel::WARNING, Logger::warningPrintingEnabled); + } + + static void error(const std::string& message) { + Logger::log(message, LogLevel::ERROR, Logger::errorPrintingEnabled); + } + + static void debug(const std::string& message) { + Logger::log(message, LogLevel::DEBUG, Logger::debugPrintingEnabled); + } + + static void configure(ApplicationConfig& applicationConfig); + + static void silence(); + }; +} diff --git a/src/SignalHandler/SignalHandler.cpp b/src/SignalHandler/SignalHandler.cpp new file mode 100644 index 00000000..2745331f --- /dev/null +++ b/src/SignalHandler/SignalHandler.cpp @@ -0,0 +1,81 @@ +#include +#include +#include +#include +#include +#include +#include + +#include "src/Logger/Logger.hpp" +#include "SignalHandler.hpp" + +using namespace Bloom; + +void SignalHandler::run() { + try { + this->startup(); + auto signalSet = this->getRegisteredSignalSet(); + int signalNumber = 0; + + Logger::debug("SignalHandler ready"); + while(Thread::getState() == ThreadState::READY) { + if (sigwait(&signalSet, &signalNumber) == 0) { + Logger::debug("SIGNAL " + std::to_string(signalNumber) + " received"); + if (this->handlersMappedBySignalNum.find(signalNumber) != this->handlersMappedBySignalNum.end()) { + // We have a registered handler for this signal. + this->handlersMappedBySignalNum.find(signalNumber)->second(); + } + } + } + + } catch (std::exception& exception) { + Logger::error("SignalHandler fatal error: " + std::string(exception.what())); + } + + Logger::debug("SignalHandler shutting down"); + Thread::setState(ThreadState::STOPPED); +} + +void SignalHandler::startup() { + this->setName("SH"); + Logger::debug("Starting SignalHandler"); + // Block all signal interrupts + auto signalSet = this->getRegisteredSignalSet(); + sigprocmask(SIG_SETMASK, &signalSet, NULL); + + // Register handlers here + this->handlersMappedBySignalNum.insert(std::pair( + SIGINT, + std::bind(&SignalHandler::triggerApplicationShutdown, this) + )); + + this->handlersMappedBySignalNum.insert(std::pair( + SIGTERM, + std::bind(&SignalHandler::triggerApplicationShutdown, this) + )); + + Thread::setState(ThreadState::READY); +} + +sigset_t SignalHandler::getRegisteredSignalSet() const { + sigset_t set = {}; + if (sigfillset(&set) == -1) { + throw Exceptions::Exception("sigfillset() failed - error number: " + std::to_string(errno)); + } + + return set; +} + +void SignalHandler::triggerApplicationShutdown() { + Logger::warning("Shutdown signal received"); + this->shutdownSignalsReceived++; + + if (this->shutdownSignalsReceived > 1) { + // User has likely run out of patience + Logger::warning("Aborting immediately"); + exit(EXIT_FAILURE); + } + + Logger::info("Attempting clean shutdown"); + this->eventManager.triggerEvent(std::make_shared()); +} diff --git a/src/SignalHandler/SignalHandler.hpp b/src/SignalHandler/SignalHandler.hpp new file mode 100644 index 00000000..bd92e6cb --- /dev/null +++ b/src/SignalHandler/SignalHandler.hpp @@ -0,0 +1,63 @@ +#pragma once + +#include +#include +#include "src/Helpers/SyncSafe.hpp" +#include + +namespace Bloom +{ + class SignalHandler: public Thread + { + private: + EventManager& eventManager; + + /** + * Mapping of signal numbers to functions. + */ + std::map> handlersMappedBySignalNum; + + /** + * Fetches all signals currently of interest to the application. + * + * Currently this just returns a set of all signals (using sigfillset()) + * + * @return + */ + sigset_t getRegisteredSignalSet() const; + + /** + * We keep record of the number of shutdown signals received. See definition of triggerApplicationShutdown() + * for more on this. + */ + int shutdownSignalsReceived = 0; + + public: + SignalHandler(EventManager& eventManager) : eventManager(eventManager) {}; + + /** + * Entry point for SignalHandler thread. + */ + void run(); + + /** + * Initiates the SignalHandler thread. + */ + void startup(); + + /** + * Triggers the shutdown of the SignalHandler thread. + */ + void triggerShutdown() { + this->setState(ThreadState::SHUTDOWN_INITIATED); + }; + + /** + * Handler for SIGINT, SIGTERM, etc signals. + * + * Will trigger a ShutdownApplication event to kick-off a clean shutdown or it will terminate the + * program immediately if numerous SIGINT signals have been received. + */ + void triggerApplicationShutdown(); + }; +} \ No newline at end of file diff --git a/src/TargetController/TargetController.cpp b/src/TargetController/TargetController.cpp new file mode 100644 index 00000000..0c75acab --- /dev/null +++ b/src/TargetController/TargetController.cpp @@ -0,0 +1,531 @@ +#include +#include +#include + +#include "TargetController.hpp" +#include "src/Exceptions/InvalidConfig.hpp" +#include "src/Exceptions/TargetControllerStartupFailure.hpp" +#include "src/Application.hpp" + +using namespace Bloom; +using namespace Exceptions; + +void TargetController::run() { + try { + this->startup(); + + this->setStateAndEmitEvent(ThreadState::READY); + Logger::debug("TargetController ready and waiting for events."); + + while (this->getState() == ThreadState::READY) { + this->fireTargetEvents(); + this->eventListener->waitAndDispatch(60); + } + + } catch (const TargetControllerStartupFailure& exception) { + Logger::error("TargetController failed to startup. See below for errors:"); + Logger::error(exception.getMessage()); + + } catch (const Exception& exception) { + Logger::error("The TargetController encountered a fatal error. See below for errors:"); + Logger::error(exception.getMessage()); + + } catch (const std::exception& exception) { + Logger::error("The TargetController encountered a fatal error. See below for errors:"); + Logger::error(std::string(exception.what())); + } + + this->shutdown(); +} + +void TargetController::startup() { + this->setName("TC"); + Logger::info("Starting TargetController"); + this->setState(ThreadState::STARTING); + this->blockAllSignalsOnCurrentThread(); + this->eventManager.registerListener(this->eventListener); + + // Install Bloom's udev rules if not already installed + this->checkUdevRules(); + + auto debugToolName = this->environmentConfig.debugToolName; + auto targetName = this->environmentConfig.targetConfig.name; + auto supportedDebugTools = TargetController::getSupportedDebugTools(); + auto supportedTargets = TargetController::getSupportedTargets(); + + if (supportedDebugTools.find(debugToolName) == supportedDebugTools.end()) { + throw Exceptions::InvalidConfig( + "Debug tool name (\"" + debugToolName + "\") not recognised. Please check your configuration!" + ); + } + + if (supportedTargets.find(targetName) == supportedTargets.end()) { + throw Exceptions::InvalidConfig( + "Target name (\"" + targetName + "\") not recognised. Please check your configuration!" + ); + } + + // Initiate debug tool and target + this->setDebugTool(std::move(supportedDebugTools.find(debugToolName)->second())); + + Logger::info("Connecting to debug tool"); + this->debugTool->init(); + + Logger::info("Debug tool connected"); + Logger::info("Debug tool name: " + debugTool->getName()); + Logger::info("Debug tool serial: " + debugTool->getSerialNumber()); + + this->setTarget(supportedTargets.find(targetName)->second()); + + if (!this->target->isDebugToolSupported(debugTool.get())) { + throw Exceptions::InvalidConfig( + "Debug tool (\"" + debugTool->getName() + "\") not supported " + + "by target (\"" + this->target->getName() + "\")." + ); + } + + this->target->setDebugTool(debugTool.get()); + this->target->preActivationConfigure(this->environmentConfig.targetConfig); + + Logger::info("Activating target"); + this->target->activate(); + Logger::info("Target activated"); + this->target->postActivationConfigure(); + + while (this->target->supportsPromotion()) { + auto promotedTarget = this->target->promote(); + + if (promotedTarget == nullptr + || std::type_index(typeid(*promotedTarget)) == std::type_index(typeid(*this->target)) + ) { + break; + } + + this->target.reset(promotedTarget.release()); + this->target->postPromotionConfigure(); + } + + Logger::info("Target ID: " + target->getHumanReadableId()); + Logger::info("Target name: " + target->getName()); + + if (this->target->getState() == TargetState::STOPPED) { + this->target->run(); + } + + // Register event handlers + this->eventListener->registerCallbackForEventType( + std::bind(&TargetController::onShutdownTargetControllerEvent, this, std::placeholders::_1) + ); + + this->eventListener->registerCallbackForEventType( + std::bind(&TargetController::onDebugSessionStartedEvent, this, std::placeholders::_1) + ); + + this->eventListener->registerCallbackForEventType( + std::bind(&TargetController::onDebugSessionFinishedEvent, this, std::placeholders::_1) + ); + + this->eventListener->registerCallbackForEventType( + std::bind(&TargetController::onExtractTargetDescriptor, this, std::placeholders::_1) + ); + + this->eventListener->registerCallbackForEventType( + std::bind(&TargetController::onStopTargetExecutionEvent, this, std::placeholders::_1) + ); + + this->eventListener->registerCallbackForEventType( + std::bind(&TargetController::onStepTargetExecutionEvent, this, std::placeholders::_1) + ); + + this->eventListener->registerCallbackForEventType( + std::bind(&TargetController::onResumeTargetExecutionEvent, this, std::placeholders::_1) + ); + + this->eventListener->registerCallbackForEventType( + std::bind(&TargetController::onReadRegistersEvent, this, std::placeholders::_1) + ); + + this->eventListener->registerCallbackForEventType( + std::bind(&TargetController::onWriteRegistersEvent, this, std::placeholders::_1) + ); + + this->eventListener->registerCallbackForEventType( + std::bind(&TargetController::onReadMemoryEvent, this, std::placeholders::_1) + ); + + this->eventListener->registerCallbackForEventType( + std::bind(&TargetController::onWriteMemoryEvent, this, std::placeholders::_1) + ); + + this->eventListener->registerCallbackForEventType( + std::bind(&TargetController::onSetBreakpointEvent, this, std::placeholders::_1) + ); + + this->eventListener->registerCallbackForEventType( + std::bind(&TargetController::onRemoveBreakpointEvent, this, std::placeholders::_1) + ); + + this->eventListener->registerCallbackForEventType( + std::bind(&TargetController::onSetProgramCounterEvent, this, std::placeholders::_1) + ); + + this->eventListener->registerCallbackForEventType( + std::bind(&TargetController::onInsightStateChangedEvent, this, std::placeholders::_1) + ); + + this->eventListener->registerCallbackForEventType( + std::bind(&TargetController::onRetrieveTargetPinStatesEvent, this, std::placeholders::_1) + ); + + this->eventListener->registerCallbackForEventType( + std::bind(&TargetController::onSetPinStateEvent, this, std::placeholders::_1) + ); +} + +void TargetController::checkUdevRules() { + auto bloomRulesPath = std::string("/etc/udev/rules.d/99-bloom.rules"); + auto latestBloomRulesPath = Application::getResourcesDirPath() + "/UDevRules/99-bloom.rules"; + + if (!std::filesystem::exists(bloomRulesPath)) { + Logger::warning("Bloom udev rules missing - attempting installation"); + + // We can only install them if we're running as root + if (!Application::isRunningAsRoot()) { + Logger::error("Bloom udev rules missing - cannot install udev rules without root privileges.\n" + "Running Bloom once with root privileges will allow it to automatically install the udev rules." + " Alternatively, instructions on manually installing the udev rules can be found " + "here: https://bloom.oscillate.io/some/link.\nBloom may fail to connect to some debug tools " + "until this is resolved."); + return; + } + + if (!std::filesystem::exists(latestBloomRulesPath)) { + // This shouldn't happen, but it can if someone has been messing with the installation files + Logger::error("Unable to install Bloom udev rules - \"" + latestBloomRulesPath + "\" does not exist."); + return; + } + + std::filesystem::copy(latestBloomRulesPath, bloomRulesPath); + Logger::warning("Bloom udev rules installed - a reconnect of the debug tool may be required " + "before the new udev rules come into effect."); + } +} + +void TargetController::shutdown() { + if (this->getState() == ThreadState::STOPPED) { + return; + } + + try { + Logger::info("Shutting down TargetController"); + //this->targetControllerEventListener->clearAllCallbacks(); + this->eventManager.deregisterListener(this->eventListener->getId()); + auto target = this->getTarget(); + auto debugTool = this->getDebugTool(); + + if (debugTool != nullptr && debugTool->isInitialised()) { + if (target != nullptr) { + /* + * We call deactivate() without checking if the target is activated. This will address any cases + * where a target is only partially activated (where the call to activate() failed). + */ + Logger::info("Deactivating target"); + target->deactivate(); + } + + Logger::info("Closing debug tool"); + debugTool->close(); + } + } catch (const std::exception& exception) { + Logger::error("Failed to properly shutdown TargetController. Error: " + std::string(exception.what())); + } + + this->setStateAndEmitEvent(ThreadState::STOPPED); +} + +void TargetController::fireTargetEvents() { + auto newTargetState = this->target->getState(); + + if (newTargetState != this->lastTargetState) { + this->lastTargetState = newTargetState; + + if (newTargetState == TargetState::STOPPED) { + Logger::debug("Target state changed - STOPPED"); + this->eventManager.triggerEvent(std::make_shared( + this->target->getProgramCounter(), + TargetBreakCause::UNKNOWN + )); + } + + if (newTargetState == TargetState::RUNNING) { + Logger::debug("Target state changed - RUNNING"); + this->eventManager.triggerEvent(std::make_shared()); + } + } +} + +void TargetController::emitErrorEvent(int correlationId) { + auto errorEvent = std::make_shared(); + errorEvent->correlationId = correlationId; + this->eventManager.triggerEvent(errorEvent); +} + +void TargetController::onShutdownTargetControllerEvent(EventPointer event) { + this->shutdown(); +} + +void TargetController::onExtractTargetDescriptor(EventPointer event) { + if (!this->cachedTargetDescriptor.has_value()) { + this->cachedTargetDescriptor = this->target->getDescriptor(); + } + + auto targetDescriptorExtracted = std::make_shared(); + targetDescriptorExtracted->targetDescriptor = this->cachedTargetDescriptor.value(); + + targetDescriptorExtracted->correlationId = event->id; + this->eventManager.triggerEvent(targetDescriptorExtracted); +} + +void TargetController::onStopTargetExecutionEvent(EventPointer event) { + if (this->target->getState() != TargetState::STOPPED) { + this->target->stop(); + this->lastTargetState = TargetState::STOPPED; + } + + auto executionStoppedEvent = std::make_shared( + this->target->getProgramCounter(), + TargetBreakCause::UNKNOWN + ); + + executionStoppedEvent->correlationId = event->id; + this->eventManager.triggerEvent(executionStoppedEvent); +} + +void TargetController::onStepTargetExecutionEvent(EventPointer event) { + try { + if (this->target->getState() != TargetState::STOPPED) { + // We can't step the target if it's already running. + throw Exception("Target is already running"); + } + + if (event->fromProgramCounter.has_value()) { + this->target->setProgramCounter(event->fromProgramCounter.value()); + } + + this->target->step(); + this->lastTargetState = TargetState::RUNNING; + + auto executionResumedEvent = std::make_shared(); + executionResumedEvent->correlationId = event->id; + this->eventManager.triggerEvent(executionResumedEvent); + + } catch (const Exception& exception) { + Logger::error("Failed to step execution on target - " + exception.getMessage()); + this->emitErrorEvent(event->id); + } +} + +void TargetController::onResumeTargetExecutionEvent(EventPointer event) { + try { + if (this->target->getState() != TargetState::RUNNING) { + if (event->fromProgramCounter.has_value()) { + this->target->setProgramCounter(event->fromProgramCounter.value()); + } + + this->target->run(); + this->lastTargetState = TargetState::RUNNING; + } + + auto executionResumedEvent = std::make_shared(); + executionResumedEvent->correlationId = event->id; + this->eventManager.triggerEvent(executionResumedEvent); + + } catch (const Exception& exception) { + Logger::error("Failed to stop execution on target - " + exception.getMessage()); + this->emitErrorEvent(event->id); + } +} + +void TargetController::onReadRegistersEvent(EventPointer event) { + try { + auto registers = this->target->readRegisters(event->descriptors); + + if (registers.size() > 0) { + auto registersRetrievedEvent = std::make_shared(); + registersRetrievedEvent->correlationId = event->id; + registersRetrievedEvent->registers = registers; + this->eventManager.triggerEvent(registersRetrievedEvent); + } + + } catch (const Exception& exception) { + Logger::error("Failed to read general registers from target - " + exception.getMessage()); + this->emitErrorEvent(event->id); + } +} + +void TargetController::onWriteRegistersEvent(EventPointer event) { + try { + this->target->writeRegisters(event->registers); + + auto registersWrittenEvent = std::make_shared(); + registersWrittenEvent->correlationId = event->id; + this->eventManager.triggerEvent(registersWrittenEvent); + + } catch (const Exception& exception) { + Logger::error("Failed to write registers to target - " + exception.getMessage()); + this->emitErrorEvent(event->id); + } +} + +void TargetController::onReadMemoryEvent(EventPointer event) { + try { + auto memoryReadEvent = std::make_shared(); + memoryReadEvent->correlationId = event->id; + memoryReadEvent->data = this->target->readMemory(event->memoryType, event->startAddress, event->bytes); + + this->eventManager.triggerEvent(memoryReadEvent); + + } catch (const Exception& exception) { + Logger::error("Failed to read memory from target - " + exception.getMessage()); + this->emitErrorEvent(event->id); + } +} + +void TargetController::onWriteMemoryEvent(EventPointer event) { + try { + this->target->writeMemory(event->memoryType, event->startAddress, event->buffer); + + auto memoryWrittenEvent = std::make_shared(); + memoryWrittenEvent->correlationId = event->id; + this->eventManager.triggerEvent(memoryWrittenEvent); + + if (this->target->willMemoryWriteAffectIoPorts( + event->memoryType, + event->startAddress, + static_cast(event->buffer.size()) + )) { + // This memory write has affected the target's IO port values + this->eventManager.triggerEvent(std::make_shared()); + } + + } catch (const Exception& exception) { + Logger::error("Failed to write memory to target - " + exception.getMessage()); + this->emitErrorEvent(event->id); + } +} + +void TargetController::onSetBreakpointEvent(EventPointer event) { + try { + this->target->setBreakpoint(event->breakpoint.address); + auto breakpointSetEvent = std::make_shared(); + breakpointSetEvent->correlationId = event->id; + + this->eventManager.triggerEvent(breakpointSetEvent); + + } catch (const Exception& exception) { + Logger::error("Failed to set breakpoint on target - " + exception.getMessage()); + this->emitErrorEvent(event->id); + } +} + +void TargetController::onRemoveBreakpointEvent(EventPointer event) { + try { + this->target->removeBreakpoint(event->breakpoint.address); + auto breakpointRemovedEvent = std::make_shared(); + breakpointRemovedEvent->correlationId = event->id; + + this->eventManager.triggerEvent(breakpointRemovedEvent); + + } catch (const Exception& exception) { + Logger::error("Failed to remove breakpoint on target - " + exception.getMessage()); + this->emitErrorEvent(event->id); + } +} + +void TargetController::onDebugSessionStartedEvent(EventPointer) { + this->target->reset(); + + if (this->target->getState() != TargetState::STOPPED) { + this->target->stop(); + } +} + +void TargetController::onDebugSessionFinishedEvent(EventPointer) { + if (this->target->getState() != TargetState::RUNNING) { + this->target->run(); + } +} + +void TargetController::onSetProgramCounterEvent(EventPointer event) { + try { + if (this->target->getState() != TargetState::STOPPED) { + throw Exception("Invalid target state - target must be stopped before the program counter can be updated"); + } + + this->target->setProgramCounter(event->address); + auto programCounterSetEvent = std::make_shared(); + programCounterSetEvent->correlationId = event->id; + + this->eventManager.triggerEvent(programCounterSetEvent); + + } catch (const Exception& exception) { + Logger::error("Failed to set program counter on target - " + exception.getMessage()); + this->emitErrorEvent(event->id); + } +} + +// TODO: remove this +void TargetController::onInsightStateChangedEvent(EventPointer event) { + if (event->getState() == ThreadState::READY) { + /* + * Insight has just started up. + * + * Refresh the target state and kick off a target stop/resume execution event. Setting the lastTargetState + * to UNKNOWN will be enough to do this. See TargetController::fireTargetEvents(). + */ + this->lastTargetState = TargetState::UNKNOWN; + } +} + +void TargetController::onRetrieveTargetPinStatesEvent(EventPointer event) { + try { + if (this->target->getState() != TargetState::STOPPED) { + throw Exception("Invalid target state - target must be stopped before pin states can be retrieved"); + } + + auto pinStatesRetrieved = std::make_shared(); + pinStatesRetrieved->correlationId = event->id; + pinStatesRetrieved->variantId = event->variantId; + pinStatesRetrieved->pinSatesByNumber = this->target->getPinStates(event->variantId); + + this->eventManager.triggerEvent(pinStatesRetrieved); + + } catch (const Exception& exception) { + Logger::error("Failed to retrieve target pin states - " + exception.getMessage()); + this->emitErrorEvent(event->id); + } +} + +void TargetController::onSetPinStateEvent(EventPointer event) { + try { + if (this->target->getState() != TargetState::STOPPED) { + throw Exception("Invalid target state - target must be stopped before pin state can be set"); + } + + this->target->setPinState(event->variantId, event->pinDescriptor, event->pinState); + + auto pinStatesUpdateEvent = std::make_shared(); + pinStatesUpdateEvent->correlationId = event->id; + pinStatesUpdateEvent->variantId = event->variantId; + pinStatesUpdateEvent->pinSatesByNumber = { + {event->pinDescriptor.number, event->pinState} + }; + + this->eventManager.triggerEvent(pinStatesUpdateEvent); + + } catch (const Exception& exception) { + Logger::error("Failed to set target pin state for pin " + event->pinDescriptor.name + " - " + + exception.getMessage()); + this->emitErrorEvent(event->id); + } +} diff --git a/src/TargetController/TargetController.hpp b/src/TargetController/TargetController.hpp new file mode 100644 index 00000000..5ae0fb96 --- /dev/null +++ b/src/TargetController/TargetController.hpp @@ -0,0 +1,222 @@ +#pragma once + +#include +#include +#include +#include +#include +#include + +#include "src/Helpers/Thread.hpp" +#include "src/Logger/Logger.hpp" +#include "src/EventManager/EventListener.hpp" +#include "src/DebugToolDrivers/DebugTools.hpp" +#include "src/Targets/Target.hpp" +#include "src/Targets/Targets.hpp" +#include "src/EventManager/EventManager.hpp" +#include "src/EventManager/Events/Events.hpp" + +namespace Bloom +{ + using namespace Targets; + using namespace DebugToolDrivers; + using namespace Targets::Microchip::Avr; + using Avr8Bit::Avr8; + using Events::EventPointer; + + /** + * The TargetController possesses full control of the debugging target and the debug tool. + * +` * The TargetController runs on a dedicated thread. Its sole purpose is to handle communication to &from the + * debug tool and target. + * + * The TargetController should be oblivious to any manufacture/device specific functionality. It should + * only ever interface with the base Target and DebugTool classes. + */ + class TargetController: public Thread + { + private: + ApplicationConfig applicationConfig; + EnvironmentConfig environmentConfig; + + std::unique_ptr target = nullptr; + std::unique_ptr debugTool = nullptr; + + EventManager& eventManager; + EventListenerPointer eventListener = std::make_shared("TargetControllerEventListener"); + + TargetState lastTargetState = TargetState::UNKNOWN; + std::optional cachedTargetDescriptor; + + /** + * Constructs a mapping of supported debug tool names to lambdas. The lambdas should *only* instantiate + * and return an instance to the derived DebugTool class. They should never attempt to establish + * a connection to the device. + * + * Currently, the only debug tool we support is the Atmel-ICE. + * + * @return + */ + static auto getSupportedDebugTools() { + return std::map()>> { + { + "atmel-ice", + []() -> std::unique_ptr { + return std::make_unique(); + } + }, + { + "power-debugger", + []() -> std::unique_ptr { + return std::make_unique(); + } + }, + }; + } + + /** + * Constructs a mapping of supported target names to lambdas. The lambdas should instantiate and return an + * instance to the appropriate Target class. + * + * @return + */ + static auto getSupportedTargets() { + auto mapping = std::map()>> { + { + "avr8", + []() -> std::unique_ptr { + return std::make_unique(); + } + }, + }; + + // Include all targets from AVR8 part description files + auto avr8PdMapping = Avr8Bit::PartDescriptionFile::getPartDescriptionMapping(); + + for (auto mapIt = avr8PdMapping.begin(); mapIt != avr8PdMapping.end(); mapIt++) { + // Each target signature maps to an array of targets, as numerous targets can possess the same signature. + auto targets = mapIt.value().toArray(); + + for (auto targetIt = targets.begin(); targetIt != targets.end(); targetIt++) { + auto targetName = targetIt->toObject().find("targetName").value().toString() + .toLower().toStdString(); + + if (mapping.find(targetName) == mapping.end()) { + mapping.insert({ + targetName, + [targetName]() -> std::unique_ptr { + return std::make_unique(targetName); + } + }); + } + } + } + + return mapping; + } + + void setDebugTool(std::unique_ptr debugTool) { + this->debugTool = std::move(debugTool); + } + + void setTarget(std::unique_ptr target) { + this->target = std::move(target); + } + + Targets::Target* getTarget() { + return this->target.get(); + } + + DebugTool* getDebugTool() { + return this->debugTool.get(); + } + + /** + * Updates the state of the TargetController and emits a state changed event. + * + * @param state + * @param emitEvent + */ + void setStateAndEmitEvent(ThreadState state) { + this->setState(state); + this->eventManager.triggerEvent( + std::make_shared(state) + ); + }; + + /** + * Installs Bloom's udev rules on user's machine. Rules are copied from build/Distribution/Resources/UdevRules + * to /etc/udev/rules.d/. This method will report an error if Bloom isn't running as root (as root privileges + * are required for writing to files in /etc/udev). + */ + void checkUdevRules(); + + /** + * Because the TargetController hogs the thread, this method must be called in a dedicated thread. + */ + void startup(); + + /** + * Exit point - must be called before the TargetController thread is terminated. + * + * Handles deactivating the target among other clean-up related things. + */ + void shutdown(); + + /** + * Should fire any events queued on the target. + */ + void fireTargetEvents(); + + void emitErrorEvent(int correlationId); + public: + TargetController(EventManager& eventManager) : eventManager(eventManager) {}; + + void setApplicationConfig(const ApplicationConfig& applicationConfig) { + this->applicationConfig = applicationConfig; + } + + void setEnvironmentConfig(const EnvironmentConfig& environmentConfig) { + this->environmentConfig = environmentConfig; + } + + /** + * Entry point for the TargetController. + */ + void run(); + + void onExtractTargetDescriptor(EventPointer event); + + /** + * Callback for StopTargetExecution event. + * + * Will attempt to stop the target and emit a TargetExecutionStopped event. + */ + void onStopTargetExecutionEvent(EventPointer event); + + void onStepTargetExecutionEvent(EventPointer event); + + /** + * Callback for ResumeTargetExecution event. + */ + void onResumeTargetExecutionEvent(EventPointer event); + + /** + * Callback for ShutdownTargetController event. + */ + void onShutdownTargetControllerEvent(EventPointer event); + + void onReadRegistersEvent(EventPointer event); + void onWriteRegistersEvent(EventPointer event); + void onReadMemoryEvent(EventPointer event); + void onWriteMemoryEvent(EventPointer event); + void onSetBreakpointEvent(EventPointer event); + void onRemoveBreakpointEvent(EventPointer event); + void onDebugSessionStartedEvent(EventPointer event); + void onDebugSessionFinishedEvent(EventPointer event); + void onSetProgramCounterEvent(EventPointer event); + void onInsightStateChangedEvent(EventPointer event); + void onRetrieveTargetPinStatesEvent(EventPointer event); + void onSetPinStateEvent(EventPointer event); + }; +} diff --git a/src/Targets/Microchip/AVR/AVR8/Avr8.cpp b/src/Targets/Microchip/AVR/AVR8/Avr8.cpp new file mode 100644 index 00000000..99a80dd8 --- /dev/null +++ b/src/Targets/Microchip/AVR/AVR8/Avr8.cpp @@ -0,0 +1,851 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#include "Avr8.hpp" +#include "PadDescriptor.hpp" +#include "src/Logger/Logger.hpp" +#include "src/Exceptions/InvalidConfig.hpp" +#include "src/Targets/TargetRegister.hpp" +#include "src/Targets/Microchip/AVR/AVR8/PartDescription/PartDescriptionFile.hpp" + +// Derived AVR8 targets +#include "XMega/XMega.hpp" +#include "Mega/Mega.hpp" +#include "Tiny/Tiny.hpp" + +using namespace Bloom; +using namespace Targets; +using namespace Targets::Microchip::Avr; +using namespace Avr8Bit; +using namespace Exceptions; +using Avr8Bit::Avr8; + +/** + * Initialises the target from config parameters extracted from user's config file. + * + * @see Application::extractConfig(); for more on config extraction. + * + * @param targetConfig + */ +void Avr8::preActivationConfigure(const TargetConfig& targetConfig) { + Target::preActivationConfigure(targetConfig); + + this->avr8Interface->configure(targetConfig); +} + +void Avr8::postActivationConfigure() { + auto targetSignature = this->getId(); + auto partDescription = PartDescriptionFile( + targetSignature.toHex(), + (!this->name.empty()) ? std::optional(this->name) : std::nullopt + ); + auto pdSignature = partDescription.getTargetSignature(); + + if (targetSignature != pdSignature) { + // This should never happen. If it does, someone has screwed up the part description mapping file. + throw Exception("Failed to activate target - target signature mismatch.\nThe target signature (\"" + + targetSignature.toHex() + "\") does not match the AVR8 part description signature (\"" + + pdSignature.toHex() + "\"). Please review your target configuration in bloom.json"); + } + + this->partDescription = partDescription; + this->id = partDescription.getTargetSignature(); + this->name = partDescription.getTargetName(); + this->family = partDescription.getFamily(); +} + +void Avr8::postPromotionConfigure() { + this->avr8Interface->setTargetParameters(this->getTargetParameters()); + this->loadPadDescriptors(); + this->loadTargetVariants(); +} + +void Avr8::loadPadDescriptors() { + auto& targetParameters = this->getTargetParameters(); + + /* + * Every port address we extract from the part description will be stored in portAddresses, so that + * we can extract the start (min) and end (max) for the target's IO port address + * range (TargetParameters::ioPortAddressRangeStart & TargetParameters::ioPortAddressRangeEnd) + */ + std::vector portAddresses; + + auto& modules = this->partDescription->getModulesMappedByName(); + auto portModule = (modules.contains("port")) ? std::optional(modules.find("port")->second) : std::nullopt; + auto& peripheralModules = this->partDescription->getPeripheralModulesMappedByName(); + + if (peripheralModules.contains("port")) { + auto portPeripheralModule = peripheralModules.find("port")->second; + + for (const auto& [instanceName, instance] : portPeripheralModule.instancesMappedByName) { + if (instanceName.find("port") == 0) { + auto portPeripheralRegisterGroup = (portPeripheralModule.registerGroupsMappedByName.contains(instanceName)) ? + std::optional(portPeripheralModule.registerGroupsMappedByName.find(instanceName)->second) : + std::nullopt; + + for (const auto& signal : instance.instanceSignals) { + if (!signal.index.has_value()) { + continue; + } + + auto padDescriptor = PadDescriptor(); + padDescriptor.name = signal.padName; + padDescriptor.gpioPinNumber = signal.index.value(); + + if (portModule.has_value() && portModule->registerGroupsMappedByName.contains(instanceName)) { + // We have register information for this port + auto registerGroup = portModule->registerGroupsMappedByName.find(instanceName)->second; + + for (const auto& [registerName, portRegister] : registerGroup.registersMappedByName) { + if (registerName.find("port") == 0) { + // This is the data register for the port + padDescriptor.gpioPortSetAddress = portRegister.offset; + padDescriptor.gpioPortClearAddress = portRegister.offset; + + } else if (registerName.find("pin") == 0) { + // This is the input data register for the port + padDescriptor.gpioPortInputAddress = portRegister.offset; + + } else if (registerName.find("ddr") == 0) { + // This is the data direction register for the port + padDescriptor.ddrSetAddress = portRegister.offset; + padDescriptor.ddrClearAddress = portRegister.offset; + } + } + + } else if (portModule.has_value() && portModule->registerGroupsMappedByName.contains("port")) { + // We have generic register information for all ports on the target + auto registerGroup = portModule->registerGroupsMappedByName.find("port")->second; + + for (const auto& [registerName, portRegister] : registerGroup.registersMappedByName) { + if (registerName.find("outset") == 0) { + // Include the port register offset + padDescriptor.gpioPortSetAddress = (portPeripheralRegisterGroup.has_value() && portPeripheralRegisterGroup->offset.has_value()) ? + portPeripheralRegisterGroup->offset.value_or(0) : 0; + + padDescriptor.gpioPortSetAddress = padDescriptor.gpioPortSetAddress.value() + portRegister.offset; + + } else if (registerName.find("outclr") == 0) { + padDescriptor.gpioPortClearAddress = (portPeripheralRegisterGroup.has_value() && portPeripheralRegisterGroup->offset.has_value()) ? + portPeripheralRegisterGroup->offset.value_or(0) : 0; + + padDescriptor.gpioPortClearAddress = padDescriptor.gpioPortClearAddress.value() + portRegister.offset; + + } else if (registerName.find("dirset") == 0) { + padDescriptor.ddrSetAddress = (portPeripheralRegisterGroup.has_value() && portPeripheralRegisterGroup->offset.has_value()) ? + portPeripheralRegisterGroup->offset.value_or(0) : 0; + + padDescriptor.ddrSetAddress = padDescriptor.ddrSetAddress.value() + portRegister.offset; + + } else if (registerName.find("dirclr") == 0) { + padDescriptor.ddrClearAddress = (portPeripheralRegisterGroup.has_value() && portPeripheralRegisterGroup->offset.has_value()) ? + portPeripheralRegisterGroup->offset.value_or(0) : 0; + + padDescriptor.ddrClearAddress = padDescriptor.ddrClearAddress.value() + portRegister.offset; + + } else if (registerName == "in") { + padDescriptor.gpioPortInputAddress = (portPeripheralRegisterGroup.has_value() && portPeripheralRegisterGroup->offset.has_value()) ? + portPeripheralRegisterGroup->offset.value_or(0) : 0; + + padDescriptor.gpioPortInputAddress = padDescriptor.gpioPortInputAddress.value() + portRegister.offset; + } + } + } + + if (padDescriptor.gpioPortSetAddress.has_value()) { + portAddresses.push_back(padDescriptor.gpioPortSetAddress.value()); + } + + if (padDescriptor.gpioPortClearAddress.has_value()) { + portAddresses.push_back(padDescriptor.gpioPortClearAddress.value()); + } + + if (padDescriptor.ddrSetAddress.has_value()) { + portAddresses.push_back(padDescriptor.ddrSetAddress.value()); + } + + if (padDescriptor.ddrClearAddress.has_value()) { + portAddresses.push_back(padDescriptor.ddrClearAddress.value()); + } + + this->padDescriptorsByName.insert(std::pair(padDescriptor.name, padDescriptor)); + } + } + } + } + + if (!portAddresses.empty()) { + targetParameters.ioPortAddressRangeStart = *std::min_element(portAddresses.begin(), portAddresses.end()); + targetParameters.ioPortAddressRangeEnd = *std::max_element(portAddresses.begin(), portAddresses.end()); + } +} + +void Avr8::loadTargetVariants() { + auto variants = this->generateVariantsFromPartDescription(); + + for (auto& targetVariant : variants) { + for (auto& [pinNumber, pinDescriptor] : targetVariant.pinDescriptorsByNumber) { + if (this->padDescriptorsByName.contains(pinDescriptor.padName)) { + auto& pad = this->padDescriptorsByName.at(pinDescriptor.padName); + if (pad.gpioPortSetAddress.has_value() && pad.ddrSetAddress.has_value()) { + pinDescriptor.type = TargetPinType::GPIO; + } + } + } + + this->targetVariantsById.insert(std::pair(targetVariant.id, targetVariant)); + } +} + +TargetParameters& Avr8::getTargetParameters() { + if (!this->targetParameters.has_value()) { + assert(this->partDescription.has_value()); + this->targetParameters = TargetParameters(); + this->targetParameters->family = this->family; + auto& propertyGroups = this->partDescription->getPropertyGroupsMappedByName(); + + auto flashMemorySegment = this->partDescription->getFlashMemorySegment(); + if (flashMemorySegment.has_value()) { + this->targetParameters->flashSize = flashMemorySegment->size; + this->targetParameters->flashStartAddress = flashMemorySegment->startAddress; + + if (flashMemorySegment->pageSize.has_value()) { + this->targetParameters->flashPageSize = flashMemorySegment->pageSize.value(); + } + } + + auto ramMemorySegment = this->partDescription->getRamMemorySegment(); + if (ramMemorySegment.has_value()) { + this->targetParameters->ramSize = ramMemorySegment->size; + this->targetParameters->ramStartAddress = ramMemorySegment->startAddress; + } + + auto registerMemorySegment = this->partDescription->getRegisterMemorySegment(); + if (registerMemorySegment.has_value()) { + this->targetParameters->gpRegisterSize = registerMemorySegment->size; + this->targetParameters->gpRegisterStartAddress = registerMemorySegment->startAddress; + } + + auto eepromMemorySegment = this->partDescription->getEepromMemorySegment(); + if (eepromMemorySegment.has_value()) { + this->targetParameters->eepromSize = eepromMemorySegment->size; + + if (eepromMemorySegment->pageSize.has_value()) { + this->targetParameters->eepromPageSize = eepromMemorySegment->pageSize.value(); + } + } + + auto firstBootSectionMemorySegment = this->partDescription->getFirstBootSectionMemorySegment(); + if (firstBootSectionMemorySegment.has_value()) { + this->targetParameters->bootSectionStartAddress = firstBootSectionMemorySegment->startAddress / 2; + this->targetParameters->bootSectionSize = firstBootSectionMemorySegment->size; + } + + // OCD attributes can be found in property groups + if (propertyGroups.contains("ocd")) { + auto& ocdProperties = propertyGroups.at("ocd").propertiesMappedByName; + + if (ocdProperties.find("ocd_revision") != ocdProperties.end()) { + this->targetParameters->ocdRevision = ocdProperties.find("ocd_revision")->second.value.toUShort(nullptr, 10); + } + + if (ocdProperties.find("ocd_datareg") != ocdProperties.end()) { + this->targetParameters->ocdDataRegister = ocdProperties.find("ocd_datareg")->second.value.toUShort(nullptr, 16); + } + } + + auto statusRegister = this->partDescription->getStatusRegister(); + if (statusRegister.has_value()) { + this->targetParameters->statusRegisterStartAddress = statusRegister->offset; + this->targetParameters->statusRegisterSize = statusRegister->size; + } + + auto stackPointerRegister = this->partDescription->getStackPointerRegister(); + if (stackPointerRegister.has_value()) { + this->targetParameters->stackPointerRegisterStartAddress = stackPointerRegister->offset; + this->targetParameters->stackPointerRegisterSize = stackPointerRegister->size; + + } else { + // Sometimes the SP register is split into two register nodes, one for low, the other for high + auto stackPointerLowRegister = this->partDescription->getStackPointerLowRegister(); + auto stackPointerHighRegister = this->partDescription->getStackPointerHighRegister(); + + if (stackPointerLowRegister.has_value()) { + this->targetParameters->stackPointerRegisterStartAddress = stackPointerLowRegister->offset; + this->targetParameters->stackPointerRegisterSize = stackPointerLowRegister->size; + } + + if (stackPointerHighRegister.has_value()) { + this->targetParameters->stackPointerRegisterSize = (this->targetParameters->stackPointerRegisterSize.has_value()) ? + this->targetParameters->stackPointerRegisterSize.value() + stackPointerHighRegister->size : + stackPointerHighRegister->size; + } + } + + auto spmcsrRegister = this->partDescription->getSpmcsrRegister(); + if (spmcsrRegister.has_value()) { + this->targetParameters->spmcsRegisterStartAddress = spmcsrRegister->offset; + } + + auto osccalRegister = this->partDescription->getOscillatorCalibrationRegister(); + if (osccalRegister.has_value()) { + this->targetParameters->osccalAddress = osccalRegister->offset; + } + + auto eepromAddressRegister = this->partDescription->getEepromAddressRegister(); + if (eepromAddressRegister.has_value()) { + this->targetParameters->eepromAddressRegisterLow = eepromAddressRegister->offset; + this->targetParameters->eepromAddressRegisterHigh = (eepromAddressRegister->size == 2) + ? eepromAddressRegister->offset + 1 : eepromAddressRegister->offset; + } + + auto eepromDataRegister = this->partDescription->getEepromDataRegister(); + if (eepromDataRegister.has_value()) { + this->targetParameters->eepromDataRegisterAddress = eepromDataRegister->offset; + } + + auto eepromControlRegister = this->partDescription->getEepromControlRegister(); + if (eepromControlRegister.has_value()) { + this->targetParameters->eepromControlRegisterAddress = eepromControlRegister->offset; + } + + if (propertyGroups.contains("pdi_interface")) { + auto& pdiInterfaceProperties = propertyGroups.at("pdi_interface").propertiesMappedByName; + + if (pdiInterfaceProperties.contains("app_section_offset")) { + this->targetParameters->appSectionPdiOffset = pdiInterfaceProperties + .at("app_section_offset").value.toInt(nullptr, 16); + } + + if (pdiInterfaceProperties.contains("boot_section_offset")) { + this->targetParameters->bootSectionPdiOffset = pdiInterfaceProperties + .at("boot_section_offset").value.toInt(nullptr, 16); + } + + if (pdiInterfaceProperties.contains("datamem_offset")) { + this->targetParameters->ramPdiOffset = pdiInterfaceProperties + .at("datamem_offset").value.toInt(nullptr, 16); + } + + if (pdiInterfaceProperties.contains("eeprom_offset")) { + this->targetParameters->eepromPdiOffset = pdiInterfaceProperties + .at("eeprom_offset").value.toInt(nullptr, 16); + } + + if (pdiInterfaceProperties.contains("user_signatures_offset")) { + this->targetParameters->userSignaturesPdiOffset = pdiInterfaceProperties + .at("user_signatures_offset").value.toInt(nullptr, 16); + } + + if (pdiInterfaceProperties.contains("prod_signatures_offset")) { + this->targetParameters->productSignaturesPdiOffset = pdiInterfaceProperties + .at("prod_signatures_offset").value.toInt(nullptr, 16); + } + + if (pdiInterfaceProperties.contains("fuse_registers_offset")) { + this->targetParameters->fuseRegistersPdiOffset = pdiInterfaceProperties + .at("fuse_registers_offset").value.toInt(nullptr, 16); + } + + if (pdiInterfaceProperties.contains("lock_registers_offset")) { + this->targetParameters->lockRegistersPdiOffset = pdiInterfaceProperties + .at("lock_registers_offset").value.toInt(nullptr, 16); + } + } + } + + return this->targetParameters.value(); +} + +std::unique_ptr Avr8::promote() { + std::unique_ptr promoted = nullptr; + + if (this->family.has_value()) { + // Promote generic AVR8 target to correct family. + switch (this->family.value()) { + case Family::XMEGA: { + Logger::info("AVR8 target promoted to XMega target"); + promoted = std::make_unique(*this); + break; + } + case Family::MEGA: { + Logger::info("AVR8 target promoted to megaAVR target"); + promoted = std::make_unique(*this); + break; + } + case Family::TINY: { + Logger::info("AVR8 target promoted to tinyAVR target"); + promoted = std::make_unique(*this); + break; + } + default: { + break; + } + } + } + + return promoted; +} + +void Avr8::activate() { + if (this->getActivated()) { + return; + } + + this->avr8Interface->init(); + this->avr8Interface->activate(); + this->activated = true; +} + +void Avr8::deactivate() { + try { + this->avr8Interface->deactivate(); + this->activated = false; + + } catch (const Exception& exception) { + Logger::error("Failed to deactivate AVR8 target - " + exception.getMessage()); + } +} + +TargetSignature Avr8::getId() { + if (!this->id.has_value()) { + this->id = this->avr8Interface->getDeviceId(); + } + + return this->id.value(); +} + +std::vector Avr8::generateVariantsFromPartDescription() { + std::vector output; + auto pdVariants = this->partDescription->getVariants(); + auto pdPinoutsByName = this->partDescription->getPinoutsMappedByName(); + auto& modules = this->partDescription->getModulesMappedByName(); + + for (const auto& pdVariant : pdVariants) { + if (pdVariant.disabled) { + continue; + } + + auto targetVariant = TargetVariant(); + targetVariant.id = static_cast(output.size()); + targetVariant.name = pdVariant.orderCode; + targetVariant.packageName = pdVariant.package; + + if (pdVariant.package.find("QFP") == 0 || pdVariant.package.find("TQFP") == 0) { + targetVariant.package = TargetPackage::QFP; + + } else if (pdVariant.package.find("PDIP") == 0 || pdVariant.package.find("DIP") == 0) { + targetVariant.package = TargetPackage::DIP; + + } else if (pdVariant.package.find("QFN") == 0 || pdVariant.package.find("VQFN") == 0) { + targetVariant.package = TargetPackage::QFN; + + } else if (pdVariant.package.find("SOIC") == 0) { + targetVariant.package = TargetPackage::SOIC; + } + + if (!pdPinoutsByName.contains(pdVariant.pinoutName)) { + // Missing pinouts in the part description file + continue; + } + + auto pdPinout = pdPinoutsByName.find(pdVariant.pinoutName)->second; + for (const auto& pdPin : pdPinout.pins) { + auto targetPin = TargetPinDescriptor(); + targetPin.name = pdPin.pad; + targetPin.padName = pdPin.pad; + targetPin.number = pdPin.position; + + // TODO: REMOVE THIS: + if (pdPin.pad.find("vcc") == 0 || pdPin.pad.find("avcc") == 0 || pdPin.pad.find("aref") == 0) { + targetPin.type = TargetPinType::VCC; + + } else if (pdPin.pad.find("gnd") == 0) { + targetPin.type = TargetPinType::GND; + } + + targetVariant.pinDescriptorsByNumber.insert(std::pair(targetPin.number, targetPin)); + } + + output.push_back(targetVariant); + } + + return output; +} + +TargetDescriptor Avr8Bit::Avr8::getDescriptor() { + auto parameters = this->getTargetParameters(); + + auto descriptor = TargetDescriptor(); + descriptor.id = this->getHumanReadableId(); + descriptor.name = this->getName(); + descriptor.ramSize = parameters.ramSize.value_or(0); + + std::transform( + this->targetVariantsById.begin(), + this->targetVariantsById.end(), + std::back_inserter(descriptor.variants), + [](auto& variantToIdPair) { + return variantToIdPair.second; + } + ); + + return descriptor; +} + +void Avr8::run() { + this->avr8Interface->run(); +} + +void Avr8::stop() { + this->avr8Interface->stop(); +} + +void Avr8::step() { + this->avr8Interface->step(); +} + +void Avr8::reset() { + this->avr8Interface->reset(); +} + +void Avr8::setBreakpoint(std::uint32_t address) { + this->avr8Interface->setBreakpoint(address); +} + +void Avr8::removeBreakpoint(std::uint32_t address) { + this->avr8Interface->clearBreakpoint(address); +} + +void Avr8::clearAllBreakpoints() { + this->avr8Interface->clearAllBreakpoints(); +} + +TargetRegisters Avr8::readGeneralPurposeRegisters(std::set registerIds) { + return this->avr8Interface->readGeneralPurposeRegisters(registerIds); +} + +void Avr8::writeRegisters(const TargetRegisters& registers) { + TargetRegisters gpRegisters; + + for (const auto& targetRegister : registers) { + if (targetRegister.descriptor.type == TargetRegisterType::GENERAL_PURPOSE_REGISTER + && targetRegister.descriptor.id.has_value()) { + gpRegisters.push_back(targetRegister); + + } else if (targetRegister.descriptor.type == TargetRegisterType::PROGRAM_COUNTER) { + Logger::debug("Setting PC register"); + + auto programCounterBytes = targetRegister.value; + + if (programCounterBytes.size() < 4) { + // All PC register values should be at least 4 bytes in size + programCounterBytes.insert(programCounterBytes.begin(), 4 - programCounterBytes.size(), 0x00); + } + + this->setProgramCounter(static_cast( + programCounterBytes[0] << 24 + | programCounterBytes[1] << 16 + | programCounterBytes[2] << 8 + | programCounterBytes[3] + )); + + } else if (targetRegister.descriptor.type == TargetRegisterType::STATUS_REGISTER) { + Logger::error("Setting status register"); + this->avr8Interface->setStatusRegister(targetRegister); + + } else if (targetRegister.descriptor.type == TargetRegisterType::STACK_POINTER) { + Logger::error("Setting stack pointer register"); + this->avr8Interface->setStackPointerRegister(targetRegister); + } + } + + if (!gpRegisters.empty()) { + this->avr8Interface->writeGeneralPurposeRegisters(gpRegisters); + } +} + +TargetRegisters Avr8::readRegisters(const TargetRegisterDescriptors& descriptors) { + TargetRegisters registers; + std::set gpRegisterIds; + + for (const auto& descriptor : descriptors) { + if (descriptor.type == TargetRegisterType::GENERAL_PURPOSE_REGISTER && descriptor.id.has_value()) { + gpRegisterIds.insert(descriptor.id.value()); + + } else if (descriptor.type == TargetRegisterType::PROGRAM_COUNTER) { + registers.push_back(this->getProgramCounterRegister()); + + } else if (descriptor.type == TargetRegisterType::STATUS_REGISTER) { + registers.push_back(this->getStatusRegister()); + + } else if (descriptor.type == TargetRegisterType::STACK_POINTER) { + registers.push_back(this->getStackPointerRegister()); + } + } + + if (!gpRegisterIds.empty()) { + auto gpRegisters = this->readGeneralPurposeRegisters(gpRegisterIds); + registers.insert(registers.end(), gpRegisters.begin(), gpRegisters.end()); + } + + return registers; +} + +TargetMemoryBuffer Avr8::readMemory(TargetMemoryType memoryType, std::uint32_t startAddress, std::uint32_t bytes) { + return this->avr8Interface->readMemory(memoryType, startAddress, bytes); +} + +void Avr8::writeMemory(TargetMemoryType memoryType, std::uint32_t startAddress, const TargetMemoryBuffer& buffer) { + this->avr8Interface->writeMemory(memoryType, startAddress, buffer); +} + +TargetState Avr8::getState() { + return this->avr8Interface->getTargetState(); +} + +std::uint32_t Avr8::getProgramCounter() { + return this->avr8Interface->getProgramCounter(); +} + +TargetRegister Avr8::getProgramCounterRegister() { + auto programCounter = this->getProgramCounter(); + + return TargetRegister(TargetRegisterType::PROGRAM_COUNTER, { + static_cast(programCounter), + static_cast(programCounter >> 8), + static_cast(programCounter >> 16), + static_cast(programCounter >> 24), + }); +} + +TargetRegister Avr8::getStackPointerRegister() { + return this->avr8Interface->getStackPointerRegister(); +} + +TargetRegister Avr8::getStatusRegister() { + return this->avr8Interface->getStatusRegister(); +} + +void Avr8::setProgramCounter(std::uint32_t programCounter) { + this->avr8Interface->setProgramCounter(programCounter); +} + +std::map Avr8::getPinStates(int variantId) { + if (!this->targetVariantsById.contains(variantId)) { + throw Exception("Invalid target variant ID"); + } + + std::map output; + auto& variant = this->targetVariantsById.at(variantId); + + /* + * To prevent the number of memory reads we perform here, we cache the data and map it by start address. + * + * This way, we only perform 3 memory reads for a target variant with 3 ports - one per port (instead of one + * per pin). + * + * We may be able to make this more efficient by combining reads for ports with aligned memory addresses. This will + * be considered when the need for it becomes apparent. + */ + std::map cachedMemoryByStartAddress; + auto readMemoryBitset = [this, &cachedMemoryByStartAddress](std::uint16_t startAddress) { + if (!cachedMemoryByStartAddress.contains(startAddress)) { + cachedMemoryByStartAddress.insert( + std::pair( + startAddress, + this->readMemory(TargetMemoryType::RAM, startAddress, 1) + ) + ); + } + + return std::bitset::digits>( + cachedMemoryByStartAddress.at(startAddress).at(0) + ); + }; + + for (const auto& [pinNumber, pinDescriptor] : variant.pinDescriptorsByNumber) { + if (this->padDescriptorsByName.contains(pinDescriptor.padName)) { + auto& pad = this->padDescriptorsByName.at(pinDescriptor.padName); + + if (!pad.gpioPinNumber.has_value()) { + continue; + } + + auto pinState = TargetPinState(); + + if (pad.ddrSetAddress.has_value()) { + auto dataDirectionRegisterValue = readMemoryBitset(pad.ddrSetAddress.value()); + pinState.ioDirection = dataDirectionRegisterValue.test(pad.gpioPinNumber.value()) ? + TargetPinState::IoDirection::OUTPUT : TargetPinState::IoDirection::INPUT; + + if (pinState.ioDirection == TargetPinState::IoDirection::OUTPUT + && pad.gpioPortSetAddress.has_value() + ) { + auto portRegisterValue = readMemoryBitset(pad.gpioPortSetAddress.value()); + pinState.ioState = portRegisterValue.test(pad.gpioPinNumber.value()) ? + TargetPinState::IoState::HIGH : TargetPinState::IoState::LOW; + + } else if (pinState.ioDirection == TargetPinState::IoDirection::INPUT + && pad.gpioPortInputAddress.has_value() + ) { + auto portInputRegisterValue = readMemoryBitset(pad.gpioPortInputAddress.value()); + auto h = portInputRegisterValue.to_string(); + pinState.ioState = portInputRegisterValue.test(pad.gpioPinNumber.value()) ? + TargetPinState::IoState::HIGH : TargetPinState::IoState::LOW; + } + } + + output.insert(std::pair(pinNumber, pinState)); + } + } + + return output; +} + +void Avr8::setPinState(int variantId, const TargetPinDescriptor& pinDescriptor, const TargetPinState& state) { + if (!this->targetVariantsById.contains(variantId)) { + throw Exception("Invalid target variant ID"); + } + + if (!this->padDescriptorsByName.contains(pinDescriptor.padName)) { + throw Exception("Unknown pad"); + } + + if (!state.ioDirection.has_value()) { + throw Exception("Missing IO direction state"); + } + + auto& variant = this->targetVariantsById.at(variantId); + auto& padDescriptor = this->padDescriptorsByName.at(pinDescriptor.padName); + auto ioState = state.ioState; + + if (state.ioDirection == TargetPinState::IoDirection::INPUT) { + // When setting the direction to INPUT, we must always set the IO pinstate to LOW + ioState = TargetPinState::IoState::LOW; + } + + if (!padDescriptor.ddrSetAddress.has_value() + || !padDescriptor.gpioPortSetAddress.has_value() + || !padDescriptor.gpioPinNumber.has_value() + ) { + throw Exception("Inadequate pad descriptor"); + } + + auto pinNumber = padDescriptor.gpioPinNumber.value(); + auto ddrSetAddress = padDescriptor.ddrSetAddress.value(); + auto ddrSetValue = this->readMemory(TargetMemoryType::RAM, ddrSetAddress, 1); + + if (ddrSetValue.empty()) { + throw Exception("Failed to read DDSR value"); + } + + auto ddrSetBitset = std::bitset::digits>(ddrSetValue.front()); + if (ddrSetBitset.test(pinNumber) != (state.ioDirection == TargetPinState::IoDirection::OUTPUT)) { + // DDR needs updating + ddrSetBitset.set(pinNumber, (state.ioDirection == TargetPinState::IoDirection::OUTPUT)); + + this->writeMemory( + TargetMemoryType::RAM, + ddrSetAddress, + {static_cast(ddrSetBitset.to_ulong())} + ); + } + + if (padDescriptor.ddrClearAddress.has_value() && padDescriptor.ddrClearAddress != ddrSetAddress) { + // We also need to ensure the data direction clear register value is correct + auto ddrClearAddress = padDescriptor.ddrClearAddress.value(); + auto ddrClearValue = this->readMemory(TargetMemoryType::RAM, ddrClearAddress, 1); + + if (ddrClearValue.empty()) { + throw Exception("Failed to read DDCR value"); + } + + auto ddrClearBitset = std::bitset::digits>(ddrClearValue.front()); + if (ddrClearBitset.test(pinNumber) == (state.ioDirection == TargetPinState::IoDirection::INPUT)) { + ddrClearBitset.set(pinNumber, (state.ioDirection == TargetPinState::IoDirection::INPUT)); + + this->writeMemory( + TargetMemoryType::RAM, + ddrClearAddress, + {static_cast(ddrClearBitset.to_ulong())} + ); + } + } + + if (ioState.has_value()) { + auto portSetAddress = padDescriptor.gpioPortSetAddress.value(); + auto portSetRegisterValue = this->readMemory(TargetMemoryType::RAM, portSetAddress, 1); + + if (portSetRegisterValue.empty()) { + throw Exception("Failed to read PORT register value"); + } + + auto portSetBitset = std::bitset::digits>(portSetRegisterValue.front()); + if (portSetBitset.test(pinNumber) != (ioState == TargetPinState::IoState::HIGH)) { + // PORT set register needs updating + portSetBitset.set(pinNumber, (ioState == TargetPinState::IoState::HIGH)); + + this->writeMemory( + TargetMemoryType::RAM, + portSetAddress, + {static_cast(portSetBitset.to_ulong())} + ); + } + + if (padDescriptor.gpioPortClearAddress.has_value() && padDescriptor.gpioPortClearAddress != portSetAddress) { + // We also need to ensure the PORT clear register value is correct + auto portClearAddress = padDescriptor.gpioPortClearAddress.value(); + auto portClearRegisterValue = this->readMemory(TargetMemoryType::RAM, portClearAddress, 1); + + if (portClearRegisterValue.empty()) { + throw Exception("Failed to read PORT (OUTSET) register value"); + } + + auto portClearBitset = std::bitset::digits>(portClearRegisterValue.front()); + if (portClearBitset.test(pinNumber) == (ioState == TargetPinState::IoState::LOW)) { + // PORT clear register needs updating + portClearBitset.set(pinNumber, (ioState == TargetPinState::IoState::LOW)); + + this->writeMemory( + TargetMemoryType::RAM, + portClearAddress, + {static_cast(portClearBitset.to_ulong())} + ); + } + } + } +} + +bool Avr8::willMemoryWriteAffectIoPorts(TargetMemoryType memoryType, std::uint32_t startAddress, std::uint32_t bytes) { + auto& targetParameters = this->getTargetParameters(); + + /* + * We're making an assumption here; that all IO port addresses for all AVR8 targets are aligned. I have no idea + * how well this will hold. + * + * If they're not aligned, this function may report false positives. + */ + if (targetParameters.ioPortAddressRangeStart.has_value() && targetParameters.ioPortAddressRangeEnd.has_value()) { + auto endAddress = startAddress + (bytes - 1); + return ( + startAddress >= targetParameters.ioPortAddressRangeStart + && startAddress <= targetParameters.ioPortAddressRangeEnd + ) || ( + endAddress >= targetParameters.ioPortAddressRangeStart + && endAddress <= targetParameters.ioPortAddressRangeEnd + ) || ( + startAddress <= targetParameters.ioPortAddressRangeStart + && endAddress >= targetParameters.ioPortAddressRangeStart + ); + } + + return false; +} + diff --git a/src/Targets/Microchip/AVR/AVR8/Avr8.hpp b/src/Targets/Microchip/AVR/AVR8/Avr8.hpp new file mode 100644 index 00000000..0ceab0f3 --- /dev/null +++ b/src/Targets/Microchip/AVR/AVR8/Avr8.hpp @@ -0,0 +1,132 @@ +#pragma once + +#include +#include + +#include "src/DebugToolDrivers/TargetInterfaces/Microchip/AVR/AVR8/Avr8Interface.hpp" +#include "src/Targets/Microchip/AVR/Target.hpp" +#include "src/Targets/TargetRegister.hpp" +#include "src/DebugToolDrivers/DebugTool.hpp" +#include "src/ApplicationConfig.hpp" +#include "src/Exceptions/Exception.hpp" + +#include "TargetParameters.hpp" +#include "Family.hpp" +#include "PadDescriptor.hpp" + +// Part Description +#include "PartDescription/PartDescriptionFile.hpp" + +namespace Bloom::Targets::Microchip::Avr::Avr8Bit +{ + using namespace Exceptions; + using namespace PartDescription; + + using PartDescription::PartDescriptionFile; + using DebugToolDrivers::TargetInterfaces::Microchip::Avr::Avr8::Avr8Interface; + using Targets::TargetRegisterMap; + + class Avr8: public Target + { + protected: + Avr8Interface* avr8Interface; + std::string name = ""; + std::optional family; + std::optional partDescription = std::nullopt; + std::optional targetParameters = std::nullopt; + std::map padDescriptorsByName; + std::map targetVariantsById; + + virtual TargetParameters& getTargetParameters(); + + virtual void loadPadDescriptors(); + virtual void loadTargetVariants(); + + public: + explicit Avr8() = default; + Avr8(const std::string& name): name(name) {}; + + [[nodiscard]] std::string getName() const override { + return this->name; + } + + /** + * Checks if DebugTool is compatible with AVR8 targets. + * + * @param debugTool + * @return + */ + bool isDebugToolSupported(DebugTool* debugTool) override { + return debugTool->getAvr8Interface() != nullptr; + } + + void setDebugTool(DebugTool* debugTool) override { + this->avr8Interface = debugTool->getAvr8Interface(); + }; + + void preActivationConfigure(const TargetConfig& targetConfig) override; + void postActivationConfigure() override; + + virtual void postPromotionConfigure() override; + + void activate() override; + + void deactivate() override; + + TargetSignature getId() override; + + void run() override; + + void stop() override; + + void step() override; + + void reset() override; + + void setBreakpoint(std::uint32_t address) override; + void removeBreakpoint(std::uint32_t address) override; + void clearAllBreakpoints() override; + + /** + * AVR8 targets are promotable. See promote() method for more. + * + * @return + */ + bool supportsPromotion() override { + return true; + } + + virtual std::vector generateVariantsFromPartDescription(); + + virtual TargetDescriptor getDescriptor() override; + + virtual std::unique_ptr promote() override; + + virtual TargetRegisters readGeneralPurposeRegisters(std::set registerIds) override; + virtual void writeRegisters(const TargetRegisters& registers) override; + virtual TargetRegisters readRegisters(const TargetRegisterDescriptors& descriptors) override; + virtual TargetMemoryBuffer readMemory(TargetMemoryType memoryType, std::uint32_t startAddress, std::uint32_t bytes) override; + virtual void writeMemory(TargetMemoryType memoryType, std::uint32_t startAddress, const TargetMemoryBuffer& buffer) override; + + virtual TargetState getState() override; + + virtual std::uint32_t getProgramCounter() override; + virtual TargetRegister getProgramCounterRegister() override; + virtual TargetRegister getStackPointerRegister() override; + virtual TargetRegister getStatusRegister() override; + virtual void setProgramCounter(std::uint32_t programCounter) override; + + virtual std::map getPinStates(int variantId) override; + virtual void setPinState( + int variantId, + const TargetPinDescriptor& pinDescriptor, + const TargetPinState& state + ) override; + + virtual bool willMemoryWriteAffectIoPorts( + TargetMemoryType memoryType, + std::uint32_t startAddress, + std::uint32_t bytes + ) override; + }; +} diff --git a/src/Targets/Microchip/AVR/AVR8/Family.hpp b/src/Targets/Microchip/AVR/AVR8/Family.hpp new file mode 100644 index 00000000..048dca95 --- /dev/null +++ b/src/Targets/Microchip/AVR/AVR8/Family.hpp @@ -0,0 +1,11 @@ +#pragma once + +namespace Bloom::Targets::Microchip::Avr::Avr8Bit +{ + enum class Family: int + { + MEGA, + XMEGA, + TINY, + }; +} diff --git a/src/Targets/Microchip/AVR/AVR8/Mega/Mega.cpp b/src/Targets/Microchip/AVR/AVR8/Mega/Mega.cpp new file mode 100644 index 00000000..35124a27 --- /dev/null +++ b/src/Targets/Microchip/AVR/AVR8/Mega/Mega.cpp @@ -0,0 +1,7 @@ +#include +#include + +#include "Mega.hpp" +#include "src/Logger/Logger.hpp" + +using namespace Bloom::Targets::Microchip::Avr::Avr8Bit; diff --git a/src/Targets/Microchip/AVR/AVR8/Mega/Mega.hpp b/src/Targets/Microchip/AVR/AVR8/Mega/Mega.hpp new file mode 100644 index 00000000..403cda48 --- /dev/null +++ b/src/Targets/Microchip/AVR/AVR8/Mega/Mega.hpp @@ -0,0 +1,18 @@ +#pragma once + +#include "src/Targets/Microchip/AVR/AVR8/Avr8.hpp" + +namespace Bloom::Targets::Microchip::Avr::Avr8Bit +{ + class Mega: public Avr8 + { + protected: + + public: + Mega(const Avr8& avr8) : Avr8(avr8) {}; + + virtual bool supportsPromotion() override { + return false; + } + }; +} diff --git a/src/Targets/Microchip/AVR/AVR8/PadDescriptor.hpp b/src/Targets/Microchip/AVR/AVR8/PadDescriptor.hpp new file mode 100644 index 00000000..c67ec297 --- /dev/null +++ b/src/Targets/Microchip/AVR/AVR8/PadDescriptor.hpp @@ -0,0 +1,42 @@ +#pragma once + +#include +#include +#include + +namespace Bloom::Targets::Microchip::Avr::Avr8Bit +{ + /** + * Pin configurations for AVR8 targets may vary across target variants. This is why we must differentiate a pin + * to a pad. A pin is mapped to a pad, but this mapping is variant specific. For example, pin 4 on + * the ATmega328P-PN (DIP variant) is mapped to a GPIO pad (PORTD/PIN2), but on the QFN variant (ATmega328P-MN), + * pin 4 is mapped to a GND pad. + * + * PadDescriptor describes a single pad on an AVR8 target. On target configuration, PadDescriptors are + * generated from the AVR8 part description file. These descriptors are mapped to pad names. + * See Avr8::loadPadDescriptors() for more. + */ + struct PadDescriptor + { + std::string name; + + std::optional gpioPinNumber; + + /** + * AVR8 GPIO pins can be manipulated by writing to an IO register address. The gpioPortAddress member + * holds this address. + */ + std::optional gpioPortSetAddress; + std::optional gpioPortInputAddress; + + std::optional gpioPortClearAddress; + + /** + * The data direction of a pin is configured via a data direction register (DDR), which, like the + * gpioPortSetAddress, is an IO register. + */ + std::optional ddrSetAddress; + + std::optional ddrClearAddress; + }; +} diff --git a/src/Targets/Microchip/AVR/AVR8/PartDescription/AddressSpace.hpp b/src/Targets/Microchip/AVR/AVR8/PartDescription/AddressSpace.hpp new file mode 100644 index 00000000..3173c7fa --- /dev/null +++ b/src/Targets/Microchip/AVR/AVR8/PartDescription/AddressSpace.hpp @@ -0,0 +1,16 @@ +#pragma once + +#include +#include "MemorySegment.hpp" + +namespace Bloom::Targets::Microchip::Avr::Avr8Bit::PartDescription +{ + struct AddressSpace { + std::string id; + std::string name; + std::uint16_t startAddress; + std::uint16_t size; + bool littleEndian = true; + std::map> memorySegmentsByTypeAndName; + }; +} diff --git a/src/Targets/Microchip/AVR/AVR8/PartDescription/MemorySegment.hpp b/src/Targets/Microchip/AVR/AVR8/PartDescription/MemorySegment.hpp new file mode 100644 index 00000000..d7cf8182 --- /dev/null +++ b/src/Targets/Microchip/AVR/AVR8/PartDescription/MemorySegment.hpp @@ -0,0 +1,45 @@ +#pragma once + +#include +#include + +#include "src/Helpers/BiMap.hpp" + +namespace Bloom::Targets::Microchip::Avr::Avr8Bit::PartDescription +{ + enum MemorySegmentType { + REGISTERS, + IO, + EEPROM, + RAM, + FLASH, + SIGNATURES, + FUSES, + LOCKBITS, + OSCCAL, + }; + + struct MemorySegment { + std::string name; + MemorySegmentType type; + std::uint32_t startAddress; + std::uint32_t size; + std::optional pageSize; + + /** + * Mapping of all known memory segment types by their name. Any memory segments belonging to a type + * not defined in here should be ignored. + */ + static const inline BiMap typesMappedByName = { + {"regs", MemorySegmentType::REGISTERS}, + {"io", MemorySegmentType::IO}, + {"eeprom", MemorySegmentType::EEPROM}, + {"ram", MemorySegmentType::RAM}, + {"flash", MemorySegmentType::FLASH}, + {"signatures", MemorySegmentType::SIGNATURES}, + {"fuses", MemorySegmentType::FUSES}, + {"lockbits", MemorySegmentType::LOCKBITS}, + {"osccal", MemorySegmentType::OSCCAL}, + }; + }; +} diff --git a/src/Targets/Microchip/AVR/AVR8/PartDescription/Module.hpp b/src/Targets/Microchip/AVR/AVR8/PartDescription/Module.hpp new file mode 100644 index 00000000..a6b1ac2b --- /dev/null +++ b/src/Targets/Microchip/AVR/AVR8/PartDescription/Module.hpp @@ -0,0 +1,13 @@ +#pragma once + +#include "ModuleInstance.hpp" +#include "RegisterGroup.hpp" + +namespace Bloom::Targets::Microchip::Avr::Avr8Bit::PartDescription +{ + struct Module { + std::string name; + std::map instancesMappedByName; + std::map registerGroupsMappedByName; + }; +} diff --git a/src/Targets/Microchip/AVR/AVR8/PartDescription/ModuleInstance.hpp b/src/Targets/Microchip/AVR/AVR8/PartDescription/ModuleInstance.hpp new file mode 100644 index 00000000..00821f49 --- /dev/null +++ b/src/Targets/Microchip/AVR/AVR8/PartDescription/ModuleInstance.hpp @@ -0,0 +1,16 @@ +#pragma once + +#include +#include + +#include "RegisterGroup.hpp" +#include "Signal.hpp" + +namespace Bloom::Targets::Microchip::Avr::Avr8Bit::PartDescription +{ + struct ModuleInstance { + std::string name; + std::map registerGroupsMappedByName; + std::vector instanceSignals; + }; +} diff --git a/src/Targets/Microchip/AVR/AVR8/PartDescription/PartDescriptionFile.cpp b/src/Targets/Microchip/AVR/AVR8/PartDescription/PartDescriptionFile.cpp new file mode 100644 index 00000000..14870465 --- /dev/null +++ b/src/Targets/Microchip/AVR/AVR8/PartDescription/PartDescriptionFile.cpp @@ -0,0 +1,862 @@ +#include "PartDescriptionFile.hpp" +#include "src/Targets/Microchip/AVR/Exceptions/PartDescriptionParsingFailureException.hpp" +#include "src/Logger/Logger.hpp" +#include "src/Application.hpp" + +using namespace Bloom::Targets::Microchip::Avr::Avr8Bit; +using namespace Bloom::Exceptions; + +// TODO: Move this into a resolvePartDescriptionFile() method. +PartDescriptionFile::PartDescriptionFile(const std::string& targetSignatureHex, std::optional targetName) { + auto mapping = this->getPartDescriptionMapping(); + auto qTargetSignatureHex = QString::fromStdString(targetSignatureHex); + + if (mapping.contains(qTargetSignatureHex)) { + // We have a match for the target signature. + auto descriptionFilesJsonArray = mapping.find(qTargetSignatureHex).value().toArray(); + auto descriptionFiles = std::vector(); + std::copy_if( + descriptionFilesJsonArray.begin(), + descriptionFilesJsonArray.end(), + std::back_inserter(descriptionFiles), + [&targetName] (const QJsonValue& value) { + auto pdTargetName = value.toObject().find("targetName")->toString().toLower().toStdString(); + return !targetName.has_value() || (targetName.has_value() && targetName.value() == pdTargetName); + } + ); + + if (targetName.has_value() && descriptionFiles.empty()) { + throw Exception("Failed to resolve target description file for target \"" + targetName.value() + + "\" - target signature \"" + targetSignatureHex + "\" does not belong to target with name \"" + + targetName.value() + "\". Please review your bloom.json configuration."); + } + + if (descriptionFiles.size() == 1) { + // Attempt to load the XML part description file + auto descriptionFilePath = QString::fromStdString(Application::getApplicationDirPath()) + "/" + + descriptionFiles.front().toObject().find("targetDescriptionFilePath")->toString(); + + Logger::debug("Loading AVR8 part description file: " + descriptionFilePath.toStdString()); + this->init(descriptionFilePath); + + } else if (descriptionFiles.size() > 1) { + /* + * There are numerous part description files mapped to this target signature. There's really not + * much we can do at this point, so we'll just instruct the user to use a more specific target name. + */ + QStringList targetNames; + std::transform( + descriptionFiles.begin(), + descriptionFiles.end(), + std::back_inserter(targetNames), + [](const QJsonValue& descriptionFile) { + return QString("\"" + descriptionFile.toObject().find("targetName")->toString().toLower() + "\""); + } + ); + + throw Exception("Failed to resolve part description file for target \"" + + targetSignatureHex + "\" - ambiguous signature.\nThe signature is mapped to numerous targets: " + + targetNames.join(", ").toStdString() + ".\n\nPlease update the target name in your Bloom " + + "configuration to one of the above." + ); + + } else { + throw Exception("Failed to resolve part description file for target \"" + + targetSignatureHex + "\" - invalid AVR8 target description mapping." + ); + } + + } else { + throw Exception("Failed to resolve part description file for target \"" + + targetSignatureHex + "\" - unknown target signature."); + } +} + +void PartDescriptionFile::init(const QString& xmlFilePath) { + auto file = QFile(xmlFilePath); + if (!file.exists()) { + // This can happen if someone has been messing with the Resources directory. + throw Exception("Failed to load part description file - file not found"); + } + + file.open(QIODevice::ReadOnly); + auto xml = QDomDocument(); + xml.setContent(file.readAll()); + this->init(xml); +} + +void PartDescriptionFile::init(const QDomDocument& xml) { + this->xml = xml; + + auto device = xml.elementsByTagName("devices").item(0) + .toElement().elementsByTagName("device").item(0).toElement(); + + if (!device.isElement()) { + throw PartDescriptionParsingFailureException("Device element not found."); + } + + this->deviceElement = device; +} + +QJsonObject PartDescriptionFile::getPartDescriptionMapping() { + auto mappingFile = QFile( + QString::fromStdString(Application::getResourcesDirPath() + "/TargetPartDescriptions/AVR/Mapping.json") + ); + + if (!mappingFile.exists()) { + throw TargetControllerStartupFailure("Failed to load AVR part description mapping - mapping file not found"); + } + + mappingFile.open(QIODevice::ReadOnly); + return QJsonDocument::fromJson(mappingFile.readAll()).object(); +} + +std::string PartDescriptionFile::getTargetName() const { + return this->deviceElement.attributes().namedItem("name").nodeValue().toStdString(); +} + +TargetSignature PartDescriptionFile::getTargetSignature() const { + auto propertyGroups = this->getPropertyGroupsMappedByName(); + auto signaturePropertyGroupIt = propertyGroups.find("signatures"); + + if (signaturePropertyGroupIt == propertyGroups.end()) { + throw PartDescriptionParsingFailureException("Signature property group not found"); + } + + auto signaturePropertyGroup = signaturePropertyGroupIt->second; + auto& signatureProperties = signaturePropertyGroup.propertiesMappedByName; + std::optional signatureByteZero; + std::optional signatureByteOne; + std::optional signatureByteTwo; + + if (signatureProperties.find("signature0") != signatureProperties.end()) { + signatureByteZero = static_cast( + signatureProperties.find("signature0")->second.value.toShort(nullptr, 16) + ); + } + + if (signatureProperties.find("signature1") != signatureProperties.end()) { + signatureByteOne = static_cast( + signatureProperties.find("signature1")->second.value.toShort(nullptr, 16) + ); + } + + if (signatureProperties.find("signature2") != signatureProperties.end()) { + signatureByteTwo = static_cast( + signatureProperties.find("signature2")->second.value.toShort(nullptr, 16) + ); + } + + if (signatureByteZero.has_value() && signatureByteOne.has_value() && signatureByteTwo.has_value()) { + return TargetSignature(signatureByteZero.value(), signatureByteOne.value(), signatureByteTwo.value()); + } + + throw PartDescriptionParsingFailureException("Failed to extract target signature from AVR8 part description."); +} + +AddressSpace PartDescriptionFile::generateAddressSpaceFromXml(const QDomElement& xmlElement) const { + if ( + !xmlElement.hasAttribute("id") + || !xmlElement.hasAttribute("name") + || !xmlElement.hasAttribute("size") + || !xmlElement.hasAttribute("start") + ) { + throw Exception("Address space element missing id/name/size/start attributes."); + } + + auto addressSpace = AddressSpace(); + addressSpace.name = xmlElement.attribute("name").toStdString(); + addressSpace.id = xmlElement.attribute("id").toStdString(); + + bool conversionStatus; + addressSpace.startAddress = xmlElement.attribute("start").toUShort(&conversionStatus, 16); + + if (!conversionStatus) { + throw Exception("Failed to convert start address hex value to integer."); + } + + addressSpace.size = xmlElement.attribute("size").toUShort(&conversionStatus, 16); + + if (!conversionStatus) { + throw Exception("Failed to convert size hex value to integer."); + } + + if (xmlElement.hasAttribute("endianness")) { + addressSpace.littleEndian = (xmlElement.attribute("endianness").toStdString() == "little"); + } + + // Create memory segment objects and add them to the mapping. + auto segmentNodes = xmlElement.elementsByTagName("memory-segment"); + auto& memorySegments = addressSpace.memorySegmentsByTypeAndName; + for (int segmentIndex = 0; segmentIndex < segmentNodes.count(); segmentIndex++) { + try { + auto segment = this->generateMemorySegmentFromXml(segmentNodes.item(segmentIndex).toElement()); + + if (memorySegments.find(segment.type) == memorySegments.end()) { + memorySegments.insert( + std::pair< + MemorySegmentType, + decltype(addressSpace.memorySegmentsByTypeAndName)::mapped_type + >(segment.type, {})); + } + + memorySegments.find(segment.type)->second.insert(std::pair(segment.name, segment)); + + } catch (const Exception& exception) { + Logger::debug("Failed to extract memory segment from part description element - " + + exception.getMessage()); + } + } + + return addressSpace; +} + +MemorySegment PartDescriptionFile::generateMemorySegmentFromXml(const QDomElement& xmlElement) const { + if ( + !xmlElement.hasAttribute("type") + || !xmlElement.hasAttribute("name") + || !xmlElement.hasAttribute("size") + || !xmlElement.hasAttribute("start") + ) { + throw Exception("Missing type/name/size/start attributes"); + } + + auto segment = MemorySegment(); + auto typeName = xmlElement.attribute("type").toStdString(); + auto type = MemorySegment::typesMappedByName.valueAt(typeName); + + if (!type.has_value()) { + throw Exception("Unknown type: \"" + typeName + "\""); + } + + segment.type = type.value(); + segment.name = xmlElement.attribute("name").toLower().toStdString(); + + bool conversionStatus; + segment.startAddress = xmlElement.attribute("start").toUInt(&conversionStatus, 16); + + if (!conversionStatus) { + // Failed to convert startAddress hex value as string to uint16_t + throw Exception("Invalid start address"); + } + + segment.size = xmlElement.attribute("size").toUInt(&conversionStatus, 16); + + if (!conversionStatus) { + // Failed to convert size hex value as string to uint16_t + throw Exception("Invalid size"); + } + + if (xmlElement.hasAttribute("pagesize")) { + // The page size can be in single byte hexadecimal form ("0x01"), or it can be in plain integer form! + auto pageSize = xmlElement.attribute("pagesize"); + segment.pageSize = pageSize.toUInt(&conversionStatus, pageSize.contains("0x") ? 16 : 10); + + if (!conversionStatus) { + // Failed to convert size hex value as string to uint16_t + throw Exception("Invalid size"); + } + } + + return segment; +} + +RegisterGroup PartDescriptionFile::generateRegisterGroupFromXml(const QDomElement& xmlElement) const { + if (!xmlElement.hasAttribute("name")) { + throw Exception("Missing register group name attribute"); + } + + auto registerGroup = RegisterGroup(); + registerGroup.name = xmlElement.attribute("name").toLower().toStdString(); + + if (registerGroup.name.empty()) { + throw Exception("Empty register group name"); + } + + if (xmlElement.hasAttribute("offset")) { + registerGroup.offset = xmlElement.attribute("offset").toInt(nullptr, 16); + } + + auto& registers = registerGroup.registersMappedByName; + auto registerNodes = xmlElement.elementsByTagName("register"); + for (int registerIndex = 0; registerIndex < registerNodes.count(); registerIndex++) { + try { + auto reg = this->generateRegisterFromXml(registerNodes.item(registerIndex).toElement()); + registers.insert(std::pair(reg.name, reg)); + + } catch (const Exception& exception) { + Logger::debug("Failed to extract register from register group part description element - " + + exception.getMessage()); + } + } + + return registerGroup; +} + +Register PartDescriptionFile::generateRegisterFromXml(const QDomElement& xmlElement) const { + if ( + !xmlElement.hasAttribute("name") + || !xmlElement.hasAttribute("offset") + || !xmlElement.hasAttribute("size") + ) { + throw Exception("Missing register name/offset/size attribute"); + } + + auto reg = Register(); + reg.name = xmlElement.attribute("name").toLower().toStdString(); + + if (reg.name.empty()) { + throw Exception("Empty register name"); + } + + bool conversionStatus; + reg.size = xmlElement.attribute("size").toUShort(nullptr, 10); + reg.offset = xmlElement.attribute("offset").toUShort(&conversionStatus, 16); + + if (!conversionStatus) { + // Failed to convert offset hex value as string to uint16_t + throw Exception("Invalid register offset"); + } + + return reg; +} + +Family PartDescriptionFile::getFamily() const { + static auto familyNameToEnums = this->getFamilyNameToEnumMapping(); + auto familyName = this->deviceElement.attributes().namedItem("family").nodeValue().toLower().toStdString(); + + if (familyName.empty()) { + throw Exception("Could not find target family name in part description file."); + } + + if (familyNameToEnums.find(familyName) == familyNameToEnums.end()) { + throw Exception("Unknown family name in part description file."); + } + + return familyNameToEnums.find(familyName)->second; +} + +const std::map& PartDescriptionFile::getPropertyGroupsMappedByName() const { + if (!this->cachedPropertyGroupMapping.has_value()) { + if (!this->deviceElement.isElement()) { + throw PartDescriptionParsingFailureException("Device element not found."); + } + + std::map output; + auto propertyGroupNodes = this->deviceElement.elementsByTagName("property-groups").item(0).toElement() + .elementsByTagName("property-group"); + + for (int propertyGroupIndex = 0; propertyGroupIndex < propertyGroupNodes.count(); propertyGroupIndex++) { + auto propertyGroupElement = propertyGroupNodes.item(propertyGroupIndex).toElement(); + auto propertyGroupName = propertyGroupElement.attributes().namedItem("name").nodeValue().toLower().toStdString(); + PropertyGroup propertyGroup; + propertyGroup.name = propertyGroupName; + + auto propertyNodes = propertyGroupElement.elementsByTagName("property"); + for (int propertyIndex = 0; propertyIndex < propertyNodes.count(); propertyIndex++) { + auto propertyElement = propertyNodes.item(propertyIndex).toElement(); + auto propertyName = propertyElement.attributes().namedItem("name").nodeValue(); + + Property property; + property.name = propertyName.toStdString(); + property.value = propertyElement.attributes().namedItem("value").nodeValue(); + + propertyGroup.propertiesMappedByName.insert(std::pair(propertyName.toLower().toStdString(), property)); + } + + output.insert(std::pair(propertyGroup.name, propertyGroup)); + } + + this->cachedPropertyGroupMapping.emplace(output); + } + + return this->cachedPropertyGroupMapping.value(); +} + +const std::map& PartDescriptionFile::getModulesMappedByName() const { + if (!this->cachedModuleByNameMapping.has_value()) { + std::map output; + auto moduleNodes = this->xml.elementsByTagName("modules").item(0).toElement() + .elementsByTagName("module"); + + for (int moduleIndex = 0; moduleIndex < moduleNodes.count(); moduleIndex++) { + auto moduleElement = moduleNodes.item(moduleIndex).toElement(); + auto moduleName = moduleElement.attributes().namedItem("name").nodeValue().toLower().toStdString(); + Module module; + module.name = moduleName; + + auto registerGroupNodes = moduleElement.elementsByTagName("register-group"); + for (int registerGroupIndex = 0; registerGroupIndex < registerGroupNodes.count(); registerGroupIndex++) { + auto registerGroup = this->generateRegisterGroupFromXml(registerGroupNodes.item(registerGroupIndex).toElement()); + + module.registerGroupsMappedByName.insert(std::pair(registerGroup.name, registerGroup)); + } + + output.insert(std::pair(module.name, module)); + } + + this->cachedModuleByNameMapping.emplace(output); + } + + return this->cachedModuleByNameMapping.value(); +} + +const std::map& PartDescriptionFile::getPeripheralModulesMappedByName() const { + if (!this->cachedPeripheralModuleByNameMapping.has_value()) { + std::map output; + auto moduleNodes = this->deviceElement.elementsByTagName("peripherals").item(0).toElement() + .elementsByTagName("module"); + + for (int moduleIndex = 0; moduleIndex < moduleNodes.count(); moduleIndex++) { + auto moduleElement = moduleNodes.item(moduleIndex).toElement(); + auto moduleName = moduleElement.attributes().namedItem("name").nodeValue().toLower().toStdString(); + Module module; + module.name = moduleName; + + auto registerGroupNodes = moduleElement.elementsByTagName("register-group"); + for (int registerGroupIndex = 0; registerGroupIndex < registerGroupNodes.count(); registerGroupIndex++) { + auto registerGroup = this->generateRegisterGroupFromXml(registerGroupNodes.item(registerGroupIndex).toElement()); + + module.registerGroupsMappedByName.insert(std::pair(registerGroup.name, registerGroup)); + } + + auto instanceNodes = moduleElement.elementsByTagName("instance"); + for (int instanceIndex = 0; instanceIndex < instanceNodes.count(); instanceIndex++) { + auto instanceXml = instanceNodes.item(instanceIndex).toElement(); + auto instance = ModuleInstance(); + instance.name = instanceXml.attribute("name").toLower().toStdString(); + + auto registerGroupNodes = instanceXml.elementsByTagName("register-group"); + for (int registerGroupIndex = 0; registerGroupIndex < registerGroupNodes.count(); registerGroupIndex++) { + auto registerGroup = this->generateRegisterGroupFromXml(registerGroupNodes.item(registerGroupIndex).toElement()); + + instance.registerGroupsMappedByName.insert(std::pair(registerGroup.name, registerGroup)); + } + + auto signalNodes = instanceXml.elementsByTagName("signals").item(0).toElement() + .elementsByTagName("signal"); + for (int signalIndex = 0; signalIndex < signalNodes.count(); signalIndex++) { + auto signalXml = signalNodes.item(signalIndex).toElement(); + auto signal = Signal(); + + if (!signalXml.hasAttribute("pad")) { + continue; + } + + signal.padName = signalXml.attribute("pad").toLower().toStdString(); + signal.function = signalXml.attribute("function").toStdString(); + signal.group = signalXml.attribute("group").toStdString(); + auto indexAttribute = signalXml.attribute("index"); + bool indexValid = false; + auto indexValue = indexAttribute.toInt(&indexValid, 10); + + if (!indexAttribute.isEmpty() && indexValid) { + signal.index = indexValue; + } + + instance.instanceSignals.emplace_back(signal); + } + + module.instancesMappedByName.insert(std::pair(instance.name, instance)); + } + + output.insert(std::pair(module.name, module)); + } + + this->cachedPeripheralModuleByNameMapping.emplace(output); + } + + return this->cachedPeripheralModuleByNameMapping.value(); +} + +std::map PartDescriptionFile::getAddressSpacesMappedById() const { + std::map output; + + auto addressSpaceNodes = this->deviceElement.elementsByTagName("address-spaces").item(0).toElement() + .elementsByTagName("address-space"); + + for (int addressSpaceIndex = 0; addressSpaceIndex < addressSpaceNodes.count(); addressSpaceIndex++) { + try { + auto addressSpace = this->generateAddressSpaceFromXml(addressSpaceNodes.item(addressSpaceIndex).toElement()); + output.insert(std::pair(addressSpace.id, addressSpace)); + + } catch (const Exception& exception) { + Logger::debug("Failed to extract address space from part description element - " + exception.getMessage()); + } + } + + return output; +} + +std::optional PartDescriptionFile::getFlashMemorySegment() const { + auto addressMapping = this->getAddressSpacesMappedById(); + auto programAddressSpaceIt = addressMapping.find("prog"); + + // Flash memory attributes are typically found in memory segments within the program address space. + if (programAddressSpaceIt != addressMapping.end()) { + auto& programAddressSpace = programAddressSpaceIt->second; + auto& programMemorySegments = programAddressSpace.memorySegmentsByTypeAndName; + + if (programMemorySegments.find(MemorySegmentType::FLASH) != programMemorySegments.end()) { + auto& flashMemorySegments = programMemorySegments.find(MemorySegmentType::FLASH)->second; + + /* + * Some part descriptions describe the flash memory segments in the "APP_SECTION" segment, whereas + * others use the "FLASH" segment. + */ + auto flashSegmentIt = flashMemorySegments.find("app_section") != flashMemorySegments.end() ? + flashMemorySegments.find("app_section") : flashMemorySegments.find("flash"); + + if (flashSegmentIt != flashMemorySegments.end()) { + return flashSegmentIt->second; + } + } + } + + return std::nullopt; +} + +std::optional PartDescriptionFile::getRamMemorySegment() const { + auto addressMapping = this->getAddressSpacesMappedById(); + + // Internal RAM ®ister attributes are usually found in the data address space + auto dataAddressSpaceIt = addressMapping.find("data"); + + if (dataAddressSpaceIt != addressMapping.end()) { + auto& dataAddressSpace = dataAddressSpaceIt->second; + auto& dataMemorySegments = dataAddressSpace.memorySegmentsByTypeAndName; + + if (dataMemorySegments.find(MemorySegmentType::RAM) != dataMemorySegments.end()) { + auto& ramMemorySegments = dataMemorySegments.find(MemorySegmentType::RAM)->second; + auto ramMemorySegmentIt = ramMemorySegments.begin(); + + if (ramMemorySegmentIt != ramMemorySegments.end()) { + return ramMemorySegmentIt->second; + } + } + } + + return std::nullopt; +} + +std::optional PartDescriptionFile::getRegisterMemorySegment() const { + auto addressMapping = this->getAddressSpacesMappedById(); + + // Internal RAM ®ister attributes are usually found in the data address space + auto dataAddressSpaceIt = addressMapping.find("data"); + + if (dataAddressSpaceIt != addressMapping.end()) { + auto& dataAddressSpace = dataAddressSpaceIt->second; + auto& dataMemorySegments = dataAddressSpace.memorySegmentsByTypeAndName; + + if (dataMemorySegments.find(MemorySegmentType::REGISTERS) != dataMemorySegments.end()) { + auto& registerMemorySegments = dataMemorySegments.find(MemorySegmentType::REGISTERS)->second; + auto registerMemorySegmentIt = registerMemorySegments.begin(); + + if (registerMemorySegmentIt != registerMemorySegments.end()) { + return registerMemorySegmentIt->second; + } + } + } + + return std::nullopt; +} + +std::optional PartDescriptionFile::getEepromMemorySegment() const { + auto addressMapping = this->getAddressSpacesMappedById(); + + // EEPROM attributes are usually found in the data address space + auto eepromAddressSpaceIt = addressMapping.find("eeprom"); + + if (eepromAddressSpaceIt != addressMapping.end()) { + auto& eepromAddressSpace = eepromAddressSpaceIt->second; + auto& eepromAddressSpaceSegments = eepromAddressSpace.memorySegmentsByTypeAndName; + + if (eepromAddressSpaceSegments.find(MemorySegmentType::EEPROM) != eepromAddressSpaceSegments.end()) { + auto& eepromMemorySegments = eepromAddressSpaceSegments.find(MemorySegmentType::EEPROM)->second; + auto eepromMemorySegmentIt = eepromMemorySegments.begin(); + + if (eepromMemorySegmentIt != eepromMemorySegments.end()) { + return eepromMemorySegmentIt->second; + } + } + } + + return std::nullopt; +} + +std::optional PartDescriptionFile::getFirstBootSectionMemorySegment() const { + auto addressMapping = this->getAddressSpacesMappedById(); + auto programAddressSpaceIt = addressMapping.find("prog"); + + if (programAddressSpaceIt != addressMapping.end()) { + auto& programAddressSpace = programAddressSpaceIt->second; + auto& programMemorySegments = programAddressSpace.memorySegmentsByTypeAndName; + + if (programMemorySegments.find(MemorySegmentType::FLASH) != programMemorySegments.end()) { + auto& flashMemorySegments = programMemorySegments.find(MemorySegmentType::FLASH)->second; + auto firstBootSectionSegmentIt = flashMemorySegments.find("boot_section_1"); + + if (flashMemorySegments.contains("boot_section_1")) { + return flashMemorySegments.at("boot_section_1"); + + } else if (flashMemorySegments.contains("boot_section")) { + return flashMemorySegments.at("boot_section"); + } + } + } + + return std::nullopt; +} + +std::optional PartDescriptionFile::getCpuRegisterGroup() const { + auto& modulesByName = this->getModulesMappedByName(); + + if (modulesByName.find("cpu") != modulesByName.end()) { + auto cpuModule = modulesByName.find("cpu")->second; + auto cpuRegisterGroupIt = cpuModule.registerGroupsMappedByName.find("cpu"); + + if (cpuRegisterGroupIt != cpuModule.registerGroupsMappedByName.end()) { + return cpuRegisterGroupIt->second; + } + } + + return std::nullopt; +} + +std::optional PartDescriptionFile::getEepromRegisterGroup() const { + auto& modulesByName = this->getModulesMappedByName(); + + if (modulesByName.find("eeprom") != modulesByName.end()) { + auto eepromModule = modulesByName.find("eeprom")->second; + auto eepromRegisterGroupIt = eepromModule.registerGroupsMappedByName.find("eeprom"); + + if (eepromRegisterGroupIt != eepromModule.registerGroupsMappedByName.end()) { + return eepromRegisterGroupIt->second; + } + } + + return std::nullopt; +} + +std::optional PartDescriptionFile::getStatusRegister() const { + auto cpuRegisterGroup = this->getCpuRegisterGroup(); + + if (cpuRegisterGroup.has_value()) { + auto statusRegisterIt = cpuRegisterGroup->registersMappedByName.find("sreg"); + + if (statusRegisterIt != cpuRegisterGroup->registersMappedByName.end()) { + return statusRegisterIt->second; + } + } + + return std::nullopt; +} + +std::optional PartDescriptionFile::getStackPointerRegister() const { + auto cpuRegisterGroup = this->getCpuRegisterGroup(); + + if (cpuRegisterGroup.has_value()) { + auto stackPointerRegisterIt = cpuRegisterGroup->registersMappedByName.find("sp"); + + if (stackPointerRegisterIt != cpuRegisterGroup->registersMappedByName.end()) { + return stackPointerRegisterIt->second; + } + } + + return std::nullopt; +} + +std::optional PartDescriptionFile::getStackPointerHighRegister() const { + auto cpuRegisterGroup = this->getCpuRegisterGroup(); + + if (cpuRegisterGroup.has_value()) { + auto stackPointerHighRegisterIt = cpuRegisterGroup->registersMappedByName.find("sph"); + + if (stackPointerHighRegisterIt != cpuRegisterGroup->registersMappedByName.end()) { + return stackPointerHighRegisterIt->second; + } + } + + return std::nullopt; +} + +std::optional PartDescriptionFile::getStackPointerLowRegister() const { + auto cpuRegisterGroup = this->getCpuRegisterGroup(); + + if (cpuRegisterGroup.has_value()) { + auto stackPointerLowRegisterIt = cpuRegisterGroup->registersMappedByName.find("spl"); + + if (stackPointerLowRegisterIt != cpuRegisterGroup->registersMappedByName.end()) { + return stackPointerLowRegisterIt->second; + } + } + + return std::nullopt; +} + +std::optional PartDescriptionFile::getOscillatorCalibrationRegister() const { + auto cpuRegisterGroup = this->getCpuRegisterGroup(); + + if (cpuRegisterGroup.has_value()) { + auto osccalRegisterIt = cpuRegisterGroup->registersMappedByName.find("osccal"); + + if (osccalRegisterIt != cpuRegisterGroup->registersMappedByName.end()) { + return osccalRegisterIt->second; + } + } + + return std::nullopt; +} + +std::optional PartDescriptionFile::getSpmcsrRegister() const { + auto cpuRegisterGroup = this->getCpuRegisterGroup(); + + if (cpuRegisterGroup.has_value()) { + auto spmcsrRegisterIt = cpuRegisterGroup->registersMappedByName.find("spmcsr"); + + if (spmcsrRegisterIt != cpuRegisterGroup->registersMappedByName.end()) { + return spmcsrRegisterIt->second; + } + } + + return std::nullopt; +} + +std::optional PartDescriptionFile::getEepromAddressRegister() const { + auto eepromRegisterGroup = this->getEepromRegisterGroup(); + + if (eepromRegisterGroup.has_value()) { + auto eepromAddressRegisterIt = eepromRegisterGroup->registersMappedByName.find("eear"); + + if (eepromAddressRegisterIt != eepromRegisterGroup->registersMappedByName.end()) { + return eepromAddressRegisterIt->second; + } + } + + return std::nullopt; +} + +std::optional PartDescriptionFile::getEepromDataRegister() const { + auto eepromRegisterGroup = this->getEepromRegisterGroup(); + + if (eepromRegisterGroup.has_value()) { + auto eepromDataRegisterIt = eepromRegisterGroup->registersMappedByName.find("eedr"); + + if (eepromDataRegisterIt != eepromRegisterGroup->registersMappedByName.end()) { + return eepromDataRegisterIt->second; + } + } + + return std::nullopt; +} + +std::optional PartDescriptionFile::getEepromControlRegister() const { + auto eepromRegisterGroup = this->getEepromRegisterGroup(); + + if (eepromRegisterGroup.has_value()) { + auto eepromControlRegisterIt = eepromRegisterGroup->registersMappedByName.find("eecr"); + + if (eepromControlRegisterIt != eepromRegisterGroup->registersMappedByName.end()) { + return eepromControlRegisterIt->second; + } + } + + return std::nullopt; +} + +std::vector PartDescriptionFile::getVariants() const { + std::vector output; + + auto variantNodes = this->xml.elementsByTagName("variants").item(0).toElement() + .elementsByTagName("variant"); + + for (int variantIndex = 0; variantIndex < variantNodes.count(); variantIndex++) { + try { + auto variantXml = variantNodes.item(variantIndex).toElement(); + + if (!variantXml.hasAttribute("ordercode")) { + throw Exception("Missing ordercode attribute"); + } + + if (!variantXml.hasAttribute("package")) { + throw Exception("Missing package attribute"); + } + + if (!variantXml.hasAttribute("pinout")) { + throw Exception("Missing pinout attribute"); + } + + auto variant = Variant(); + variant.orderCode = variantXml.attribute("ordercode").toStdString(); + variant.pinoutName = variantXml.attribute("pinout").toLower().toStdString(); + variant.package = variantXml.attribute("package").toUpper().toStdString(); + + if (variantXml.hasAttribute("disabled")) { + variant.disabled = (variantXml.attribute("disabled") == "1"); + } + + output.push_back(variant); + + } catch (const Exception& exception) { + Logger::debug("Failed to extract variant from part description element - " + exception.getMessage()); + } + } + + return output; +} + +const std::map& PartDescriptionFile::getPinoutsMappedByName() const { + if (!this->cachedPinoutByNameMapping.has_value()) { + this->cachedPinoutByNameMapping = std::map(); + + auto pinoutNodes = this->xml.elementsByTagName("pinouts").item(0).toElement() + .elementsByTagName("pinout"); + + for (int pinoutIndex = 0; pinoutIndex < pinoutNodes.count(); pinoutIndex++) { + try { + auto pinoutXml = pinoutNodes.item(pinoutIndex).toElement(); + + if (!pinoutXml.hasAttribute("name")) { + throw Exception("Missing name attribute"); + } + + auto pinout = Pinout(); + pinout.name = pinoutXml.attribute("name").toLower().toStdString(); + + auto pinNodes = pinoutXml.elementsByTagName("pin"); + + for (int pinIndex = 0; pinIndex < pinNodes.count(); pinIndex++) { + auto pinXml = pinNodes.item(pinIndex).toElement(); + + if (!pinXml.hasAttribute("position")) { + throw Exception("Missing position attribute on pin element " + std::to_string(pinIndex)); + } + + if (!pinXml.hasAttribute("pad")) { + throw Exception("Missing pad attribute on pin element " + std::to_string(pinIndex)); + } + + auto pin = Pin(); + bool positionConversionSucceeded = true; + pin.position = pinXml.attribute("position").toInt(&positionConversionSucceeded, 10); + pin.pad = pinXml.attribute("pad").toLower().toStdString(); + + if (!positionConversionSucceeded) { + throw Exception("Failed to convert position attribute value to integer on pin element " + + std::to_string(pinIndex)); + } + + pinout.pins.push_back(pin); + } + + this->cachedPinoutByNameMapping->insert(std::pair(pinout.name, pinout)); + + } catch (const Exception& exception) { + Logger::debug("Failed to extract pinout from part description element - " + exception.getMessage()); + } + } + } + + return this->cachedPinoutByNameMapping.value(); +} diff --git a/src/Targets/Microchip/AVR/AVR8/PartDescription/PartDescriptionFile.hpp b/src/Targets/Microchip/AVR/AVR8/PartDescription/PartDescriptionFile.hpp new file mode 100644 index 00000000..d22abceb --- /dev/null +++ b/src/Targets/Microchip/AVR/AVR8/PartDescription/PartDescriptionFile.hpp @@ -0,0 +1,174 @@ +#pragma once + +#include +#include + +#include "AddressSpace.hpp" +#include "MemorySegment.hpp" +#include "PropertyGroup.hpp" +#include "RegisterGroup.hpp" +#include "Module.hpp" +#include "Variant.hpp" +#include "Pinout.hpp" +#include "src/Targets/Microchip/AVR/TargetSignature.hpp" +#include "src/Targets/Microchip/AVR/AVR8/Family.hpp" + +namespace Bloom::Targets::Microchip::Avr::Avr8Bit::PartDescription +{ + using Avr::TargetSignature; + + /** + * An AVR8 part description file is an XML file that describes a particular AVR8 target. + * All supported AVR8 targets come with a part description file. + * + * Part description files are part of the Bloom codebase. + * For AVR8 part description files, see directory "src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8". + * + * During the build process, all part description files are copied to the distribution directory, ready + * to be shipped with the Bloom binary. Alongside these files is a JSON file, containing a mapping of AVR8 target + * signatures to part description file paths. Bloom uses this mapping to find a particular part description + * file, given a target signature. See directory "bin/Distribution/Resources/TargetPartDescriptions". + * The copying of the part description files, and the generation of the JSON mapping, is done by a PHP script: + * "build/scripts/CopyAvrPartFilesAndCreateMapping.php". This script is invoked via a custom command, at build time. + * + * All processing of AVR8 part description files is done in this class. + */ + class PartDescriptionFile + { + private: + QDomDocument xml; + QDomElement deviceElement; + mutable std::optional> cachedPropertyGroupMapping; + mutable std::optional> cachedModuleByNameMapping; + mutable std::optional> cachedPeripheralModuleByNameMapping; + mutable std::optional> cachedPinoutByNameMapping; + + /**` + * AVR8 part description files include the target family name. This method returns a mapping of part + * description family name strings to Family enum values. + * + * TODO: the difference in AVR8 family variations, like "tinyAVR" and "tinyAVR 2" may require attention. + * + * @return + */ + static inline auto getFamilyNameToEnumMapping() { + // All keys should be lower case. + return std::map { + {"megaavr", Family::MEGA}, + {"avr mega", Family::MEGA}, + {"avr xmega", Family::XMEGA}, + {"avr tiny", Family::TINY}, + {"tinyavr", Family::TINY}, + {"tinyavr 2", Family::TINY}, + }; + }; + + void init(const QDomDocument& xml); + void init(const QString& xmlFilePath); + + /** + * Constructs an AddressSpace object from an XML element (in the form of a QDomElement), taken from + * an AVR part description file. + * + * @param xmlElement + * @return + */ + AddressSpace generateAddressSpaceFromXml(const QDomElement& xmlElement) const; + + /** + * Constructs a MemorySegment from an XML element (in the form of a QDomElement) taken from + * an AVR part description file. + * + * @param xmlElement + * @return + */ + MemorySegment generateMemorySegmentFromXml(const QDomElement& xmlElement) const; + RegisterGroup generateRegisterGroupFromXml(const QDomElement& xmlElement) const; + + Register generateRegisterFromXml(const QDomElement& xmlElement) const; + + public: + /** + * Will construct a PartDescription instance from the XML of a part description file, the path to which + * is given via xmlFilePath. + * + * @param xmlFilePath + */ + PartDescriptionFile(const QString& xmlFilePath) { + this->init(xmlFilePath); + } + + /** + * Will construct a PartDescription instance from pre-loaded XML. + * + * @param xml + */ + PartDescriptionFile(const QDomDocument& xml) { + this->init(xml); + } + + /** + * Will resolve the part description file using the part description JSON mapping and a given target signature. + * + * @param targetSignatureHex + * @param targetName + */ + PartDescriptionFile(const std::string& targetSignatureHex, std::optional targetName); + + /** + * Loads the AVR8 target description JSON mapping file. + * + * @return + */ + static QJsonObject getPartDescriptionMapping(); + + std::string getTargetName() const; + + + /** + * Extracts the AVR8 target signature from the part description XML. + * + * @return + */ + TargetSignature getTargetSignature() const; + + /** + * Extracts all address spaces for the AVR8 target, from the part description XML. + * + * Will return a mapping of the extracted address spaces, mapped by id. + * + * @return + */ + std::map getAddressSpacesMappedById() const; + + /** + * Extracts the AVR8 target family from the part description XML. + * + * @return + */ + Family getFamily() const; + + const std::map& getPropertyGroupsMappedByName() const; + const std::map& getModulesMappedByName() const; + const std::map& getPeripheralModulesMappedByName() const; + + std::optional getFlashMemorySegment() const; + std::optional getRamMemorySegment() const; + std::optional getRegisterMemorySegment() const; + std::optional getEepromMemorySegment() const; + std::optional getFirstBootSectionMemorySegment() const; + std::optional getCpuRegisterGroup() const; + std::optional getEepromRegisterGroup() const; + std::optional getStatusRegister() const; + std::optional getStackPointerRegister() const; + std::optional getStackPointerHighRegister() const; + std::optional getStackPointerLowRegister() const; + std::optional getOscillatorCalibrationRegister() const; + std::optional getSpmcsrRegister() const; + std::optional getEepromAddressRegister() const; + std::optional getEepromDataRegister() const; + std::optional getEepromControlRegister() const; + std::vector getVariants() const; + const std::map& getPinoutsMappedByName() const; + }; +} diff --git a/src/Targets/Microchip/AVR/AVR8/PartDescription/Pinout.hpp b/src/Targets/Microchip/AVR/AVR8/PartDescription/Pinout.hpp new file mode 100644 index 00000000..34c259dc --- /dev/null +++ b/src/Targets/Microchip/AVR/AVR8/PartDescription/Pinout.hpp @@ -0,0 +1,17 @@ +#pragma once + +#include +#include + +namespace Bloom::Targets::Microchip::Avr::Avr8Bit::PartDescription +{ + struct Pin { + std::string pad; + int position; + }; + + struct Pinout { + std::string name; + std::vector pins; + }; +} diff --git a/src/Targets/Microchip/AVR/AVR8/PartDescription/PropertyGroup.hpp b/src/Targets/Microchip/AVR/AVR8/PartDescription/PropertyGroup.hpp new file mode 100644 index 00000000..b306ddce --- /dev/null +++ b/src/Targets/Microchip/AVR/AVR8/PartDescription/PropertyGroup.hpp @@ -0,0 +1,19 @@ +#pragma once + +namespace Bloom::Targets::Microchip::Avr::Avr8Bit::PartDescription +{ + struct Property { + std::string name; + + /* + * We use QString here as we're dealing with arbitrary values and QString provides many helpful + * functions to make this easier. + */ + QString value; + }; + + struct PropertyGroup { + std::string name; + std::map propertiesMappedByName; + }; +} diff --git a/src/Targets/Microchip/AVR/AVR8/PartDescription/RegisterGroup.hpp b/src/Targets/Microchip/AVR/AVR8/PartDescription/RegisterGroup.hpp new file mode 100644 index 00000000..ad0d24af --- /dev/null +++ b/src/Targets/Microchip/AVR/AVR8/PartDescription/RegisterGroup.hpp @@ -0,0 +1,20 @@ +#pragma once + +#include +#include +#include + +namespace Bloom::Targets::Microchip::Avr::Avr8Bit::PartDescription +{ + struct Register { + std::string name; + std::uint16_t offset; + std::uint16_t size; + }; + + struct RegisterGroup { + std::string name; + std::optional offset; + std::map registersMappedByName; + }; +} diff --git a/src/Targets/Microchip/AVR/AVR8/PartDescription/Signal.hpp b/src/Targets/Microchip/AVR/AVR8/PartDescription/Signal.hpp new file mode 100644 index 00000000..e0a3120d --- /dev/null +++ b/src/Targets/Microchip/AVR/AVR8/PartDescription/Signal.hpp @@ -0,0 +1,14 @@ +#pragma once + +#include +#include + +namespace Bloom::Targets::Microchip::Avr::Avr8Bit::PartDescription +{ + struct Signal { + std::string padName; + std::string function; + std::optional index; + std::string group; + }; +} diff --git a/src/Targets/Microchip/AVR/AVR8/PartDescription/Variant.hpp b/src/Targets/Microchip/AVR/AVR8/PartDescription/Variant.hpp new file mode 100644 index 00000000..6b6f4fe1 --- /dev/null +++ b/src/Targets/Microchip/AVR/AVR8/PartDescription/Variant.hpp @@ -0,0 +1,13 @@ +#pragma once + +#include + +namespace Bloom::Targets::Microchip::Avr::Avr8Bit::PartDescription +{ + struct Variant { + std::string orderCode; + std::string pinoutName; + std::string package; + bool disabled = false; + }; +} diff --git a/src/Targets/Microchip/AVR/AVR8/TargetParameters.hpp b/src/Targets/Microchip/AVR/AVR8/TargetParameters.hpp new file mode 100644 index 00000000..9a6dcfeb --- /dev/null +++ b/src/Targets/Microchip/AVR/AVR8/TargetParameters.hpp @@ -0,0 +1,54 @@ +#pragma once + +#include +#include + +#include "src/Targets/Microchip/AVR/AVR8/PartDescription/AddressSpace.hpp" +#include "../TargetSignature.hpp" +#include "Family.hpp" + +namespace Bloom::Targets::Microchip::Avr::Avr8Bit +{ + struct TargetParameters + { + std::optional family; + + std::optional bootSectionStartAddress; + std::optional gpRegisterStartAddress; + std::optional gpRegisterSize; + std::optional flashPageSize; + std::optional flashSize; + std::optional flashStartAddress; + std::optional ramStartAddress; + std::optional ramSize; + std::optional eepromSize; + std::optional eepromPageSize; + std::optional eepromAddressRegisterHigh; + std::optional eepromAddressRegisterLow; + std::optional eepromDataRegisterAddress; + std::optional eepromControlRegisterAddress; + std::optional ocdRevision; + std::optional ocdDataRegister; + std::optional statusRegisterStartAddress; + std::optional statusRegisterSize; + std::optional stackPointerRegisterStartAddress; + std::optional stackPointerRegisterSize; + std::optional spmcsRegisterStartAddress; + std::optional osccalAddress; + + // XMega/PDI specific target params + std::optional appSectionPdiOffset; + std::optional bootSectionSize; + std::optional bootSectionPdiOffset; + std::optional eepromPdiOffset; + std::optional ramPdiOffset; + std::optional fuseRegistersPdiOffset; + std::optional lockRegistersPdiOffset; + std::optional userSignaturesPdiOffset; + std::optional productSignaturesPdiOffset; + + + std::optional ioPortAddressRangeStart; + std::optional ioPortAddressRangeEnd; + }; +} diff --git a/src/Targets/Microchip/AVR/AVR8/Tiny/Tiny.hpp b/src/Targets/Microchip/AVR/AVR8/Tiny/Tiny.hpp new file mode 100644 index 00000000..ae98c941 --- /dev/null +++ b/src/Targets/Microchip/AVR/AVR8/Tiny/Tiny.hpp @@ -0,0 +1,16 @@ +#pragma once + +#include "src/Targets/Microchip/AVR/AVR8/Avr8.hpp" + +namespace Bloom::Targets::Microchip::Avr::Avr8Bit +{ + class Tiny: public Avr8 + { + public: + Tiny(const Avr8& avr8) : Avr8(avr8) {}; + + virtual bool supportsPromotion() override { + return false; + } + }; +} diff --git a/src/Targets/Microchip/AVR/AVR8/XMega/XMega.hpp b/src/Targets/Microchip/AVR/AVR8/XMega/XMega.hpp new file mode 100644 index 00000000..ae475dcd --- /dev/null +++ b/src/Targets/Microchip/AVR/AVR8/XMega/XMega.hpp @@ -0,0 +1,16 @@ +#pragma once + +#include "src/Targets/Microchip/AVR/AVR8/Avr8.hpp" + +namespace Bloom::Targets::Microchip::Avr::Avr8Bit +{ + class XMega: public Avr8 + { + public: + XMega(const Avr8& avr8) : Avr8(avr8) {}; + + virtual bool supportsPromotion() override { + return false; + } + }; +} diff --git a/src/Targets/Microchip/AVR/Exceptions/PartDescriptionParsingFailureException.hpp b/src/Targets/Microchip/AVR/Exceptions/PartDescriptionParsingFailureException.hpp new file mode 100644 index 00000000..350ed853 --- /dev/null +++ b/src/Targets/Microchip/AVR/Exceptions/PartDescriptionParsingFailureException.hpp @@ -0,0 +1,20 @@ +#pragma once + +#include "src/Exceptions/TargetControllerStartupFailure.hpp" + +namespace Bloom::Exceptions +{ + class PartDescriptionParsingFailureException: public Exception + { + public: + explicit PartDescriptionParsingFailureException(const std::string& message) + : Exception(message) { + this->message = "Failed to parse AVR part description file - " + message; + } + + explicit PartDescriptionParsingFailureException(const char* message) + : Exception(message) { + this->message = "Failed to parse AVR part description file - " + std::string(message); + } + }; +} diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/AT90CAN128.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/AT90CAN128.xml new file mode 100644 index 00000000..1dbfbf40 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/AT90CAN128.xml @@ -0,0 +1,1654 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/AT90CAN32.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/AT90CAN32.xml new file mode 100644 index 00000000..ec91fef4 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/AT90CAN32.xml @@ -0,0 +1,1630 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/AT90CAN64.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/AT90CAN64.xml new file mode 100644 index 00000000..3eeb4064 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/AT90CAN64.xml @@ -0,0 +1,1632 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/AT90PWM1.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/AT90PWM1.xml new file mode 100644 index 00000000..19da97d6 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/AT90PWM1.xml @@ -0,0 +1,1133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/AT90PWM161.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/AT90PWM161.xml new file mode 100644 index 00000000..55935bc7 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/AT90PWM161.xml @@ -0,0 +1,1062 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/AT90PWM216.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/AT90PWM216.xml new file mode 100644 index 00000000..f16814f7 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/AT90PWM216.xml @@ -0,0 +1,1216 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/AT90PWM2B.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/AT90PWM2B.xml new file mode 100644 index 00000000..51a4ec7e --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/AT90PWM2B.xml @@ -0,0 +1,1245 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/AT90PWM316.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/AT90PWM316.xml new file mode 100644 index 00000000..031d818c --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/AT90PWM316.xml @@ -0,0 +1,1309 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/AT90PWM3B.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/AT90PWM3B.xml new file mode 100644 index 00000000..aef5edb9 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/AT90PWM3B.xml @@ -0,0 +1,1329 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/AT90PWM81.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/AT90PWM81.xml new file mode 100644 index 00000000..0b448c47 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/AT90PWM81.xml @@ -0,0 +1,1086 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/AT90USB1286.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/AT90USB1286.xml new file mode 100644 index 00000000..60c27311 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/AT90USB1286.xml @@ -0,0 +1,1355 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/AT90USB1287.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/AT90USB1287.xml new file mode 100644 index 00000000..7732906c --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/AT90USB1287.xml @@ -0,0 +1,1480 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/AT90USB162.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/AT90USB162.xml new file mode 100644 index 00000000..3d253cc0 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/AT90USB162.xml @@ -0,0 +1,1016 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/AT90USB646.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/AT90USB646.xml new file mode 100644 index 00000000..5b071cf2 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/AT90USB646.xml @@ -0,0 +1,1480 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/AT90USB647.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/AT90USB647.xml new file mode 100644 index 00000000..26462da5 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/AT90USB647.xml @@ -0,0 +1,1480 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/AT90USB82.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/AT90USB82.xml new file mode 100644 index 00000000..ed8ff38a --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/AT90USB82.xml @@ -0,0 +1,1016 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA128.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA128.xml new file mode 100644 index 00000000..f16a27d4 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA128.xml @@ -0,0 +1,1433 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA1280.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA1280.xml new file mode 100644 index 00000000..5f7a2d89 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA1280.xml @@ -0,0 +1,2069 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA1281.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA1281.xml new file mode 100644 index 00000000..1448e380 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA1281.xml @@ -0,0 +1,1811 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA1284.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA1284.xml new file mode 100644 index 00000000..f5620a2f --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA1284.xml @@ -0,0 +1,1494 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA1284P.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA1284P.xml new file mode 100644 index 00000000..36884083 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA1284P.xml @@ -0,0 +1,1550 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA1284RFR2.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA1284RFR2.xml new file mode 100644 index 00000000..db7c432b --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA1284RFR2.xml @@ -0,0 +1,2798 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA128A.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA128A.xml new file mode 100644 index 00000000..30e560de --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA128A.xml @@ -0,0 +1,1409 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA128RFA1.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA128RFA1.xml new file mode 100644 index 00000000..8e5b468d --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA128RFA1.xml @@ -0,0 +1,2485 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA128RFR2.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA128RFR2.xml new file mode 100644 index 00000000..d29b17ec --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA128RFR2.xml @@ -0,0 +1,2768 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA16.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA16.xml new file mode 100644 index 00000000..f04611b3 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA16.xml @@ -0,0 +1,1209 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA1608.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA1608.xml new file mode 100644 index 00000000..0c64e3c1 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA1608.xml @@ -0,0 +1,2532 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA1609.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA1609.xml new file mode 100644 index 00000000..ed4fa69e --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA1609.xml @@ -0,0 +1,2624 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA162.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA162.xml new file mode 100644 index 00000000..8b47bc91 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA162.xml @@ -0,0 +1,1073 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA164A.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA164A.xml new file mode 100644 index 00000000..06337439 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA164A.xml @@ -0,0 +1,1541 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA164P.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA164P.xml new file mode 100644 index 00000000..33cae245 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA164P.xml @@ -0,0 +1,1456 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA164PA.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA164PA.xml new file mode 100644 index 00000000..253d02d7 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA164PA.xml @@ -0,0 +1,1549 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA165A.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA165A.xml new file mode 100644 index 00000000..4cf15c5f --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA165A.xml @@ -0,0 +1,1013 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA165P.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA165P.xml new file mode 100644 index 00000000..21dbfd7a --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA165P.xml @@ -0,0 +1,1013 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA165PA.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA165PA.xml new file mode 100644 index 00000000..a2b1992b --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA165PA.xml @@ -0,0 +1,1015 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA168.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA168.xml new file mode 100644 index 00000000..c94c7d27 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA168.xml @@ -0,0 +1,1284 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA168A.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA168A.xml new file mode 100644 index 00000000..4c195c27 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA168A.xml @@ -0,0 +1,1346 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA168P.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA168P.xml new file mode 100644 index 00000000..44f65bf8 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA168P.xml @@ -0,0 +1,1317 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA168PA.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA168PA.xml new file mode 100644 index 00000000..0eb7b7ba --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA168PA.xml @@ -0,0 +1,1354 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA168PB.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA168PB.xml new file mode 100644 index 00000000..9c752fbb --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA168PB.xml @@ -0,0 +1,1283 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA169A.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA169A.xml new file mode 100644 index 00000000..2465d440 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA169A.xml @@ -0,0 +1,1505 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA169P.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA169P.xml new file mode 100644 index 00000000..37d20376 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA169P.xml @@ -0,0 +1,1507 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA169PA.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA169PA.xml new file mode 100644 index 00000000..5eae3540 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA169PA.xml @@ -0,0 +1,1543 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA16A.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA16A.xml new file mode 100644 index 00000000..0f32b787 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA16A.xml @@ -0,0 +1,1236 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA16HVA.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA16HVA.xml new file mode 100644 index 00000000..ff793083 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA16HVA.xml @@ -0,0 +1,685 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA16HVB.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA16HVB.xml new file mode 100644 index 00000000..f4470f86 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA16HVB.xml @@ -0,0 +1,982 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA16HVBREVB.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA16HVBREVB.xml new file mode 100644 index 00000000..cf672729 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA16HVBREVB.xml @@ -0,0 +1,982 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA16M1.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA16M1.xml new file mode 100644 index 00000000..8a37d9f6 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA16M1.xml @@ -0,0 +1,1537 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA16U2.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA16U2.xml new file mode 100644 index 00000000..1ec52edf --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA16U2.xml @@ -0,0 +1,1184 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA16U4.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA16U4.xml new file mode 100644 index 00000000..ae4d7d69 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA16U4.xml @@ -0,0 +1,1634 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA2560.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA2560.xml new file mode 100644 index 00000000..cda65115 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA2560.xml @@ -0,0 +1,2069 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA2561.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA2561.xml new file mode 100644 index 00000000..fd8ba6e3 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA2561.xml @@ -0,0 +1,1802 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA2564RFR2.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA2564RFR2.xml new file mode 100644 index 00000000..7e970b63 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA2564RFR2.xml @@ -0,0 +1,2777 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA256RFR2.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA256RFR2.xml new file mode 100644 index 00000000..4b885634 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA256RFR2.xml @@ -0,0 +1,2775 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA32.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA32.xml new file mode 100644 index 00000000..23af8442 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA32.xml @@ -0,0 +1,1196 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA3208.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA3208.xml new file mode 100644 index 00000000..f46daf9b --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA3208.xml @@ -0,0 +1,2530 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA3209.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA3209.xml new file mode 100644 index 00000000..f966ed6b --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA3209.xml @@ -0,0 +1,2620 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA324A.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA324A.xml new file mode 100644 index 00000000..51fb4ebe --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA324A.xml @@ -0,0 +1,1539 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA324P.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA324P.xml new file mode 100644 index 00000000..60cfec63 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA324P.xml @@ -0,0 +1,1458 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA324PA.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA324PA.xml new file mode 100644 index 00000000..47b0de38 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA324PA.xml @@ -0,0 +1,1579 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA324PB.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA324PB.xml new file mode 100644 index 00000000..f76b1f88 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA324PB.xml @@ -0,0 +1,1762 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA325.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA325.xml new file mode 100644 index 00000000..fa601aaf --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA325.xml @@ -0,0 +1,1013 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA3250.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA3250.xml new file mode 100644 index 00000000..71b28e92 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA3250.xml @@ -0,0 +1,1040 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA3250A.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA3250A.xml new file mode 100644 index 00000000..9943bc1f --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA3250A.xml @@ -0,0 +1,1040 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA3250P.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA3250P.xml new file mode 100644 index 00000000..f2689c10 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA3250P.xml @@ -0,0 +1,1042 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA3250PA.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA3250PA.xml new file mode 100644 index 00000000..2c864f99 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA3250PA.xml @@ -0,0 +1,1036 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA325A.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA325A.xml new file mode 100644 index 00000000..b59dd5b9 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA325A.xml @@ -0,0 +1,1015 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA325P.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA325P.xml new file mode 100644 index 00000000..0fc16231 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA325P.xml @@ -0,0 +1,1017 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA325PA.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA325PA.xml new file mode 100644 index 00000000..e1a1d3e0 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA325PA.xml @@ -0,0 +1,1013 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA328.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA328.xml new file mode 100644 index 00000000..a6261bd7 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA328.xml @@ -0,0 +1,1349 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA328P.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA328P.xml new file mode 100644 index 00000000..7bf26f87 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA328P.xml @@ -0,0 +1,1315 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA328PB.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA328PB.xml new file mode 100644 index 00000000..befde730 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA328PB.xml @@ -0,0 +1,1554 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA329.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA329.xml new file mode 100644 index 00000000..2e1b1450 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA329.xml @@ -0,0 +1,1413 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA3290.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA3290.xml new file mode 100644 index 00000000..3729ae27 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA3290.xml @@ -0,0 +1,1130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA3290A.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA3290A.xml new file mode 100644 index 00000000..962ed08c --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA3290A.xml @@ -0,0 +1,1130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA3290P.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA3290P.xml new file mode 100644 index 00000000..4bbdaa2d --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA3290P.xml @@ -0,0 +1,1165 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA3290PA.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA3290PA.xml new file mode 100644 index 00000000..44046d6e --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA3290PA.xml @@ -0,0 +1,1157 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA329A.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA329A.xml new file mode 100644 index 00000000..bfdf73b3 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA329A.xml @@ -0,0 +1,1590 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA329P.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA329P.xml new file mode 100644 index 00000000..70a5eaaa --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA329P.xml @@ -0,0 +1,1609 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA329PA.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA329PA.xml new file mode 100644 index 00000000..ee3a0907 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA329PA.xml @@ -0,0 +1,1592 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA32A.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA32A.xml new file mode 100644 index 00000000..f05b4f84 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA32A.xml @@ -0,0 +1,1165 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA32C1.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA32C1.xml new file mode 100644 index 00000000..dbeda0e3 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA32C1.xml @@ -0,0 +1,1421 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA32HVB.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA32HVB.xml new file mode 100644 index 00000000..b440811d --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA32HVB.xml @@ -0,0 +1,982 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA32HVBREVB.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA32HVBREVB.xml new file mode 100644 index 00000000..db123d65 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA32HVBREVB.xml @@ -0,0 +1,909 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA32M1.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA32M1.xml new file mode 100644 index 00000000..54f924d3 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA32M1.xml @@ -0,0 +1,1484 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA32U2.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA32U2.xml new file mode 100644 index 00000000..0fe931cc --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA32U2.xml @@ -0,0 +1,1158 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA32U4.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA32U4.xml new file mode 100644 index 00000000..a46de44b --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA32U4.xml @@ -0,0 +1,1575 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA406.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA406.xml new file mode 100644 index 00000000..2a3128d7 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA406.xml @@ -0,0 +1,841 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA48.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA48.xml new file mode 100644 index 00000000..dfbb5dd2 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA48.xml @@ -0,0 +1,1290 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA4808.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA4808.xml new file mode 100644 index 00000000..8d38b674 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA4808.xml @@ -0,0 +1,2532 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA4809.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA4809.xml new file mode 100644 index 00000000..ae3b2255 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA4809.xml @@ -0,0 +1,2622 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA48A.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA48A.xml new file mode 100644 index 00000000..2152a662 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA48A.xml @@ -0,0 +1,1321 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA48P.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA48P.xml new file mode 100644 index 00000000..3b224238 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA48P.xml @@ -0,0 +1,1289 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA48PA.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA48PA.xml new file mode 100644 index 00000000..8e9f3dfd --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA48PA.xml @@ -0,0 +1,1331 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA48PB.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA48PB.xml new file mode 100644 index 00000000..69706abd --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA48PB.xml @@ -0,0 +1,1251 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA64.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA64.xml new file mode 100644 index 00000000..426d79b5 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA64.xml @@ -0,0 +1,1439 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA640.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA640.xml new file mode 100644 index 00000000..a8d4cd10 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA640.xml @@ -0,0 +1,2062 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA644.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA644.xml new file mode 100644 index 00000000..f2be131f --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA644.xml @@ -0,0 +1,1400 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA644A.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA644A.xml new file mode 100644 index 00000000..587ab8b7 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA644A.xml @@ -0,0 +1,1439 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA644P.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA644P.xml new file mode 100644 index 00000000..5968e1e2 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA644P.xml @@ -0,0 +1,1459 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA644PA.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA644PA.xml new file mode 100644 index 00000000..991f6895 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA644PA.xml @@ -0,0 +1,1445 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA644RFR2.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA644RFR2.xml new file mode 100644 index 00000000..cf2cf609 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA644RFR2.xml @@ -0,0 +1,2761 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA645.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA645.xml new file mode 100644 index 00000000..65de0030 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA645.xml @@ -0,0 +1,1009 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA6450.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA6450.xml new file mode 100644 index 00000000..f00bdb3a --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA6450.xml @@ -0,0 +1,1032 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA6450A.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA6450A.xml new file mode 100644 index 00000000..58e930dc --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA6450A.xml @@ -0,0 +1,1032 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA6450P.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA6450P.xml new file mode 100644 index 00000000..325b6382 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA6450P.xml @@ -0,0 +1,1032 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA645A.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA645A.xml new file mode 100644 index 00000000..9696afab --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA645A.xml @@ -0,0 +1,1010 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA645P.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA645P.xml new file mode 100644 index 00000000..9ebe30f5 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA645P.xml @@ -0,0 +1,1012 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA649.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA649.xml new file mode 100644 index 00000000..5c2cb4ae --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA649.xml @@ -0,0 +1,1406 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA6490.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA6490.xml new file mode 100644 index 00000000..9ee60f7d --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA6490.xml @@ -0,0 +1,1119 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA6490A.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA6490A.xml new file mode 100644 index 00000000..f984d4a2 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA6490A.xml @@ -0,0 +1,1119 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA6490P.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA6490P.xml new file mode 100644 index 00000000..c1cb4ef4 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA6490P.xml @@ -0,0 +1,1119 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA649A.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA649A.xml new file mode 100644 index 00000000..9c191d55 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA649A.xml @@ -0,0 +1,1402 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA649P.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA649P.xml new file mode 100644 index 00000000..30822cb1 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA649P.xml @@ -0,0 +1,1402 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA64A.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA64A.xml new file mode 100644 index 00000000..b7d9b12e --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA64A.xml @@ -0,0 +1,1429 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA64C1.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA64C1.xml new file mode 100644 index 00000000..80658986 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA64C1.xml @@ -0,0 +1,1378 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA64HVE2.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA64HVE2.xml new file mode 100644 index 00000000..95472c7c --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA64HVE2.xml @@ -0,0 +1,932 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA64M1.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA64M1.xml new file mode 100644 index 00000000..2142b4ac --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA64M1.xml @@ -0,0 +1,1484 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA64RFR2.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA64RFR2.xml new file mode 100644 index 00000000..64b5a4cf --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA64RFR2.xml @@ -0,0 +1,2737 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA8.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA8.xml new file mode 100644 index 00000000..3cbfb123 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA8.xml @@ -0,0 +1,1074 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA808.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA808.xml new file mode 100644 index 00000000..a5feb8a6 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA808.xml @@ -0,0 +1,2532 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA809.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA809.xml new file mode 100644 index 00000000..7a98f90f --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA809.xml @@ -0,0 +1,2624 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA8515.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA8515.xml new file mode 100644 index 00000000..88a19192 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA8515.xml @@ -0,0 +1,820 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA8535.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA8535.xml new file mode 100644 index 00000000..128c479b --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA8535.xml @@ -0,0 +1,935 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA88.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA88.xml new file mode 100644 index 00000000..8571d904 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA88.xml @@ -0,0 +1,1284 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA88A.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA88A.xml new file mode 100644 index 00000000..fb7affa6 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA88A.xml @@ -0,0 +1,1346 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA88P.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA88P.xml new file mode 100644 index 00000000..b863e967 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA88P.xml @@ -0,0 +1,1316 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA88PA.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA88PA.xml new file mode 100644 index 00000000..928d65e6 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA88PA.xml @@ -0,0 +1,1356 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA88PB.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA88PB.xml new file mode 100644 index 00000000..5422e895 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA88PB.xml @@ -0,0 +1,1283 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA8A.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA8A.xml new file mode 100644 index 00000000..11fb93e3 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA8A.xml @@ -0,0 +1,1064 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA8HVA.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA8HVA.xml new file mode 100644 index 00000000..6607261c --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA8HVA.xml @@ -0,0 +1,683 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA8U2.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA8U2.xml new file mode 100644 index 00000000..52ce2a2f --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/MEGA/ATMEGA8U2.xml @@ -0,0 +1,1158 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY10.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY10.xml new file mode 100644 index 00000000..d44cca8a --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY10.xml @@ -0,0 +1,417 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY102.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY102.xml new file mode 100644 index 00000000..ab356580 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY102.xml @@ -0,0 +1,560 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY104.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY104.xml new file mode 100644 index 00000000..4dddfa4a --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY104.xml @@ -0,0 +1,580 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY11.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY11.xml new file mode 100644 index 00000000..be92e05f --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY11.xml @@ -0,0 +1,287 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY12.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY12.xml new file mode 100644 index 00000000..69d9172e --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY12.xml @@ -0,0 +1,407 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY13.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY13.xml new file mode 100644 index 00000000..f0296333 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY13.xml @@ -0,0 +1,623 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY13A.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY13A.xml new file mode 100644 index 00000000..54d8e7b1 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY13A.xml @@ -0,0 +1,632 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY15.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY15.xml new file mode 100644 index 00000000..bc781320 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY15.xml @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY1604.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY1604.xml new file mode 100644 index 00000000..c6341914 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY1604.xml @@ -0,0 +1,2088 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY1606.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY1606.xml new file mode 100644 index 00000000..72de694a --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY1606.xml @@ -0,0 +1,2155 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY1607.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY1607.xml new file mode 100644 index 00000000..c73ae443 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY1607.xml @@ -0,0 +1,2152 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY1614.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY1614.xml new file mode 100644 index 00000000..5dc6131c --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY1614.xml @@ -0,0 +1,2548 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY1616.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY1616.xml new file mode 100644 index 00000000..5c003275 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY1616.xml @@ -0,0 +1,2640 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY1617.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY1617.xml new file mode 100644 index 00000000..e69a293c --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY1617.xml @@ -0,0 +1,2650 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY1624.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY1624.xml new file mode 100644 index 00000000..1025da00 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY1624.xml @@ -0,0 +1,2509 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY1626.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY1626.xml new file mode 100644 index 00000000..97da49a1 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY1626.xml @@ -0,0 +1,2619 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY1627.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY1627.xml new file mode 100644 index 00000000..1415f58e --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY1627.xml @@ -0,0 +1,2636 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY1634.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY1634.xml new file mode 100644 index 00000000..2dec501f --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY1634.xml @@ -0,0 +1,884 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY167.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY167.xml new file mode 100644 index 00000000..2daac60e --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY167.xml @@ -0,0 +1,888 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY20.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY20.xml new file mode 100644 index 00000000..2a66b1e6 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY20.xml @@ -0,0 +1,686 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY202.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY202.xml new file mode 100644 index 00000000..049782b1 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY202.xml @@ -0,0 +1,2032 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY204.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY204.xml new file mode 100644 index 00000000..236d9dd8 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY204.xml @@ -0,0 +1,2111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY212.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY212.xml new file mode 100644 index 00000000..cd2dd328 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY212.xml @@ -0,0 +1,2344 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY214.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY214.xml new file mode 100644 index 00000000..56667125 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY214.xml @@ -0,0 +1,2403 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY2313.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY2313.xml new file mode 100644 index 00000000..22830731 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY2313.xml @@ -0,0 +1,707 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY2313A.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY2313A.xml new file mode 100644 index 00000000..ee676a77 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY2313A.xml @@ -0,0 +1,725 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY24.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY24.xml new file mode 100644 index 00000000..32e7c8e6 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY24.xml @@ -0,0 +1,686 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY24A.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY24A.xml new file mode 100644 index 00000000..d1fab6f6 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY24A.xml @@ -0,0 +1,817 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY25.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY25.xml new file mode 100644 index 00000000..a44b6275 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY25.xml @@ -0,0 +1,808 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY26.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY26.xml new file mode 100644 index 00000000..e7aea04d --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY26.xml @@ -0,0 +1,638 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY261.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY261.xml new file mode 100644 index 00000000..f4e7befb --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY261.xml @@ -0,0 +1,936 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY261A.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY261A.xml new file mode 100644 index 00000000..f4904ac9 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY261A.xml @@ -0,0 +1,804 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY3216.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY3216.xml new file mode 100644 index 00000000..907ebb0d --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY3216.xml @@ -0,0 +1,2641 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY3217.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY3217.xml new file mode 100644 index 00000000..78716e07 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY3217.xml @@ -0,0 +1,2675 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY4.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY4.xml new file mode 100644 index 00000000..cd8325a2 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY4.xml @@ -0,0 +1,360 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY40.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY40.xml new file mode 100644 index 00000000..9bf4c87a --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY40.xml @@ -0,0 +1,661 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY402.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY402.xml new file mode 100644 index 00000000..ca10a013 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY402.xml @@ -0,0 +1,2032 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY404.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY404.xml new file mode 100644 index 00000000..f4d44520 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY404.xml @@ -0,0 +1,2111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY406.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY406.xml new file mode 100644 index 00000000..49982fff --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY406.xml @@ -0,0 +1,2155 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY412.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY412.xml new file mode 100644 index 00000000..e27cdee4 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY412.xml @@ -0,0 +1,2344 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY414.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY414.xml new file mode 100644 index 00000000..6203ef0c --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY414.xml @@ -0,0 +1,2403 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY416.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY416.xml new file mode 100644 index 00000000..1e2f2738 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY416.xml @@ -0,0 +1,2476 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY417.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY417.xml new file mode 100644 index 00000000..95f99316 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY417.xml @@ -0,0 +1,2499 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY4313.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY4313.xml new file mode 100644 index 00000000..6ee56568 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY4313.xml @@ -0,0 +1,725 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY43U.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY43U.xml new file mode 100644 index 00000000..ce9b07b8 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY43U.xml @@ -0,0 +1,701 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY44.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY44.xml new file mode 100644 index 00000000..e8a64424 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY44.xml @@ -0,0 +1,686 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY441.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY441.xml new file mode 100644 index 00000000..2dde65cf --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY441.xml @@ -0,0 +1,1126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY44A.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY44A.xml new file mode 100644 index 00000000..572be88a --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY44A.xml @@ -0,0 +1,816 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY45.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY45.xml new file mode 100644 index 00000000..b587327f --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY45.xml @@ -0,0 +1,802 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY461.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY461.xml new file mode 100644 index 00000000..8077ecc9 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY461.xml @@ -0,0 +1,936 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY461A.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY461A.xml new file mode 100644 index 00000000..ec2190d8 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY461A.xml @@ -0,0 +1,804 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY48.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY48.xml new file mode 100644 index 00000000..f64387b0 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY48.xml @@ -0,0 +1,1016 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY5.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY5.xml new file mode 100644 index 00000000..b72f72d1 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY5.xml @@ -0,0 +1,417 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY804.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY804.xml new file mode 100644 index 00000000..dbcd4288 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY804.xml @@ -0,0 +1,2088 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY806.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY806.xml new file mode 100644 index 00000000..c2118db9 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY806.xml @@ -0,0 +1,2155 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY807.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY807.xml new file mode 100644 index 00000000..bbda556e --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY807.xml @@ -0,0 +1,2152 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY814.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY814.xml new file mode 100644 index 00000000..c7452b09 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY814.xml @@ -0,0 +1,2429 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY816.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY816.xml new file mode 100644 index 00000000..4ee6d548 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY816.xml @@ -0,0 +1,2503 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY817.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY817.xml new file mode 100644 index 00000000..023897a0 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY817.xml @@ -0,0 +1,2500 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY828.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY828.xml new file mode 100644 index 00000000..24a257a5 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY828.xml @@ -0,0 +1,913 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY84.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY84.xml new file mode 100644 index 00000000..619946d0 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY84.xml @@ -0,0 +1,686 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY841.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY841.xml new file mode 100644 index 00000000..a112f1dc --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY841.xml @@ -0,0 +1,1126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY84A.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY84A.xml new file mode 100644 index 00000000..26bafbbd --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY84A.xml @@ -0,0 +1,814 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY85.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY85.xml new file mode 100644 index 00000000..1b2cb6ec --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY85.xml @@ -0,0 +1,802 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY861.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY861.xml new file mode 100644 index 00000000..3fef102f --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY861.xml @@ -0,0 +1,940 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY861A.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY861A.xml new file mode 100644 index 00000000..ade8c2ab --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY861A.xml @@ -0,0 +1,808 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY87.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY87.xml new file mode 100644 index 00000000..4cdd71b1 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY87.xml @@ -0,0 +1,888 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY88.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY88.xml new file mode 100644 index 00000000..0095c639 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY88.xml @@ -0,0 +1,1016 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY9.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY9.xml new file mode 100644 index 00000000..b1a04597 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/TINY/ATTINY9.xml @@ -0,0 +1,360 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA128A1.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA128A1.xml new file mode 100644 index 00000000..cc9e354d --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA128A1.xml @@ -0,0 +1,2800 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA128A1U.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA128A1U.xml new file mode 100644 index 00000000..eeb190ac --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA128A1U.xml @@ -0,0 +1,3992 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA128A3.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA128A3.xml new file mode 100644 index 00000000..bb3ffcf1 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA128A3.xml @@ -0,0 +1,2594 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA128A3U.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA128A3U.xml new file mode 100644 index 00000000..1fa25c0d --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA128A3U.xml @@ -0,0 +1,3511 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA128A4U.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA128A4U.xml new file mode 100644 index 00000000..69dbd70b --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA128A4U.xml @@ -0,0 +1,3374 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA128B1.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA128B1.xml new file mode 100644 index 00000000..ce2c4590 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA128B1.xml @@ -0,0 +1,3330 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA128B3.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA128B3.xml new file mode 100644 index 00000000..5261e48a --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA128B3.xml @@ -0,0 +1,3129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA128C3.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA128C3.xml new file mode 100644 index 00000000..456b43af --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA128C3.xml @@ -0,0 +1,2840 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA128D3.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA128D3.xml new file mode 100644 index 00000000..07cf1610 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA128D3.xml @@ -0,0 +1,2614 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA128D4.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA128D4.xml new file mode 100644 index 00000000..957decb1 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA128D4.xml @@ -0,0 +1,2617 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA16A4.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA16A4.xml new file mode 100644 index 00000000..1ed05c87 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA16A4.xml @@ -0,0 +1,2550 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA16A4U.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA16A4U.xml new file mode 100644 index 00000000..d6c9f56e --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA16A4U.xml @@ -0,0 +1,3364 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA16C4.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA16C4.xml new file mode 100644 index 00000000..64b8a884 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA16C4.xml @@ -0,0 +1,2825 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA16D4.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA16D4.xml new file mode 100644 index 00000000..12c8a371 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA16D4.xml @@ -0,0 +1,2567 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA16E5.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA16E5.xml new file mode 100644 index 00000000..443e5f8b --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA16E5.xml @@ -0,0 +1,3365 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA192A3.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA192A3.xml new file mode 100644 index 00000000..d8ccbfeb --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA192A3.xml @@ -0,0 +1,2594 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA192A3U.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA192A3U.xml new file mode 100644 index 00000000..7bc058b0 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA192A3U.xml @@ -0,0 +1,3511 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA192C3.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA192C3.xml new file mode 100644 index 00000000..5bce4fb4 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA192C3.xml @@ -0,0 +1,2533 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA192D3.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA192D3.xml new file mode 100644 index 00000000..86c562a9 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA192D3.xml @@ -0,0 +1,2614 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA256A3.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA256A3.xml new file mode 100644 index 00000000..6fc75e1d --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA256A3.xml @@ -0,0 +1,2595 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA256A3B.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA256A3B.xml new file mode 100644 index 00000000..10b3e6b4 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA256A3B.xml @@ -0,0 +1,2600 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA256A3BU.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA256A3BU.xml new file mode 100644 index 00000000..36f161cb --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA256A3BU.xml @@ -0,0 +1,3448 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA256A3U.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA256A3U.xml new file mode 100644 index 00000000..a57749c1 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA256A3U.xml @@ -0,0 +1,3511 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA256C3.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA256C3.xml new file mode 100644 index 00000000..9719d121 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA256C3.xml @@ -0,0 +1,2840 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA256D3.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA256D3.xml new file mode 100644 index 00000000..da0cd204 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA256D3.xml @@ -0,0 +1,2611 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA32A4.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA32A4.xml new file mode 100644 index 00000000..3bc2fcca --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA32A4.xml @@ -0,0 +1,2551 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA32A4U.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA32A4U.xml new file mode 100644 index 00000000..962787af --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA32A4U.xml @@ -0,0 +1,3365 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA32C3.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA32C3.xml new file mode 100644 index 00000000..a9089030 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA32C3.xml @@ -0,0 +1,2840 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA32C4.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA32C4.xml new file mode 100644 index 00000000..b8e7c2b9 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA32C4.xml @@ -0,0 +1,2827 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA32D3.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA32D3.xml new file mode 100644 index 00000000..014e0cbb --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA32D3.xml @@ -0,0 +1,2613 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA32D4.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA32D4.xml new file mode 100644 index 00000000..1063121e --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA32D4.xml @@ -0,0 +1,2567 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA32E5.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA32E5.xml new file mode 100644 index 00000000..8c9eb37a --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA32E5.xml @@ -0,0 +1,3365 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA384C3.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA384C3.xml new file mode 100644 index 00000000..08663053 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA384C3.xml @@ -0,0 +1,3074 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA384D3.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA384D3.xml new file mode 100644 index 00000000..99f609db --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA384D3.xml @@ -0,0 +1,2673 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA64A1.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA64A1.xml new file mode 100644 index 00000000..295ed089 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA64A1.xml @@ -0,0 +1,2800 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA64A1U.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA64A1U.xml new file mode 100644 index 00000000..7c41c672 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA64A1U.xml @@ -0,0 +1,3992 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA64A3.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA64A3.xml new file mode 100644 index 00000000..0cc33f9f --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA64A3.xml @@ -0,0 +1,2594 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA64A3U.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA64A3U.xml new file mode 100644 index 00000000..16284139 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA64A3U.xml @@ -0,0 +1,3511 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA64A4U.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA64A4U.xml new file mode 100644 index 00000000..e9e84f00 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA64A4U.xml @@ -0,0 +1,3374 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA64B1.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA64B1.xml new file mode 100644 index 00000000..3d0ef105 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA64B1.xml @@ -0,0 +1,3328 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA64B3.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA64B3.xml new file mode 100644 index 00000000..b593fdc0 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA64B3.xml @@ -0,0 +1,3127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA64C3.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA64C3.xml new file mode 100644 index 00000000..b0313605 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA64C3.xml @@ -0,0 +1,2841 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA64D3.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA64D3.xml new file mode 100644 index 00000000..972fa1fc --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA64D3.xml @@ -0,0 +1,2614 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA64D4.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA64D4.xml new file mode 100644 index 00000000..0459c1df --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA64D4.xml @@ -0,0 +1,2607 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA8E5.xml b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA8E5.xml new file mode 100644 index 00000000..ba0bb804 --- /dev/null +++ b/src/Targets/Microchip/AVR/PartDescriptionFiles/AVR8/XMEGA/ATXMEGA8E5.xml @@ -0,0 +1,3365 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/Target.hpp b/src/Targets/Microchip/AVR/Target.hpp new file mode 100644 index 00000000..f5cc745f --- /dev/null +++ b/src/Targets/Microchip/AVR/Target.hpp @@ -0,0 +1,40 @@ +#pragma once + +#include +#include +#include + +#include "../../Target.hpp" +#include "TargetSignature.hpp" + +namespace Bloom::Targets::Microchip::Avr +{ + class Target: public ::Bloom::Targets::Target + { + protected: + std::optional id; + + virtual void setId(unsigned char byteZero, unsigned char byteOne, unsigned char byteTwo) { + if (!this->id.has_value()) { + this->id = TargetSignature(); + } + + this->id->byteZero = byteZero; + this->id->byteOne = byteOne; + this->id->byteTwo = byteTwo; + } + + virtual void setId(const TargetSignature& id) { + this->id = id; + } + + virtual TargetSignature getId() = 0; + + public: + explicit Target() = default; + + std::string getHumanReadableId() override { + return this->getId().toHex(); + } + }; +} \ No newline at end of file diff --git a/src/Targets/Microchip/AVR/TargetSignature.hpp b/src/Targets/Microchip/AVR/TargetSignature.hpp new file mode 100644 index 00000000..355b8d09 --- /dev/null +++ b/src/Targets/Microchip/AVR/TargetSignature.hpp @@ -0,0 +1,60 @@ +#pragma once + +#include +#include +#include + +namespace Bloom::Targets::Microchip::Avr +{ + /** + * All AVR targets carry a three-byte signature that is *usually* unique to the target. + * + * The AVR target signature consists of three bytes: 0xAABBCC + * Byte AA (byteZero) identifies the manufacture of the target (usually 1E for Atmel/Microchip) + * Byte BB (byteOne) sometimes indicates the flash/ram capacity of the target + * Byte CC (byteTwo) identifies the target + * + * Some AVR targets have been found to carry identical signatures. For example, the AT90PWM1, AT90PWM2B + * and the AT90PWM3B all carry a signature of 0x1E9383. Although these devices may not differ in + * significant ways, Bloom does still take duplicate signatures into account, to ensure that the correct + * part description file is used. + * + * This class represents an AVR target signature. + */ + struct TargetSignature + { + unsigned char byteZero = 0x00; + unsigned char byteOne = 0x00; + unsigned char byteTwo = 0x00; + + TargetSignature() = default; + TargetSignature(unsigned char byteZero, unsigned char byteOne, unsigned char byteTwo) : + byteZero(byteZero), byteOne(byteOne), byteTwo(byteTwo) {}; + TargetSignature(std::string hex) { + auto signature = static_cast(std::stoul(hex, nullptr, 16)); + this->byteZero = static_cast(signature >> 16); + this->byteOne = static_cast(signature >> 8); + this->byteTwo = static_cast(signature); + } + + std::string toHex() { + std::stringstream stream; + stream << std::hex << std::setfill('0'); + stream << std::setw(2) << static_cast(this->byteZero); + stream << std::setw(2) << static_cast(this->byteOne); + stream << std::setw(2) << static_cast(this->byteTwo); + + return "0x" + stream.str(); + } + + bool operator == (const TargetSignature& signature) const { + return signature.byteZero == this->byteZero + && signature.byteOne == this->byteOne + && signature.byteTwo == this->byteTwo; + } + + bool operator != (const TargetSignature& signature) const { + return !(*this == signature); + } + }; +} diff --git a/src/Targets/Target.cpp b/src/Targets/Target.cpp new file mode 100644 index 00000000..09b79650 --- /dev/null +++ b/src/Targets/Target.cpp @@ -0,0 +1,2 @@ + +#include "Target.hpp" diff --git a/src/Targets/Target.hpp b/src/Targets/Target.hpp new file mode 100644 index 00000000..aca4ec80 --- /dev/null +++ b/src/Targets/Target.hpp @@ -0,0 +1,118 @@ +#pragma once + +#include +#include +#include +#include +#include +#include +#include + +#include "src/DebugToolDrivers/DebugTool.hpp" +#include "src/ApplicationConfig.hpp" +#include "TargetDescriptor.hpp" +#include "TargetState.hpp" +#include "TargetRegister.hpp" +#include "TargetMemory.hpp" +#include "TargetBreakpoint.hpp" + +namespace Bloom::Targets +{ + using namespace Events; + + class Target + { + protected: + bool activated = false; + TargetConfig config; + + public: + explicit Target() {} + + bool getActivated() { + return this->activated; + } + + /** + * There are three stages of configuration for targets. + * + * @param targetConfig + */ + virtual void preActivationConfigure(const TargetConfig& targetConfig) { + this->config = targetConfig; + }; + + virtual void postActivationConfigure() = 0; + virtual void postPromotionConfigure() = 0; + + /** + * Should put the target in a state where debugging can be performed. This would typically involve + * activating the physical interface, among other things. + */ + virtual void activate() = 0; + + /** + * Should pull the target out of the debugging state and reset it. + */ + virtual void deactivate() = 0; + virtual void setBreakpoint(std::uint32_t address) = 0; + virtual void removeBreakpoint(std::uint32_t address) = 0; + virtual void clearAllBreakpoints() = 0; + + /** + * Should check if debugTool is compatible with the Target. + * + * @param debugTool + * @return + */ + virtual bool isDebugToolSupported(DebugTool* debugTool) = 0; + + virtual void setDebugTool(DebugTool* debugTool) = 0; + + virtual bool supportsPromotion() { + return false; + } + + virtual std::unique_ptr promote() = 0; + + virtual std::string getName() const = 0; + virtual std::string getHumanReadableId() = 0; + virtual TargetDescriptor getDescriptor() = 0; + + virtual void run() = 0; + virtual void stop() = 0; + virtual void step() = 0; + virtual void reset() = 0; + + virtual TargetRegisters readGeneralPurposeRegisters(std::set registerIds) = 0; + virtual void writeRegisters(const TargetRegisters& registers) = 0; + virtual TargetRegisters readRegisters(const TargetRegisterDescriptors& descriptors) = 0; + + virtual TargetMemoryBuffer readMemory(TargetMemoryType memoryType, std::uint32_t startAddress, std::uint32_t bytes) = 0; + virtual void writeMemory(TargetMemoryType memoryType, std::uint32_t startAddress, const TargetMemoryBuffer& buffer) = 0; + + virtual TargetState getState() = 0; + + virtual std::uint32_t getProgramCounter() = 0; + virtual TargetRegister getProgramCounterRegister() = 0; + virtual TargetRegister getStatusRegister() = 0; + virtual TargetRegister getStackPointerRegister() = 0; + virtual void setProgramCounter(std::uint32_t programCounter) = 0; + virtual std::map getPinStates(int variantId) = 0; + virtual void setPinState( + int variantId, + const TargetPinDescriptor& pinDescriptor, + const TargetPinState& state + ) = 0; + + virtual bool willMemoryWriteAffectIoPorts( + TargetMemoryType memoryType, + std::uint32_t startAddress, + std::uint32_t bytes + ) = 0; + + virtual ~Target() = default; + + + }; +} diff --git a/src/Targets/TargetBreakpoint.hpp b/src/Targets/TargetBreakpoint.hpp new file mode 100644 index 00000000..dd74f343 --- /dev/null +++ b/src/Targets/TargetBreakpoint.hpp @@ -0,0 +1,25 @@ +#pragma once + +#include + +namespace Bloom::Targets +{ + enum class TargetBreakCause: int + { + BREAKPOINT, + UNKNOWN, + }; + + using TargetBreakpointAddress = std::uint32_t; + + struct TargetBreakpoint + { + /** + * Byte address of the breakpoint. + */ + TargetBreakpointAddress address; + + bool disabled = false; + }; +} + diff --git a/src/Targets/TargetDescriptor.hpp b/src/Targets/TargetDescriptor.hpp new file mode 100644 index 00000000..d1598238 --- /dev/null +++ b/src/Targets/TargetDescriptor.hpp @@ -0,0 +1,19 @@ +#pragma once + +#include +#include +#include + +#include "TargetVariant.hpp" + +namespace Bloom::Targets +{ + struct TargetDescriptor + { + std::string name; + std::string id; + std::uint32_t ramSize; + std::vector variants; + }; +} + diff --git a/src/Targets/TargetMemory.hpp b/src/Targets/TargetMemory.hpp new file mode 100644 index 00000000..acb00e11 --- /dev/null +++ b/src/Targets/TargetMemory.hpp @@ -0,0 +1,15 @@ +#pragma once + +#include + +namespace Bloom::Targets +{ + using TargetMemoryBuffer = std::vector; + + enum class TargetMemoryType: unsigned int + { + FLASH, + RAM, + EEPROM, + }; +} diff --git a/src/Targets/TargetPinDescriptor.hpp b/src/Targets/TargetPinDescriptor.hpp new file mode 100644 index 00000000..6bf9ecbd --- /dev/null +++ b/src/Targets/TargetPinDescriptor.hpp @@ -0,0 +1,50 @@ +#pragma once + +#include +#include +#include +#include +#include + +namespace Bloom::Targets +{ + enum class TargetPinType: int { + UNKNOWN, + GPIO, + GND, + VCC, + }; + + struct TargetPinDescriptor + { + int number; + bool supportsGpio = false; + std::string name; + std::string padName; + std::vector functions; + + TargetPinType type = TargetPinType::UNKNOWN; + }; + + struct TargetPinState + { + enum class IoState: int { + HIGH, + LOW, + }; + + enum class IoDirection: int { + INPUT, + OUTPUT, + }; + + std::optional ioState; + std::optional ioDirection; + }; + + using TargetPinStateMappingType = std::map; +} + +Q_DECLARE_METATYPE(Bloom::Targets::TargetPinDescriptor) +Q_DECLARE_METATYPE(Bloom::Targets::TargetPinState) +Q_DECLARE_METATYPE(Bloom::Targets::TargetPinStateMappingType) diff --git a/src/Targets/TargetRegister.hpp b/src/Targets/TargetRegister.hpp new file mode 100644 index 00000000..ba72e30b --- /dev/null +++ b/src/Targets/TargetRegister.hpp @@ -0,0 +1,70 @@ +#pragma once + +#include +#include + +namespace Bloom::Targets +{ + enum class TargetRegisterType: int + { + GENERAL_PURPOSE_REGISTER, + PROGRAM_COUNTER, + STACK_POINTER, + STATUS_REGISTER, + }; + + struct TargetRegisterDescriptor + { + using IdType = size_t; + std::optional id; + TargetRegisterType type = TargetRegisterType::GENERAL_PURPOSE_REGISTER; + + TargetRegisterDescriptor() {}; + TargetRegisterDescriptor(TargetRegisterType type): type(type) {}; + TargetRegisterDescriptor(IdType id, TargetRegisterType type): id(id), type(type) {}; + + bool operator==(const TargetRegisterDescriptor& other) const { + return this->id == other.id && this->type == other.type; + } + }; + + struct TargetRegister + { + using IdType = size_t; + using ValueType = std::vector; + std::optional id; + ValueType value; + TargetRegisterDescriptor descriptor; + + TargetRegister(const ValueType& value): value(value) {}; + + TargetRegister(TargetRegisterDescriptor descriptor, const ValueType& value): value(value), + descriptor(descriptor) {}; + + TargetRegister(IdType id, const ValueType& value): id(id), value(value) { + this->descriptor.id = id; + }; + + IdType size() const { + return this->value.size(); + } + }; + + using TargetRegisterMap = std::map; + using TargetRegisters = std::vector; + using TargetRegisterDescriptors = std::vector; +} + +namespace std { + + using Bloom::Targets::TargetRegisterDescriptor; + + template<> + class hash { + public: + size_t operator()(const TargetRegisterDescriptor& descriptor) const { + return descriptor.id.value_or(0) + static_cast(descriptor.type); + } + }; + +} diff --git a/src/Targets/TargetState.hpp b/src/Targets/TargetState.hpp new file mode 100644 index 00000000..d1294faa --- /dev/null +++ b/src/Targets/TargetState.hpp @@ -0,0 +1,16 @@ +#pragma once + +#include + +namespace Bloom::Targets +{ + enum class TargetState: int + { + UNKNOWN, + STOPPED, + RUNNING, + }; +} + +Q_DECLARE_METATYPE(Bloom::Targets::TargetState) + diff --git a/src/Targets/TargetVariant.hpp b/src/Targets/TargetVariant.hpp new file mode 100644 index 00000000..9e4aa9e8 --- /dev/null +++ b/src/Targets/TargetVariant.hpp @@ -0,0 +1,46 @@ +#pragma once + +#include +#include +#include + +#include "TargetPinDescriptor.hpp" + +namespace Bloom::Targets +{ + enum class TargetPackage: int { + UNKNOWN, + + /** + * Quad flat package (QFP) + */ + QFP, + + /** + * Dual inline package (DIP) + */ + DIP, + + /** + * Small outline integrated circuit (SOIC) package. + * + * Because of the similarities between SOIC and DIP, Insight treats SOIC packages as DIP packages. That is, + * it uses the same package widget. + */ + SOIC, + + /** + * Quad flat no-lead (QFN) package + */ + QFN, + }; + + struct TargetVariant + { + int id; + std::string name; + std::string packageName; + TargetPackage package = TargetPackage::UNKNOWN; + std::map pinDescriptorsByNumber; + }; +} diff --git a/src/Targets/Targets.hpp b/src/Targets/Targets.hpp new file mode 100644 index 00000000..d51fa39e --- /dev/null +++ b/src/Targets/Targets.hpp @@ -0,0 +1,5 @@ +#pragma once + +#include +#include +#include diff --git a/src/main.cpp b/src/main.cpp new file mode 100644 index 00000000..0bbd58ab --- /dev/null +++ b/src/main.cpp @@ -0,0 +1,17 @@ +#include +#include + +#include "Application.hpp" + +using namespace Bloom; + +int main(int argc, char* argv[]) +{ + auto arguments = std::vector(); + if (argc > 1) { + arguments.assign(argv + 1, argv + argc); + } + + auto application = Application(); + return application.run(arguments); +} diff --git a/src/resources.qrc b/src/resources.qrc new file mode 100644 index 00000000..e8f7c7f4 --- /dev/null +++ b/src/resources.qrc @@ -0,0 +1,16 @@ + + + + ../resources/help.txt + ../resources/bloom.template.json + ./Insight/UserInterfaces/InsightWindow/UiFiles/InsightWindow.ui + ./Insight/UserInterfaces/InsightWindow/UiFiles/AboutWindow.ui + ./Insight/UserInterfaces/InsightWindow/Stylesheets/InsightWindow.qss + ./Insight/UserInterfaces/InsightWindow/Stylesheets/AboutWindow.qss + ./Insight/UserInterfaces/InsightWindow/TargetWidgets/DIP/Stylesheets/DualInlinePackage.qss + ./Insight/UserInterfaces/InsightWindow/Images/BloomIcon.svg + ./Insight/UserInterfaces/InsightWindow/Images/RAM.svg + ./Insight/UserInterfaces/InsightWindow/Images/refresh.svg + ./Insight/UserInterfaces/InsightWindow/Images/refresh-disabled.svg + + \ No newline at end of file