Repostiory containing DAPLink source code with Reset Pin workaround for HANI_IOT board.

Upstream: https://github.com/ARMmbed/DAPLink

Revision:
0:01f31e923fe2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/source/target/target_family.h	Tue Apr 07 12:55:42 2020 +0200
@@ -0,0 +1,151 @@
+/**
+ * @file    target_family.h
+ * @brief
+ *
+ * DAPLink Interface Firmware
+ * Copyright (c) 2018-2019, ARM Limited, All Rights Reserved
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef TARGET_FAMILY_H
+#define TARGET_FAMILY_H
+
+#include <stdint.h>
+#include <string.h>
+
+//! @brief Creates a family ID from a vendor ID and family index within that vendor.
+#define VENDOR_TO_FAMILY(vendor, family) ((vendor) << 8 | (family))
+
+//! @brief States into which the target can be placed.
+//!
+//! These enums are passed to target_set_state() and indicate the desired state into which
+//! the target should be reset.
+typedef enum _target_state {
+    RESET_HOLD,              //!< Hold target in reset
+    RESET_PROGRAM,           //!< Reset target and setup for flash programming
+    RESET_RUN,               //!< Reset target and run normally
+    NO_DEBUG,                //!< Disable debug on running target
+    DEBUG,                   //!< Enable debug on running target
+    HALT,                    //!< Halt the target without resetting it
+    RUN,                     //!< Resume the target without resetting it
+    POST_FLASH_RESET,        //!< Reset target after flash programming
+    POWER_ON,                //!< Poweron the target
+    SHUTDOWN,                //!< Poweroff the target
+} target_state_t;
+
+//! @brief Options for reset.
+typedef enum _reset_type {
+    kHardwareReset = 1,
+    kSoftwareReset,
+} reset_type_t;
+
+//! @brief Unique IDs for vendors.
+//!
+//! The vendor IDs are the same as those used for the _DeviceVendorEnum_ defined for the PDSC file
+//! format from CMSIS-Packs. See the [DeviceVendorEnum
+//! documentation](https://arm-software.github.io/CMSIS_5/Pack/html/pdsc_family_pg.html#DeviceVendorEnum)
+//! for the list of ID values.
+enum _vendor_ids {
+    kStub_VendorID = 0,
+    kNXP_VendorID = 11,
+    kTI_VendorID = 16,
+    kNordic_VendorID = 54,
+    kToshiba_VendorID = 92,
+    kRenesas_VendorID = 117,
+    kWiznet_VendorID = 122,
+    kRealtek_VendorID = 124,
+};
+
+//! @brief Unique IDs for device families supported by DAPLink.
+//!
+//! The values of these enums are created with the VENDOR_TO_FAMILY() macro. Vendor IDs come from
+//! the #_vendor_ids enumeration. The family index for each ID is simply an integer that is unique
+//! within the family.
+//!
+//! There are several "stub" families defined with a stub vendor. These families are meant to be
+//! used for devices that do not require any customized behaviour in order to be successfully
+//! controlled by DAPLink. The individual stub families provide some options for what reset type
+//! should be used, either hardware or software.
+//!
+//! To add a new family, first determine if you can simply use one of the stub families. For many
+//! devices, the stub families are sufficient and using them reduces complexity.
+//!
+//! If you do need a new family ID, first check if the vendor is present in #_vendor_ids. If not,
+//! add the vendor ID to that enum (see its documentation for the source of vendor ID values).
+//! Then pick a unique family index by adding 1 to the highest existing family index within that
+//! vendor. For a family with a new vendor, the family index should be 1.
+typedef enum _family_id {
+    kStub_HWReset_FamilyID = VENDOR_TO_FAMILY(kStub_VendorID, 1),
+    kStub_SWVectReset_FamilyID = VENDOR_TO_FAMILY(kStub_VendorID, 2),
+    kStub_SWSysReset_FamilyID = VENDOR_TO_FAMILY(kStub_VendorID, 3),
+    kNXP_KinetisK_FamilyID = VENDOR_TO_FAMILY(kNXP_VendorID, 1),
+    kNXP_KinetisL_FamilyID = VENDOR_TO_FAMILY(kNXP_VendorID, 2),
+    kNXP_Mimxrt_FamilyID = VENDOR_TO_FAMILY(kNXP_VendorID, 3),
+    kNXP_RapidIot_FamilyID = VENDOR_TO_FAMILY(kNXP_VendorID, 4),
+    kNXP_KinetisK32W_FamilyID = VENDOR_TO_FAMILY(kNXP_VendorID, 5),
+    kNordic_Nrf51_FamilyID = VENDOR_TO_FAMILY(kNordic_VendorID, 1),
+    kNordic_Nrf52_FamilyID = VENDOR_TO_FAMILY(kNordic_VendorID, 2),
+    kRealtek_Rtl8195am_FamilyID = VENDOR_TO_FAMILY(kRealtek_VendorID, 1),
+    kTI_Cc3220sf_FamilyID = VENDOR_TO_FAMILY(kTI_VendorID, 1),
+    kToshiba_Tz_FamilyID = VENDOR_TO_FAMILY(kToshiba_VendorID, 1),
+    kWiznet_W7500_FamilyID = VENDOR_TO_FAMILY(kWiznet_VendorID, 1),
+    kRenesas_FamilyID = VENDOR_TO_FAMILY(kRenesas_VendorID, 1),
+} family_id_t;
+
+//! @brief Defines all characteristics of a device family.
+typedef struct target_family_descriptor {
+    uint16_t family_id;                         /*!< Use to select or identify target family from defined target family or custom ones */
+    reset_type_t default_reset_type;            /*!< Target family can select predefined reset from  kHardwareReset and kSoftwareReset */
+    uint32_t soft_reset_type;                   /*!< Families can override software reset type to VECTRESET or SYSRESETREQ */
+    void (*target_before_init_debug)(void);     /*!< Target dependant function before debug initialization */
+    void (*prerun_target_config)(void);         /*!< Target specific initialization */
+    uint8_t (*target_unlock_sequence)(void);    /*!< Unlock targets that can enter lock state */
+    uint8_t (*security_bits_set)(uint32_t addr, uint8_t *data, uint32_t size);  /*!< Check security bits in the programmable flash region */
+    uint8_t (*target_set_state)(target_state_t state);      /*!< Families can customize target debug states */
+    void (*swd_set_target_reset)(uint8_t asserted);         /*!< Families can customize how to send reset to the target */
+    uint8_t (*validate_bin_nvic)(const uint8_t *buf);       /*!< Validate a bin file to be flash by drag and drop */
+    uint8_t (*validate_hexfile)(const uint8_t *buf);        /*!< Validate a hex file to be flash by drag and drop */
+    uint32_t apsel;                             /*!< APSEL for the family */
+} target_family_descriptor_t;
+
+//! @brief The active family used by the board.
+//!
+//! This global is initialized by init_family() just after DAPLink boots. Normally it matches
+//! the family specified by the #board_info_t::family_id field of #g_board_info.
+extern const target_family_descriptor_t *g_target_family;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+//! @brief Initialize g_target_family.
+void init_family(void);
+
+//! @brief Reset the target into a new state.
+//!
+//! Used to prepare the target for some operation, or release it for user control.
+uint8_t target_set_state(target_state_t state);
+
+//! @brief Controls reset of the target.
+void swd_set_target_reset(uint8_t asserted);
+
+//! @brief Get the APSEL for the AHB-AP to use for controlling the target.
+uint32_t target_get_apsel(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif