#ifndef INCLUDE_JTAGTAP_H
#define INCLUDE_JTAGTAP_H
#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>
typedef struct jtag_proc {
void (*jtagtap_reset)(void);
bool (*jtagtap_next)(const bool tms, const bool tdi);
void (*jtagtap_tms_seq)(uint32_t tms_states, size_t clock_cycles);
void (*jtagtap_tdi_tdo_seq)(uint8_t *data_out, const bool final_tms, const uint8_t *data_in, size_t clock_cycles);
void (*jtagtap_tdi_seq)(const bool final_tms, const uint8_t *data_in, size_t clock_cycles);
void (*jtagtap_cycle)(const bool tms, const bool tdi, const size_t clock_cycles);
uint8_t tap_idle_cycles;
} jtag_proc_s;
extern jtag_proc_s jtag_proc;
#define jtagtap_soft_reset() jtag_proc.jtagtap_tms_seq(0x1fU, 6)
#define jtagtap_shift_ir() jtag_proc.jtagtap_tms_seq(0x03U, 4)
#define jtagtap_shift_dr() jtag_proc.jtagtap_tms_seq(0x01U, 3)
#define jtagtap_return_idle(cycles) jtag_proc.jtagtap_tms_seq(0x01, (cycles) + 1U)
#if PC_HOSTED == 1
bool bmda_jtag_init(void);
#else
void jtagtap_init(void);
#endif
#endif