void ISA_MODEM::open(int port) { if (open_port == port) return; whead = wtail = rhead = rtail = 0; if (hPort && hPort != INVALID_HANDLE_VALUE) CloseHandle(hPort); open_port = port; if (!port) return; char portName[11]; _snprintf(portName, _countof(portName), "\\\\.\\COM%d", port); hPort = CreateFile(portName, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0); if (hPort == INVALID_HANDLE_VALUE) { errmsg("can't open modem on %s", portName); err_win32(); conf.modem_port = open_port = 0; return; } COMMTIMEOUTS times; times.ReadIntervalTimeout = MAXDWORD; times.ReadTotalTimeoutMultiplier = 0; times.ReadTotalTimeoutConstant = 0; times.WriteTotalTimeoutMultiplier = 0; times.WriteTotalTimeoutConstant = 0; SetCommTimeouts(hPort, ×); #if 0 DCB dcb; if (GetCommState(hPort, &dcb)) { printf( "modem state:\n" "rate=%d\n" "parity=%d, OutxCtsFlow=%d, OutxDsrFlow=%d, DtrControl=%d, DsrSensitivity=%d\n" "TXContinueOnXoff=%d, OutX=%d, InX=%d, ErrorChar=%d\n" "Null=%d, RtsControl=%d, AbortOnError=%d, XonLim=%d, XoffLim=%d\n" "ByteSize=%d, Parity=%d, StopBits=%d\n" "XonChar=#%02X, XoffChar=#%02X, ErrorChar=#%02X, EofChar=#%02X, EvtChar=#%02X\n\n", dcb.BaudRate, dcb.fParity, dcb.fOutxCtsFlow, dcb.fOutxDsrFlow, dcb.fDtrControl, dcb.fDsrSensitivity, dcb.fTXContinueOnXoff, dcb.fOutX, dcb.fInX, dcb.fErrorChar, dcb.fNull, dcb.fRtsControl, dcb.fAbortOnError, dcb.XonLim, dcb.XoffLim, dcb.ByteSize, dcb.Parity, dcb.StopBits, (BYTE)dcb.XonChar, (BYTE)dcb.XoffChar, (BYTE)dcb.ErrorChar, (BYTE)dcb.EofChar, (BYTE)dcb.EvtChar); } #endif }
void ATA_DEVICE::configure(IDE_CONFIG *cfg) { atapi_p.close(); ata_p.close(); c = cfg->c, h = cfg->h, s = cfg->s, lba = cfg->lba; readonly = cfg->readonly; memset(regs, 0, sizeof(regs)); // Очищаем регистры command_ok(); // Сбрасываем состояние и позицию передачи данных phys_dev = -1; if (!*cfg->image) return; PHYS_DEVICE filedev, *dev; phys_dev = find_hdd_device(cfg->image); if (phys_dev == -1) { if (cfg->image[0] == '<') { errmsg("no physical device %s", cfg->image); *cfg->image = 0; return; } strcpy(filedev.filename, cfg->image); filedev.type = cfg->cd ? ATA_FILECD : ATA_FILEHDD; dev = &filedev; } else { dev = &phys[phys_dev]; if (dev->type == ATA_NTHDD) { // read geometry from id sector c = *(unsigned short*)(phys[phys_dev].idsector+2); h = *(unsigned short*)(phys[phys_dev].idsector+6); s = *(unsigned short*)(phys[phys_dev].idsector+12); lba = *(unsigned*)(phys[phys_dev].idsector+0x78); if (!lba) lba = c*h*s; } } DWORD errcode; if (dev->type == ATA_NTHDD || dev->type == ATA_FILEHDD) { dev->usage = ATA_OP_USE; errcode = ata_p.open(dev); atapi = 0; } if (dev->type == ATA_SPTI_CD || dev->type == ATA_ASPI_CD || dev->type == ATA_FILECD) { dev->usage = ATA_OP_USE; errcode = atapi_p.open(dev); atapi = 1; } if (errcode == NO_ERROR) return; errmsg("failed to open %s", cfg->image); err_win32(errcode); *cfg->image = 0; }
void ZF232::zf_open(int port) { if (zf_open_port == port) return; selected_api_layer = zf_whead = zf_wtail = zf_rhead = zf_rtail = 0; result_code = 0xFF; if (zf_hPort && zf_hPort != INVALID_HANDLE_VALUE) { CloseHandle(zf_hPort); CloseHandle(zf_OvW.hEvent); CloseHandle(zf_OvR.hEvent); } if (port < 1 || port > 255) return; conf.zifi_port = zf_open_port = port; open_port = rs_open_port | zf_open_port; char portName[11]; _snprintf(portName, _countof(portName), "\\\\.\\COM%d", port); zf_hPort = CreateFile(portName, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0); if (zf_hPort == INVALID_HANDLE_VALUE) { errmsg("can't open %s", portName); err_win32(); zf_open_port = 0; open_port = rs_open_port; return; } DCB dcb; if (GetCommState(zf_hPort, &dcb) == 0) { errmsg("GetCommState() on %s", portName); err_win32(); CloseHandle(zf_hPort); zf_open_port = 0; open_port = rs_open_port; return; } dcb.fBinary = TRUE; // Binary mode; no EOF check dcb.fParity = FALSE; // No parity checking dcb.fDsrSensitivity = FALSE; // DSR sensitivity dcb.fErrorChar = FALSE; // Disable error replacement dcb.fOutxDsrFlow = FALSE; // No DSR output flow control dcb.fAbortOnError = FALSE; // Do not abort reads/writes on error dcb.fNull = FALSE; // Disable null stripping dcb.fTXContinueOnXoff = FALSE; // XOFF continues Tx dcb.BaudRate = 115200; dcb.ByteSize = 8; dcb.Parity = NOPARITY; dcb.StopBits = ONESTOPBIT; dcb.fOutxCtsFlow = FALSE; // No CTS output flow control dcb.fDtrControl = DTR_CONTROL_DISABLE; // DTR flow control type dcb.fOutX = FALSE; // No XON/XOFF out flow control dcb.fInX = FALSE; // No XON/XOFF in flow control dcb.fRtsControl = RTS_CONTROL_DISABLE; // RTS flow control if (SetCommState(zf_hPort, &dcb) == 0) { errmsg("SetCommState() on %s", portName); err_win32(); CloseHandle(zf_hPort); zf_open_port = 0; open_port = rs_open_port; return; } COMMTIMEOUTS times; times.ReadIntervalTimeout = MAXDWORD; times.ReadTotalTimeoutMultiplier = 0; times.ReadTotalTimeoutConstant = 0; times.WriteTotalTimeoutMultiplier = 0; times.WriteTotalTimeoutConstant = 0; SetCommTimeouts(zf_hPort, ×); memset(&zf_OvW, 0, sizeof(zf_OvW)); memset(&zf_OvR, 0, sizeof(zf_OvR)); zf_OvW.hEvent = CreateEvent(0, TRUE, TRUE, 0); zf_OvR.hEvent = CreateEvent(0, TRUE, TRUE, 0); return; }
void ZF232::rs_open(int port) { if (rs_open_port == port) return; rs_whead = rs_wtail = rs_rhead = rs_rtail = 0; if (rs_hPort && rs_hPort != INVALID_HANDLE_VALUE) { CloseHandle(rs_hPort); CloseHandle(rs_OvW.hEvent); CloseHandle(rs_OvR.hEvent); } if (port < 1 || port > 255) return; rs_open_port = port; open_port = rs_open_port | zf_open_port; char portName[11]; _snprintf(portName, _countof(portName), "\\\\.\\COM%d", port); rs_hPort = CreateFile(portName, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0); if (rs_hPort == INVALID_HANDLE_VALUE) { errmsg("can't open modem on %s", portName); err_win32(); conf.modem_port = rs_open_port = 0; open_port = zf_open_port; return; } COMMTIMEOUTS times; times.ReadIntervalTimeout = MAXDWORD; times.ReadTotalTimeoutMultiplier = 0; times.ReadTotalTimeoutConstant = 0; times.WriteTotalTimeoutMultiplier = 0; times.WriteTotalTimeoutConstant = 0; SetCommTimeouts(rs_hPort, ×); memset(&rs_OvW, 0, sizeof(rs_OvW)); memset(&rs_OvR, 0, sizeof(rs_OvR)); rs_OvW.hEvent = CreateEvent(0, TRUE, TRUE, 0); rs_OvR.hEvent = CreateEvent(0, TRUE, TRUE, 0); #if 0 DCB dcb; if (GetCommState(rs_hPort, &dcb)) { printf("modem state:\n" "rate=%d\n" "parity=%d, OutxCtsFlow=%d, OutxDsrFlow=%d, DtrControl=%d, DsrSensitivity=%d\n" "TXContinueOnXoff=%d, OutX=%d, InX=%d, ErrorChar=%d\n" "Null=%d, RtsControl=%d, AbortOnError=%d, XonLim=%d, XoffLim=%d\n" "ByteSize=%d, Parity=%d, StopBits=%d\n" "XonChar=#%02X, XoffChar=#%02X, ErrorChar=#%02X, EofChar=#%02X, EvtChar=#%02X\n\n", dcb.BaudRate, dcb.fParity, dcb.fOutxCtsFlow, dcb.fOutxDsrFlow, dcb.fDtrControl, dcb.fDsrSensitivity, dcb.fTXContinueOnXoff, dcb.fOutX, dcb.fInX, dcb.fErrorChar, dcb.fNull, dcb.fRtsControl, dcb.fAbortOnError, dcb.XonLim, dcb.XoffLim, dcb.ByteSize, dcb.Parity, dcb.StopBits, (BYTE) dcb.XonChar, (BYTE) dcb.XoffChar, (BYTE) dcb.ErrorChar, (BYTE) dcb.EofChar, (BYTE) dcb.EvtChar); } #endif }