Mon 1er programme sur MacOSX et beaucoup de questions...

M

Membre supprimé 2

Invité
Bonjour,

Je suis en train d'écrire un petit programme sous MacOS X afin d'éjecter un CD audio en appuyant sur une touche du clavier.

C'est donc un programme simple, et je pense alors à ca :

- Créer un projet Cocoa avec Project Builder (je veux faire du Cocoa et non carbon), qui éjectera le CD dès lors que l'utilisateur appuyera sur une touche du clavier.

Je pars donc à la recherche de la fonction voulue (éjection du CD) contenue dans un des frameworks. Il semblerait que le framework "Kernel" soit intéressant. Il contient les en-têtes suivants :

IOCDDrive.h
IOCDDriveNub.h
IOCDMedia.h
IOCDTypes.h

De plus l'en-tête IOCDDrive.h contient une fonction appelée ejectMedia().

1er difficulté...

Les en-têtes sont écris en C++, certains frameworks en ObjectiveC d'autres en C, quelle language choisir ?

2eme, 3eme, 4eme difficulté...

J'ai lu plusieurs documentations sur le sîte d'Apple : "Kernel Environment", "Project Builder"..., pour avoir plus d'informations, et aussi pour m'éclairer un peu plus, notamment pour choisir le bon projet à créer (dans Project Builder).

Quel genre de projet créer dans mon cas ? Cocoa, Kernel Extension, C++ Tool... ?

J'ai un petit doute. De plus quand je lis la doc d'Apple il est dit qu'une application peut soti tourner dans le User Space ou dans le Kernel Space. Ce que je conçoit tout a fait afin de préserver la robustesse du Système. Mais alors est-ce que m'a fonction ejectMedia est OK au niveau User Space ?

De plus comment savoir si telle ou telle fonction est utilisable dans le User Space ?

Je pense que le framework IOKIT est utilisable pour une application qui s'executerait dans le Kernel Space comme un driver, mais comment en être sûr ?

Je pense que si je veux créer une application qui s'exécuterait dans le Kernel Space, elle doît-être une extension (KEXT) ou un module (KMOD), est-ce vrai ?

J'ai lu aussi qu'avec le mécanisme des Bundle et des CFPlugIn on pouvait adjoindre des fonctionnalités aux Frameworks. Quelqu'un a t'il des infos ?

J'ai vu aussi qu'il était possible de communiquer avec un programme s'exécutant dans le Kernel Space grace à un mécanisme appelé User Client. Il est aussi dit que le programme User Client est linké avec un CFPlugin ou une librairie. Quelqu'un a t'il de la doc sur la création d'un "User Client" ?

Puis pour finir voilà ce que j'ai fait :

1- Création d'un projet Cocoa
2- J'ai inclus Krnel.framework -> #include <Kernel/IOKit/storage/IOCDDrive.h>
3- Compilation... 3 tonnes d'erreurs !!!

header file 'IOKit/storage/IOCDTypes.h' not found
header file 'IOKit/storage/IOHDDrive.h' not found
undefined type, found `class'
undefined type, found `public'
undefined type, found `virtual'
undefined type, found `OSDictionary'
...

Avez vous une idée ?

Voilà toutes les questions que je me pose. Si quelqu'un a une réponse à l'une d'elles, n'hésitez pas...
Une petite en plus, comment je récupère les évènements clavier de façon global ?

Merci pour l'aide et Bonne Année.

Fils de Pierrot.
 
Salut,
pour l'instant je ne suis pas chez moi et je peux pas essayer ton projet,mais, je doute sur l'utilisation d'un projet cocoa dans ton cas mais plutot un kernel extension, regarde l'exemple fourni par Apple...
il me semble que tout ce qui est kernel est défini en C ou en C++ ton projet cocoa compile soit de l'objC ou du java, ce qui expliquerait les nombreuses erreur que tu as...
essai de passer tes include dans un
extern C (avec des accolades que je ne sais pas faire sur ce p°°° de PC...)
je doute que ca marche, m'enfin bon...

steg
 
Ben, moi je peux pas t'aider. Je t'encourrage à continuer ... quand ça marchera tu pourras nous expliquer comment t'as fait ... et puis se serait assez pratique pour ceux qui n ont pas les nouveaux claviers pro ... ce serait cool tant qu'à faire que tu fasses aussi varier le volume en appuyant sur + et - par exemple
smile.gif
)
 
Eh les gars arretez de délirer. Franchement vous pensez que cocoa est si compliqué que cela? Allons ejecter un CD !!!

En cocoa on le fait en 2 à 5 lignes maxi.

Steg, PM et Fils-de-Pierrot, je ne vous l'ecrirai pas mais je vais vous donner un tuyau.

Le mac est plug'n play cela veut dire tout ce que vous insérez (un cd par exemple) MONTE (terme UNIX) sur le BUREAU. Dans cocoa, bureau = NSWorkSpace. Et il y a dans cette classe une méthode qui vous permet de recupérer sous forme de NSArray tout les disques ou periphériques qui sont montés ou sur le point d'être monté. Une fois que l'on a trouvé celui que l'on veut (son path), il existe une aure méthode pour l'ejecter.

En plus fin du fin vous avez des notifications qui vous sont envoyées.

Un conseil, regardez bien cette classe elle permet de faire plein de choses sur le bureau de votre mac.

A+
 
Merci Manu...

Sur ce je me demande comment appelle-t-on les Frameworks du kernel...

Je pense qu'en réalité ce frameworks était un frameworks carbon...