126f26f5ae2c7a76aa199206dece12f65aa67da12Vadim Bendebury/*
29caf492818a4cc51ba471534d3fcaa84c9ce0278Darren Krahn *Copyright (C) 2015 The Android Open Source Project
39caf492818a4cc51ba471534d3fcaa84c9ce0278Darren Krahn *
49caf492818a4cc51ba471534d3fcaa84c9ce0278Darren Krahn *Licensed under the Apache License, Version 2.0 (the "License");
59caf492818a4cc51ba471534d3fcaa84c9ce0278Darren Krahn *you may not use this file except in compliance with the License.
69caf492818a4cc51ba471534d3fcaa84c9ce0278Darren Krahn *You may obtain a copy of the License at
79caf492818a4cc51ba471534d3fcaa84c9ce0278Darren Krahn *
89caf492818a4cc51ba471534d3fcaa84c9ce0278Darren Krahn *     http://www.apache.org/licenses/LICENSE-2.0
99caf492818a4cc51ba471534d3fcaa84c9ce0278Darren Krahn *
109caf492818a4cc51ba471534d3fcaa84c9ce0278Darren Krahn *Unless required by applicable law or agreed to in writing, software
119caf492818a4cc51ba471534d3fcaa84c9ce0278Darren Krahn *distributed under the License is distributed on an "AS IS" BASIS,
129caf492818a4cc51ba471534d3fcaa84c9ce0278Darren Krahn *WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139caf492818a4cc51ba471534d3fcaa84c9ce0278Darren Krahn *See the License for the specific language governing permissions and
149caf492818a4cc51ba471534d3fcaa84c9ce0278Darren Krahn *limitations under the License.
1526f26f5ae2c7a76aa199206dece12f65aa67da12Vadim Bendebury *
1626f26f5ae2c7a76aa199206dece12f65aa67da12Vadim Bendebury * This file was copied from https://github.com/devttys0/libmpsse.git (sha1
1726f26f5ae2c7a76aa199206dece12f65aa67da12Vadim Bendebury * f1a6744b), and modified to suite the Chromium OS project.
1826f26f5ae2c7a76aa199206dece12f65aa67da12Vadim Bendebury */
1926f26f5ae2c7a76aa199206dece12f65aa67da12Vadim Bendebury
2026f26f5ae2c7a76aa199206dece12f65aa67da12Vadim Bendebury#ifndef TRUNKS_FTDI_MPSSE_H_
2126f26f5ae2c7a76aa199206dece12f65aa67da12Vadim Bendebury#define TRUNKS_FTDI_MPSSE_H_
22771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury
23771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury#include <libftdi1/ftdi.h>
2426f26f5ae2c7a76aa199206dece12f65aa67da12Vadim Bendebury#include <stdint.h>
25771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury
26771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury#define MPSSE_OK 0
27771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury#define MPSSE_FAIL -1
28771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury
29771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury#define MSB 0x00
30771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury#define LSB 0x08
31771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury
32771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury#define CHUNK_SIZE 65535
33771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury#define SPI_RW_SIZE (63 * 1024)
34771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury#define SPI_TRANSFER_SIZE 512
35771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury#define I2C_TRANSFER_SIZE 64
36771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury
37771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury#define LATENCY_MS 2
38771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury#define TIMEOUT_DIVISOR 1000000
39771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury#define USB_TIMEOUT 120000
40771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury#define SETUP_DELAY 25000
41771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury
42771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury#define BITMODE_RESET 0
43771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury#define BITMODE_MPSSE 2
44771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury
45771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury#define CMD_SIZE 3
46771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury#define MAX_SETUP_COMMANDS 10
47771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury#define SS_TX_COUNT 3
48771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury
49771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury#define LOW 0
50771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury#define HIGH 1
51771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury#define NUM_GPIOL_PINS 4
52771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury#define NUM_GPIO_PINS 12
53771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury
54771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury#define NULL_CONTEXT_ERROR_MSG "NULL MPSSE context pointer!"
55771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury
5695146cebd9272c71e3b3b48e12d658e57e7a328bVadim Bendebury#ifdef __cplusplus
5795146cebd9272c71e3b3b48e12d658e57e7a328bVadim Bendeburyextern "C" {
5895146cebd9272c71e3b3b48e12d658e57e7a328bVadim Bendebury#endif
5995146cebd9272c71e3b3b48e12d658e57e7a328bVadim Bendebury
60771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury/* FTDI interfaces */
61771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendeburyenum interface {
62771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  IFACE_ANY = INTERFACE_ANY,
63771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  IFACE_A = INTERFACE_A,
64771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  IFACE_B = INTERFACE_B,
65771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  IFACE_C = INTERFACE_C,
66771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  IFACE_D = INTERFACE_D
67771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury};
68771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury
69771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury/* Common clock rates */
70771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendeburyenum clock_rates {
71771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  ONE_HUNDRED_KHZ = 100000,
72771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  FOUR_HUNDRED_KHZ = 400000,
73771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  ONE_MHZ = 1000000,
74771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  TWO_MHZ = 2000000,
75771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  FIVE_MHZ = 5000000,
76771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  SIX_MHZ = 6000000,
77771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  TEN_MHZ = 10000000,
78771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  TWELVE_MHZ = 12000000,
79771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  FIFTEEN_MHZ = 15000000,
80771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  THIRTY_MHZ = 30000000,
81771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  SIXTY_MHZ = 60000000
82771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury};
83771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury
84771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury/* Supported MPSSE modes */
85771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendeburyenum modes {
86771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  SPI0 = 1,
87771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  SPI1 = 2,
88771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  SPI2 = 3,
89771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  SPI3 = 4,
90771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  I2C = 5,
91771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  GPIO = 6,
92771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  BITBANG = 7,
93771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury};
94771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury
95771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendeburyenum pins {
96771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  SK = 1,
97771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  DO = 2,
98771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  DI = 4,
99771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  CS = 8,
100771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  GPIO0 = 16,
101771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  GPIO1 = 32,
102771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  GPIO2 = 64,
103771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  GPIO3 = 128
104771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury};
105771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury
106771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendeburyenum gpio_pins {
107771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  GPIOL0 = 0,
108771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  GPIOL1 = 1,
109771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  GPIOL2 = 2,
110771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  GPIOL3 = 3,
111771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  GPIOH0 = 4,
112771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  GPIOH1 = 5,
113771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  GPIOH2 = 6,
114771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  GPIOH3 = 7,
115771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  GPIOH4 = 8,
116771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  GPIOH5 = 9,
117771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  GPIOH6 = 10,
118771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  GPIOH7 = 11
119771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury};
120771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury
121771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendeburyenum i2c_ack { ACK = 0, NACK = 1 };
122771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury
12326f26f5ae2c7a76aa199206dece12f65aa67da12Vadim Bendebury/* SK/DO/CS and GPIOs are outputs, DI is an input */
12426f26f5ae2c7a76aa199206dece12f65aa67da12Vadim Bendebury#define DEFAULT_TRIS (SK | DO | CS | GPIO0 | GPIO1 | GPIO2 | GPIO3)
125771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury#define DEFAULT_PORT (SK | CS) /* SK and CS are high, all others low */
126771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury
127771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendeburyenum mpsse_commands {
128771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  INVALID_COMMAND = 0xAB,
129771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  ENABLE_ADAPTIVE_CLOCK = 0x96,
130771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  DISABLE_ADAPTIVE_CLOCK = 0x97,
131771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  ENABLE_3_PHASE_CLOCK = 0x8C,
132771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  DISABLE_3_PHASE_CLOCK = 0x8D,
133771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  TCK_X5 = 0x8A,
134771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  TCK_D5 = 0x8B,
135771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  CLOCK_N_CYCLES = 0x8E,
136771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  CLOCK_N8_CYCLES = 0x8F,
137771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  PULSE_CLOCK_IO_HIGH = 0x94,
138771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  PULSE_CLOCK_IO_LOW = 0x95,
139771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  CLOCK_N8_CYCLES_IO_HIGH = 0x9C,
140771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  CLOCK_N8_CYCLES_IO_LOW = 0x9D,
141771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  TRISTATE_IO = 0x9E,
142771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury};
143771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury
144771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendeburyenum low_bits_status { STARTED, STOPPED };
145771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury
146771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendeburystruct vid_pid {
147771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  int vid;
148771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  int pid;
149771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  char* description;
150771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury};
151771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury
152771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendeburystruct mpsse_context {
153771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  char* description;
154771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  struct ftdi_context ftdi;
155771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  enum modes mode;
156771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  enum low_bits_status status;
157771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  int flush_after_read;
158771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  int vid;
159771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  int pid;
160771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  int clock;
161771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  int xsize;
1621ea6ecdb07697096d9d3d67f3599e062b01590c2Vadim Bendebury  uint8_t endianess;
1631ea6ecdb07697096d9d3d67f3599e062b01590c2Vadim Bendebury  uint8_t opened;
164771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  uint8_t tris;
165771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  uint8_t pstart;
166771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  uint8_t pstop;
167771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  uint8_t pidle;
168771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  uint8_t gpioh;
169771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  uint8_t trish;
170771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  uint8_t bitbang;
171771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  uint8_t tx;
172771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  uint8_t rx;
173771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  uint8_t txrx;
174771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  uint8_t tack;
175771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  uint8_t rack;
176771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury};
177771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury
178b9e482ca1162cccedcc0bbd9bd5ee9073372190dVadim Bendeburystruct mpsse_context* MPSSE(enum modes mode, int freq, int endianess);
179771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendeburystruct mpsse_context* Open(int vid,
180771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury                           int pid,
181771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury                           enum modes mode,
182771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury                           int freq,
183771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury                           int endianess,
184771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury                           int interface,
185771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury                           const char* description,
186771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury                           const char* serial);
187771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendeburystruct mpsse_context* OpenIndex(int vid,
188771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury                                int pid,
189771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury                                enum modes mode,
190771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury                                int freq,
191771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury                                int endianess,
192771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury                                int interface,
193771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury                                const char* description,
194771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury                                const char* serial,
195771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury                                int index);
196771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendeburyvoid Close(struct mpsse_context* mpsse);
197771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendeburyconst char* ErrorString(struct mpsse_context* mpsse);
198771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendeburyint SetMode(struct mpsse_context* mpsse, int endianess);
199771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendeburyvoid EnableBitmode(struct mpsse_context* mpsse, int tf);
200771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendeburyint SetClock(struct mpsse_context* mpsse, uint32_t freq);
201771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendeburyint GetClock(struct mpsse_context* mpsse);
202771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendeburyint GetVid(struct mpsse_context* mpsse);
203771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendeburyint GetPid(struct mpsse_context* mpsse);
204771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendeburyconst char* GetDescription(struct mpsse_context* mpsse);
205771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendeburyint SetLoopback(struct mpsse_context* mpsse, int enable);
206771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendeburyvoid SetCSIdle(struct mpsse_context* mpsse, int idle);
207771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendeburyint Start(struct mpsse_context* mpsse);
208c9aa4123ba0b0e08bec42c3abf48687b51806ba2Vadim Bendeburyint Write(struct mpsse_context* mpsse, const void* data, int size);
209771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendeburyint Stop(struct mpsse_context* mpsse);
210771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendeburyint GetAck(struct mpsse_context* mpsse);
211771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendeburyvoid SetAck(struct mpsse_context* mpsse, int ack);
212771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendeburyvoid SendAcks(struct mpsse_context* mpsse);
213771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendeburyvoid SendNacks(struct mpsse_context* mpsse);
214771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendeburyvoid FlushAfterRead(struct mpsse_context* mpsse, int tf);
215771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendeburyint PinHigh(struct mpsse_context* mpsse, int pin);
216771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendeburyint PinLow(struct mpsse_context* mpsse, int pin);
217771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendeburyint SetDirection(struct mpsse_context* mpsse, uint8_t direction);
218f7e67f3302e19df6c3118d39252b512c09767d79Bill Richardsonint WriteBits(struct mpsse_context* mpsse, char bits, size_t size);
219771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendeburychar ReadBits(struct mpsse_context* mpsse, int size);
220771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendeburyint WritePins(struct mpsse_context* mpsse, uint8_t data);
221771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendeburyint ReadPins(struct mpsse_context* mpsse);
222771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendeburyint PinState(struct mpsse_context* mpsse, int pin, int state);
223771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendeburyint Tristate(struct mpsse_context* mpsse);
224771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendeburychar Version(void);
225771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury
226771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury#ifdef SWIGPYTHON
227771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendeburytypedef struct swig_string_data {
228771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  int size;
229771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury  char* data;
230771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury} swig_string_data;
231771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury
232771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendeburyswig_string_data Read(struct mpsse_context* mpsse, int size);
233771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendeburyswig_string_data Transfer(struct mpsse_context* mpsse, char* data, int size);
234771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury#else
235c9aa4123ba0b0e08bec42c3abf48687b51806ba2Vadim Bendeburyuint8_t* Read(struct mpsse_context* mpsse, int size);
2364dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahnuint8_t* Transfer(struct mpsse_context* mpsse, uint8_t* data, int size);
237771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury
238771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendeburyint FastWrite(struct mpsse_context* mpsse, char* data, int size);
239771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendeburyint FastRead(struct mpsse_context* mpsse, char* data, int size);
240771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendeburyint FastTransfer(struct mpsse_context* mpsse,
241771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury                 char* wdata,
242771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury                 char* rdata,
243771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury                 int size);
244771df5a65efedd9fb2eb690cfd2e188e3dc3a4ecVadim Bendebury#endif
24595146cebd9272c71e3b3b48e12d658e57e7a328bVadim Bendebury#ifdef __cplusplus
24695146cebd9272c71e3b3b48e12d658e57e7a328bVadim Bendebury}
24795146cebd9272c71e3b3b48e12d658e57e7a328bVadim Bendebury#endif
2484dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn#endif /* TRUNKS_FTDI_MPSSE_H_ */
249