USB 2.0 Extended Control Driver voor OS/2 (ArcaOS, eComStation)

Dit produkt is gratis beschikbaar en mag op eigen risico gebruikt worden. Veel plezier. Klik hier voor de ISC licentie.

Beschrijving - Deze device driver stelt je in staat om direct usb apparaten te besturen. Het levert een application program interface volgens de standaard DosRead en DosWrite functies en kan daardoor gemakkelijk gebruikt worden door rexx procedures met de charin and charout functies. Het is ontworpen om de ontwikkeling en het testen van simpele usb apparaten die standard/vendor control transfers en data (bulk/interrupt) transfers gebruiken te vergemakkelijken. Er is een 1 op 1 relatie tussen een instantie van deze device driver en een specifiek usb apparaat. Bovendien ondersteund de toegevoegde hybrid control interface isochronous transfers met 1 specifiek eindpunt door DosDevIOCtl functies die evenwel niet ter beschikking staan aan rexx procedures.

Installatie - Plaats het USBECD23.ZIP bestand in een directory naar keuze en pak het uit. Kopieer het USBECD.SYS bestand naar jouw C:\OS2\BOOT directory. Voeg de device driver toe aan het CONFIG.SYS bestand met het DEVICE=C:\OS2\BOOT\USBECD.SYS statement and herstart jouw systeem. Verbind het usb apparaat dat je wilt besturen en het zal geaccepteerd worden door de device driver voor navraag via de DosRead functie. Voer het USBREAD.CMD bestand uit en het zal de device descriptor van het verbonden usb apparaat ophalen en tonen tezamen met de device driver parameters die nodig zijn om het te besturen met de DosWrite functie. Pas het device driver statement in CONFIG.SYS overeenkomstig aan en herstart jouw systeem. Voer het USBWRITE.CMD bestand uit en hier begint de lol.

Haal dit produkt hier gratis op. Klik hier voor source/samples. Klik hier voor mijn thuispagina.

Device Driver Parameters

DEVICE=USBECD.SYS /D:0000:0000:0000 /N:$$$$$$$$ /S /V

Je kan meer instanties van deze device driver gebruiken voor allerlei usb apparaten met elk een unieke device driver naam gespecificeerd. PAS OP: Zorg er voor dat de device driver naam uniek is. Deze moet verschillend zijn van alle andere bestands, directory en driver namen binnen het systeem. De default device driver naam wordt $ als er geen naam gespecificeerd is en dit mag alleen bij de laatste instantie gebruikt worden. Alle parameters moeten in hoofdletter.

/D:0000:0000:0000 - Device, specificeert het usb apparaat. Het 1e deel is idVendor, de Vendor Identificatie. Het 2e deel is idProduct, de Product Identificatie. Het 3e deel is bcdDevice, het Device Release Nummer. Moet met geldige hexadecimale getallen gespecificeerd worden. De driver accepteert de tekens 0 t/m 9 en A t/m F. Bovendien kan het jokerteken # gebruikt worden. Een ongeldig teken begrenst het hexadecimale getal. Aanvangsnullen zijn niet nodig.

/N:$$$$$$$$ - Name, specificeert de device driver naam. Moet geldig en uniek zijn. Het moet verschillend zijn van alle andere bestands, directory and driver namen binnen het systeem. De driver accepteert de tekens toegestaan door het HPFS file systeem voor bestands en directory namen behalve de spatie en de punt. Een ongeldig teken begrenst de device driver naam.

/S - Silence Mode, geen geluidssignaal. De default is geluidssignaal ingeschakeld wat een pieptoon geeft bij verbinden/losmaken van het usb apparaat.

/V - Verbose Mode, geef informatie. Toont driver informatie gedurende de OS/2 initialisatie. De default geeft geen driver informatie.

USBREAD.CMD

usbread sName

Verbind het usb apparaat dat je wilt inspecteren en het wordt geaccepteerd door alle instanties van de device driver voor navraag via de DosRead functie. Run het usbread.cmd bestand om de device descriptor van het als laatste verbonden usb apparaat op te halen en te tonen tezamen met de benodigde device driver parameters om dat usb apparaat te besturen met de DosWrite functie.

