void openstack_init(void) { //===== drivers openserial_init(); //===== stack //-- cross-layer idmanager_init(); // call first since initializes EUI64 and isDAGroot openqueue_init(); openrandom_init(); opentimers_init(); //-- 02a-TSCH adaptive_sync_init(); ieee154e_init(); //-- 02b-RES schedule_init(); sixtop_init(); neighbors_init(); //===== applications openapps_init(); openserial_printInfo( COMPONENT_OPENWSN,ERR_BOOTED, (errorparameter_t)0, (errorparameter_t)0 ); }
void openwsn_init() { // drivers openserial_init(); // stack // cross-layer idmanager_init(); // call first since initializes e.g. EUI64 openqueue_init(); openrandom_init(); opentimers_init(); // 02a-TSCH ieee154e_init(); // 02b-RES schedule_init(); res_init(); neighbors_init(); nf_init(); //noise floor module // 03a-IPHC openbridge_init(); iphc_init(); // 03b-IPv6 forwarding_init(); icmpv6_init(); icmpv6echo_init(); icmpv6router_init(); icmpv6rpl_init(); // 04-TRAN opentcp_init(); openudp_init(); opencoap_init(); // initialize before any of the CoAP clients // 07-App //--CoAP //rwellknown_init(); //rreg_init(); //rinfo_init(); //rleds_init(); //rt_init(); //rex_init(); //rheli_init(); //rrube_init(); //rxl1_init(); //layerdebug_init(); //--UDP /*udpecho_init(); udpinject_init(); udpprint_init();*/ //udprand_init(); //udpstorm_init(); //--TCP /*ohlone_init(); tcpecho_init(); tcpinject_init(); tcpprint_init();*/ //--misc //heli_init(); //imu_init(); //bbk_init(); //hdl_init(); }
void openstack_init(OpenMote* self) { //===== drivers openserial_init(self); //===== stack //-- cross-layer idmanager_init(self); // call first since initializes EUI64 and isDAGroot openqueue_init(self); openrandom_init(self); opentimers_init(self); //-- 02a-TSCH adaptive_sync_init(self); ieee154e_init(self); //-- 02b-RES schedule_init(self); sixtop_init(self); neighbors_init(self); //-- 03a-IPHC openbridge_init(self); iphc_init(self); //-- 03b-IPv6 forwarding_init(self); icmpv6_init(self); icmpv6echo_init(self); icmpv6rpl_init(self); //-- 04-TRAN opentcp_init(self); openudp_init(self); opencoap_init(self); // initialize before any of the CoAP applications //===== applications openapps_init(self); openserial_printInfo(self, COMPONENT_OPENWSN,ERR_BOOTED, (errorparameter_t)0, (errorparameter_t)0 ); }
/*função responsável inicializar a camada de rede*/ PUBLIC int net_init(uint16_t num, pthread_mutex_t link, pthread_mutex_t net, pthread_mutex_t net2, pthread_mutex_t transp, frame_t *link_recv_frame, netdata_t **net_recv_datagram, int way[MAX_HOSTS]) { //criação das threads de envio, recebimento e envio de rotas pthread_t send_thread; pthread_t recv_thread; pthread_t send_route_thread; //recebimento dos mutex de sincronismo entre as camadas link_recv_mutex = link; net_recv_mutex = net; net2_recv_mutex = net2; transp_recv_mutex = transp; //numero do nó num_global = num; //frame recebido da camada de enlace recv_frame = *link_recv_frame; //dados para passar para camada de transporte (*net_recv_datagram) = &recv_datagram; /* * Construindo a estrutura de controle do semaforo */ g_sem_libera[0].sem_num = 0; g_sem_libera[0].sem_op = MAX_SEND_WAITING; g_sem_libera[0].sem_flg = 0; g_sem_bloquea[0].sem_num = 0; g_sem_bloquea[0].sem_op = -1; g_sem_bloquea[0].sem_flg = 0; /*criando o semaforo produtor*/ if ((g_sem_prod = semget(SEM_KEY_INDICE_PROD + num_global,1,IPC_CREAT | 0666)) == -1){ fprintf(stderr,"chamada semget() falhou! Impossivel criar conjunto de semaforos"); exit(1); } /*inicializando o semaforo produtor*/ if (semop (g_sem_prod, g_sem_libera,1) == -1){// fprintf(stderr,"chamada semop() falhou , impossivel inicializar o semaforo"); exit(1); } g_sem_libera[0].sem_op = 1; /*criando o semaforo consumidor*/ if ((g_sem_cons = semget(SEM_KEY_INDICE_CONS + num_global,1,IPC_CREAT | 0666)) == -1){ fprintf(stderr,"chamada semget() falhou! Impossivel criar conjunto de semaforos"); exit(1); } //inicialização dos mutex pthread_mutex_init(&route_table_mutex, NULL); //preenche o vetor de vizinhos oriundos do caminho neighbors_init(way); //inicialização da tabela de rotas fillallroutes(); //criação da thread de envio pthread_create(&send_thread, NULL, internalsend, NULL); pthread_detach(send_thread); LOG("thread de envio criada"); //criação da thread de recebimento pthread_create(&recv_thread, NULL, internalrecv, NULL); pthread_detach(recv_thread); LOG("thread de recebimento criada"); //criação da thread de envio de rotas pthread_create(&send_route_thread, NULL, internalsendroute, NULL); pthread_detach(send_route_thread); LOG("thread de rotas criada"); return OK; }