RxUsbRegisterDeviceNotification: Difference between revisions
Appearance
added return codes and remarks |
|||
| Line 99: | Line 99: | ||
==Related Functions== | ==Related Functions== | ||
* [[RxUsbRegisterChangeNotification]] | |||
* [[RxUsbDeregisterNotification]] | |||
* [[RxUsbOpen]] | |||
[[Category:USBCalls]] | [[Category:USBCalls]] | ||
Latest revision as of 19:42, 12 February 2017
Description
Registers semaphores for attach/detach notification of specific USB devices.
Syntax
To register semaphores for attach/detach notification of specific USB devices use:
rc = RxUsbRegisterDeviceNotification(NotifyID,hDevAdd,hDevRem,idVendor,idProduct)
To register semaphores for attach/detach notification of even more specific USB devices use:
rc = RxUsbRegisterDeviceNotification(NotifyID,hDevAdd,hDevRem,idVendor,idProduct,bcdDevice)
Parameters
- NotifyID
- the name of the variable to receive the Notification Identifier.
- hDevAdd
- the handle of the event semaphore to be posted on device attach.
- hDevRem
- the handle of the event semaphore to be posted on device detach.
- idVendor
- the Vendor Identifier (VendorID) from the device descriptor.
- idProduct
- the Product Identifier (ProductID) from the device descriptor.
- bcdDevice
- the Device Release Number from the device descriptor.
Return Code
0x0000 - NO_ERROR
Errors
0x0006 - ERROR_INVALID_HANDLE 0x0057 - ERROR_INVALID_PARAMETER 0x005F - ERROR_INTERRUPT 0x0064 - ERROR_TOO_MANY_SEMAPHORES 0x0067 - ERROR_TOO_MANY_SEM_REQUESTS 0x0069 - ERROR_SEM_OWNER_DIED 0x1B58 - USB_NOT_INIT 0x1B59 - USB_ERROR_NO_MORE_NOTIFICATTIONS
Remarks
Device attach/detach notifications may be obtained by registering event semaphores to be posted upon attach/detach of USB devices. The RexxUtil library provides functions to work with event semaphores. Some of these are used in the example code.
Example Code
/* add SysCreateEventSem */
rc = RxFuncAdd('SysCreateEventSem','RexxUtil','SysCreateEventSem')
say '+SysCreateEventSem(),RC=0x'd2x(rc)
/* invoke SysCreateEventSem() */
hSemAttach = SysCreateEventSem()
say '*SysCreateEventSem(),RC=0x'd2x(rc)
hSemDetach = SysCreateEventSem()
say '*SysCreateEventSem(),RC=0x'd2x(rc)
/* drop SysCreateEventSem */
rc = RxFuncDrop('SysCreateEventSem')
say '-SysCreateEventSem(),RC=0x'd2x(rc)
/* add RxUsbRegisterDeviceNotification */
rc = RxFuncAdd('RxUsbRegisterDeviceNotification','usbcalls','RxUsbRegisterDeviceNotification')
say '+RxUsbRegisterDeviceNotification(),RC=0x'd2x(rc)
/* invoke RxUsbRegisterDeviceNotification */
idVendor=x2d(046D) /* vendor identifier */
idProduct=x2d(0804) /* product identifier */
bcdDevice=x2d(0009) /* device release number */
hDevAdd = hSemAttach; /* attach semaphore handle */
hDevRem = hSemDetach; /* detach semaphore handle */
drop NotifyID /* to receive the notification identifier */
rc = RxUsbRegisterDeviceNotification(NotifyID,hDevAdd,hDevRem,idVendor,idProduct,bcdDevice)
say '*RxUsbRegisterDeviceNotification(),RC=0x'd2x(rc)
/* drop RxUsbRegisterDeviceNotification */
rc = RxFuncDrop('RxUsbRegisterDeviceNotification')
say '-RxUsbRegisterDeviceNotification(),RC=0x'd2x(rc)
/* add SysWaitEventSem */
rc = RxFuncAdd('SysWaitEventSem','RexxUtil','SysWaitEventSem')
say '+SysWaitEventSem(),RC=0x'd2x(rc)
/* invoke SysWaitEventSem() */
timeout = 8000; /* await 8 seconds */
rc = SysWaitEventSem(hSemAttach,timeout)
say '*SysWaitEventSem(),RC=0x'd2x(rc)
if (rc=0) then say 'obtained Attach Notification'
rc = SysWaitEventSem(hSemDetach,timeout)
say '*SysWaitEventSem(),RC=0x'd2x(rc)
if (rc=0) then say 'obtained Detach Notification'
/* drop SysWaitEventSem */
rc = RxFuncDrop('SysWaitEventSem')
say '-SysWaitEventSem(),RC=0x'd2x(rc)