/* 功能:初始化IOSS模块 参数:无 */ IO_API __bool PMC_API init_ioss() { _load_settings();//通过pmc.in或程序默认,给几个相关变量赋初值g_fltMaxChangeRate、g_fltTagLife register_power_callback(_power_callback, 0);//用形参对CALLBACK_ITEM的成员赋值,并链接到RTK_LIST_ENTRY pnp_probe_devices();//加载设备驱动DLL,并得到其导出函数的指针 if(!CDBRefresher::init()){//add本地节点、组和标签;对g_Handlers[]中的函数指针赋值;开启一个线程 utils_error("Global initialization of CRefresher failed.\n"); return __false; } return __true; }
PROXY_API __bool PMC_API init_proxy(HWND hWnd, __uint flags) { char * szWarning = "没有找到软件狗,进入演示状态,数据库最大规模32点"; if(!_g_InitLock){ _g_InitLock = new CLock; } g_InitLock.Lock(); if(g_iInitCount){ g_iInitCount++; g_InitLock.UnLock(); return __true; } g_iInitCount++; g_iInitFlag = flags; _load_settings(__false); g_DBDispatchTable.OnAddNode = _on_add_node; g_DBDispatchTable.OnDropNode = _on_del_node; hook_rtdb_events(&g_DBDispatchTable); if(!(g_iInitFlag & PROXY_INIT_AS_SERVER)){ unsigned char run, dev; int runLevel, devLevel; init_key(); get_key(&run, &runLevel, &dev, &devLevel); if(!dev){ /* no dog is attached*/ /* create_group(0x12345678,xxx) is a loophole */ create_group((RTK_CURSOR)0x12345678, (PRTK_GROUP)32); if(!(flags & PROXY_SILENT)){ MessageBox( hWnd, szWarning, "PMC Error", MB_OK ); } }else{ /* yes, dog is attached, set database limit */ create_group((RTK_CURSOR)0x12345678, (PRTK_GROUP)devLevel); } } init_powermgr(); init_network(0); init_rtdb(); connect_vbus(BUSID_RTDB, 0, _on_rtdb, default_client_filter); connect_vbus(BUSID_CONFIG, 0, _on_config, default_client_filter); connect_vbus(BUSID_ALARM, 0, _on_alarm, default_client_filter); connect_vbus(BUSID_SYSTEM, 0, _on_system, default_client_filter); connect_vbus(BUSID_OPERATION, 0, 0, default_client_filter); if(flags & PROXY_ENABLE_DISPATCHER){ start_dispatcher(); } g_Worker = new CProxyWorker(flags); if(!g_Worker){ g_InitLock.UnLock(); return __false; } g_Worker->start(); #if defined(_WIN32) && 1 SetThreadPriority(g_Worker->handle(), THREAD_PRIORITY_BELOW_NORMAL); #endif g_InitLock.UnLock(); return __true; }