int rtapi_app_main(void) { int n, retval, i; if(num_chan && names[0]) { rtapi_print_msg(RTAPI_MSG_ERR,"num_chan= and names= are mutually exclusive\n"); return -EINVAL; } if(!num_chan && !names[0]) num_chan = default_num_chan; if(num_chan) { howmany = num_chan; } else { for(i=0; names[i]; i++) {howmany = i+1;} } /* test for number of channels */ if ((howmany <= 0) || (howmany > MAX_CHAN)) { rtapi_print_msg(RTAPI_MSG_ERR, "SIGGEN: ERROR: invalid number of channels: %d\n", howmany); return -1; } /* have good config info, connect to the HAL */ comp_id = hal_init("siggen"); if (comp_id < 0) { rtapi_print_msg(RTAPI_MSG_ERR, "SIGGEN: ERROR: hal_init() failed\n"); return -1; } /* allocate shared memory for siggen data */ siggen_array = hal_malloc(howmany * sizeof(hal_siggen_t)); if (siggen_array == 0) { rtapi_print_msg(RTAPI_MSG_ERR, "SIGGEN: ERROR: hal_malloc() failed\n"); hal_exit(comp_id); return -1; } /* export variables and functions for each siggen */ i = 0; // for names= items for (n = 0; n < howmany; n++) { /* export everything for this loop */ if(num_chan) { char buf[HAL_NAME_LEN + 1]; rtapi_snprintf(buf, sizeof(buf), "siggen.%d", n); retval = export_siggen(n, &(siggen_array[n]),buf); } else { retval = export_siggen(n, &(siggen_array[n]),names[i++]); } if (retval != 0) { rtapi_print_msg(RTAPI_MSG_ERR, "SIGGEN: ERROR: siggen %d var export failed\n", n); hal_exit(comp_id); return -1; } } rtapi_print_msg(RTAPI_MSG_INFO, "SIGGEN: installed %d signal generators\n", howmany); hal_ready(comp_id); return 0; }
int rtapi_app_main(void) { int n, retval; /* test for number of channels */ if ((num_chan <= 0) || (num_chan > MAX_CHAN)) { rtapi_print_msg(RTAPI_MSG_ERR, "SIGGEN: ERROR: invalid num_chan: %d\n", num_chan); return -1; } /* have good config info, connect to the HAL */ comp_id = hal_init("siggen"); if (comp_id < 0) { rtapi_print_msg(RTAPI_MSG_ERR, "SIGGEN: ERROR: hal_init() failed\n"); return -1; } /* allocate shared memory for siggen data */ siggen_array = hal_malloc(num_chan * sizeof(hal_siggen_t)); if (siggen_array == 0) { rtapi_print_msg(RTAPI_MSG_ERR, "SIGGEN: ERROR: hal_malloc() failed\n"); hal_exit(comp_id); return -1; } /* export variables and functions for each siggen */ for (n = 0; n < num_chan; n++) { /* export everything for this loop */ retval = export_siggen(n, &(siggen_array[n])); if (retval != 0) { rtapi_print_msg(RTAPI_MSG_ERR, "SIGGEN: ERROR: siggen %d var export failed\n", n); hal_exit(comp_id); return -1; } } rtapi_print_msg(RTAPI_MSG_INFO, "SIGGEN: installed %d signal generators\n", num_chan); hal_ready(comp_id); return 0; }