Changeset 5982:c38f275b38ae in roaraudio
- Timestamp:
- 02/23/14 15:46:19 (10 years ago)
- Branch:
- default
- Phase:
- public
- Files:
-
- 3 added
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
ChangeLog
r5977 r5982 2 2 * Added user defined RoarDMX events. 3 3 * Added support for rangeset to libroarlight, roard and roarlight. 4 * Added support to load light control filters into roard. 4 5 5 6 v. 1.0beta11 - Tue Jan 21 2014 21:04 CET -
include/libroar/roardl.h
r5961 r5982 60 60 #define ROAR_DL_FN_DRIVER 3 /* Driver, roard? */ 61 61 #define ROAR_DL_FN_SOURCE 4 /* Sources, roard? */ 62 #define ROAR_DL_FN_FILTER 5 /* Filter, libroardsp */62 #define ROAR_DL_FN_FILTER 5 /* Filter, libroardsp, libroarlight */ 63 63 #define ROAR_DL_FN_FF 6 /* file format??? */ 64 64 #define ROAR_DL_FN_AUTH 7 /* Auth */ … … 357 357 358 358 359 // Filter Infrastructure (FN_FILTER): 360 // Parameters for FNREG registration: 361 #define ROAR_DL_FILTER_SUBTYPE_DSP 0 /* libroardsp */ 362 #define ROAR_DL_FILTER_SUBTYPE_SLFI 1 /* libroarlight */ 363 // ROAR_DL_FILTER_{VERSION,SIZE}_* are defined in corresponding headers. 364 365 359 366 // Common protocol interface (CPI): 360 367 struct roar_dl_proto { … … 467 474 int roar_dl_unregister_fn(struct roar_dl_lhandle * lhandle); 468 475 476 // asking for a object: 477 int roar_dl_query_fn(struct roar_dl_lhandle ** lhandle, int fn, int subtype, const void ** object, size_t * objectlen, int version, int * options, ssize_t index); 478 469 479 #endif 470 480 -
include/libroarlight/libroarlight.h
r5961 r5982 44 44 #include "pwm.h" 45 45 #include "laser.h" 46 #include "slfi.h" 46 47 47 48 #endif -
libroar/roardl.c
r5961 r5982 1117 1117 } 1118 1118 1119 1120 int roar_dl_query_fn(struct roar_dl_lhandle ** lhandle, int fn, int subtype, const void ** object, size_t * objectlen, int version, int * options, ssize_t index) { 1121 struct __fnregs * c = NULL; 1122 ssize_t found = 0; 1123 size_t j; 1124 1125 if ( lhandle == NULL || object == NULL || objectlen == NULL || options == NULL ) { 1126 roar_err_set(ROAR_ERROR_FAULT); 1127 return -1; 1128 } 1129 1130 if ( fn <= 0 || fn >= ROAR_DL_FN_MAX || index < 0 || index >= __MAX_FNREGS ) { 1131 roar_err_set(ROAR_ERROR_INVAL); 1132 return -1; 1133 } 1134 1135 for (j = 0; j < __MAX_FNREGS; j++) { 1136 c = &(__fnrefs[fn][j]); 1137 1138 if ( c->lhandle == NULL ) 1139 continue; 1140 if ( c->subtype != subtype ) 1141 continue; 1142 if ( c->version != version ) 1143 continue; 1144 1145 if ( index == found++ ) { 1146 *lhandle = c->lhandle; 1147 *object = c->object; 1148 *objectlen = c->objectlen; 1149 *options = c->options; 1150 return 0; 1151 } 1152 } 1153 1154 roar_err_set(ROAR_ERROR_NOENT); 1155 return -1; 1156 } 1157 1119 1158 static inline int __load_plugin_any_get_api(struct roar_dl_librarypara * para, const char * appname, const char * appabi, const char * servicename, const char * serviceabi, int universal, struct roar_dl_service_api * api) { 1120 1159 struct roar_dl_lhandle * lhandle = NULL; -
libroarlight/Makefile
r5849 r5982 7 7 8 8 TARGETS=$(SLIB) $(ALIB) $(IMPLIB) 9 OBJS=libroarlight.o colors.o roardmx.o pwm.o 9 OBJS=libroarlight.o colors.o roardmx.o pwm.o slfi.o 10 10 11 11 #DEFINES = -DDEBUG -
plugins/universal/Makefile
r5902 r5982 6 6 TARGETS_IO=piface$(SHARED_SUFFIX) 7 7 TARGETS_SERVICE=service-about$(SHARED_SUFFIX) 8 TARGETS=$(TARGETS_MISC) $(TARGETS_PROTO) $(TARGETS_SERVICE) $(TARGETS_IO) 8 TARGETS_SLFI=filter-slfi-helloworld$(SHARED_SUFFIX) 9 TARGETS=$(TARGETS_MISC) $(TARGETS_PROTO) $(TARGETS_SERVICE) $(TARGETS_IO) $(TARGETS_SLFI) 9 10 10 11 #DEFINES = -DDEBUG -
roard/include/light.h
r5980 r5982 42 42 uint8_t * output; 43 43 uint8_t * outputchanges; 44 struct roar_slfi_inst * filter; 44 45 } g_light_state; 45 46 … … 57 58 int light_check_stream (int id); 58 59 int light_send_stream (int id); 60 61 int light_filter_load(int primary, const char * name, int autoload, const struct roar_keyval * para, ssize_t paralen); 59 62 60 63 // for plugins: -
roard/light.c
r5981 r5982 70 70 71 71 g_light_state.channels = channels; 72 g_light_state.filter = NULL; 72 73 73 74 if ( (g_light_mixer.stream = add_mixer(ROAR_SUBSYS_LIGHT, _MIXER_NAME("Light Control"), &ss)) == -1 ) { … … 92 93 93 94 int light_free (void) { 95 if ( g_light_state.filter != NULL ) { 96 roar_slfi_unref(g_light_state.filter); 97 } 98 94 99 if ( g_light_state.state != NULL ) { 95 100 roar_mm_free(g_light_state.state); … … 162 167 163 168 // TODO: next run filters 169 if ( g_light_state.filter != NULL ) { 170 if ( roar_slfi_update(g_light_state.filter, 171 g_light_state.output, g_light_state.channels, 172 ((int32_t)1000000LU)/(int32_t)ROAR_OUTPUT_CFREQ, 173 g_light_state.events, g_light_state.eventsqueuelen) == -1 ) { 174 ROAR_WARN("light_update(void): Can not run SLFI filter: %s", roar_errorstring); 175 } 176 } 164 177 165 178 // calculate diffrence: … … 267 280 } 268 281 282 int light_filter_load(int primary, const char * name, int autoload, const struct roar_keyval * para, ssize_t paralen) { 283 struct roar_slfi_inst * filter; 284 int ret; 285 int err; 286 287 if ( primary && g_light_state.filter != NULL ) { 288 roar_err_set(ROAR_ERROR_ALREADY); 289 return -1; 290 } else if ( !primary && g_light_state.filter == NULL ) { 291 roar_err_set(ROAR_ERROR_BADSTATE); 292 return -1; 293 } 294 295 filter = roar_slfi_new(name, autoload, para, paralen); 296 if ( filter == NULL ) 297 return -1; 298 299 if ( primary ) { 300 g_light_state.filter = filter; 301 return 0; 302 } 303 304 ret = roar_slfi_ctl(g_light_state.filter, ROAR_SLFI_CMD_PUSH, filter); 305 err = roar_error; 306 307 roar_slfi_unref(filter); 308 309 roar_err_set(err); 310 return ret; 311 } 312 269 313 int light_dmxchannel_get(size_t index) { 270 314 if ( (size_t)g_light_state.channels <= index ) { -
roard/roard.c
r5961 r5982 1301 1301 1302 1302 1303 #if defined(ROAR_HAVE_MAIN_ARGS) && !defined(ROAR_WITHOUT_DCOMP_LIGHT) 1304 struct light_filter { 1305 const char * name; 1306 char * para; 1307 }; 1308 1309 static int light_filter_add(int primary, struct light_filter * filter) { 1310 struct roar_keyval * kv; 1311 ssize_t kvlen; 1312 int ret; 1313 int err; 1314 1315 if ( filter->para == NULL ) { 1316 kvlen = -1; 1317 kv = NULL; 1318 } else { 1319 kvlen = roar_keyval_split(&kv, filter->para, NULL, NULL, 1); 1320 if ( kvlen == -1 ) { 1321 ROAR_ERR("light_filter_add(primar=%i, filter={name='%s', para=%p}): Can not split string: %s", primary, filter->name, filter->para, roar_errorstring); 1322 return -1; 1323 } 1324 } 1325 1326 ret = light_filter_load(primary, filter->name, 1, kv, kvlen); 1327 err = roar_error; 1328 if ( kv != NULL ) 1329 roar_mm_free(kv); 1330 1331 if ( ret == -1 ) { 1332 roar_err_set(err); 1333 ROAR_ERR("light_filter_add(primary=%i, filter={name='%s', para=%p}): Can not load filter: %s", primary, filter->name, filter->para, roar_errorstring); 1334 return -1; 1335 } 1336 1337 return 0; 1338 } 1339 #endif 1340 1303 1341 // MAIN: 1304 1342 … … 1399 1437 struct roar_vio_calls pidfile_vio; 1400 1438 #endif 1439 #if defined(ROAR_HAVE_MAIN_ARGS) && !defined(ROAR_WITHOUT_DCOMP_LIGHT) 1440 struct light_filter light_filter[32] = {{"chain", NULL}}; 1441 int light_filter_count = 1; 1442 char * light_filter_para = NULL; 1443 #endif 1401 1444 1402 1445 ROAR_DBG("main(*): starting roard..."); … … 1677 1720 } else if ( strcmp(k, "--list-plugins") == 0 ) { 1678 1721 metaaction = MA_LIST_PLUGIN; 1722 1723 } else if ( strcmp(k, "--light-filter-load") == 0 ) { 1724 ROAR_CKHAVEARGS(1); 1725 if ( light_filter_count == (sizeof(light_filter)/sizeof(*light_filter)) ) { 1726 ROAR_ERR("Can not load any more light filters: %s", argv[++i]); 1727 } else { 1728 light_filter[light_filter_count].name = argv[++i]; 1729 light_filter[light_filter_count].para = light_filter_para; 1730 light_filter_count++; 1731 } 1732 light_filter_para = NULL; 1733 } else if ( strcmp(k, "--light-filter-load-primary") == 0 ) { 1734 ROAR_CKHAVEARGS(1); 1735 light_filter[0].name = argv[++i]; 1736 light_filter[0].para = light_filter_para; 1737 } else if ( strcmp(k, "--light-filter-args") == 0 ) { 1738 ROAR_CKHAVEARGS(1); 1739 light_filter_para = argv[++i]; 1679 1740 1680 1741 } else if ( strcmp(k, "--guest-acclev") == 0 ) { … … 2335 2396 ROAR_ERR("Can not initialize light control subsystem"); 2336 2397 } 2398 light_filter_add(1, &(light_filter[0])); 2399 for (i = 1; i < light_filter_count; i++) 2400 light_filter_add(0, &(light_filter[i])); 2337 2401 #endif 2338 2402
Note: See TracChangeset
for help on using the changeset viewer.