static void on_signal_continue_batch_request(mapper_db_signal sig, mapper_db_action_t a, void *user) { if (a != MDB_NEW) return; mapper_db_batch_request data = (mapper_db_batch_request)user; if (!data) return; mapper_db_device dev_to_match = data->device; if (strcmp(sig->device_name, dev_to_match->name) != 0) return; if (sig->id == (data->total_count - 1)) { // signal reporting is complete mapper_db_remove_signal_callback(&data->monitor->db, on_signal_continue_batch_request, data); free(data); return; } if (sig->id > 0 && (sig->id % data->batch_size == 0)) mapper_monitor_request_signals_by_name_and_index(data->monitor, data->device->name, sig->id + 1, sig->id + data->batch_size); }
int main(int argc, char **argv) { int i, j, result = 0; // process flags for -v verbose, -t terminate, -h help for (i = 1; i < argc; i++) { if (argv[i] && argv[i][0] == '-') { int len = strlen(argv[i]); for (j = 1; j < len; j++) { switch (argv[i][j]) { case 'h': printf("testmonitor.c: possible arguments " "-q quiet (suppress output), " "-t terminate automatically, " "-h help\n"); return 1; break; case 'q': verbose = 0; break; case 't': terminate = 1; break; default: break; } } } } signal(SIGINT, ctrlc); if (setup_monitor()) { printf("Error initializing monitor.\n"); result = 1; goto done; } mapper_db_add_device_callback(db, on_device, 0); mapper_db_add_signal_callback(db, on_signal, 0); mapper_db_add_connection_callback(db, on_connection, 0); mapper_db_add_link_callback(db, on_link, 0); loop(); done: mapper_db_remove_device_callback(db, on_device, 0); mapper_db_remove_signal_callback(db, on_signal, 0); mapper_db_remove_connection_callback(db, on_connection, 0); mapper_db_remove_link_callback(db, on_link, 0); cleanup_monitor(); return result; }