Cette semaine nous allons parler d'une nouveauté qui devrait arriver d'ici peu : l'API haut niveau Objective-C. Les plus perspicaces auront remarqués les petits indices qui laissaient présager cette nouveauté. Pour l'instant il ne s'agit que de la version Mac OS, mais le support pour IOS devrait suivre un peu plus tard, ne vous inquiétez pas.
Avec le lancement du shop et les premières commandes, nous n'avons pas eu le temps de faire un projet ambitieux. Noël arrivant à grands pas, nous avons décidé de décorer un sapin en utilisant des Yocto-Color, un exemple simple et basique qui va nous permettre de tester l'API Objective-C.
On commence par inclure les classes que l'on va utiliser.
#import "yocto_colorled.h"
Ensuite, comme d'habitude on va enregistrer un hub. Dans cet exemple, les modules sont directement connectés au Mac, on va donc enregistrer le hub USB. Le code est presque identique à la version C++ seul le type de la chaîne de caractères est différent.
// Setup the API to use local USB devices
if(yRegisterHub(@"usb",&errmsg) != YAPI_SUCCESS) {
NSLog(@"RegisterHub error: %@\n",errmsg);
return 1;
}
Le corps du programme est une boucle sans fin qui va énumérer toutes les leds RGB à l'aide de la fonction yFirstColorLed() et la méthode nextColorLed. La fonction yFirstColorLed() récupère un pointeur sur le premier objet YColorLed, qui sera assignée à notre variable led. Comme dans tous les langages, la valeur de retour est un pointeur sur un objet appartenant à la librairie, et qui ne doit en aucun cas être libéré explicitement par l'appelant.
On va générer une couleur au format HSL au hasard, en évitant de faire varier la saturation et la luminance afin d'éviter les couleurs sombres et claires pour avoir un rendu sympa. On va ensuite appeler la méthode set_hslColor (on pourrait dire: envoyer le message set_hslColor pour respecter les convention Objective-C) avec la valeur que l'on vient de calculer.
[led set_hslColor:hsl];
L'objet YColorLed offre une méthode nextColorLed qui va renvoyer un pointeur verre l'objet YColorLed suivant, ou NULL lorsque l'énumération est terminée. Il suffit donc de rappeler successivement nextColorLed sur chaque objet pour allumer toutes les leds.
while(led){
unsigned hsl = (unsigned)(random() % 256)<<16 | 0xff80;
[led set_hslColor:hsl];
led = [led nextColorLed];
}
Et voici le code en entier:
#import "yocto_api.h"
#import "yocto_colorled.h"
int main (int argc, const char * argv[])
{
NSString *errmsg;
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
// Setup the API to use local USB devices
if(yRegisterHub(@"usb",&errmsg) != YAPI_SUCCESS) {
NSLog(@"RegisterHub error: %@\n",errmsg);
[pool drain];
return 1;
}
srandom((unsigned)time(NULL));
while(1){
YColorLed *led = yFirstColorLed();
while(led){
unsigned hsl = (unsigned)(random() % 256)<<16 | 0xff80;
[led set_hslColor:hsl];
led = [led nextColorLed];
}
}
[pool drain];
return 0;
}
Et voilà le résultat en vidéo.
La librairie Objective-C devrait être publiée d'ici la fin de l'année, mais si vous êtes intéressé à la tester dès maintenant, n'hésitez pas à nous envoyer un email. Les prochains langages seront probablement Java et un utilitaire en ligne de commande.