Exemple #1
0
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, &times);

#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
}
Exemple #2
0
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;
}
Exemple #3
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, &times);

 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;
}
Exemple #4
0
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, &times);

 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
}