unsigned char get_led_state () { unsigned char buf; if (!ftdi_ok) return 0; if (ftdi_read_pins (&ctx, &buf) < 0) { init_hw (); if (ftdi_ok) ftdi_read_pins (&ctx, &buf); } return buf; }
cell ft_getbits(cell ops) { unsigned char bits; ft_handle handle = (ft_handle)((com_ops_t *)ops)->handle; ft_errno = ftdi_read_pins(handle, &bits); return ft_errno ? ft_errno : bits; }
int readPins() { int pins; ret = ftdi_read_pins(&ftdic, bits); /* Bits will be returned as 0xF ?.Subtract off 0xF0 to get it to a 0 - F number. Subtract that from 15 to get a 1 - 15 number where 1 is on and 0 is off for each of the pins */ pins = (int) (0xF - (bits[0] - 0xF0)); switch (pins) { case 1: case 3: case 5: case 7: case 9: case 11: case 13: case 15: printf("LED 1: On\n"); break; default: printf("LED 1: Off\n"); } switch (pins) { case 2: case 3: case 6: case 7: case 10: case 11: case 14: case 15: printf("LED 2: On\n"); break; default: printf("LED 2: Off\n"); } switch (pins) { case 4: case 5: case 6: case 7: case 12: case 13: case 14: case 15: printf("LED 3: On\n"); break; default: printf("LED 3: Off\n"); } if (pins >= 8) { printf("LED 4: On\n"); } else { printf("LED 4: Off\n"); } return pins; }
int modem_is_on(struct ftdi_context *ftdic) { unsigned char data; int ret; ret = ftdi_read_pins(ftdic, &data); if (ret < 0) return -1; return data & CBUS_0_IN_MASK; }
uint8_t swdptap_bit_in(void) { uint8_t ret; //ftdi_read_data(ftdic, &ret, 1); ftdi_read_pins(ftdic, &ret); ret &= 0x08; ftdi_write_data(ftdic, "\xA1\xA0", 2); //DEBUG("%d", ret?1:0); return ret; }
int main(void) { struct ftdi_context ftdic; int f; unsigned char buf[1]; unsigned char bitmask; unsigned char input[10]; if (ftdi_init(&ftdic) < 0) { fprintf(stderr, "ftdi_init failed\n"); return EXIT_FAILURE; } f = ftdi_usb_open(&ftdic, 0x0403, 0x6001); if (f < 0 && f != -5) { fprintf(stderr, "unable to open ftdi device: %d (%s)\n", f, ftdi_get_error_string(&ftdic)); exit(-1); } printf("ftdi open succeeded: %d\n",f); while (1) { // Set bitmask from input fgets(input, sizeof(input) - 1, stdin); if (input[0] == '\n') break; bitmask = strtol(input, NULL, 0); printf("Using bitmask 0x%02x\n", bitmask); f = ftdi_set_bitmode(&ftdic, bitmask, BITMODE_CBUS); if (f < 0) { fprintf(stderr, "set_bitmode failed for 0x%x, error %d (%s)\n", bitmask, f, ftdi_get_error_string(&ftdic)); exit(-1); } // read CBUS f = ftdi_read_pins(&ftdic, &buf[0]); if (f < 0) { fprintf(stderr, "read_pins failed, error %d (%s)\n", f, ftdi_get_error_string(&ftdic)); exit(-1); } printf("Read returned 0x%01x\n", buf[0] & 0x0f); } printf("disabling bitbang mode\n"); ftdi_disable_bitbang(&ftdic); ftdi_usb_close(&ftdic); ftdi_deinit(&ftdic); }
void initBoard(char *serial) { //Init FTDI communication ftdi_init(&ftdic); if (0) { //Open ret = ftdi_usb_open(&ftdic, 0x0403, 0x6001); } else { //Open via serial number, to be implemented later. ret = ftdi_usb_open_desc(&ftdic, 0x0403, 0x6001, NULL, serial); } ret = ftdi_read_pins(&ftdic, bits); //Board has just been plugged in or power lost if (bits[0] == 0xFF) { //Prevents 0xFF from flipping all switches on //ftdi_enable_bitbang(&ftdic, 0xF0); ftdi_set_bitmode(&ftdic, 0xF0, BITMODE_BITBANG); setPins(0); } ftdi_set_bitmode(&ftdic, 0xFF, BITMODE_BITBANG); //ftdi_enable_bitbang(&ftdic, 0xFF); }
int Context::read_pins(unsigned char *pins) { return ftdi_read_pins(d->ftdi, pins); }