Lines Matching defs:mpsse

60   struct mpsse_context* mpsse = NULL;
63 mpsse = Open(supported_devices[i].vid, supported_devices[i].pid, mode, freq,
65 if (mpsse) {
66 mpsse->description = supported_devices[i].description;
67 return mpsse;
114 * On success, mpsse->open will be set to 1.
115 * On failure, mpsse->open will be set to 0.
127 struct mpsse_context* mpsse = NULL;
129 mpsse = malloc(sizeof(struct mpsse_context));
130 if (!mpsse)
133 memset(mpsse, 0, sizeof(struct mpsse_context));
136 FlushAfterRead(mpsse, 0);
139 if (ftdi_init(&mpsse->ftdi)) {
140 free(mpsse);
145 ftdi_set_interface(&mpsse->ftdi, interface);
148 if (!ftdi_usb_open_desc_index(&mpsse->ftdi, vid, pid, description, serial,
150 mpsse->mode = mode;
151 mpsse->vid = vid;
152 mpsse->pid = pid;
153 mpsse->status = STOPPED;
154 mpsse->endianess = endianess;
157 if (mpsse->mode == I2C)
158 mpsse->xsize = I2C_TRANSFER_SIZE;
160 mpsse->xsize = SPI_RW_SIZE;
162 status |= ftdi_usb_reset(&mpsse->ftdi);
163 status |= ftdi_set_latency_timer(&mpsse->ftdi, LATENCY_MS);
164 status |= ftdi_write_data_set_chunksize(&mpsse->ftdi, CHUNK_SIZE);
165 status |= ftdi_read_data_set_chunksize(&mpsse->ftdi, CHUNK_SIZE);
166 status |= ftdi_set_bitmode(&mpsse->ftdi, 0, BITMODE_RESET);
170 set_timeouts(mpsse, USB_TIMEOUT);
172 if (mpsse->mode != BITBANG) {
173 ftdi_set_bitmode(&mpsse->ftdi, 0, BITMODE_MPSSE);
175 if (SetClock(mpsse, freq) == MPSSE_OK) {
176 if (SetMode(mpsse, endianess) == MPSSE_OK) {
177 mpsse->opened = 1;
188 ftdi_usb_purge_buffers(&mpsse->ftdi);
194 if (!ftdi_set_bitmode(&mpsse->ftdi, 0xFF, BITMODE_BITBANG))
195 mpsse->opened = 1;
200 if (mpsse && !mpsse->opened) {
201 Close(mpsse);
202 mpsse = NULL;
205 return mpsse;
212 * @mpsse - MPSSE context pointer.
216 void Close(struct mpsse_context* mpsse) {
217 if (!mpsse)
220 if (mpsse->opened) {
222 ftdi_set_bitmode(&mpsse->ftdi, 0, BITMODE_RESET);
223 ftdi_usb_close(&mpsse->ftdi);
225 ftdi_deinit(&mpsse->ftdi);
226 free(mpsse);
234 void EnableBitmode(struct mpsse_context* mpsse, int tf) {
235 if (is_valid_context(mpsse)) {
237 mpsse->tx |= MPSSE_BITMODE;
238 mpsse->rx |= MPSSE_BITMODE;
239 mpsse->txrx |= MPSSE_BITMODE;
241 mpsse->tx &= ~MPSSE_BITMODE;
242 mpsse->rx &= ~MPSSE_BITMODE;
243 mpsse->txrx &= ~MPSSE_BITMODE;
252 * @mpsse - MPSSE context pointer.
258 int SetMode(struct mpsse_context* mpsse, int endianess) {
265 if (mpsse) {
267 mpsse->tx = MPSSE_DO_WRITE | endianess;
268 mpsse->rx = MPSSE_DO_READ | endianess;
269 mpsse->txrx = MPSSE_DO_WRITE | MPSSE_DO_READ | endianess;
272 mpsse->tris = DEFAULT_TRIS;
275 mpsse->pidle = mpsse->pstart = mpsse->pstop = DEFAULT_PORT;
278 mpsse->pstart &= ~CS;
281 SetLoopback(mpsse, 0);
284 SetAck(mpsse, ACK);
289 switch (mpsse->mode) {
292 mpsse->pidle &= ~SK;
293 mpsse->pstart &= ~SK;
294 mpsse->pstop &= ~SK;
297 mpsse->tx |= MPSSE_WRITE_NEG;
298 mpsse->rx &= ~MPSSE_READ_NEG;
299 mpsse->txrx |= MPSSE_WRITE_NEG;
300 mpsse->txrx &= ~MPSSE_READ_NEG;
304 mpsse->pidle |= SK;
305 mpsse->pstart |= SK;
308 mpsse->pstop &= ~SK;
311 mpsse->tx |= MPSSE_WRITE_NEG;
312 mpsse->rx &= ~MPSSE_READ_NEG;
313 mpsse->txrx |= MPSSE_WRITE_NEG;
314 mpsse->txrx &= ~MPSSE_READ_NEG;
318 mpsse->pidle &= ~SK;
321 mpsse->pstart &= ~SK;
328 mpsse->pstop |= SK;
330 mpsse->rx |= MPSSE_READ_NEG;
331 mpsse->tx &= ~MPSSE_WRITE_NEG;
332 mpsse->txrx |= MPSSE_READ_NEG;
333 mpsse->txrx &= ~MPSSE_WRITE_NEG;
337 mpsse->pidle |= SK;
338 mpsse->pstart |= SK;
339 mpsse->pstop |= SK;
341 mpsse->rx |= MPSSE_READ_NEG;
342 mpsse->tx &= ~MPSSE_WRITE_NEG;
343 mpsse->txrx |= MPSSE_READ_NEG;
344 mpsse->txrx &= ~MPSSE_WRITE_NEG;
349 mpsse->tx |= MPSSE_WRITE_NEG;
350 mpsse->rx &= ~MPSSE_READ_NEG;
352 mpsse->pidle |= DO | DI;
355 mpsse->pstart &= ~DO & ~DI;
359 mpsse->pstop &= ~DO & ~DI;
372 retval = raw_write(mpsse, setup_commands, setup_commands_size);
377 set_bits_low(mpsse, mpsse->pidle);
380 mpsse->trish = 0xFF;
381 mpsse->gpioh = 0x00;
384 buf[i++] = mpsse->gpioh;
385 buf[i++] = mpsse->trish;
387 retval = raw_write(mpsse, buf, i);
399 * @mpsse - MPSSE context pointer.
405 int SetClock(struct mpsse_context* mpsse, uint32_t freq) {
413 if (mpsse) {
422 if (raw_write(mpsse, buf, 1) == MPSSE_OK) {
433 if (raw_write(mpsse, buf, 3) == MPSSE_OK) {
434 mpsse->clock = div2freq(system_clock, divisor);
446 * @mpsse - MPSSE context pointer.
450 const char* ErrorString(struct mpsse_context* mpsse) {
451 if (mpsse != NULL) {
452 return ftdi_get_error_string(&mpsse->ftdi);
461 * @mpsse - MPSSE context pointer.
465 int GetClock(struct mpsse_context* mpsse) {
468 if (is_valid_context(mpsse)) {
469 clock = mpsse->clock;
478 * @mpsse - MPSSE context pointer.
482 int GetVid(struct mpsse_context* mpsse) {
485 if (is_valid_context(mpsse)) {
486 vid = mpsse->vid;
495 * @mpsse - MPSSE context pointer.
499 int GetPid(struct mpsse_context* mpsse) {
502 if (is_valid_context(mpsse)) {
503 pid = mpsse->pid;
512 * @mpsse - MPSSE context pointer.
516 const char* GetDescription(struct mpsse_context* mpsse) {
519 if (is_valid_context(mpsse)) {
520 description = mpsse->description;
529 * @mpsse - MPSSE context pointer.
535 int SetLoopback(struct mpsse_context* mpsse, int enable) {
539 if (is_valid_context(mpsse)) {
546 retval = raw_write(mpsse, buf, 1);
555 * @mpsse - MPSSE context pointer.
560 void SetCSIdle(struct mpsse_context* mpsse, int idle) {
561 if (is_valid_context(mpsse)) {
564 mpsse->pidle |= CS;
565 mpsse->pstop |= CS;
566 mpsse->pstart &= ~CS;
569 mpsse->pidle &= ~CS;
570 mpsse->pstop &= ~CS;
571 mpsse->pstart |= CS;
583 * @mpsse - MPSSE context pointer.
588 void FlushAfterRead(struct mpsse_context* mpsse, int tf) {
589 mpsse->flush_after_read = tf;
596 * @mpsse - MPSSE context pointer.
601 int Start(struct mpsse_context* mpsse) {
604 if (is_valid_context(mpsse)) {
605 if (mpsse->mode == I2C && mpsse->status == STARTED) {
608 status |= set_bits_low(mpsse, (mpsse->pidle & ~SK));
611 status |= set_bits_low(mpsse, mpsse->pidle);
615 status |= set_bits_low(mpsse, mpsse->pstart);
622 if (mpsse->mode == SPI3) {
623 status |= set_bits_low(mpsse, (mpsse->pstart & ~SK));
630 else if (mpsse->mode == SPI1) {
631 status |= set_bits_low(mpsse, (mpsse->pstart | SK));
634 mpsse->status = STARTED;
637 mpsse->status = STOPPED;
646 * @mpsse - MPSSE context pointer.
652 int WriteBits(struct mpsse_context* mpsse, char bits, size_t size) {
665 if (mpsse->endianess == LSB) {
674 EnableBitmode(mpsse, 1);
675 retval = Write(mpsse, data, size);
676 EnableBitmode(mpsse, 0);
684 * @mpsse - MPSSE context pointer.
691 int Write(struct mpsse_context* mpsse, const void* vdata, int size) {
696 if (is_valid_context(mpsse)) {
697 if (mpsse->mode) {
700 if (txsize > mpsse->xsize) {
701 txsize = mpsse->xsize;
708 if (mpsse->mode == I2C) {
712 buf = build_block_buffer(mpsse, mpsse->tx, data + n, txsize, &buf_size);
714 retval = raw_write(mpsse, buf, buf_size);
722 /* Read in the ACK bit and store it in mpsse->rack */
723 if (mpsse->mode == I2C) {
724 raw_read(mpsse, (uint8_t*)&mpsse->rack, 1);
741 static uint8_t* InternalRead(struct mpsse_context* mpsse, int size) {
746 if (is_valid_context(mpsse)) {
747 if (mpsse->mode) {
754 if (rxsize > mpsse->xsize) {
755 rxsize = mpsse->xsize;
758 data = build_block_buffer(mpsse, mpsse->rx, sbuf, rxsize, &data_size);
760 retval = raw_write(mpsse, data, data_size);
764 n += raw_read(mpsse, buf + n, rxsize);
782 * @mpsse - MPSSE context pointer.
789 swig_string_data Read(struct mpsse_context* mpsse, int size)
791 uint8_t* Read(struct mpsse_context* mpsse, int size)
796 buf = InternalRead(mpsse, size);
811 * @mpsse - MPSSE context pointer.
816 char ReadBits(struct mpsse_context* mpsse, int size) {
824 EnableBitmode(mpsse, 1);
825 rdata = InternalRead(mpsse, size);
826 EnableBitmode(mpsse, 0);
833 if (mpsse->endianess == MSB) {
839 } else if (mpsse->endianess == LSB) {
857 * @mpsse - MPSSE context pointer.
865 swig_string_data Transfer(struct mpsse_context* mpsse, char* data, int size)
867 uint8_t* Transfer(struct mpsse_context* mpsse, uint8_t* data, int size)
873 if (is_valid_context(mpsse)) {
875 if (mpsse->mode >= SPI0 && mpsse->mode <= SPI3) {
888 txdata = build_block_buffer(mpsse, mpsse->txrx, data + n, rxsize,
891 retval = raw_write(mpsse, txdata, data_size);
895 n += raw_read(mpsse, (buf + n), rxsize);
920 * @mpsse - MPSSE context pointer.
924 int GetAck(struct mpsse_context* mpsse) {
927 if (is_valid_context(mpsse)) {
928 ack = (mpsse->rack & 0x01);
937 * @mpsse - MPSSE context pointer.
942 void SetAck(struct mpsse_context* mpsse, int ack) {
943 if (is_valid_context(mpsse)) {
945 mpsse->tack = 0xFF;
947 mpsse->tack = 0x00;
957 * @mpsse - MPSSE context pointer.
961 void SendAcks(struct mpsse_context* mpsse) {
962 return SetAck(mpsse, ACK);
968 * @mpsse - MPSSE context pointer.
972 void SendNacks(struct mpsse_context* mpsse) {
973 return SetAck(mpsse, NACK);
979 * @mpsse - MPSSE context pointer.
984 int Stop(struct mpsse_context* mpsse) {
987 if (is_valid_context(mpsse)) {
990 if (mpsse->mode == I2C) {
991 retval |= set_bits_low(mpsse, (mpsse->pidle & ~DO & ~SK));
995 retval |= set_bits_low(mpsse, mpsse->pstop);
999 retval |= set_bits_low(mpsse, mpsse->pidle);
1002 mpsse->status = STOPPED;
1005 mpsse->status = STOPPED;
1014 * @mpsse - MPSSE context pointer.
1020 int PinHigh(struct mpsse_context* mpsse, int pin) {
1023 if (is_valid_context(mpsse)) {
1024 retval = gpio_write(mpsse, pin, HIGH);
1033 * @mpsse - MPSSE context pointer.
1039 int PinLow(struct mpsse_context* mpsse, int pin) {
1042 if (is_valid_context(mpsse)) {
1043 retval = gpio_write(mpsse, pin, LOW);
1052 * @mpsse - MPSSE context pointer.
1057 int SetDirection(struct mpsse_context* mpsse, uint8_t direction) {
1060 if (is_valid_context(mpsse)) {
1061 if (mpsse->mode == BITBANG) {
1062 if (ftdi_set_bitmode(&mpsse->ftdi, direction, BITMODE_BITBANG) == 0) {
1074 * @mpsse - MPSSE context pointer.
1079 int WritePins(struct mpsse_context* mpsse, uint8_t data) {
1082 if (is_valid_context(mpsse)) {
1083 if (mpsse->mode == BITBANG) {
1084 if (ftdi_write_data(&mpsse->ftdi, &data, 1) == 0) {
1096 * @mpsse - MPSSE context pointer.
1100 int ReadPins(struct mpsse_context* mpsse) {
1103 if (is_valid_context(mpsse)) {
1104 ftdi_read_pins((struct ftdi_context*)&mpsse->ftdi, (uint8_t*)&val);
1113 * @mpsse - MPSSE context pointer.
1120 int PinState(struct mpsse_context* mpsse, int pin, int state) {
1122 state = ReadPins(mpsse);
1127 if (mpsse->mode != BITBANG) {
1137 * @mpsse - MPSSE context pointer.
1141 int Tristate(struct mpsse_context* mpsse) {
1149 return raw_write(mpsse, cmd, sizeof(cmd));