sName - Naam van de te gebruiken device driver. Dit is een optioneel argument en de naam wordt $ als er geen naam gespecificeerd wordt.

USBWRITE.CMD

usbwrite sName

Verbind het usb apparaat dat je wilt besturen en het wordt aanvaard door de passende instantie van de device driver voor besturing via de DosWrite functie. Je kunt een specifieke instantie van de device driver passend maken voor het usb apparaat dat je wilt besturen d.m.v. de juiste device driver parameters. Run het usbwrite.cmd bestand om de device descriptor, configuration descriptors en verwante interface and endpoint descriptors op te halen en te tonen.

sName - Naam van de te gebruiken device driver. Dit is een optioneel argument en de naam wordt $ als er geen naam gespecificeerd wordt.

Control/Data Transfers

Control/Data transfers worden ondersteund door de Direct Control Interface en de Application Program Interface.

Control Transfers worden door alle usb apparaten ondersteund d.m.v. de standaard control pipe (die met endpoint adres 0). Veel usb apparaten moeten geconfigureerd worden om hun data transfer interfaces te kunnen gebruiken. De usbecd.sys device driver doet geen SetConfiguration tijdens het verbinden van een usb apparaat. Dat wordt aan de applicatie overgelaten. De inhoud van het bmRequestType veld onderscheidt het parameter pakket gebruikt door de data (bulk/interrupt) transfers van het setup pakket gebruikt door de control transfers. De speciale waarde 0xEC geeft aan dat het pakket een parameter pakket is. Anders is het een setup pakket.

Parameter Pakket
veldbeschrijving
bmRequestType0xEC - parameter
bmToggle0/8 - data toggle
wTimeOut[0]timeout interval
wTimeOut[1]timeout interval
bEndpointAddresseindpunt adres
bmAttributestransfer type
wLength[0]data lengte
wLength[1]data lengte
Setup Pakket
veldbeschrijving
bmRequestTypekarakteristieken
bRequestspecifiek verzoek
wValue[0]verzoek afhankelijk
wValue[1]verzoek afhankelijk
wIndex[0]verzoek afhankelijk
wIndex[1]verzoek afhankelijk
wLength[0]data lengte
wLength[1]data lengte

De bEndpointAddress en bmAttributes velden van het parameter pakket moeten gevuld worden vanuit dezelfde velden in de overeenkomstige endpoint descriptor. Het bmToggle veld verschaft de initiële data toggle aan de device driver en ontvangt de gewijzigde data toggle van de device driver. Omdat de usbecd.sys device driver de stand van de data toggle niet in de gaten houdt tussen achtereenvolgende DosWrite verzoeken aan een bepaald eindpunt, moet die data toggle overgebracht worden door de applicatie van de vorige DosWrite naar de volgende DosWrite bestemd voor datzelfde eindpunt. Het wTimeOut veld bepaalt de maximale wachttijd in milliseconden voor het voltooien van de data transfer. De speciale waarde 0xFFFF wacht eindeloos. The standaard timeout interval is 4096 milliseconden.

Direct Control Interface

De direct control interface gebruikt OS/2 Procedures language 2/REXX functies. Om het usb apparaat te besturen worden de volgende functies beschreven:

Acquire Driver

rc=stream(sName,'command','open');

Opent de device driver met lees/schrijf toegang voor dit proces en weigert alle andere processen de lees/schrijf toegang zoals vereist door de device driver. De device driver vertrouwt op de standaard bestandsysteem toegang en deling regels voor conflictbeheersing en ontvangt geen bericht van de open.

sName - Naam van de te openen usb device driver.

rc - Return Code. Zie de OS/2 Procedures Language 2/REXX Reference voor de standaard ontvangen strings.

Obtain Device Descriptor

sBuffer=charin(sName,,26);

Bouwt het setup pakket om de device descriptor te ontvangen. Zendt het setup pakket naar het usb apparaat. Ontvangt de device descriptor van het usb apparaat. Het als laatste verbonden usb apparaat wordt gebruikt i.p.v. het passende usb apparaat.

