Dsrc.c 是重要的领头文件,其中的函数dsrc_start首当其冲.
gboolean
dsrc_start(DSRC_t *dsrc)的参数
介是一个很重要的数据结构
struct _DSRC_t {
int listenfd;
int sockfd;
GThread *work_thread;
int cmd[2];
gboolean started;
gboolean connected;
GHashTable *elements;
gboolean set_stamped;
char trx_ip[16];
unsigned short port;
GModule *dsrc_plugin_handle;
dsrc_on_thread_init thread_init_func;
dsrc_on_thread_destroy thread_destroy_func;
dsrc_on_recv_data recv_data_func;
dsrc_on_send_data send_data_func;
dsrc_on_connect connect_func;
dsrc_on_disconnect disconnect_func;
dsrc_on_life_message life_message_func;
dsrc_on_vst vst_func;
dsrc_on_get_stamped get_stamped_func;
dsrc_on_set_stamped set_stamped_func;
dsrc_on_set_resp set_resp_func;
dsrc_on_trans_end trans_end_func;
dsrc_get_accr_func_t get_accr_func;
}; 其中定义的函数之中有重要作用
dsrc_start完成了建立监听绑定套接字listenfd,然后 dsrc->work_thread = g_thread_create(dsrc_main_thread_func, dsrc, TRUE, NULL);
dsrc->started = TRUE;调用dsrc_main_thread_func
原来 myetc C语言定义了定义了许多python可以调用的函数,在python脚本中,调用了myetc定义的c语言的函数,然后python脚本还会被myetc中的c语言函数所调用。
myetc 中的main.c是入口函数文件,main函数完成一些初始化的操作 (splash_display_action 这个函数是一个屏幕溅射窗口的实现函数)调用etc_main_win_show 建立etc主窗口,然后调用_python_init 通过
PyObject *func = etc_sys_get_python_object("etc_init"); 调用etc_callback.py中定义的etc_init 来初始化
在sys_wrapper.c文件中定义了
static PyObject * wrap_sys_dsrc_start(PyObject *self, PyObject *args)这个函数调用了etc_sys.c中的etc_sys_dsrc_start函数,这个函数如下
int etc_sys_dsrc_start(etc_config_t *config, gboolean set_stamped)
{
if (dsrc == NULL)
dsrc = dsrc_init(config->dsrc_lib, config->trax_ip, config->dsrc_port,
set_stamped); //此处config->dsrc_lib 会对应该调用的天线库进行选择
dsrc_thread_init_callback(dsrc, _dsrc_on_thread_init);
dsrc_thread_destroy_callback(dsrc, _dsrc_on_thread_destroy);
dsrc_recv_data_callback(dsrc, _dsrc_on_recv_data);
dsrc_send_data_callback(dsrc, _dsrc_on_send_data);
dsrc_connect_callback(dsrc, _dsrc_on_connect);
dsrc_disconnect_callback(dsrc, _dsrc_on_disconnect);
dsrc_life_message_callback(dsrc, _dsrc_on_life_message);
dsrc_vst_callback(dsrc, _dsrc_on_vst);
dsrc_get_stamped_callback(dsrc, _dsrc_on_get_stamped);
dsrc_set_stamped_callback(dsrc, _dsrc_on_set_stamped);
dsrc_set_resp_callback(dsrc, _dsrc_on_set_resp);
dsrc_trans_end_callback(dsrc, _dsrc_on_trans_end);
return dsrc_start(dsrc) ? 0 : -1; 然后调用dsrc.c文件中的dsrc_start,启动天线
}