Add bit reverse order feature

This commit is contained in:
Attila Veghelyi 2022-09-29 15:42:44 +02:00
parent ce3101a380
commit 5b8f33bd78

View file

@ -84,6 +84,7 @@
#define KEY_H 0x68
#define KEY_L 0x6C
#define KEY_SHIFT_L 0x4C
#define KEY_M 0x6D
#define KEY_P 0x70
#define KEY_Q 0x71
#define KEY_S 0x73
@ -126,6 +127,7 @@ static bool map_o_cr_nl = false;
static bool map_o_nl_crnl = false;
static bool map_o_del_bs = false;
static bool map_o_ltu = false;
static bool map_o_msblsb = false;
static char hex_chars[2];
static unsigned char hex_char_index = 0;
static char tty_buffer[BUFSIZ*2];
@ -410,6 +412,7 @@ void handle_command_sequence(char input_char, char previous_char, char *output_c
tio_printf(" ctrl-%c h Toggle hexadecimal mode", option.prefix_key);
tio_printf(" ctrl-%c l Clear screen", option.prefix_key);
tio_printf(" ctrl-%c L Show line states", option.prefix_key);
tio_printf(" ctrl-%c m Toggle MSB to LSB bit order", option.prefix_key);
tio_printf(" ctrl-%c p Pulse serial port line", option.prefix_key);
tio_printf(" ctrl-%c q Quit", option.prefix_key);
tio_printf(" ctrl-%c s Show statistics", option.prefix_key);
@ -498,6 +501,20 @@ void handle_command_sequence(char input_char, char previous_char, char *output_c
printf("\033c");
break;
case KEY_M:
/* Toggle bit order */
if (!map_o_msblsb)
{
map_o_msblsb = true;
tio_printf("Switched to reverse bit order");
}
else
{
map_o_msblsb = false;
tio_printf("Switched to normal bit order");
}
break;
case KEY_Q:
/* Exit upon ctrl-t q sequence */
exit(EXIT_SUCCESS);
@ -860,6 +877,10 @@ void tty_configure(void)
{
map_o_ltu = true;
}
else if (strcmp(token, "MSB2LSB") == 0)
{
map_o_msblsb = true;
}
else
{
printf("Error: Unknown mapping flag %s\n", token);
@ -1219,8 +1240,19 @@ int tty_connect(void)
}
}
/* Convert MSB to LSB bit order */
if (map_o_msblsb)
{
char ch = input_char;
input_char = 0;
for (int j = 0; j < 8; ++j)
{
input_char |= ((1 << j) & ch) ? (1 << (7 - j)) : 0;
}
}
/* Map input character */
if ((input_char == '\n') && (map_i_nl_crnl))
if ((input_char == '\n') && (map_i_nl_crnl) && (!map_o_msblsb))
{
print('\r');
print('\n');