Revision 4991f810
Added by Hamish Coleman over 17 years ago
- ID 4991f81052d262051d839e7130ac4082b5b644fb
| wconsd.c | ||
|---|---|---|
|
}
|
||
|
|
||
|
/* open the com port */
|
||
|
DWORD open_com_port(struct connection *conn, DWORD *specificError) {
|
||
|
int open_com_port(struct connection *conn) {
|
||
|
/* Open the COM port */
|
||
|
char portstr[12];
|
||
|
|
||
| ... | ... | |
|
FILE_FLAG_OVERLAPPED,
|
||
|
NULL);
|
||
|
if (conn->serial == INVALID_HANDLE_VALUE) {
|
||
|
*specificError=GetLastError();
|
||
|
return 13;
|
||
|
return -1;
|
||
|
}
|
||
|
|
||
|
if (!GetCommState(conn->serial, &dcb)) {
|
||
|
*specificError=GetLastError();
|
||
|
return 14;
|
||
|
return -1;
|
||
|
}
|
||
|
|
||
|
// Fill in the device control block
|
||
| ... | ... | |
|
dcb.fAbortOnError=FALSE;
|
||
|
|
||
|
if (!SetCommState(conn->serial, &dcb)) {
|
||
|
*specificError=GetLastError();
|
||
|
return 15;
|
||
|
return -1;
|
||
|
}
|
||
|
|
||
|
/* FIXME - these values need much more tuning */
|
||
| ... | ... | |
|
timeouts.WriteTotalTimeoutMultiplier=0;
|
||
|
timeouts.WriteTotalTimeoutConstant=0;
|
||
|
if (!SetCommTimeouts(conn->serial, &timeouts)) {
|
||
|
*specificError=GetLastError();
|
||
|
return 16;
|
||
|
return -1;
|
||
|
}
|
||
|
conn->serialconnected=1;
|
||
|
return 0;
|
||
| ... | ... | |
|
return 0;
|
||
|
}
|
||
|
|
||
|
void do_serial(struct connection *conn) {
|
||
|
dprintf(1,"wconsd[%i]: debug: start do_serial\n",conn->id);
|
||
|
conn->option_runmenu=0;
|
||
|
|
||
|
if (!conn->netconnected) {
|
||
|
/* what are we doing here then ??? */
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if (!conn->serialconnected) {
|
||
|
if (open_com_port(conn)) {
|
||
|
netprintf(conn,"error: cannot open port\r\n\n");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
netprintf(conn,"\r\n\n");
|
||
|
|
||
|
PurgeComm(conn->serial,PURGE_RXCLEAR|PURGE_RXABORT);
|
||
|
if (conn->serialThread==NULL) {
|
||
|
/* we might already have a com_to_net thread */
|
||
|
conn->serialThread=CreateThread(NULL,0,wconsd_com_to_net,conn,0,NULL);
|
||
|
}
|
||
|
|
||
|
conn->netThread=CreateThread(NULL,0,wconsd_net_to_com,conn,0,NULL);
|
||
|
WaitForSingleObject(conn->netThread,INFINITE);
|
||
|
CloseHandle(conn->netThread);
|
||
|
conn->netThread=NULL;
|
||
|
|
||
|
conn->option_runmenu=1;
|
||
|
}
|
||
|
|
||
|
void send_help(struct connection *conn) {
|
||
|
netprintf(conn,
|
||
|
"NOTE: the commands will be changing in the next version\r\n"
|
||
| ... | ... | |
|
}
|
||
|
show_status(conn);
|
||
|
} else if (!strcmp(command, "open")) { // open
|
||
|
DWORD errcode;
|
||
|
int new = check_atoi(parameter1,com_port,conn,"Opening default port\r\n");
|
||
|
|
||
|
if (new >= 1 && new <= 16) {
|
||
| ... | ... | |
|
return;
|
||
|
}
|
||
|
|
||
|
if (!open_com_port(conn,&errcode)) {
|
||
|
if (!open_com_port(conn)) {
|
||
|
netprintf(conn,"\r\n\n");
|
||
|
// signal to quit the menu
|
||
|
conn->option_runmenu=0;
|
||
| ... | ... | |
|
} else {
|
||
|
netprintf(conn,"error: cannot open port\r\n\n");
|
||
|
}
|
||
|
} else if (!strcmp(command, "opentest")) {
|
||
|
netprintf(conn,"Testing\r\n");
|
||
|
do_serial(conn);
|
||
|
} else if (!strcmp(command, "close")) { // close
|
||
|
close_serial_connection(conn);
|
||
|
netprintf(conn,"info: actual com port closed\r\n\n");
|
||
Also available in: Unified diff
Begin to add code allowing the merging of menu and net threads