Ejemplo n.º 1
0
static void start_oamPtyCliThread(void)
{
	if(GW_OSAL_MAX_THREAD == g_oam_pty_cli_thread_id)
	{
        if(GW_E_OK != gw_thread_create(&g_oam_pty_cli_thread_id, g_oam_pty_cli_thread_name, gw_oam_pty_cli_thread_entry, NULL, g_oam_pty_cli_thread_stack_size,
                g_oam_pty_cli_thread_pri, 0))
    	{
    		 gw_printf("create %s fail !\r\n", "cli thread");
    	}   
	}	
}
Ejemplo n.º 2
0
/**
 * @brief Initialize this module.
 *
 * Call this function when loading this module.
 *
 * @param gw	pointer to gateway context
 * @param lib	pointer to dynamic library generated by this module
 *
 * @return TRUE on success, FALSE on failure
 */
bool_t init(gw_t *gw, gw_dlib_t lib)
{
	bool_t ret = TRUE;
	gw_thread_t net_handle_thread = NULL;

	/* initialize module data */
	memset(&applocate_conf, 0, sizeof(applocate_conf));
	applocate_conf.plat_ip = bfromcstr(serv_ip);
	applocate_conf.serv_port = SERV_PORT;
	applocate_conf.client_port = CLIENT_PORT;
	memset(&applocate_stats, 0, sizeof(applocate_stats));
	memset(&applocate_data, 0, sizeof(applocate_data));
	applocate_data.config = (void *)&applocate_conf;
	applocate_data.stats = (void *)&applocate_stats;

	/* read config infromation */
	//load_config("/etc/gw/modules/applocate.conf");

	/* initialize module structure */
	memset(&mod_applocate, 0, sizeof(mod_applocate));
	mod_applocate.name = "mod_applocate";
	mod_applocate.desc = "mod locate application";
	mod_applocate.vendor = "WSN";
	mod_applocate.modver.major = 1;
	mod_applocate.modver.minor = 0;
	mod_applocate.sysver.major = 1;
	mod_applocate.sysver.minor = 0;
	mod_applocate.init = init;
	mod_applocate.cleanup = cleanup;
	mod_applocate.serialize = serialize;
	mod_applocate.lib = lib;
	mod_applocate.data = &applocate_data;
	mod_applocate.lock = gw_mutex_create();
	INIT_LIST_HEAD(&mod_applocate.services);

	applocate_msgq = gw_msgq_create();
	memset(&applocate_svc, 0, sizeof(applocate_svc));
	applocate_svc.id = GW_LOCATE_APP;
	applocate_svc.name = "applocate_service";
	applocate_svc.mod = &mod_applocate;
	applocate_svc.mq = applocate_msgq;

	//TODO: initialize another stuff
	if (mod_applocate.lock != NULL)
	{
		ret = mod_register(gw, &mod_applocate);
		if (ret)
		{
			ret = mod_register_service(gw, &mod_applocate, &applocate_svc);
			if (ret != TRUE)
			{
				mod_unregister(gw, &mod_applocate);
				gw_mutex_destroy(mod_applocate.lock);
				gw_log_print(GW_LOG_LEVEL_ERROR, "module %s initialization failed\n", mod_applocate.name);
			}
			else
			{
				gw_log_print(GW_LOG_LEVEL_INFO, "module %s initialized\n", mod_applocate.name);
			}
		}
	}

	msg_handle_thread = gw_thread_create(applocate_msg_handler, (void *)gw);
	net_handle_thread = gw_thread_create(applocate_net_handler, (void *)gw);
	if(net_handle_thread == NULL)
	{
		gw_log_print(GW_LOG_LEVEL_WARNING, "Thread create error!\n");
		ret = FALSE;
	}
	else
	{
		gw_thread_close(net_handle_thread);
	}
	return ret;
}
Ejemplo n.º 3
0
bool_t init(gw_t *gw, gw_dlib_t lib)
{
	bool_t ret = TRUE;

	/* initialize module data */
	memset(&devman_data, 0, sizeof(devman_data));
	memset(&devman_conf, 0, sizeof(devman_conf));
	memset(&devman_stats, 0, sizeof(devman_stats));

	/* read config infromation */
	//devman_config("/home/makui/projects/gw/i386-linux-gcc-debug-mod-skeleton/devman.conf");

	devman_data.config = &devman_conf;
	devman_data.stats = &devman_stats;
	/* initialize module structure */
	memset(&mod_devman, 0, sizeof(mod_devman));
	mod_devman.name = "mod_devmanage";
	mod_devman.desc = "mod device management";
	mod_devman.vendor = "WSN";
	mod_devman.modver.major = 1;
	mod_devman.modver.minor = 0;
	mod_devman.sysver.major = 1;
	mod_devman.sysver.minor = 0;
	mod_devman.init = init;
	mod_devman.cleanup = cleanup;
	mod_devman.serialize = serialize;
	mod_devman.lib = lib;
	mod_devman.data = &devman_data;
	mod_devman.lock = gw_mutex_create();
	INIT_LIST_HEAD(&mod_devman.services);

	devman_msgq = gw_msgq_create();
	memset(&devman_svc, 0, sizeof(devman_svc));
	devman_svc.id = DEV_MAN_SVC;
	devman_svc.name = "devman_service";
	devman_svc.mod = &mod_devman;
	devman_svc.mq = devman_msgq;

	devman_thread = gw_thread_create(devman_svc_handler, (void *) gw);

	//TODO: initialize another stuff
	if (mod_devman.lock != NULL)
	{
		ret = mod_register(gw, &mod_devman);
		if (ret)
		{
			ret = mod_register_service(gw, &mod_devman, &devman_svc);
			if (ret != TRUE)
			{
				mod_unregister(gw, &mod_devman);
				gw_mutex_destroy(mod_devman.lock);
				gw_log_print(GW_LOG_LEVEL_ERROR, "module %s initialization failed\n", mod_devman.name);
			}
			else
			{
				gw_log_print(GW_LOG_LEVEL_INFO, "module %s initialized\n", mod_devman.name);
			}
		}
	}

	return ret;
}
Ejemplo n.º 4
0
//初始化 oam pty
extern void init_oam_pty(void)
{
	PTY_ERR_CODE err_code = PTY_ERR_OK;
	//创建连接
	if(-1 == (g_pty_id = CreatePty(g_pty_dev_name)))
	{
		gw_printf("CreatePty failed\n");
		err_code = PTY_ERR_CREATE_PTY;
		goto err;
	}
	
	//打开pty 到命令解析的连接
	if(-1 == (g_pty_master = OpenMasterDev(g_pty_id)))
	{
		gw_printf("OpenMasterDev failed\n");
		err_code = PTY_ERR_OPEN_MASTER;
		goto err;
	}
	
	//打开命令解析到pty 的连接
	if(-1 == (g_pty_slave = OpenSlaveDev(g_pty_id)))
	{
		gw_printf("OpenSlaveDev failed\n");
		err_code = PTY_ERR_OPEN_SLAVE;
		goto err;
	}
	
	//创建队列,失败则关闭连接并退出
	if(GW_E_OK != gw_pri_queue_create(&g_oam_pty_queue_id, g_oam_pty_queue_name,
		g_oam_pty_queue_deepth, g_oam_pty_data_szie, g_oam_pty_queue_pri))
	{
		gw_printf("create %s fail!\r\n", g_oam_pty_queue_name);
		err_code = PTY_ERR_CREAT_QUEUE;
		goto err;
	}

	//创建pty 主线程,失败则删除队列,关闭连接并退出
	if(GW_E_OK != gw_thread_create(&g_oam_pty_main_thread_id, g_oam_pty_main_thread_name,
		gw_oam_pty_main_thread_entry, NULL, g_oam_pty_main_thread_stack_size, g_oam_pty_main_thread_pri, 0))
	{
		gw_printf("create %s fail !\r\n", g_oam_pty_main_thread_name);
		err_code = PTY_ERR_CREATE_MAIN_THREAD;
		goto err;
	}
	
	//创建pty 副线程,失败则删除主线程,删除队列,关闭连接并退出
	if(GW_E_OK != gw_thread_create(&g_oam_pty_sub_thread_id, g_oam_pty_sub_thread_name, 
		gw_oam_pty_sub_thread_entry, NULL, g_oam_pty_sub_thread_stack_size, g_oam_pty_sub_thread_pri, 0))
	{
		gw_printf("create %s fail !\r\n", g_oam_pty_sub_thread_name);
		err_code = PTY_ERR_CREATE_SUB_THREAD;
		goto err;
	}
	
	//定时处理
	if(0 == gw_circle_timer_add(1000, OamPtyShellTimerNoti, NULL))
	{
		gw_printf("gw_circle_timer_add failed\n");
		err_code = PTY_ERR_ADD_TIMER;
		goto err;
	}
err:
	switch(err_code)
	{
		//出错处理,不用break;	
		case PTY_ERR_ADD_TIMER:
			gw_thread_delete(g_oam_pty_sub_thread_id);
		case PTY_ERR_CREATE_SUB_THREAD:	
			gw_thread_delete(g_oam_pty_main_thread_id);
		case PTY_ERR_CREATE_MAIN_THREAD:
			gw_queue_delete(g_oam_pty_queue_id);
		case PTY_ERR_CREAT_QUEUE:
			CloseSlaveDev(g_pty_slave);
		case PTY_ERR_OPEN_SLAVE:
			CloseMasterDev(g_pty_master);
		case PTY_ERR_OPEN_MASTER:
			DeletePty(g_pty_id);
		case PTY_ERR_CREATE_PTY:
		case PTY_ERR_OK :
			gw_printf("%s success!\n", __func__);
			break;
		default:
			gw_printf("unkonwn err_code :%d\n", err_code);
			break;
	}
}