Welcome to mirror list, hosted at ThFree Co, Russian Federation.

play.c « libxsvf « Src « Core « STM32_bootloader - github.com/ClusterM/famicom-dumper-writer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: e57c01eedfbc2a583d6570d209f4ca7b97f06b15 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
/*
 *  Lib(X)SVF  -  A library for implementing SVF and XSVF JTAG players
 *
 *  Copyright (C) 2009  RIEGL Research ForschungsGmbH
 *  Copyright (C) 2009  Clifford Wolf <clifford@clifford.at>
 *  
 *  Permission to use, copy, modify, and/or distribute this software for any
 *  purpose with or without fee is hereby granted, provided that the above
 *  copyright notice and this permission notice appear in all copies.
 *  
 *  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 *  WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 *  MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
 *  ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 *  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 *  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 *  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 *
 */

#include "libxsvf.h"

int libxsvf_play(struct libxsvf_host *h, enum libxsvf_mode mode)
{
	int rc = -1;

	h->tap_state = LIBXSVF_TAP_INIT;
	if (LIBXSVF_HOST_SETUP() < 0) {
		LIBXSVF_HOST_REPORT_ERROR("Setup of JTAG interface failed.");
		return -1;
	}

	if (mode == LIBXSVF_MODE_SVF) {
#ifdef LIBXSVF_WITHOUT_SVF
		LIBXSVF_HOST_REPORT_ERROR("SVF support in libxsvf is disabled.");
#else
		rc = libxsvf_svf(h);
#endif
	}

	if (mode == LIBXSVF_MODE_XSVF) {
#ifdef LIBXSVF_WITHOUT_XSVF
		LIBXSVF_HOST_REPORT_ERROR("XSVF support in libxsvf is disabled.");
#else
		rc = libxsvf_xsvf(h);
#endif
	}

	if (mode == LIBXSVF_MODE_SCAN) {
#ifdef LIBXSVF_WITHOUT_SCAN
		LIBXSVF_HOST_REPORT_ERROR("SCAN support in libxsvf is disabled.");
#else
		rc = libxsvf_scan(h);
#endif
	}

	libxsvf_tap_walk(h, LIBXSVF_TAP_RESET);
	if (LIBXSVF_HOST_SYNC() != 0 && rc >= 0 ) {
		LIBXSVF_HOST_REPORT_ERROR("TDO mismatch in TAP reset. (this is not possible!)");
		rc = -1;
	}

	int shutdown_rc = LIBXSVF_HOST_SHUTDOWN();

	if (shutdown_rc < 0) {
		LIBXSVF_HOST_REPORT_ERROR("Shutdown of JTAG interface failed.");
		rc = rc < 0 ? rc : shutdown_rc;
	}

	return rc;
}