void modem_input_thread(void *args) { int rd; int buffered; size_t buffer; BOOL monitor_dsr=TRUE; SetThreadName("Modem Input"); conn_api.input_thread_running=1; if(args != NULL) { if((comGetModemStatus(com)&COM_DSR) == 0) monitor_dsr=FALSE; } while(com != COM_HANDLE_INVALID && !conn_api.terminate) { rd=comReadBuf(com, conn_api.rd_buf, conn_api.rd_buf_size, NULL, 100); buffered=0; while(buffered < rd) { pthread_mutex_lock(&(conn_inbuf.mutex)); buffer=conn_buf_wait_free(&conn_inbuf, rd-buffered, 100); buffered+=conn_buf_put(&conn_inbuf, conn_api.rd_buf+buffered, buffer); pthread_mutex_unlock(&(conn_inbuf.mutex)); } if(args==NULL) { if((comGetModemStatus(com)&COM_DCD) == 0) break; } else if(monitor_dsr) { if((comGetModemStatus(com)&COM_DSR) == 0) break; } } if(args != NULL) comLowerDTR(com); conn_api.input_thread_running=0; }
size_t COMIOCALL comReadLine(COM_HANDLE handle, char* buf, size_t buflen, int timeout) { size_t len; len=comReadBuf(handle, buf, buflen-1, "\n", timeout); buf[len]=0; return len; }