sName - Naam van de te gebruiken usb device driver.

sBuffer - Naam van de buffer die het setup pakket en de device descriptor ontvangt.

Execute Control Transfer

rc=charout(sName,sBuffer);

Zendt het setup pakket naar het passende usb apparaat. Zendt het aantal data bytes gespecificeerd in het wLength veld van het setup pakket naar dat usb apparaat als de data transport richting gespecificeerd in het bmRequestType veld van het setup pakket host-to-device is. Ontvangt het aantal data bytes gespecificeerd in het wLength veld van het setup pakket van dat usb apparaat als de data transport richting gespecificeerd in het bmRequestType veld van het setup pakket device-to-host is.

sName - Naam van de te gebruiken usb device driver.

sBuffer - Naam van de buffer die het setup pakket in zijn eerste 8 bytes bevat. Voor host-to-device transporten worden de te verzenden data bytes uit het restant van deze buffer gehaald. Voor device-to-host transporten worden de te ontvangen data bytes in het restant van deze buffer gezet.

rc - Return Code. Zie de OS/2 Procedures Language 2/REXX Reference voor de standaard ontvangen strings.

Execute Data Transfer

rc=charout(sName,sBuffer);

Zendt het aantal data bytes gespecificeerd in het wLength veld van het parameter pakket naar het passende usb apparaat als de data transport richting gespecificeerd in het bEndpointAddress veld van het parameter pakket host-to-device is. Ontvangt het aantal data bytes gespecificeerd in het wLength veld van het parameter pakket van dat usb apparaat als de data transport richting gespecificeerd in het bmEndpointAddress veld van het parameter pakket device-to-host is.

sName - Naam van de te gebruiken usb device driver.

sBuffer - Naam van de buffer die het parameter pakket in zijn eerste 8 bytes bevat. Voor host-to-device transporten worden de te verzenden data bytes uit het restant van deze buffer gehaald. Voor device-to-host transporten worden de te onvangen data bytes in het restant van deze buffer gezet.

rc - Return Code. Zie de OS/2 Procedures Language 2/REXX Reference voor de standaard ontvangen strings.

Release Driver

rc=stream(sName,'command','close');

Sluit de device driver and verleent lees/schrijf toegang aan andere processen. De device driver vertrouwt op de standaard bestandsysteem toegang en deling regels voor conflictbeheersing en ontvangt geen bericht van de close.

sName - Naam van de te sluiten usb device driver.

rc - Return Code. Zie de OS/2 Procedures Language 2/REXX Reference voor de standaard ontvangen strings.

Isochronous Transfers

Isochronous transfers worden ondersteund door de Hybrid Control Interface die DosDevIOCtl functies gebruikt.

Parameter Buffer
fielddescription
hEventSemevent semaphore handle
bEndpointAddressendpoint address
bAlternateSettingalternative setting
wMaxPacketSizemaximum payload size
wIsoBufferLengthsize of one iso buffer
wIsoBufferCountnumber of iso buffers
wIsoFrameCountnumber of iso frames

The hEventSem field of the parameter buffer must be filled with the handle of an unnamed shared event semaphore obtained from a previous call to DosCreateEventSem. When an Isochronous Queue Request completes, this semaphore will be posted. The bEndpointAddress field of the parameter buffer must be filled from the same field of the corresponding endpoint descriptor. The bAlternateSetting field of the parameter buffer must be filled from the same field of the corresponding interface descriptor. The wMaxPacketSize field of the parameter buffer must be filled from the same field of the corresponding endpoint descriptor. The wIsoBufferLength and wIsoBufferCount fields of the parameter buffer must be set such that wIsoBufferLength*wIsoBufferCount bytes fit within the data buffer.

Set wIsoFrameLength to (wMaxPacketSize&2047)*(((wMaxPacketSize&6144)>>11)+1). Set wIsoFrameCount to (wIsoBufferLength-4)/(wIsoFrameLength+2) to transfer individual frames. The data area in each iso buffer starts with a frame data array and ends with a frame size array. Each array has wIsoFrameCount elements. Otherwise the data area in each iso buffer contains concatenated payload(s).

