int tinyroute_main(struct audio_tool_config *config, int argc, char **argv) { // 0. check for filename on cmd line rather than default if (argc > 1) { printf("Opening Mixer Paths XML %s\n", argv[1]); mixer_paths_xml = argv[1]; } else { printf("Opening default file %s\n", MIXER_XML_PATH); } // 1. allocate audio_route and setup state struct audio_route *ar = setup_audio_route(config); struct config_parse_state state; memset(&state, 0, sizeof(state)); state.ar = ar; // setup top level initial settings path state.path = path_create(ar, TOP_LEVEL_XML_SETTINGS); // 2. parse XML parse_xml(&state); // 3. print results print_routes(&state); return 0; // TODO: FREE RESOURCES }
/*---------------------------------------------------------------------------*/ static void res_get_handler(void *request, void *response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) { const char *len = NULL; char message[2*REST_MAX_CHUNK_SIZE]; memset(message, 0, 2*REST_MAX_CHUNK_SIZE); print_routes(&message[0], 2*REST_MAX_CHUNK_SIZE); int length = strlen(&message[0]); /* The query string can be retrieved by rest_get_query(), * or parsed for its key-value pairs. */ if(REST.get_query_variable(request, "len", &len)) { length = atoi(len); if(length < 0) { length = 0; } if(length > REST_MAX_CHUNK_SIZE) { length = REST_MAX_CHUNK_SIZE; } memcpy(buffer, message, length); } else { memcpy(buffer, message, length); } REST.set_header_content_type(response, REST.type.TEXT_PLAIN); REST.set_header_etag(response, (uint8_t *)&length, 1); REST.set_response_payload(response, buffer, length); }
int8_t cmd_calc_routes(uint8_t argc, char **argv) { int8_t rc; rc = calc_routes(&network, &routes); if (rc == NRK_OK) print_routes(&routes); return rc; }
int main(int argc, char *argv[]){ int smallest; join_route(route, " -> ", ROUTE_SIZE); //printf("Len: %d\n", ilen(route)); for (int i = 0; i < ROUTE_SIZE; i++) { char node = getNodeName(route[i]); print_routes(node, graph[route[i]]); int dist = min(graph[route[i]], &smallest); char neighbor = getNodeName(smallest); printf("Short distance: %c -> %c: %d\n\n", node, neighbor, dist); } return 0; }
/*---------------------------------------------------------------------------*/ PROCESS_THREAD(node_process, ev, data) { static struct etimer et; PROCESS_BEGIN(); PRINTF("Node process started\n"); etimer_set(&et, 5 * CLOCK_SECOND); while (1) { PROCESS_YIELD(); /* TODO regularly print routes and neighboors or all */ print_local_addresses(); print_routes(); print_default_route(); etimer_restart(&et); } PROCESS_END(); }
/*============================================================================= Function main Purpose: this is the main entry point to program. Command line paramters are parsed to establish interfaces and routes and then a listening thread is started for each interface. Parameters: argc (IN) - count of command line paramters *arvg[] (IN) - array of char *'s to command line paramters Returns: nothing =============================================================================*/ int main(int argc, char *argv[]) { int i; /* parse command line parameters into routes and interfaces */ for (i=1;i<argc;i++) if (strchr(argv[i],'@')==NULL) { if (ifacecnt<MAX_IFACES && parse_iface(argv[i],&ifaces[ifacecnt])) ifacecnt++; } else { if (routecnt<MAX_ROUTES && parse_route(argv[i],&route_tab[routecnt])) routecnt++; } if (ifacecnt==0) { printf("Proper usage is %s localport/ip/remoteport ...\n",argv[0]); exit(1); } printf("Parsed %d interfaces with %d routes.\n",ifacecnt,routecnt); config_routes(); /* matches routes to interfaces in the route_tab */ print_ifaces(); print_routes(); /* now start a listen thread for each interface */ for (i=0;i<ifacecnt;i++) { ifaces[i].listen = (pthread_t *)malloc(sizeof(pthread_t)); if (pthread_create(ifaces[i].listen,NULL,listen_iface,&ifaces[i])!=0) error("pthread_create"); ifaces[i].qmut = (pthread_mutex_t *)malloc(sizeof(pthread_mutex_t)); pthread_mutex_init(ifaces[i].qmut,NULL); ifaces[i].sendq = list_init(); } pthread_join(*ifaces[0].listen,NULL); /* keep running by joining iface 0 */ }
int main(int argc, char *argv[]) { const char rtnet_dev[] = "/dev/rtnet"; if (argc == 1) print_routes(); if ((strcmp(argv[1], "--help") == 0) || (argc < 3)) help(); f = open(rtnet_dev, O_RDWR); if (f < 0) { perror(rtnet_dev); exit(1); } /* add host routes from file? */ if (strcmp(argv[1], "-f") == 0) route_listadd(argv[2]); /* second argument is now always an IP address */ if (!inet_aton(argv[2], &addr)) help(); if (strcmp(argv[1], "solicit") == 0) route_solicit(argc, argv); if (strcmp(argv[1], "add") == 0) route_add(argc, argv); if (strcmp(argv[1], "del") == 0) route_delete(argc, argv); help(); return 0; }
static void discover_task () { uint8_t periods_in_idle = discover_period_s / DISCOVER_TASK_PERIOD_S; nrk_time_t now, elapsed; int8_t rc; while (1) { switch (discover_state) { case DISCOVER_IDLE: if (auto_discover) { if (periods_in_idle < periods_in_idle) break; set_state(DISCOVER_SCHEDULED); } break; case DISCOVER_SCHEDULED: #if ENABLE_LED pulse_led(led_discover); #endif set_state(DISCOVER_PENDING); nrk_event_signal(discover_signal); break; case DISCOVER_IN_PROGRESS: nrk_time_get(&now); nrk_time_sub(&elapsed, now, last_activity); if (time_cmp(&elapsed, &discover_time_out) < 0) { LOG("silent for "); LOGP("%lu ms\r\n", TIME_TO_MS(elapsed)); break; } LOG("finished, distrib routes: seq "); LOGP("%d\r\n", outstanding_seq); print_graph(&network); rc = calc_routes(&network, &routes); if (rc == NRK_OK) { print_routes(&routes); rc = broadcast_routes(&routes, outstanding_seq); if (rc != NRK_OK) LOG("WARN: failed to bcast routes\r\n"); } else { LOG("WARN: failed to calc routes\r\n"); } set_state(DISCOVER_COMPLETED); nrk_event_signal(discover_signal); break; case DISCOVER_PENDING: case DISCOVER_COMPLETED: /* the router failed to do its part in one task period */ set_state(DISCOVER_IDLE); break; default: ABORT("unexpected state\r\n"); } periods_in_state++; nrk_wait_until_next_period(); } ABORT("discover task exited\r\n"); }