Exemplo n.º 1
0
flash_decoder_type_t flash_decoder_detect_type(const uint8_t *data, uint32_t size, uint32_t addr, bool addr_valid)
{
    daplink_info_t info;
    util_assert(size >= FLASH_DECODER_MIN_SIZE);
    // Check if this is a daplink image
    memcpy(&info, data + DAPLINK_INFO_OFFSET, sizeof(info));

    if (DAPLINK_HIC_ID == info.hic_id) {
        if (DAPLINK_BUILD_KEY_IF == info.build_key) {
            // Interface update
            return FLASH_DECODER_TYPE_INTERFACE;
        } else if (DAPLINK_BUILD_KEY_BL == info.build_key) {
            // Bootloader update
            return FLASH_DECODER_TYPE_BOOTLOADER;
        } else {
            return FLASH_DECODER_TYPE_UNKNOWN;
        }
    }

    // Check if a valid vector table for the target can be found
    if (validate_bin_nvic(data)) {
        return FLASH_DECODER_TYPE_TARGET;
    }

    // If an address is specified then the data can be decoded
    if (addr_valid) {
        // TODO - future improvement - make sure address is within target's flash
        return FLASH_DECODER_TYPE_TARGET;
    }

    return FLASH_DECODER_TYPE_UNKNOWN;
}
Exemplo n.º 2
0
static extension_t identify_start_sequence(uint8_t *buf)
{
    if (1 == validate_bin_nvic(buf)) {
        return BIN;
    }
    else if (1 == validate_hexfile(buf)) {
        return HEX;
    }
    return UNKNOWN;
}