From 5a816c7f117b5fbc3618b19c81233f07c827e4d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?IOhannes=20m=20zm=C3=B6lnig?= Date: Tue, 1 Feb 2011 10:18:03 +0000 Subject: more consistent device enumeration (but crashes again when setting devices) svn path=/trunk/externals/iem/mediasettings/; revision=14846 --- midisettings.c | 59 ++++++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 41 insertions(+), 18 deletions(-) diff --git a/midisettings.c b/midisettings.c index d4adb64..018d267 100644 --- a/midisettings.c +++ b/midisettings.c @@ -52,6 +52,15 @@ typedef struct _ms_symkeys { typedef t_ms_symkeys t_ms_drivers ; + +static void ms_symkeys_print(t_ms_symkeys*symkeys) { + while(symkeys) { + post("symkey[%s]=%d", (symkeys->name)?symkeys->name->s_name:"", symkeys->id); + symkeys=symkeys->next; + } +} + + static const char*ms_defaultdrivername(const int id) { switch (id) { case API_NONE: @@ -91,7 +100,7 @@ static t_ms_symkeys*ms_symkeys_add(t_ms_symkeys*symkeys, t_symbol*name, int id, return symkeys; #warning LATER check how to deal with multiple devices of the same name! // now this is a simple hack - snprintf(buf, MAXPDSTRING, "%s [%d]", name->s_name, id); + snprintf(buf, MAXPDSTRING, "%s[%d]", name->s_name, id); return ms_symkeys_add(symkeys, gensym(buf), id, overwrite); } @@ -228,8 +237,20 @@ static void ms_params_print(t_ms_params*parms) { post(">=================================\n"); } + +static t_ms_symkeys*ms_params_adddevices(t_ms_symkeys*keys, unsigned int*number, char devlist[MAXNDEV][DEVDESCSIZE], unsigned int numdevs) { + unsigned int num=0; + if(number)num=*number; + unsigned int i; + for(i=0; iindevices=ms_symkeys_add(parms->indevices, gensym(indevlist[i]), i, 1); - parms->num_indevices++; - } - - for(i=0; ioutdevices=ms_symkeys_add(parms->outdevices, gensym(outdevlist[i]), i, 0); - parms->num_outdevices++; - } - + + parms->num_indevices=0; + parms->indevices=ms_params_adddevices(parms->indevices, &parms->num_indevices, indevlist, indevs); + parms->num_outdevices=0; + parms->outdevices=ms_params_adddevices(parms->outdevices, &parms->num_outdevices, outdevlist, outdevs); + sys_get_midi_params(&indevs , parms->indev, &outdevs, parms->outdev); @@ -281,6 +298,12 @@ static void midisettings_params_init(t_midisettings*x) { ms_params_get(&x->x_params); } +static void midisettings_debug(t_midisettings*x) { + post("IN-DEVS");ms_symkeys_print(x->x_params.indevices); + post("OUTDEVS");ms_symkeys_print(x->x_params.outdevices); + +} + #define MS_ALSADEV_FORMAT "ALSA-%02d" static void midisettings_listdevices_devices(t_outlet *outlet, @@ -333,11 +356,11 @@ static void midisettings_listdevices_devicelist(t_outlet *outlet, } else { SETFLOAT (atoms+1, (t_float)numdevs); outlet_anything(outlet, gensym("devicelist"), 2, atoms); - for(i=0; inext) { + if(NULL==devices->name) + continue; + SETSYMBOL(atoms+1, devices->name); + SETFLOAT (atoms+2, (t_float)(devices->id)); outlet_anything(outlet, gensym("devicelist"), 3, atoms); } } @@ -721,7 +744,7 @@ void midisettings_setup(void) class_addmethod(midisettings_class, (t_method)midisettings_setdriver, gensym("driver"), A_GIMME); class_addmethod(midisettings_class, (t_method)midisettings_setparams, gensym("device"), A_GIMME); - // class_addmethod(midisettings_class, (t_method)midisettings_testdevices, gensym("testdevices"), A_NULL); + class_addmethod(midisettings_class, (t_method)midisettings_debug, gensym("print"), A_NULL); } -- cgit v1.2.1