mirror of
https://github.com/MiSTer-devel/MidiLink_MiSTer.git
synced 2026-05-24 03:04:13 +00:00
DTR drop causes modem to hangup
This commit is contained in:
2
config.h
2
config.h
@@ -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
16
main.c
@@ -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)
|
||||
{
|
||||
|
||||
2
misc.c
2
misc.c
@@ -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);
|
||||
|
||||
4
serial.c
4
serial.c
@@ -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);
|
||||
}
|
||||
|
||||
18
serial2.c
18
serial2.c
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user