aboutsummaryrefslogtreecommitdiff
path: root/src/platforms/dev2/platform.h
blob: e768d3d96513f5cd27b86e19a723def3702a8f9d (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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
/*
 * This file is part of the Black Magic Debug project.
 *
 * Copyright (C) 2011  Black Sphere Technologies Ltd.
 * Written by Gareth McMullin <gareth@blacksphere.co.nz>
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program 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 General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#ifndef __PLATFORM_H
#define __PLATFORM_H

#ifndef WIN32
#	include <alloca.h>
#else
#	define alloca __builtin_alloca
#endif

/* All communications are little endian. */

/* Reset communication and set all pins as input. */
#define DEV2_OP_RESET_SYNC 0xa5
/* Set port width (1 byte argument) and period (4 bytes, in ns unit).
 * Port width will determine the size of a port argument (1 byte for 8, 2
 * bytes for 16...). Period is the pause between two output changes, 0 means
 * as fast as possible. */
#define DEV2_OP_SETUP 0xaa

/* Set complete port direction, 1 is output. */
#define DEV2_OP_DIR 0xb0
/* Set direction as output for selected pins. */
#define DEV2_OP_DIR_OUT 0xb1
/* Set direction as input for selected pins. */
#define DEV2_OP_DIR_IN 0xb2
/* Set complete output port value. */
#define DEV2_OP_OUT 0xb4
/* Set pins in output port. */
#define DEV2_OP_OUT_SET 0xb5
/* Reset pins in output port. */
#define DEV2_OP_OUT_RESET 0xb6
/* Toggle pins in output port. */
#define DEV2_OP_OUT_TOGGLE 0xb7
/* Change pins (mask as first argument, value as second argument). */
#define DEV2_OP_OUT_CHANGE 0xb8
/* Request port input. */
#define DEV2_OP_IN 0xb9

/* Send serial data (data mask as first argument, clock mask as second
 * argument, data length as third argument, then a number of data lsb first).
 * This will: set data, toggle clock twice, start again. */
#define DEV2_OP_SERIAL_OUT 0xc0
/* Receive serial data (data mask as first argument, clock mask as second
 * argument, data length as third argument, will response with received data).
 * This will: read data, toggle clock twice, start again. */
#define DEV2_OP_SERIAL_IN 0xc1


/* Pins definition. */
#define TDI_PIN 0x80
#define TMS_PIN 0x01
#define TCK_PIN 0x02
#define TDO_PIN 0x40
#define SWDIO_PIN TMS_PIN
#define SWCLK_PIN TCK_PIN
#undef TRST_PIN
#undef SRST_PIN

#define SET_RUN_STATE(state)
#define SET_IDLE_STATE(state)
#define SET_ERROR_STATE(state)

#define DEBUG(...) platform_debug(__VA_ARGS__)

void platform_buffer_flush(void);
int platform_buffer_write(const uint8_t *data, int size);
int platform_buffer_read(uint8_t *data, int size);
void platform_debug(const char *fmt, ...);

#endif