DTR drop causes modem to hangup

This commit is contained in:
bbond007
2019-10-10 20:16:03 -04:00
parent 6b15f83ca9
commit edfa8d5e51
7 changed files with 24 additions and 24 deletions

View File

@@ -14,7 +14,7 @@
static char * midiLinkINI = "/media/fat/linux/MidiLink.INI";
static char * midiLinkDIR = "/media/fat/linux/MidiLink.DIR";
static char * serialDevice = "/dev/ttyS1";
static char * helloStr = "MiSTer MidiLink 2.7 BB7";
static char * helloStr = "MiSTer MidiLink 2.8.B1 BB7";
static unsigned char test_note[3] = {0x90, 60, 127};
static char * midiINDevice = "/dev/midi2";
static char * midiDevice = "/dev/midi1";

16
main.c
View File

@@ -325,7 +325,7 @@ void * tcplst_thread_function (void * x)
play_ring_sound(buf);
play_connect_sound(buf);
//misc_swrite_no_trans(fdSerial, "\r\nCONNECT %d\r\n", baudRate);
serial2_setDCD(fdSerial, TRUE);
serial2_set_DCD(fdSerial, TRUE);
do
{
rdLen = read(socket_in, buf, sizeof(buf));
@@ -343,7 +343,7 @@ void * tcplst_thread_function (void * x)
}
} while (socket_in != -1);
misc_swrite_no_trans(fdSerial, "\r\nNO CARRIER\r\n");
serial2_setDCD(fdSerial, FALSE);
serial2_set_DCD(fdSerial, FALSE);
}
else
{
@@ -446,7 +446,7 @@ void do_check_modem_hangup(int * socket, char * buf, int bufLen)
{
tcpsock_close(*socket);
*socket = -1;
serial2_setDCD(fdSerial, FALSE);
serial2_set_DCD(fdSerial, FALSE);
sprintf(tmp, "\r\nHANG-UP DETECTED\r\n");
misc_print(1, "HANG-UP Detected --> %d\n", delay);
//misc_swrite(fdSerial, tmp);
@@ -668,7 +668,7 @@ int handle_at_command(char * lineBuf)
serial_do_tcdrain(fdSerial);
if(MODEMSOUND)
sleep(1);
serial2_setDCD(fdSerial, FALSE);
serial2_set_DCD(fdSerial, FALSE);
socket_out = tcpsock_client_connect(ipAddr, iPort, fdSerial);
}
if(socket_out > 0)
@@ -681,7 +681,7 @@ int handle_at_command(char * lineBuf)
serial_do_tcdrain(fdSerial);
sleep(1);
int status = pthread_create(&socketInThread, NULL, tcpsock_thread_function, NULL);
serial2_setDCD(fdSerial, TRUE);
serial2_set_DCD(fdSerial, TRUE);
return TRUE;
}
}
@@ -1374,7 +1374,7 @@ int main(int argc, char *argv[])
serial_set_flow_control(fdSerial, 0);
serial2_set_baud(serialDevice, fdSerial, baudRate);
serial_do_tcdrain(fdSerial);
serial2_setDCD(fdSerial, (mode == ModeTCP)?FALSE:TRUE);
serial2_set_DCD(fdSerial, (mode == ModeTCP)?FALSE:TRUE);
if (mode == ModeMUNT || mode == ModeMUNTGM || mode == ModeFSYNTH)
{
@@ -1454,7 +1454,7 @@ int main(int argc, char *argv[])
{
if(TCPFlow > 0)
serial_set_flow_control(fdSerial, TCPFlow);
//serial2_setDCD(fdSerial, FALSE);
//serial2_set_DCD(fdSerial, FALSE);
serial_set_timeout(fdSerial, 1);
socket_lst = tcpsock_server_open(TCPServerPort);
if(socket_lst != -1)
@@ -1575,7 +1575,7 @@ int main(int argc, char *argv[])
else if (mode == ModeTCP && socket_in == -1)
do_modem_emulation(buf, rdLen);
}
else if (mode == ModeTCP && rdLen == 0 && serial2_getDSR(fdSerial) == FALSE)
else if (mode == ModeTCP && rdLen == 0 && serial2_get_DSR(fdSerial) == FALSE)
{ // deal with client hangup via DTR
if(socket_out != -1)
{

BIN
midilink

Binary file not shown.

2
misc.c
View File

@@ -788,7 +788,7 @@ void misc_do_rowcheck(int fdSerial, int rows, int * rowcount, char * c, int CR)
if (CR)
misc_swrite(fdSerial, "\r\n");
misc_swrite(fdSerial, pauseStr);
read(fdSerial, c, 1);
while (read(fdSerial, &c, 1) == 0) {};
if(pauseDel[0] != 0x08)
memset(pauseDel, 0x08, sizeof(pauseDel));
misc_swrite(fdSerial, pauseDel);

View File

@@ -127,8 +127,8 @@ void serial_set_timeout(int fdSerial, int timeout)
struct termios termios;
misc_print(0, "serial_set_timeout --> %d\n",timeout * 10);
tcgetattr(fdSerial, &termios);
termios.c_lflag &= ~ICANON; /* Set non-canonical mode */
termios.c_cc[VTIME] = timeout * 10; /* Set timeout seconds */
termios.c_lflag &= ~ICANON; // Set non-canonical mode
termios.c_cc[VTIME] = timeout * 10; // Set timeout seconds
termios.c_cc[VMIN] = 0;
tcsetattr(fdSerial, TCSANOW, &termios);
}

View File

@@ -115,35 +115,35 @@ int serial2_show_menu(int fdSerial)
///////////////////////////////////////////////////////////////////////////////////////
//
// int serial2_getDSR(int fd)
// int serial2_get_DSR(int fdSerial)
//
int serial2_getDSR(int fd)
int serial2_get_DSR(int fdSerial)
{
int s;
/* Read terminal status line: Data Set Ready */
ioctl(fd, TIOCMGET, &s);
ioctl(fdSerial, TIOCMGET, &s);
return (s & TIOCM_DSR) != 0;
}
///////////////////////////////////////////////////////////////////////////////////////
//
// int serial2_setDTR(int fd, int on)
// int serial2_set_DTR(int fdSerial, int on)
//
int serial2_setDTR(int fd, int on)
int serial2_set_DTR(int fdSerial, int on)
{
int controlbits = TIOCM_DTR;
/* Set terminal status line: Data Set Ready */
return ioctl(fd, on?TIOCMBIS:TIOCMBIC, &controlbits);
return ioctl(fdSerial, on?TIOCMBIS:TIOCMBIC, &controlbits);
}
///////////////////////////////////////////////////////////////////////////////////////
//
// int serial2_setDCD(int fd, int on)
// int serial2_set_DCD(int fdSerial, int on)
//
int serial2_setDCD(int fd, int on)
int serial2_set_DCD(int fdSerial, int on)
{
int result;
result = serial2_setDTR(fd, on);
result = serial2_set_DTR(fdSerial, on);
misc_print(1, "Setting DCD --> %s\n",on?"TRUE":"FALSE");
return result;
}

View File

@@ -4,7 +4,7 @@ int serial2_is_valid_rate (int baud);
void serial2_show_menu(int fdSerial);
int serial2_baud_at_index(int index);
int serial2_indexof(int baud);
int serial2_setDTR(int fd, int on);
int serial2_getDSR(int fd);
int serial2_setDCD(int fd, int on);
int serial2_set_DTR(int fd, int on);
int serial2_get_DSR(int fd);
int serial2_set_DCD(int fd, int on);