|
|
  |
USB на ATtiny45 и с UART-ом |
|
|
|
Oct 5 2007, 06:19
|
Знающий
   
Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709

|
Цитата(prottoss @ Oct 4 2007, 16:46)  Нет, винда присвоит номер порта по своему усмотрению. Хотя, возможно, есть методы установки статического номера...
НО, это не есть хороший стиль для ПО. Лучше, если ПО будет искать устройство не по номеру порта, а по VID и PID устройства, а у устройства будут Вендор Рекюесты в запросах по управляющей ендпоинт А как с COM порта считать VID и PID? Процедуру опознания вижу так: последовательно открывать порты от COM0 до COM… Если порт открылся кинуть туда команду с паролем, если ответ получен и он правильный, то продолжаем дальше штатно работать.
|
|
|
|
|
Oct 5 2007, 11:17
|

Гуру
     
Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659

|
Цитата(Oleg_IT @ Oct 5 2007, 14:19)  А как с COM порта считать VID и PID? Процедуру опознания вижу так: последовательно открывать порты от COM0 до COM… Если порт открылся кинуть туда команду с паролем, если ответ получен и он правильный, то продолжаем дальше штатно работать. ИМХО работать лучше с портами, а не с реестром, что я обычно и делаю. Во первых - это быстрее. Во вторых не у каждого Васи Пупкина реестор в порядке, и вообще, это такая неустойчивая весчь, состояние которой часто зависит от погоды на Марсе. Процедуру опознавания можно проводить так: 1. Открываем СОМn (n = 1...255); 2. Если порт не доступен (открыт другим приложением или отсутсвует) n = n+1; goto п.1 3. Вызываем Win32API функции GetCommConfig, GetCommProperties и GetDefaultCommConfig из которых извлекаем ВСЕ нужные нам данные. 4. Если это то, что нам нужно, хлопаем в ладоши, если нет: n = n+1; goto п.1 Подробнее о Win32API функциях раскажет товарисч Гугль
--------------------
|
|
|
|
|
Oct 5 2007, 11:33
|
Знающий
   
Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984

|
Ну вот такое я использую у себя на васике ,для определения существующих ,точнее доступных на данный момент портов. обьявляем Код Type DCB DCBlength As Long BaudRate As Long fBitFields As Long wReserved As Integer XonLim As Integer XoffLim As Integer ByteSize As Byte Parity As Byte StopBits As Byte XonChar As Byte XoffChar As Byte ErrorChar As Byte EofChar As Byte EvtChar As Byte wReserved1 As Integer End Type
Type COMMCONFIG dwSize As Long wVersion As Integer wReserved As Integer dcbx As DCB dwProviderSubType As Long dwProviderOffset As Long dwProviderSize As Long wcProviderData As Byte End Type
Declare Function GetDefaultCommConfig Lib "kernel32" _ Alias "GetDefaultCommConfigA" (ByVal lpszName As String, _ lpCC As COMMCONFIG, lpdwSize As Long) As Long
Public Function EnumSerPorts(port As Integer) As Long 'this function returns non-zero value if the port exists Dim cc As COMMCONFIG, ccsize As Long ' ccsize = LenB(cc) 'gets the size of COMMCONFIG structure ' EnumSerPorts = GetDefaultCommConfig("COM" + Trim(Str(port)) + _ Chr(0), cc, ccsize) ' End Function определяем ,передаем параметр номер порта ,если существует EnumSerPorts возвращает 1. Код If EnumSerPorts(5) = 1 Then menu_port_com5.Enabled = True If EnumSerPorts(4) = 1 Then menu_port_com4.Enabled = True If EnumSerPorts(3) = 1 Then menu_port_com3.Enabled = True If EnumSerPorts(2) = 1 Then menu_port_com2.Enabled = True If EnumSerPorts(1) = 1 Then menu_port_com1.Enabled = True
|
|
|
|
|
Oct 5 2007, 13:43
|
Участник

Группа: Свой
Сообщений: 43
Регистрация: 17-10-06
Из: Санкт Петербург
Пользователь №: 21 387

|
Цитата(GDI @ Oct 5 2007, 16:36)  вроде как помнится мне что USB-шные КОМы там появляются если они были подключены на момент загрузки компа, хотя может это прога моя подглючивала..  Только что проверил в WinXp. - открыл реестр, USBшного кома нет. - подлючил девайс - в регедите сделал обносить, ком появился.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|