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"); } } }
/** * @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; }
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; }
//初始化 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; } }