purebasic.info

PureBasic forum
Текущее время: Пт фев 21, 2020 6:18 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: Вопрос по USB порту
СообщениеДобавлено: Вт ноя 19, 2019 5:42 pm 
Не в сети
профессор

Зарегистрирован: Вс июл 05, 2009 5:55 pm
Сообщений: 380
Благодарил (а): 1 раз.
Поблагодарили: 17 раз.
Пункты репутации: 0
Искал на форуме как с этим работать, но мало чего нашел.
Все что пытаюсь сделать не получается.

На сколько я понимаю Петр сделал библиотеку под HID устройства, но для каждого пкрика своя версия. но вижу что она не обновлялась, последняя 5.21.

Вопросов несколько
И интересно, можно ли както подсоединить два ПК через USB и написав прогу типа мини проводника для обоих ПК чтобы передавать файлы между ними минуя флешку

запускал код, но таблица пуста, хотя ткнул флешку и USB-COM порт, разветвитель портов.
С флешкой понятно, не хид устройство, но USB-COM порт...
во мышку увидело и все
"код таблици"
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
Structure HID_Lib_Sub_DeviceInfo
  VendorID.w
  ProductID.w
  VersionNumber.w
  NumInputBuffers.w
  InputReportByteLength.w
  OutputReportByteLength.w
  FeatureReportByteLength.w
  Manufacturer.s
  Product.s
  SerialNumber.s
EndStructure
 
Structure HID_Lib_DeviceInfo
 CountDevice.w              ; ?enei iaia?o?aiiuo HID ono?ienoa
 DeviceInfo.HID_Lib_Sub_DeviceInfo[258]
