ftdi_transfer: add reset command
This commit is contained in:
parent
b54b635e61
commit
77f7869e91
@ -88,48 +88,6 @@ int init_ftdi_context(struct ftdi_context * ftdi, uint32_t scbrr)
|
|||||||
}
|
}
|
||||||
ftdi_list_free(&devlist);
|
ftdi_list_free(&devlist);
|
||||||
|
|
||||||
|
|
||||||
if (0) {
|
|
||||||
for (int i = 0; i < 2; i++) {
|
|
||||||
timespec t = {.tv_sec = 0, .tv_nsec = 33000 * 2 };
|
|
||||||
|
|
||||||
// toggle ACBUS5 low (g reset asserted)
|
|
||||||
uint8_t bitmask1 = (0b0001 << 4) | (0b0001 << 0);
|
|
||||||
res = ftdi_set_bitmode(ftdi, bitmask1, BITMODE_CBUS);
|
|
||||||
if (res < 0) {
|
|
||||||
fprintf(stderr, "ftdi_set_bitmode: %s\n", ftdi_get_error_string(ftdi));
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
printf("cbus1\n");
|
|
||||||
|
|
||||||
nanosleep(&t, NULL);
|
|
||||||
|
|
||||||
// toggle ACBUS5 low (g reset deasserted)
|
|
||||||
uint8_t bitmask2 = (0b0000 << 4) | (0b0001 << 0);
|
|
||||||
res = ftdi_set_bitmode(ftdi, bitmask2, BITMODE_CBUS);
|
|
||||||
if (res < 0) {
|
|
||||||
fprintf(stderr, "ftdi_set_bitmode: %s\n", ftdi_get_error_string(ftdi));
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
printf("cbus2\n");
|
|
||||||
|
|
||||||
nanosleep(&t, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8_t bitmask2 = (0b0000 << 4) | (0b0000 << 0);
|
|
||||||
res = ftdi_set_bitmode(ftdi, bitmask2, BITMODE_CBUS);
|
|
||||||
if (res < 0) {
|
|
||||||
fprintf(stderr, "ftdi_set_bitmode: %s\n", ftdi_get_error_string(ftdi));
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
sleep(2);
|
|
||||||
printf("cbus3\n");
|
|
||||||
ftdi_disable_bitbang(ftdi);
|
|
||||||
//while (1);
|
|
||||||
//return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
res = ftdi_set_baudrate(ftdi, round(dreamcast_rate(current_cks, scbrr)));
|
res = ftdi_set_baudrate(ftdi, round(dreamcast_rate(current_cks, scbrr)));
|
||||||
if (res < 0) {
|
if (res < 0) {
|
||||||
fprintf(stderr, "ftdi_set_baudrate: %s\n", ftdi_get_error_string(ftdi));
|
fprintf(stderr, "ftdi_set_baudrate: %s\n", ftdi_get_error_string(ftdi));
|
||||||
@ -431,6 +389,49 @@ int do_list_baudrates(struct ftdi_context * ftdi)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int do_reset(struct ftdi_context * ftdi)
|
||||||
|
{
|
||||||
|
int res;
|
||||||
|
|
||||||
|
for (int i = 0; i < 2; i++) {
|
||||||
|
timespec t = {.tv_sec = 0, .tv_nsec = 33000 * 2 };
|
||||||
|
|
||||||
|
// toggle ACBUS5 low (g reset asserted)
|
||||||
|
uint8_t bitmask1 = (0b0001 << 4) | (0b0001 << 0);
|
||||||
|
res = ftdi_set_bitmode(ftdi, bitmask1, BITMODE_CBUS);
|
||||||
|
if (res < 0) {
|
||||||
|
fprintf(stderr, "ftdi_set_bitmode: %s\n", ftdi_get_error_string(ftdi));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
printf("cbus1\n");
|
||||||
|
|
||||||
|
nanosleep(&t, NULL);
|
||||||
|
|
||||||
|
// toggle ACBUS5 low (g reset deasserted)
|
||||||
|
uint8_t bitmask2 = (0b0000 << 4) | (0b0001 << 0);
|
||||||
|
res = ftdi_set_bitmode(ftdi, bitmask2, BITMODE_CBUS);
|
||||||
|
if (res < 0) {
|
||||||
|
fprintf(stderr, "ftdi_set_bitmode: %s\n", ftdi_get_error_string(ftdi));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
printf("cbus2\n");
|
||||||
|
|
||||||
|
nanosleep(&t, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t bitmask2 = (0b0000 << 4) | (0b0000 << 0);
|
||||||
|
res = ftdi_set_bitmode(ftdi, bitmask2, BITMODE_CBUS);
|
||||||
|
if (res < 0) {
|
||||||
|
fprintf(stderr, "ftdi_set_bitmode: %s\n", ftdi_get_error_string(ftdi));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("cbus3\n");
|
||||||
|
ftdi_disable_bitbang(ftdi);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int read_file(const char * filename, uint8_t ** buf, uint32_t * size_out)
|
int read_file(const char * filename, uint8_t ** buf, uint32_t * size_out)
|
||||||
{
|
{
|
||||||
FILE * file = fopen(filename, "rb");
|
FILE * file = fopen(filename, "rb");
|
||||||
@ -752,6 +753,7 @@ const struct cli_command commands[] = {
|
|||||||
{ "list_baudrates" , 0, (void *)&do_list_baudrates , false, NULL},
|
{ "list_baudrates" , 0, (void *)&do_list_baudrates , false, NULL},
|
||||||
{ "show_baudrate_error", 0, (void *)&do_show_baudrate_error , true, NULL},
|
{ "show_baudrate_error", 0, (void *)&do_show_baudrate_error , true, NULL},
|
||||||
{ "help" , 0, (void *)&do_help , false, NULL},
|
{ "help" , 0, (void *)&do_help , false, NULL},
|
||||||
|
{ "reset" , 0, (void *)&do_reset , true, NULL},
|
||||||
};
|
};
|
||||||
constexpr int commands_length = (sizeof (commands)) / (sizeof (commands[0]));
|
constexpr int commands_length = (sizeof (commands)) / (sizeof (commands[0]));
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user