Data Buffer (frames)
data areacompletion result fields
data[],size[]buffer1length,buffer2Length
..
data[],size[]buffer1length,buffer2Length
Data Buffer (stream)
data areacompletion result fields
payload(s)buffer1length,buffer2Length
..
payload(s)buffer1length,buffer2Length

The data buffer must be aligned at a 65536 byte boundary. The number of contiguous iso buffers in this data buffer is wIsoBufferCount.

When an Isochronous Queue Request is issued and frames are being used then the frame size array in the iso buffer must always have been prepared by resetting each element to wIsoFrameLength.

When an Isochronous Queue Request completes and frames are being used then buffer1Length contains the offset to the frame size array and buffer2Length contains the size of the frame size array (wIsoFrameCount*2). The frame data array contains the individual frames and the frame size array contains the corresponding lengths.

When an Isochronous Queue Request completes and frames are not used, then buffer1Length contains the size of the data area (wIsoBufferLength-4) and buffer2Length contains the number of bytes transferred.

Hybrid Control Interface

De hybrid control interface gebruikt DosDevIOCtl functies. Om het usb apparaat te besturen worden de volgende functies beschreven:

Isochronous Open Request

ulrc=DosDevIOCtl(hDevice,0xEC,0x40,pParm,cbParm,pcbParm,pData,cbData,pcbData);

Locks the data buffer in memory. Allocates resources for isochronous transfer.

hDevice - The device handle obtained from a previous call to DosOpen.

pParm - Parameter Buffer Address. The parameter buffer contains the appropriate parameters to enable isochronous transfers.

cbParm - Parameter Buffer Length. Must be 14 when the optional field wIsoFrameCount in the Parameter Buffer has been specified. Otherwise it must be 12.

pcbParm - Address of the variable to receive the Parameter Buffer Length.

pData - Data Buffer Address. The data buffer contains the contiguous iso buffers. It must be aligned at a 65536 bytes boundary.

cbData - Data Buffer Length. Must be at least wIsoBufferLength*wIsoBufferCount.

pcbData - Address of the variable to receive the Data Buffer Length.

ulrc - Return Code. See the Control Program Guide and Reference for the standard values returned.

Isochronous Queue Request

ulrc=DosDevIOCtl(hDevice,0xEC,0x42,0,0,0,0,0,0);

Schedules one iso buffer for transfer. Prepares for next transfer. Upon isochronous transfer complete, the EventSem will be posted.

When frames are being used then the frame size array in the iso buffer must always be prepared by resetting each element to wIsoFrameLength.

hDevice - The device handle obtained from a previous call to DosOpen.

ulrc - Return Code. See the Control Program Guide and Reference for the standard values returned.

Isochronous Close Request

ulrc=DosDevIOCtl(hDevice,0xEC,0x41,0,0,0,0,0,0);

Releases resources for isochronous transfer. Unlocks the data buffer in memory.

hDevice - The device handle obtained from a previous call to DosOpen.

ulrc - Return Code. See the Control Program Guide and Reference for the standard values returned.

Application Program Interface

De application program interface gebruikt OS/2 Control Program functies. Om het usb apparaat te besturen worden de volgende functies beschreven:

DosOpen

ulrc=DosOpen(pszName,phDevice,pulAction,0,0,1,18,0);

Opent de device driver met lees/schrijf toegang voor dit proces en weigert alle andere processen de lees/schrijf toegang zoals vereist door de device driver. De device driver vertrouwt op de standaard bestandsysteem toegang en deling regels voor conflictbeheersing en ontvangt geen bericht van de open.

pszName - Adres van de asciiz naam van de te openen usb device driver.

phDevice - Adres van de variabele die de device handle ontvangt.

pulAction - Adres van de variabele die de action taken ontvangt.

ulrc - Return Code. Zie de Control Program Guide and Reference voor the standaard ontvangen waarden.

DosRead