EndStructure
 
 
Procedure HID_DeviceInfo()
ClearGadgetItems(0)
Info.HID_Lib_DeviceInfo
If HID_Lib_DeviceInfo(@Info)
  If Info\CountDevice>0
    For i=0 To Info\CountDevice-1
      AddGadgetItem(0,i,Info\DeviceInfo[i]\Manufacturer)
      SetGadgetItemText(0,i,Info\DeviceInfo[i]\Product,1)
      SetGadgetItemText(0,i,Hex(Info\DeviceInfo[i]\ProductID,#PB_Word)+"H",2)
      SetGadgetItemText(0,i,Hex(Info\DeviceInfo[i]\VendorID,#PB_Word)+"H",3)
      SetGadgetItemText(0,i,Hex(Info\DeviceInfo[i]\VersionNumber,#PB_Word)+"H",4)
      SetGadgetItemText(0,i,Info\DeviceInfo[i]\SerialNumber,5)
      SetGadgetItemText(0,i,Str(Info\DeviceInfo[i]\NumInputBuffers),6)
      SetGadgetItemText(0,i,Str(Info\DeviceInfo[i]\InputReportByteLength),7)
      SetGadgetItemText(0,i,Str(Info\DeviceInfo[i]\OutputReportByteLength),8)
      SetGadgetItemText(0,i,Str(Info\DeviceInfo[i]\FeatureReportByteLength),9)
    Next i
  EndIf
EndIf
EndProcedure
 
 
OpenWindow(0,0,0,930,294,"Иформация о USB HID устройствах     —     HID_Lib  Demo",#PB_Window_MinimizeGadget|#PB_Window_Invisible|#PB_Window_ScreenCentered)
 ListIconGadget(0,2,2,924,290,"Изготовитель",100,#PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect)
   AddGadgetColumn(0,1,"Продукт",100)
   AddGadgetColumn(0,2,"PID",48)
   AddGadgetColumn(0,3,"VID",48)
   AddGadgetColumn(0,4,"Номер версии",90)
   AddGadgetColumn(0,5,"Серийный номер",104)
   AddGadgetColumn(0,6,"Число вх. буферов",110)
   AddGadgetColumn(0,7,"Размер вх. репорта",120)
   AddGadgetColumn(0,8,"Размер вых. репорта",124)
   AddGadgetColumn(0,9,"FEATURE",70)
HID_DeviceInfo()
HideWindow(0,0)
 
AddWindowTimer(0, 1, 400)
 
Repeat
   Event=WaitWindowEvent()
   If Event=#PB_Event_Timer
     If  EventTimer()=1
       HID_DeviceInfo()
     EndIf
   EndIf
Until Event = #PB_Event_CloseWindow
 
 



прогой определило мышу, наконец, хоть чтото.
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
;USB\VID_046D&PID_C016\5&113F64A0&0&1
 
Procedure Timet1()
If HID_Lib_DeviceTest($C016, $046D)=1
  SetGadgetText(1,"Устройство подключенно")
  SetGadgetColor(1,#PB_Gadget_FrontColor,$92616D)
Else
  SetGadgetText(1,"Устройство отсутствует")
  SetGadgetColor(1,#PB_Gadget_FrontColor,$0000FF)
EndIf
EndProcedure
OpenWindow(0,0,0,280,100,"ИК Microsoft Remote Control",#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
TextGadget(1,80,40,200,16,"")
SetTimer_(WindowID(0),1,400,@Timet1() )
Repeat
Until WaitWindowEvent()=#PB_Event_CloseWindow



получил с таблици такие даные
Logitech
Optical USB Mouse
C016H
46DH
340H
Љ
32
5
0
0

как получить какието даные от мышки? а может и передать

даже клаву нашел, такие даные
SIGMACHIP
USB Keyboard
26H
1C4FH
110H
Љ
32
2
0
0
Как от нее получить даные и светодиодами поуправлять

ну и попутно вопрос как с флешкой пообщаться, но не как с накопителем.?

_________________
искатель истины


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Вопрос по USB порту
СообщениеДобавлено: Ср ноя 20, 2019 12:33 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11587
Благодарил (а): 4 раз.
Поблагодарили: 485 раз.
balex1978 писал(а):
вижу что она не обновлялась, последняя 5.21
Код для 5.20 и выше. http://purebasic.mybb.ru/viewtopic.php?id=471

balex1978 писал(а):
И интересно, можно ли както подсоединить два ПК через USB и написав прогу типа мини проводника для обоих ПК чтобы передавать файлы между ними минуя флешку
Для этого компы должны поддерживать технологию USB OTG и потребуется написать драйвер для обмена файлами по USB.

balex1978 писал(а):
запускал код, но таблица пуста, хотя ткнул флешку и USB-COM порт, разветвитель портов.
Потому что ни одно из этих устройств не является USB HID. К ним относятся клавиатура, мышка, джойстик и т. д. Кроме того можно создать неопределенный класс HID устройства и ОС только установит драйвер, но не будет взаимодействовать с устройством (потому что не знает как). Это позволяет осуществлять передачу данных. Примеры таких устройств. viewtopic.php?f=10&t=4713
http://purebasic.mybb.ru/viewtopic.php?id=592#p7394

balex1978 писал(а):
USB-COM порт
Это класс CDC, USB устройств.

balex1978 писал(а):
как получить какието даные от мышки? а может и передать
Нужно открыть доступ функцией HID_Lib_OpenDevice и после читать / писать функциями HID_Lib_ReadDevice и HID_Lib_WriteDevice.
Только с мышкой работать обычно не имеет смысла. Библиотека создавалась для взаимодействия с микроконтроллером. Ссылки на некоторые устройства дал выше.

balex1978 писал(а):
Как от нее получить даные и светодиодами поуправлять
Светодиодами можно управлять по другому.
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
Structure PSP_DEVICE_INTERFACE_DETAIL_DATA
  cbSize.l
  CompilerIf #PB_Compiler_Processor = #PB_Processor_x64
    DevicePath.l
  CompilerElse
    DevicePath.c
  CompilerEndIf
EndStructure
 
Structure KEYBOARD_INDICATOR_PARAMETERS
  UnitId.u
  LedFlags.u
EndStructure
 
#KEYBOARD_CAPS_LOCK_ON    = 4
#KEYBOARD_NUM_LOCK_ON     = 2
#KEYBOARD_SCROLL_LOCK_ON  = 1
 
#IOCTL_KEYBOARD_SET_INDICATORS = $000B0008
 
EnableExplicit
 
Procedure Open_Key_Device()
  Protected HidGuid.Guid
  Protected devInfoData.SP_DEVICE_INTERFACE_DATA
  Protected *detailData.PSP_DEVICE_INTERFACE_DETAIL_DATA
  Protected Length.l, CurrentIndex.w, hDevInfo
  Protected i, Result, DevicePath.s
  Protected Required, hDevice=0, FlagsAndAttributes = 0
 
  devInfoData\cbSize = SizeOf(SP_DEVICE_INTERFACE_DATA)
 
  CopyMemory(?KeyGuid, @HidGuid, SizeOf(HidGuid))
 
  hDevInfo=SetupDiGetClassDevs_(@HidGuid,0,0, #DIGCF_PRESENT|#DIGCF_DEVICEINTERFACE)
  If hDevInfo=0
    ProcedureReturn 0
  EndIf
   
  For i=0 To 255
   
    Result=SetupDiEnumDeviceInterfaces_(hDevInfo, 0, @HidGuid, i, @devInfoData)
    If Result
      Result = SetupDiGetDeviceInterfaceDetail_(hDevInfo, @devInfoData, 0, 0,@Length, 0)
      *detailData=AllocateMemory(Length)
      *detailData\cbSize=SizeOf(PSP_DEVICE_INTERFACE_DETAIL_DATA)
      Result = SetupDiGetDeviceInterfaceDetail_(hDevInfo, @devInfoData, *detailData, Length+1, @Required, 0)
     
      DevicePath.s=PeekS(@*detailData\DevicePath)
      FreeMemory(*detailData)
     
      If FindString(DevicePath, "rdp_kbd", 1, #PB_String_NoCase)>0
        Continue
      EndIf
     
      hDevice=CreateFile_(@DevicePath, #GENERIC_WRITE, #FILE_SHARE_READ|#FILE_SHARE_WRITE,
                          0, #OPEN_EXISTING, 0, 0)
     
      If hDevice<>#INVALID_HANDLE_VALUE
        SetupDiDestroyDeviceInfoList_(hDevInfo)
        ProcedureReturn hDevice
      EndIf
    Else
      Break
    EndIf
  Next i
 
  SetupDiDestroyDeviceInfoList_(hDevInfo)
  ProcedureReturn 0
 
  DataSection
    KeyGuid:
   Data.l $884B96C3
    Data.u $56EF, $11D1
    Data.a $BC, $8C, $00, $A0, $C9, $14, $05, $DD
  EndDataSection
EndProcedure
 
Procedure SetLedState(hDev, State)
  Protected Param.KEYBOARD_INDICATOR_PARAMETERS
  Protected nBytes.l
 
  Param\UnitId = 0
  Param\LedFlags = State
 
  DeviceIoControl_(hDev, #IOCTL_KEYBOARD_SET_INDICATORS, @Param, SizeOf(Param), 0, 0, @nBytes, 0)
 
EndProcedure
 
Define hDev=Open_Key_Device()
 
If hDev
  SetLedState(hDev, #KEYBOARD_CAPS_LOCK_ON | #KEYBOARD_NUM_LOCK_ON)
  Delay(200)
  SetLedState(hDev, 0)
  Delay(500)
  SetLedState(hDev, #KEYBOARD_CAPS_LOCK_ON | #KEYBOARD_NUM_LOCK_ON | #KEYBOARD_SCROLL_LOCK_ON)
EndIf



balex1978 писал(а):
как с флешкой пообщаться, но не как с накопителем.?
Для этого понадобится установить драйвер libusb. Пример работы с ним. http://bascomavr.3bb.ru/viewtopic.php?id=1571#p18069

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Вопрос по USB порту
СообщениеДобавлено: Чт ноя 21, 2019 12:35 am 
Не в сети
док
Аватар пользователя

Зарегистрирован: Сб мар 28, 2015 11:06 pm
Сообщений: 192
Откуда: Україна
Благодарил (а): 13 раз.
Поблагодарили: 26 раз.
Пункты репутации: 9
balex1978 писал(а):
И интересно, можно ли както подсоединить два ПК через USB и написав прогу типа мини проводника для обоих ПК чтобы передавать файлы между ними минуя флешку

ну так попробуй взять два USB-COM, соединить их между собой и через них установить соединение, софт http://old-dos.ru/index.php?page=files& ... st&cat=419
но лучше наверное купить два usb-ethernet..


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB