deviceiocontrol

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
ricou 94
Messages : 9
Inscription : dim. 24/oct./2010 16:11
Localisation : ABLON sur SEINE

deviceiocontrol

Message par ricou 94 »

Bonjour à tous !
Je programme actuellement un lecteur karaoké. Une fois développée, mon application devrait être capable de contrôler le volume sonore d'un lecteur de cd : dvd. Et si vous insérez un cd / dvd karaoké, l'application sera capable d'afficher grâce au format "cdtext", les paroles des chansons... Pour ce faire, j'utilise "deviceiocontrol".
Je vous fais part, ici, d'un code permettant de retrouver les valeurs du paramètre "dwiocontrolcode" de cette fonction.

Code : Tout sélectionner

; devioctl.pbi
; ce module permet d'obtenir facilement la valeur du paramètre "dwiocontrolcode"
; de la fonction "deviceiocontrol_"
; déclaration des différents types de périphériques

#FILE_DEVICE_BEEP = $00000001
#FILE_DEVICE_CD_ROM = $00000002
#FILE_DEVICE_CD_ROM_FILE_SYSTEM = $00000003
#FILE_DEVICE_CONTROLLER = $00000004
#FILE_DEVICE_DATALINK = $00000005
#FILE_DEVICE_DFS = $00000006
#FILE_DEVICE_DISK = $00000007
#FILE_DEVICE_DISK_FILE_SYSTEM = $00000008
#FILE_DEVICE_FILE_SYSTEM = $00000009
#FILE_DEVICE_INPORT_PORT = $0000000a
#FILE_DEVICE_KEYBOARD = $0000000b
#FILE_DEVICE_MAILSLOT = $0000000c
#FILE_DEVICE_MIDI_IN = $0000000d
#FILE_DEVICE_MIDI_OUT = $0000000e
#FILE_DEVICE_MOUSE = $0000000f
#FILE_DEVICE_MULTI_UNC_PROVIDER = $00000010
#FILE_DEVICE_NAMED_PIPE = $00000011
#FILE_DEVICE_NETWORK = $00000012
#FILE_DEVICE_NETWORK_BROWSER = $00000013
#FILE_DEVICE_NETWORK_FILE_SYSTEM = $00000014
#FILE_DEVICE_NULL = $00000015
#FILE_DEVICE_PARALLEL_PORT = $00000016
#FILE_DEVICE_PHYSICAL_NETCARD = $00000017
#FILE_DEVICE_PRINTER = $00000018
#FILE_DEVICE_SCANNER = $00000019
#FILE_DEVICE_SERIAL_MOUSE_PORT = $0000001a
#FILE_DEVICE_SERIAL_PORT = $0000001b
#FILE_DEVICE_SCREEN = $0000001c
#FILE_DEVICE_SOUND = $0000001d
#FILE_DEVICE_STREAMS = $0000001e
#FILE_DEVICE_TAPE = $0000001f
#FILE_DEVICE_TAPE_FILE_SYSTEM = $00000020
#FILE_DEVICE_TRANSPORT = $00000021
#FILE_DEVICE_UNKNOWN = $00000022
#FILE_DEVICE_VIDEO = $00000023
#FILE_DEVICE_VIRTUAL_DISK = $00000024
#FILE_DEVICE_WAVE_IN = $00000025
#FILE_DEVICE_WAVE_OUT = $00000026
#FILE_DEVICE_8042_PORT = $00000027
#FILE_DEVICE_NETWORK_REDIRECTOR = $00000028
#FILE_DEVICE_BATTERY = $00000029
#FILE_DEVICE_BUS_EXTENDER = $0000002a
#FILE_DEVICE_MODEM = $0000002b
#FILE_DEVICE_VDM = $0000002c
#FILE_DEVICE_MASS_STORAGE = $0000002d
#FILE_DEVICE_SMB = $0000002e
#FILE_DEVICE_KS = $0000002f
#FILE_DEVICE_CHANGER = $00000030
#FILE_DEVICE_SMARTCARD = $00000031
#FILE_DEVICE_ACPI = $00000032
#FILE_DEVICE_DVD = $00000033
#FILE_DEVICE_FULLSCREEN_VIDEO = $00000034
#FILE_DEVICE_DFS_FILE_SYSTEM = $00000035
#FILE_DEVICE_DFS_VOLUME = $00000036
#FILE_DEVICE_SERENUM = $00000037
#FILE_DEVICE_TERMSRV = $00000038
#FILE_DEVICE_KSEC = $00000039
#FILE_DEVICE_FIPS = $0000003A

; définition des différentes méthodes d'accès au périphérique

#METHOD_BUFFERED = 0 ; utilisation d'une mémoire tampon
; pour transmettre LES paramètres entre système et périphérique 
#METHOD_IN_DIRECT = 1 ; les paramètres sont transmis directement par le périphérique
#METHOD_OUT_DIRECT = 2 ; les données sont transmises au système 
; sans mémoire tampon
#METHOD_NEITHER = 3 


; définition des différents modes d'accès 

#FILE_ANY_ACCESS = 0
#FILE_SPECIAL_ACCESS = #FILE_ANY_ACCESS
#FILE_READ_ACCESS = $0001 ; file & pipe
#FILE_WRITE_ACCESS = $0002 ;file & pipe

Procedure CTL_CODE(DeviceType, Function, Method, Access)
; procédure permettant de trouver la valeur du "dwiocontrolcode"
; paramètre d'entrée : 
; - le type de périphérique
; - la fonction que vous désirez lui envoyer
; - la méthode d'accès 
; - le type d'accès "lecture seule..."
; paramètre de sortie : 
; - la procédure renvoie une valeur de type "long"
  ProcedureReturn ((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method)
EndProcedure

; la suite de ce module est spécialisée dans la manipulation des lecteurs de cds / dvds
; et en particulier est utile pour lire des données sur les cds audios 
#IOCTL_CDROM_BASE = #FILE_DEVICE_CD_ROM
Global IOCTL_CDROM_UNLOAD_DRIVER = CTL_CODE(#IOCTL_CDROM_BASE, $00402,#METHOD_BUFFERED,#FILE_READ_ACCESS)
Global IOCTL_CDROM_READ_TOC = CTL_CODE(#IOCTL_CDROM_BASE,$0000,#METHOD_BUFFERED,#FILE_READ_ACCESS)
Global IOCTL_CDROM_SEEK_AUDIO_MSF = CTL_CODE(#IOCTL_CDROM_BASE,$0001,#METHOD_BUFFERED,#FILE_READ_ACCESS)
Global IOCTL_CDROM_STOP_AUDIO = CTL_CODE(#IOCTL_CDROM_BASE,$0002,#METHOD_BUFFERED,#FILE_READ_ACCESS)
Global IOCTL_CDROM_PAUSE_AUDIO = CTL_CODE(#IOCTL_CDROM_BASE,$0003,#METHOD_BUFFERED,#FILE_READ_ACCESS)
Global IOCTL_CDROM_RESUME_AUDIO = CTL_CODE(#IOCTL_CDROM_BASE,$0004,#METHOD_BUFFERED,#FILE_READ_ACCESS)
Global IOCTL_CDROM_GET_VOLUME = CTL_CODE(#IOCTL_CDROM_BASE,$0005,#METHOD_BUFFERED,#FILE_READ_ACCESS)
Global IOCTL_CDROM_PLAY_AUDIO_MSF = CTL_CODE(#IOCTL_CDROM_BASE,$0006,#METHOD_BUFFERED,#FILE_READ_ACCESS)
Global IOCTL_CDROM_SET_VOLUME = CTL_CODE(#IOCTL_CDROM_BASE,$000A,#METHOD_BUFFERED,#FILE_READ_ACCESS)
Global IOCTL_CDROM_READ_Q_CHANNEL = CTL_CODE(#IOCTL_CDROM_BASE,$000B,#METHOD_BUFFERED,#FILE_READ_ACCESS)
Global IOCTL_CDROM_GET_CONTROL = CTL_CODE(#IOCTL_CDROM_BASE,$000D,#METHOD_BUFFERED,#FILE_READ_ACCESS)
Global IOCTL_CDROM_GET_LAST_SESSION = CTL_CODE(#IOCTL_CDROM_BASE,$000E,#METHOD_BUFFERED,#FILE_READ_ACCESS)
Global IOCTL_CDROM_RAW_READ = CTL_CODE(#IOCTL_CDROM_BASE,$000F,#METHOD_OUT_DIRECT,#FILE_READ_ACCESS)
Global IOCTL_CDROM_DISK_TYPE = CTL_CODE(#IOCTL_CDROM_BASE,$0010,#METHOD_BUFFERED,#FILE_ANY_ACCESS)
Global IOCTL_CDROM_GET_DRIVE_GEOMETRY = CTL_CODE(#IOCTL_CDROM_BASE,$0013,#METHOD_BUFFERED,#FILE_READ_ACCESS)
Global IOCTL_CDROM_GET_DRIVE_GEOMETRY_EX = CTL_CODE(#IOCTL_CDROM_BASE,$0014,#METHOD_BUFFERED,#FILE_READ_ACCESS)
Global IOCTL_CDROM_READ_TOC_EX = CTL_CODE(#IOCTL_CDROM_BASE,$0015,#METHOD_BUFFERED,#FILE_READ_ACCESS)
Global IOCTL_CDROM_GET_CONFIGURATION = CTL_CODE(#IOCTL_CDROM_BASE,$0016,#METHOD_BUFFERED,#FILE_READ_ACCESS)

; The following device control codes are common For all class drivers.  The
; functions codes defined here must match all of the other class drivers.
; Warning: these codes will be replaced IN the future With the IOCTL_STORAGE
; codes included below
Global IOCTL_CDROM_CHECK_VERIFY = CTL_CODE(#IOCTL_CDROM_BASE,$0200,#METHOD_BUFFERED,#FILE_READ_ACCESS)
Global IOCTL_CDROM_MEDIA_REMOVAL = CTL_CODE(#IOCTL_CDROM_BASE,$0201,#METHOD_BUFFERED,#FILE_READ_ACCESS)
Global IOCTL_CDROM_EJECT_MEDIA = CTL_CODE(#IOCTL_CDROM_BASE,$0202,#METHOD_BUFFERED,#FILE_READ_ACCESS)
Global IOCTL_CDROM_LOAD_MEDIA = CTL_CODE(#IOCTL_CDROM_BASE,$0203,#METHOD_BUFFERED,#FILE_READ_ACCESS)
Global IOCTL_CDROM_RESERVE = CTL_CODE(#IOCTL_CDROM_BASE,$0204,#METHOD_BUFFERED,#FILE_READ_ACCESS)
Global IOCTL_CDROM_RELEASE = CTL_CODE(#IOCTL_CDROM_BASE,$0205,#METHOD_BUFFERED,#FILE_READ_ACCESS)
Global IOCTL_CDROM_FIND_NEW_DEVICES = CTL_CODE(#IOCTL_CDROM_BASE,$0206,#METHOD_BUFFERED,#FILE_READ_ACCESS)
Global IOCTL_CDROM_SIMBAD = CTL_CODE(#IOCTL_CDROM_BASE,$1003,#METHOD_BUFFERED,#FILE_READ_ACCESS)
#MAXIMUM_NUMBER_TRACKS = 100 ; 1 cd audio ne peut contenir que 100 plages
#MAXIMUM_CDROM_SIZE = 804

; les structures suivantes décrivent les différents éléments présents sur un cd audio

Structure CDROM_READ_TOC_EX
Format.b[4]
reserved1.b[3] ;future expansion
Msf.b[1]
SessionTrack.b
Reserved2.b ;future expansion
Reserved3.b ; future expansion
EndStructure

#FORMAT_TOC = 0
#FORMAT_SESSION = 1
#FORMAT_FULL_TOC = 2
#FORMAT_PMA = 3
#FORMAT_ATIP = 4
#FORMAT_CDTEXT = 5

; CD ROM Table OF Contents (TOC)
; Format 0 - Get table of contents
Structure TRACK_DATA
Reserved.c
Control.c[4]
Adr.c[4]
TrackNumber.c
Reserved1.c
Address.c[4]
EndStructure

Structure CDROM_TOC 
Length.b[2] ;add two bytes for this field
FirstTrack.b
LastTrack.b
TRACK_DATA.Track_Data[100]
    EndStructure
    
Structure CDROM_TOC_SESSION_DATA
Length.b[2] ; add two bytes for this field
FirstCompleteSession.b 
LastCompleteSession.b
TRACK_DATA.Track_Data[1]
EndStructure
; CD ROM Table OF Contents
; Format 2 - Full TOC

Structure CDROM_TOC_FULL_TOC_DATA_BLOCK
SessionNumber.b
Control.b[4]
Adr.b[4]
Reserved1.b
Point.b
MsfExtra.b[3]
Zero.b
Msf.b[3]
EndStructure

Structure CDROM_TOC_FULL_TOC_DATA
Length.b[2] ;add two bytes for this field
FirstCompleteSession.b
LastCompleteSession.b
EndStructure
; Format 3 - Program Memory Area
Structure CDROM_TOC_PMA_DATA
Length.b [2] ;add two bytes for this field
Reserved1.b
Reserved2.b
;CDROM_TOC_FULL_TOC_DATA_BLOCK Descriptors[0]
EndStructure

; Format 4 - Absolute Time IN Pregroove
Structure CDROM_TOC_ATIP_DATA_BLOCK
CdrwReferenceSpeed.b
Reserved3.b
WritePower.b
True1.b
Reserved4.b
UnrestrictedUse.b
Reserved5.b
A3Valid.b
A2Valid.b
A1Valid.b
DiscSubType.b
IsCdrw.b
True2.b
Reserved7.b
LeadInMsf.b[3]
Reserved8.b
LeadOutMsf.b[3]
Reserved9.b
A1Values.b[3]
Reserved10.b
A2Values.b[3]
Reserved11.b
A3Values.b[3]
Reserved12.b
EndStructure


Structure CDROM_TOC_ATIP_DATA
Text.b[12]
WText.b[6]
Length.b[2]  ;ADD two bytes For this field
Reserved1.b
Reserved2.b
;CDROM_TOC_ATIP_DATA_BLOCK Descriptors[0]
EndStructure
; Format 5 - CD Text Info
Structure CDROM_TOC_CD_TEXT_DATA_BLOCK
PackType.b
TrackNumber.b
ExtensionFlag.b ;should be zero!
SequenceNumber.b
CharacterPosition.b
BlockNumber.b
Unicode.b
CRC.b[2]
EndStructure

Structure CDROM_TOC_CD_TEXT_DATA

Length.c[2] ; add two bytes for this field
Reserved1.c
Reserved2.c
EndStructure

; These are the types used For PackType field IN CDROM_TOC_CD_TEXT_DATA_BLOCK
; And also For requesting specific info from IOCTL_CDROM_READ_CD_TEXT
#CDROM_CD_TEXT_PACK_ALBUM_NAME = $80
#CDROM_CD_TEXT_PACK_PERFORMER = $81
#CDROM_CD_TEXT_PACK_SONGWRITER = $82
#CDROM_CD_TEXT_PACK_COMPOSER = $83
#CDROM_CD_TEXT_PACK_ARRANGER = $84
#CDROM_CD_TEXT_PACK_MESSAGES = $85
#CDROM_CD_TEXT_PACK_DISC_ID = $86
#CDROM_CD_TEXT_PACK_GENRE = $87
#CDROM_CD_TEXT_PACK_TOC_INFO = $88
#CDROM_CD_TEXT_PACK_TOC_INFO2 = $89
; 0x8a - 0x8d are reserved....
#CDROM_CD_TEXT_PACK_UPC_EAN = $8e
#CDROM_CD_TEXT_PACK_SIZE_INFO = $8f
; Play audio starting at MSF And ending at MSF
Structure CDROM_PLAY_AUDIO_MSF
StartingM.c
StartingS.c
StartingF.c
EndingM.c
EndingS.c
EndingF.c
EndStructure

; Seek To MSF
Structure CDROM_SEEK_AUDIO_MSF
M.c
S.c
F.c
EndStructure

; Flags For the disk type
Structure CDROM_DISK_DATA 
DiskData.l
EndStructure

#CDROM_DISK_AUDIO_TRACK = $00000001
#CDROM_DISK_DATA_TRACK = $00000002

; CD ROM Data Mode Codes, used With IOCTL_CDROM_READ_Q_CHANNEL
#IOCTL_CDROM_SUB_Q_CHANNEL = 0
#IOCTL_CDROM_CURRENT_POSITION = $01
#IOCTL_CDROM_MEDIA_CATALOG = $02
#IOCTL_CDROM_TRACK_ISRC = $03
Structure CDROM_SUB_Q_DATA_FORMAT
Format.c
Track.c
EndStructure

; CD ROM SUB-Q Channel Data Format
Structure SUB_Q_HEADER
Reserved0.c
AudioStatus.c
DataLength.c[2]
EndStructure

Structure SUB_Q_CURRENT_POSITION Extends sub_q_header
FormatCode.c
Control.c
ADR.c
TrackNumber.c
IndexNumber.c
AbsoluteAddress.c[4]
TrackRelativeAddress.c[4]
EndStructure

Structure SUB_Q_MEDIA_CATALOG_NUMBER Extends SUB_Q_HEADER
FormatCode.c
Reserved.c[3]
Reserved1.c
Mcval.c
MediaCatalog.c[15]
EndStructure

Structure SUB_Q_TRACK_ISRC Extends SUB_Q_HEADER
FormatCode.c
Reserved.c
Track.c
Reserved1.c
Reserved2.c ; = 7
Tcval.c ;=1
TrackIsrc.c[15]
EndStructure

; Audio Status Codes
#AUDIO_STATUS_NOT_SUPPORTED = $00
#AUDIO_STATUS_IN_PROGRESS = $11
#AUDIO_STATUS_PAUSED = $12
#AUDIO_STATUS_PLAY_COMPLETE = $13
#AUDIO_STATUS_PLAY_ERROR = $14
#AUDIO_STATUS_NO_STATUS = $15
; ADR SUB-channel Q Field
#ADR_NO_MODE_INFORMATION = $00
#ADR_ENCODES_CURRENT_POSITION = $01
#ADR_ENCODES_MEDIA_CATALOG = $02
#ADR_ENCODES_ISRC = $03
; SUB-channel Q Control Bits
#AUDIO_WITH_PREEMPHASIS = $01
#DIGITAL_COPY_PERMITTED = $02
#AUDIO_DATA_TRACK = $04
#TWO_FOUR_CHANNEL_AUDIO = $08
; Get Audio control parameters

Structure CDROM_AUDIO_CONTROL
LbaFormat.c
LogicalBlocksPerSecond.w
EndStructure

; Volume control - Volume takes a value between 1 And $0FF.
; SCSI-II CDROM audio suppports up To 4 audio ports With
; Independent volume control.
Structure VOLUME_CONTROL
PortVolume.c[4]
EndStructure
#YellowMode2=0
#XAForm2=1
#CDDA=3

; Passed To cdrom To describe the raw Read, ie. Mode 2, Form 2, CDDA...
Structure RAW_READ_INFO
DiskOffset.q
SectorCount.l
TRACK_MODE_TYPE.c
EndStructure
En espérant que ce module vous aura été utile, je vous souhaite de joyeuses fêtes de fin d'année. Bien entendu, toutes remarques seront les bienvenues.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: deviceiocontrol

Message par Backup »

ricou 94 a écrit : Bien entendu, toutes remarques seront les bienvenues.
Merci pour ce partage ,

ma remarque sera juste :"encadre tes codes avec les balises

Code : Tout sélectionner

"
disponible dans l'editeur de message grce au bouton du meme nom ;

edite ton message et regarde comment je l'ai modifié ;
 pour comprendre ... Merci :)
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: deviceiocontrol

Message par Ar-S »

Merci, passe de bonnes fêtes aussi. :D
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: deviceiocontrol

Message par MLD »

Merci sympa :D :P
ricou 94
Messages : 9
Inscription : dim. 24/oct./2010 16:11
Localisation : ABLON sur SEINE

Re: deviceiocontrol

Message par ricou 94 »

Rebonjour à tous !
Tout d'abord je vous remercie de vos réponses, et je suis heureux que mon code puisse vous apporter quelque chose. Je voullais également m'excuser pour le code que je n'est pas entourré. Mais, étant non-voyant, j'aurais besoin de plus de précision sur ce sujet. En effet, pour vous répondre, Dobro, j'ai remarqué qu'en éditant mon message, vous aviez ajouté les lignes suivantes :

Code : Tout sélectionner

 
; ma ligne de code
; une deuxième ligne de code
; ensuite le mot : 

venait ponctuer la fin de mon code.
Je voullais savoir si, je n'utilise pas les boutons code, mais que je fais précédé lla première ligne de code par le symbole "

Code : Tout sélectionner

 et en terminant mon code par les symboles 
, le code serait entouré ? Parce qu'il n'est pas facile, avec une revue d'écran, d'accéder à ces fameux boutons...
En m'excusant encore pour ce désagrément, et en vous remerciant par avance des réponses que vous pourriez m'apporter, je vous souhaite bon développement, et bon code !
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: deviceiocontrol

Message par Backup »

ha ok , bon
il suffit de mettre dans l'éditeur du forum ; au début du code ceci
; Crochet ouvert c o d e crochet fermé

et a la fin du listing
; Crochet ouvert slash c o d e crochet fermé

si tu n'y arrive pas , c'est pas grave, j"éditerai ton message pour corriger (clin d'oeil )
bienvenue sur le forum ( sourire )
Répondre