ulrc=DosRead(hDevice,pBuffer,cbTransfer,pcbTransfer);

Bouwt het setup pakket om de device descriptor te ontvangen. Zendt het setup pakket naar het usb apparaat. Ontvangt de device descriptor van het usb apparaat. Het als laatste verbonden apparaat wordt gebruikt i.p.v. het passende apparaat.

hDevice - De device handle verkregen door een eerdere aanroep van DosOpen.

pBuffer - Adres van de buffer die het setup pakket en de device descriptor ontvangt.

cbTransfer - Aantal te transporteren bytes. Het setup pakket is 8 bytes lang. De device descriptor is 18 bytes lang. Het cbTransfer veld moet dus minstens 26 zijn.

pcbTransfer - Adres van de variabele die het aantal getransporteerde bytes ontvangt. Pas op voor het feit dat dit slechts een kopie van het cbTransfer veld wordt. Het werkelijke aantal ontvangen data bytes wordt in het wLenght veld van het setup pakket gezet i.p.v. in dit veld.

ulrc - Return Code. Zie de Control Program Guide and Reference voor the standaard ontvangen waarden.

DosWrite

ulrc=DosWrite(hDevice,pBuffer,cbTransfer,pcbTransfer);

In geval van control (standard/vendor) transfer: - Zendt het setup pakket naar het passende usb apparaat. Zendt het aantal data bytes gespecificeerd in het wLength veld van het setup pakket naar dat usb apparaat als de data transport richting gespecificeerd in het bmRequestType veld van het setup pakket host-to-device is. Ontvangt het aantal data bytes gespecificeerd in het wLength veld van het setup pakket van dat usb apparaat als de data transport richting gespecificeerd in het bmRequestType veld van het setup pakket device-to-host is.

In geval van data (bulk/interrupt) transfer: - Zendt het aantal data bytes gespecificeerd in het wLength veld van het parameter pakket naar het passende usb apparaat als de data transport richting gespecificeerd in het bEndpointAddress veld van het parameter pakket host-to-device is. Ontvangt het aantal data bytes gespecificeerd in het wLength veld van het parameter pakket van dat usb apparaat als de data transport richting gespecificeerd in het bmEndpointAddress veld van het parameter pakket device-to-host is.

hDevice - De device handle verkregen door een eerdere aanroep van DosOpen.

pBuffer - Adres van de buffer die het parameter/setup pakket in zijn eerste 8 bytes bevat. Voor host-to-device transporten worden de te verzenden data bytes uit het restant van deze buffer gehaald. Voor device-to-host transporten worden de te ontvangen data bytes in het restant van deze buffer gezet.

cbTransfer - Aantal te transporteren bytes. Het parameter/setup pakket moet altijd in de buffer aanwezig zijn, dus het minimum aantal te transporteren bytes is 8. Voor data transport wordt het werkelijke aantal te transporteren data bytes bepaald door het wLength veld in het parameter/setup pakket. Het aantal te transporteren bytes moet dus tenminste 8 hoger zijn dan het wLength veld van het parameter/setup pakket.

pcbTransfer - Adres van de variabele die het aantal getransporteerde bytes ontvangt. Pas op voor het feit dat dit slechts een kopie van het cbTransfer veld wordt. Het werkelijke aantal getransporteerde data bytes wordt in het wLenght veld van het parameter/setup pakket gezet i.p.v. in dit veld.

ulrc - Return Code. Zie de Control Program Guide and Reference voor the standaard ontvangen waarden.

DosClose

ulrc=DosClose(hDevice);

Sluit de device driver and verleent lees/schrijf toegang aan andere processen. De device driver vertrouwt op de standaard bestandsysteem toegang en deling regels voor conflictbeheersing en ontvangt geen bericht van de close.

hDevice - De device handle verkregen door een eerdere aanroep van DosOpen.

ulrc - Return Code. Zie de Control Program Guide and Reference voor the standaard ontvangen waarden.

Voldoet aan XHTML 1.0 Voldoet aan CSS 2.1 © W.M.Brul 2004-2016, alle rechten voorbehouden.