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