⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bionet-interface.c

📁 MANTIS是由科罗拉多大学开发的传感器网络嵌入式操作系统。 这是mantis的0.9.5版本的源码。
💻 C
字号:
#include <errno.h>#include <unistd.h>#include <sys/time.h>#include "cortex.h"#include "bionet-interface.h"#include "gui_gtk.h"#include "model_gtk.h"#include "bionet.h"extern GtkWidget *system_status_label;extern GCond *widget_cond;extern GMutex *widget_mutex;int nag_fd;void new_node_callback(bionet_node_t *node);void lost_node_callback(const char *hab_type, const char *hab_id,			const char *node_id);void resource_value_callback(bionet_resource_t *resource);void bionet_update_hab_list();void register_callbacks(){   bionet_register_callback_new_node(new_node_callback);   bionet_register_callback_lost_node(lost_node_callback);   bionet_register_callback_resource_value(resource_value_callback);}void new_node_callback(bionet_node_t *node){      gdk_threads_enter();   model_add_node(node);   gdk_threads_leave();   bionet_node_free(node);}void lost_node_callback(const char *hab_type, const char *hab_id,			const char *node_id){   //make a fake node to pass to the model   bionet_node_t fake_node;   fake_node.hab_id = (char *)hab_id;   fake_node.hab_type = (char *)hab_type;   fake_node.id = (char *)node_id;      gdk_threads_enter();   model_remove_node(&fake_node);   gdk_threads_leave();  }void resource_value_callback(bionet_resource_t *resource){   gdk_threads_enter();   model_update_resource(resource);   gdk_threads_leave();      bionet_resource_free(resource);}bool connect_to_nag(gchar *host){   bionet_set_nag_hostname(host);   nag_fd = bionet_connect_to_nag();   if (nag_fd < 0) {      debug("nag connection failed!");      gdk_threads_enter();      gtk_label_set_text(GTK_LABEL(system_status_label), "Connection Failed!");      gdk_threads_leave();      return false;   } else if (bionet_is_connected()) {      if(bionet_subscribe_node_list_by_name_pattern("*.*.*")) {	 debug("node subscription failed!\n");	 gdk_threads_enter();	 gtk_label_set_text(GTK_LABEL(system_status_label), "Node subscription Failed!");	 gdk_threads_leave();	 return false;      }      if(bionet_subscribe_resource_by_name_pattern("*.*.*:*")) {	 debug("resource subscription failed!\n");	 gdk_threads_enter();	 gtk_label_set_text(GTK_LABEL(system_status_label), "Resource subscription Failed!");	 gdk_threads_leave();	 return false;      }   } else {      debug("Problem connecting to nag");   }	         gdk_threads_enter();      gtk_label_set_text(GTK_LABEL(system_status_label), "Connected!");   gdk_threads_leave();      return true;}gpointer bionet_interface_main(gpointer p){   while(1)   {      register_callbacks();      g_mutex_lock(widget_mutex);      g_cond_wait(widget_cond, widget_mutex);      g_mutex_unlock(widget_mutex);      while(!connect_to_nag("bionet-base.colorado.edu")) {	 debug("Retrying NAG connection");	 sleep(1);      }      gdk_threads_enter();      bionet_update_hab_list();      gdk_threads_leave();      while(bionet_iterate())	 ;   }   return NULL;}void bionet_update_hab_list(){   GSList*hab_list = NULL;   bionet_list_all_habs(&hab_list);      for(; hab_list != NULL; hab_list = hab_list->next) {      bionet_hab_t *hab = hab_list->data;      model_add_hab(hab);   }   g_slist_free(hab_list);}void bionet_update_node_list(gchar *pattern, gint to_lock){   GSList *node_list = NULL;   bionet_list_nodes_by_name_pattern(&node_list, pattern);   debug("FIXME: Need to implement a gui_update_nodes()");   if(to_lock)      gdk_threads_enter();      for(; node_list != NULL; node_list = node_list -> next) {      bionet_node_t *node = node_list->data;      gui_add_node(node);   }   if(to_lock)      gdk_threads_leave();   g_slist_free(node_list);   debug("returning");}bool bionet_iterate(){   int r;   fd_set readers;   FD_ZERO(&readers);   FD_SET(nag_fd, &readers);   r = select(nag_fd + 1, &readers, NULL, NULL, NULL);      if (r < 0) {      debug("Error selecting...");      perror("select(): ");      return false;   } else if (r == 0) {      debug("Shouldn't happen");   } else {      bionet_read_from_nag();      bionet_handle_queued_nag_messages();   }   return true;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -