Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как узнать адрес COM порта

53K
29 июня 2010 года
во_Анатоль
12 / / 24.05.2010
Добрый день!
Помогите получить базовый адрес COM9 порта
1
29 июня 2010 года
kot_
7.3K / / 20.01.2000
приведите пример - что конекретно вы хотите и что не получается.
1
29 июня 2010 года
kot_
7.3K / / 20.01.2000
естественно - из найденного на форуме.
53K
29 июня 2010 года
во_Анатоль
12 / / 24.05.2010
Цитата: kot_
приведите пример - что конекретно вы хотите и что не получается.



Есть готовое консольное приложение , в котором используется следующее:
static int base0=0x3f8;// базовый адрес 1 com порта
.
.
.
outportb (base0,cmd);

Как мне получить в base0 базовый адрес 9-го com порта

1
30 июня 2010 года
kot_
7.3K / / 20.01.2000
Боюсь что в вашем случае врядли это будет работать - если порт виртуальный (а я подозреваю что это так). Это раз. Второе - используйте CreateFile.
Впрочем можете пробовать - в одном из форумов наткнулся на подобный код - думаю это то что вам необходимо (после определенной доработки и чтения МСДН)
Код:
typedef struct
{
  CHAR    *PortPath;
  CHAR    *PortFriendlyName;
} SERIAL_PORT,*LPSERIAL_PORT;
 
 
BOOL doEnumSerialPort(LPSERIAL_PORT Port,LPDWORD PortCount)
{
  HDEVINFO                            hDevInfo,hTmpDevInfo;
  SP_DEVICE_INTERFACE_DATA            deviceInterfaceData;
  PSP_DEVICE_INTERFACE_DETAIL_DATA    DeviceInterfaceDetailData;
  SP_DEVINFO_DATA                     DevInfo;
  ULONG                               i = 0;
  ULONG                               requiredSize;
  ULONG                               dwError = 0;
  BOOL                                bReturn;
  CHAR                                Buffer[256];
  *PortCount=0;
  hTmpDevInfo=SetupDiCreateDeviceInfoList(NULL, NULL);
 
  hDevInfo = SetupDiGetClassDevsEx(&GUID_DEVCLASS_PORTS,
                                    NULL,
                                    NULL,
                                    DIGCF_PRESENT|DIGCF_DEVICEINTERFACE ,
                                    hTmpDevInfo,
                                    NULL,
                                    NULL);
  while (TRUE)
  {
    deviceInterfaceData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);
    if (SetupDiEnumDeviceInterfaces(hDevInfo, 0, &GUID_DEVCLASS_PORTS, i, &deviceInterfaceData))
    {
      bReturn = SetupDiGetDeviceInterfaceDetail(hDevInfo,
                                                &deviceInterfaceData,
                                                NULL,
                                                0,
                                                &requiredSize,
                                                NULL
                                                );
      DeviceInterfaceDetailData =(PSP_DEVICE_INTERFACE_DETAIL_DATA ) LocalAlloc(LPTR, requiredSize);
      DeviceInterfaceDetailData->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
      DevInfo.cbSize=sizeof(SP_DEVINFO_DATA);
      bReturn = SetupDiGetDeviceInterfaceDetail(hDevInfo,
                                                &deviceInterfaceData,
                                                DeviceInterfaceDetailData,
                                                requiredSize,
                                                NULL,
                                                &DevInfo);
        if (!bReturn)
        {
          dwError = GetLastError();
          LocalFree(DeviceInterfaceDetailData);
          break;
        }
        else
        {
          OutputDebugString(DeviceInterfaceDetailData->DevicePath);
          OutputDebugString("\n");
          Port.PortPath=_strdup(DeviceInterfaceDetailData->DevicePath);
          LocalFree(DeviceInterfaceDetailData);
        }
     
      SetupDiGetDeviceRegistryProperty(hDevInfo,&DevInfo,SPDRP_FRIENDLYNAME,NULL,NULL,0,&requiredSize);
      SetupDiGetDeviceRegistryProperty(hDevInfo,&DevInfo,SPDRP_FRIENDLYNAME,NULL,(UCHAR*)Buffer,requiredSize,NULL);
      Port.PortFriendlyName=_strdup(Buffer);
 
    }
    else
    {
        dwError = GetLastError();
        break;
    }
    i++;
  }
  SetupDiDestroyDeviceInfoList(hDevInfo);
  *PortCount=i;
  return TRUE;
}
1
30 июня 2010 года
kot_
7.3K / / 20.01.2000
Насколько мне известно - к виртуальному порту вы можете обращаться только по имени, а не по адресу (которого у него нет)
399
30 июня 2010 года
KIV
432 / / 20.01.2009
Физических портов насколько мне известно только два - COM1 и COM2 (и то на новых компьютерах их может быть меньше - 1 или 0). Все у которых номер больше 2 - это виртуальные порты. Никакого физического воплощения они не имеют. По крайней мере в виде COM порта (вот у меня 3G можем - это два порта - COM21 и COM22). Соответственно можно обратиться только средствами ОС.
1
30 июня 2010 года
kot_
7.3K / / 20.01.2000
На самом деле физических поротов может быть от 0 до относительно произвольного количества.
Я просто предположил, что возможно автор борется с виртуальным портом - так как сам он ничего об этом не сказал. Но на самом деле никто не мешает установить например плату расширения или две - тогда физический COM9 вполне будет иметь место (и адрес)
518
08 июля 2010 года
Andreika
101 / / 14.02.2003
Сталкивался ровно с такой же задачей. Была плата и из под ДОСа выполнялась команда outport(0xf7-что-то там). Под виндой 95 работало хорошо, а под NT ругалась на privileged instruction или как-то так, уже не помню. Писали драйвер, который работал на более низком уровне защиты.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог