123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548 |
- // CDI.cpp : 定义 DLL 应用程序的导出函数。
- //
- #include "CDI.h"
- #include "DrvTree.h"
- #include "common_api.h"
- #include "LocalConfig.h"
- //#include "ebus.h"
- #include "DriverManager.h"
- //#include "DevBusManager.h"
- #include "DeviceBus.h"
- #include "PacketAnalizer.h"
- #include "PacketCommon.h"
- //#include "ClientManager.h"
- #include "HandleManager.h"
- #include "BusUnitClient.h"
- #include "ProcThreadManager.h"
- //#include "ShareMemory_IF.h"
- #include "Crc64.h"
- //#include "ShareMemory_Server.h"
- //#include "ShareMemory_Client.h"
- //#include "CcosConsoleScript.h"
- //#include "APlatformDcs.h"
- #include "ModuleClient.h"
- #include <iostream>
- #include <unistd.h>
- #include <limits.h>
- #include <sys/types.h>
- #include <sys/wait.h>
- #include <sys/time.h>
- #include <sys/file.h>
- #include <cstring>
- #include <pthread.h>
- #include <fcntl.h>
- #include <cctype>
- #include <algorithm>
- #include "debug.h"
- //globle names
- CDI g_CDI;
- //Log4CPP::Logger* mLog::gLogger = nullptr;
- CDI::CDI()
- {
- m_MasterProcId = 0;
- m_ExitHandle = LinuxEvent::CreateEvent(LinuxEvent::MANUAL_RESET,false);
- m_prootClient = NULL;
- //m_DCSMap = NULL;
- return;
- }
- CDI::~CDI()
- {
- if (m_prootClient)
- {
- delete ((BusUnitClient*)m_prootClient);
- m_prootClient = NULL;
- }
- return;
- }
- /*
- INT CDI::LoadAllDCS()
- {
- //find all *.DCS
- m_DCSMap = new map<HMODULE,CcosConsoleScript*>();
- string basedll = string(DCSBASE) + string(".dcs.dll");
- string procdir = GetProcessDirectory();
- vector<string> filelist;
- FindSubFiles(procdir, filelist, true, "*.dcs.dll");
- for (size_t i = 0; i < filelist.size(); i++)
- {
- std::string::size_type pos = 0;
- //skip me first.DCSBASE.DCS
- if ((pos = filelist[i].find(basedll, pos)) != std::string::npos)
- {
- continue;
- }
- HMODULE dllhandle = LoadLibrary(filelist[i].c_str());
- if (dllhandle)
- {
- LOADDCS loadfunc = (LOADDCS)GetProcAddress(dllhandle, "LoadDCS");
- UNLOADDCS unloadfunc = (UNLOADDCS)GetProcAddress(dllhandle, "UnLoadDCS");
- if (loadfunc && unloadfunc)
- {
- CcosConsoleScript *pDCS = loadfunc();
- if (pDCS)
- {
- (*((map<HMODULE, CcosConsoleScript*> *)m_DCSMap))[dllhandle] = pDCS;
- }
- else
- {
- printf("LoadDCS failed.file:%s", filelist[i].c_str());
- DebugPrint("LoadDCS failed.file:%s", filelist[i].c_str());
- }
- }
- else
- {
- printf("no LoadDCS/UnLoadDCS function in dllfile:%s", filelist[i].c_str());
- DebugPrint("no LoadDCS/UnLoadDCS function in dllfile:%s", filelist[i].c_str());
- }
-
- }
- else
- {
- printf("\n\nError at load Dcs file.ErrorCode:%d\n\nDcsFile:%s\n\n",GetLastError(), filelist[i].c_str());
- DebugPrint("\n\nError at load Dcs file.ErrorCode:%d\n\nDcsFile:%s\n\n", GetLastError(), filelist[i].c_str());
- }
- //CcosConsoleScript *pDCS = new APlatformDcs();
- //if (pDCS)
- //{
- // //map it
- // (*((vector<CcosConsoleScript*> *)m_DCSMap)).push_back(pDCS);
- //}
- }
- return 0;
- }
- INT CDI::UnLoadAllDCS()
- {
- if (m_DCSMap)
- {
- map<HMODULE, CcosConsoleScript*>::iterator iter = (*((map<HMODULE, CcosConsoleScript*> *)m_DCSMap)).begin();
- while (iter != (*((map<HMODULE, CcosConsoleScript*> *)m_DCSMap)).end())
- {
- UNLOADDCS unloadfunc = (UNLOADDCS)GetProcAddress(iter->first, "UnLoadDCS");
- if (unloadfunc)
- {
- unloadfunc(iter->second);
- }
- ++iter;
- }
- (*((map<HMODULE, CcosConsoleScript*> *)m_DCSMap)).clear();
- delete (map<HMODULE, CcosConsoleScript*> *)m_DCSMap;
- m_DCSMap = NULL;
- }
- return 0;
- }
- */
- INT CDI::CommandInput(const char *pszCmd)
- {
- return 0;
- /*
- bool hit = false;
- if (m_DCSMap)
- {
- if (pszCmd && strlen(pszCmd) > 0)
- {
- string exp = pszCmd;
- //makeLowerStr(exp);
- ResDataObject Req = CcosConsoleScript::SeperateCommand(pszCmd);
- if (Req.size() > 0)
- {
- map<HMODULE, CcosConsoleScript*>::iterator iter = (*((map<HMODULE, CcosConsoleScript*> *)m_DCSMap)).begin();
- while (iter != (*((map<HMODULE, CcosConsoleScript*> *)m_DCSMap)).end())
- {
- if (exp == "help")
- {
- iter->second->Help();
- hit = true;
- ++iter;
- continue;
- }
- else
- {
- if (iter->second->Command(Req) == DCS_NOT_SUPPORT)
- {
- ++iter;
- continue;
- }
- hit = true;
- }
- break;
- ++iter;
- }
- //for (size_t i = 0; i < (*((vector<CcosConsoleScript*> *)m_DCSMap)).size(); i++)
- //{
- // if (exp == "help")
- // {
- // (*((vector<CcosConsoleScript*> *)m_DCSMap))[i]->Help();
- // hit = true;
- // continue;
- // }
- // else
- // {
- // if ((*((vector<CcosConsoleScript*> *)m_DCSMap))[i]->Command(Req) == DCS_NOT_SUPPORT)
- // {
- // continue;
- // }
- // hit = true;
- // }
- // break;
- //}
- if (hit == false)
- {
- printf("%s is not right command.plz use help for more info\n", (const char *)Req[0]);
- }
- return 1;
- }
- }
- }
-
- return 0;*/
- }
- void CDI::StartMqttServer()
- {
- return;
- char exePath[PATH_MAX];
- ssize_t len = readlink("/proc/self/exe", exePath, sizeof(exePath) - 1);
- if (len == -1) {
- std::cerr << "Failed to get executable path" << std::endl;
- return;
- }
- exePath[len] = '\0';
- std::string mqtt_path = exePath;
- size_t pos = mqtt_path.find_last_of('/');
- if (pos == std::string::npos) {
- std::cerr << "Invalid executable path" << std::endl;
- return;
- }
- mqtt_path.erase(pos + 1); // 保留末尾的 '/'
- std::string work_dir = mqtt_path + "emqx";
- mqtt_path += "emqx/bin/emqx";
- std::cout << "Try Start Mqtt Server First.. " << mqtt_path << std::endl;
- pid_t pid = fork();
- if (pid == 0) { // 子进程
- // 重定向标准输出/错误到/dev/null(相当于隐藏输出)
- int null_fd = open("/dev/null", O_WRONLY);
- dup2(null_fd, STDOUT_FILENO);
- dup2(null_fd, STDERR_FILENO);
- close(null_fd);
- // 准备参数
- char* args[] = {
- const_cast<char*>("emqx"),
- const_cast<char*>("start"),
- nullptr
- };
- // 切换工作目录并执行
- chdir(work_dir.c_str());
- execv(mqtt_path.c_str(), args);
- // 如果execv失败
- std::cerr << "execv failed: " << strerror(errno) << std::endl;
- _exit(1);
- }
- else if (pid > 0) { // 父进程
- // 非阻塞等待子进程退出
- waitpid(pid, nullptr, WNOHANG);
- std::cout << "Mqtt server started in background (PID: " << pid << ")" << std::endl;
- }
- else {
- std::cerr << "fork failed: " << strerror(errno) << std::endl;
- }
- /*
- if (!CreateProcess(NULL, // No module name (use command line)
- (LPSTR)mqtt_path.c_str(), // Command line
- NULL, // Process handle not inheritable
- NULL, // Thread handle not inheritable
- FALSE, // Set handle inheritance to FALSE
- CREATE_NEW_CONSOLE, // No creation flags
- NULL, // Use parent's environment block
- szFileName,
- //pfullWorkPath, // Use parent's starting directory
- &si, // Pointer to STARTUPINFO structure
- &pinfo) // Pointer to PROCESS_INFORMATION structure
- )
- {
- printf("CreateProcess failed (%d).\n", GetLastError());
- printf("Command path :%s\n", mqtt_path);
-
- }*/
- }
- void* CDI::InitShareMemory(void* pPara)
- {
- CDI* pCdi = (CDI*)pPara;
- ////mLog::FINFO("Begin");
- //CCOS_PROC_TYPE Master = GetConfigMode();
- //DWORD dwTick = GetTickCount();
- //if (Master == CCOS_PROC_CHANNEL)
- //{
- // //channel
- // if (ShareMemory_ServerStart() == false || ShareMemory_ClientStart() == false)
- // {
- // //mLog::FERROR("Can't Start Console Thread.sharememory server start failed.Exit in 3sec");
- // sleep(3);
- // return 0;
- // }
- // //mLog::FINFO( "-*-*-*-* Channel ShareMemory Use Time {$} ms", GetTickCount() - dwTick );
- // dwTick = GetTickCount();
- //}
- //else if (Master == CCOS_PROC_MASTER)
- //{
- // //main proc
- // if (ShareMemory_ClientStart() == false)
- // {
- // //mLog::FERROR("Can't Start Console Thread.sharememory client start failed.Exit in 3sec");
- // sleep(3);
- // return 0;
- // }
- // std::cout << "-*-*-*-* ShareMemory_ClientStart Use Time" << GetTickCount() - dwTick << " ms" << endl;
- // dwTick = GetTickCount();
- //}
- ////share memory init
- //DWORD BigBlockSize, BigBlockCount, SmallBlockSize, SmallBlockCount;
- //if (GetShareMemSettings(BigBlockSize, BigBlockCount, SmallBlockSize, SmallBlockCount) == false)
- //{
- // //mLog::FERROR("Can't GetShareMemSettings");
- // return false;
- //}
- //if (Init_Circle_SM_IF(BigBlockSize, BigBlockCount, SmallBlockSize, SmallBlockCount) < 0)
- //{
- // //mLog::FERROR("Can't Init_Circle_SM_IF");
- // return false;
- //}
- //mLog::FINFO( "-*-*-*-* Init_Circle_SM_IF Use Time {$} ms" , GetTickCount() - dwTick );
- //dwTick = GetTickCount();
- return 0;
- }
- /// <summary>
- /// 返回当前所有设备
- /// </summary>
- /// <param name="pDevices"></param>
- /// <param name="nDevNums"></param>
- /// <returns></returns>
- const char* CDI::GetAllDevice(void** pDevices, int& nDevNums)
- {
- return g_DrvManager.GetAllDevice(pDevices, nDevNums);
- }
- bool CDI::InitAs(CCOS_PROC_TYPE Master, UINT64 MasterProcId)
- {
- //NOT FINISHED YET
- //no Slave status
- pthread_t hShareMemoryHandle;
- ModuleClient hstClient("CDI_NOTIFY", "", "", false);
- string devPathNull = "";
- string mjrID = GetDeviceID();
- mjrID = mjrID.substr(0, mjrID.find_first_of('/'));
- if (mjrID.length() <= 0)
- mjrID = "Channel";
- string topic = "CCOS/HOST/" + mjrID + "/Status/Startup";
- DWORD dwTick = GetTickCount();
- if (Master == CCOS_PROC_CHANNEL)
- {
- //if (//mLog::gLogger == nullptr)
- //{
- // string strLogPath = GetProcessDirectory() + R"(\Conf\Log4CPP.Config.xml)";
- // string LogHost = ((string)getLogRootpath()).c_str();
- // Log4CPP::ThreadContext::Map::Set(ECOM::Utility::Hash("LogFileName"), "Platform");
- // Log4CPP::GlobalContext::Map::Set(ECOM::Utility::Hash("LogHost"), LogHost.c_str() + 1);
- // //Log4CPP::ThreadContext::Map::Set(ECOM::Utility::Hash("LogHost"), LogHost.c_str() + 1);
- // cout << endl << "LogHost = " << LogHost << endl << endl;
- // auto rc = Log4CPP::LogManager::LoadConfigFile(strLogPath.c_str());
- // //mLog::gLogger = Log4CPP::LogManager::GetLogger("Platform");
- // //mLog::FINFO("Code Build datetime [{$} {$}]", __DATE__, __TIME__);
- //}
- // Linux下使用文件锁实现单实例检测
- int lock_fd = open("/tmp/Channel.lock", O_CREAT | O_RDWR, 0666);
- if (lock_fd == -1) {
- perror("open lock file failed");
- return false;
- }
- if (flock(lock_fd, LOCK_EX | LOCK_NB) == -1) {
- if (errno == EWOULDBLOCK) {
- printf("Can't Start Console Thread.already exist.Exit in 3sec\n");
- close(lock_fd);
- sleep(3);
- return false;
- }
- }
- //启动MQTTserver 允许多次启动
- //mLog::FINFO("StartMqttServer");
- StartMqttServer();
- //mLog::FINFO("StartMqttServer Use Time {$} ", GetTickCount() - dwTick);
-
- dwTick = GetTickCount();
- }
- else if (Master == CCOS_PROC_MASTER)
- {
- //if (//mLog::gLogger == nullptr)
- //{
- // string strLogPath = GetProcessDirectory() + R"(\Conf\Log4CPP.Config.xml)";
- // string LogHost = ((string)getRootpath()).c_str();
- // if (LogHost.length() <= 1)
- // {
- // char szName[256];
- // sprintf(szName, "/LogicDevice_%08d", GetCurrentProcessId());
- // LogHost = szName;
- // }
- // setLogRootpath(LogHost.c_str());
- // Log4CPP::ThreadContext::Map::Set(ECOM::Utility::Hash("LogFileName"), "Platform");
- // Log4CPP::GlobalContext::Map::Set(ECOM::Utility::Hash("LogHost"), LogHost.c_str() + 1);
- // //Log4CPP::ThreadContext::Map::Set(ECOM::Utility::Hash("LogHost"), LogHost.c_str() + 1);
- // cout << endl << "LogHost = " << LogHost << endl << endl;
- // auto rc = Log4CPP::LogManager::LoadConfigFile(strLogPath.c_str());
- // //mLog::gLogger = Log4CPP::LogManager::GetLogger("Platform");
- // //mLog::FINFO("Code Build datetime [{$} {$}]", __DATE__, __TIME__);
- std::cout << "Code Build datetime [" << __DATE__ << " " << __TIME__ << "]\n";
- //}
- //get full proc path
- string keyStr,targetStr;
- targetStr = "";
- string dir = GetProcessDirectory();
- transform(dir.begin(), dir.end(), dir.begin(),
- [](unsigned char c) { return tolower(c); });
- size_t pos = 0;
- while ((pos = dir.find('\\', pos)) != string::npos) {
- dir.replace(pos, 1, "/");
- }
- //make md5
- unsigned char digest[35];
- memset(digest, 0, 35);
- }
- hstClient.Open(devPathNull.c_str(), ALL_ACCESS);
- std::cout << "hstClient.Notify" << "\n";
- hstClient.Notify(topic.c_str(), GetDeviceID().c_str(), "Startup", "Status", "Init started");
- SetConfigMode(Master);
- std::cout << "Start backgroud InitShareMemory " << "\n";
- {
- pthread_attr_t attr;
- pthread_attr_init(&attr);
- pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
- // 创建线程
- if (pthread_create(&hShareMemoryHandle, &attr,
- InitShareMemory, this) != 0) {
- perror("pthread_create failed");
- return false;
- }
- pthread_attr_destroy(&attr);
- }
- //mLog::FINFO("CDI ");
- //Master & Channel
- hstClient.Notify(topic.c_str(), GetDeviceID().c_str(), "Startup", "Status", "Load Root Driver");
- int nGrpcPort = 9000;
- if (Master == CCOS_PROC_MASTER || Master == CCOS_PROC_CHANNEL)
- {
- //mLog::FINFO("CDI InitAs RPROC_TYPE {$}", (int) Master);
- std::cout << "CDI InitAs RPROC_TYPE " << Master << std::endl;
-
- //load root driver
- //mLog::FINFO("g_DrvManager.LoadRootDrv ");
- if (g_DrvManager.LoadRootDrv() == false)
- {
- //log here
- //
- std::cout << "Failed to load root drv." <<std::endl;
- //mLog::FINFO("Failed to load root drv.");
- UnLoadAll();
- return false;
- }
- ResDataObject rootRes;
- LogicDevice* pDev[10];
- int nNum = 0;
- g_DrvManager.GetAllDevice((void**)pDev, nNum);
- std::cout << "Now Add Deivce Num is " << nNum << std::endl;
- //mLog::FINFO("Now Add Deivce Num is {$}", nNum);
- for (int x = 0; x < nNum; x++)
- {
- string path = pDev[x]->GetCcosRootPath();
- //mLog::FINFO("[{$}] Dev is {$}", x, path);
- std::cout << "[" << x << "] Dev is " << path << std::endl;
- // CCOS/HOST/
- if (path.length() > 10 && path.substr(0, 10) == "CCOS/HOST/")
- {
- pDev[x]->GetDeviceResource(&rootRes);
- std::cout << "Dev " << path << " resource is " << rootRes.encode() << std::endl;
- //mLog::FINFO("Dev {$} resource is {$}", path, rootRes.encode());
- nGrpcPort = rootRes["Attribute"]["GrpcPort"];
- //mLog::FINFO("This Driver GRPC Port is {$}", nGrpcPort);
- std::cout << "This Driver GRPC Port is " << nGrpcPort << std::endl;
- }
- }
- std::cout << "g_DrvManager.LoadRootDrv over."<< std::endl;
- //mLog::FINFO("g_DrvManager.LoadRootDrv over.");
- }
- else {
- std::cout << "CDI InitAs RPROC_TYPE " << Master << std::endl;
- //mLog::FINFO("CDI InitAs RPROC_TYPE {$}", (int)Master);
- }
- std::cout << "CDI -*-*-*-* g_DrvManager.LoadRootDrv() Use Time " << GetTickCount() - dwTick<<" ms" << std::endl;
- //mLog::FINFO("CDI -*-*-*-* g_DrvManager.LoadRootDrv() Use Time {$} ms", GetTickCount() - dwTick);
- dwTick = GetTickCount();
- //make sure root exist
- //LoadAllDCS();
- //load bus driver
- hstClient.Notify(topic.c_str(), GetDeviceID().c_str(), "Startup", "Status", "Load Bus Driver");
- //mLog::FINFO("CDI::InitAs LoadBusDrv ");
- if (LoadBusDrv() == false)
- {
- //log here
- //
- std::cout << "Failed to load bus drv."<< std::endl;
- //mLog::FINFO("Failed to load bus drv.");
- UnLoadAll();
- return false;
- }
- std::cout << "LoadBusDrv use time " << GetTickCount() - dwTick << std::endl;
- //mLog::FINFO("LoadBusDrv use time {$}", GetTickCount() - dwTick);
- dwTick = GetTickCount();
- //mLog::FINFO("CDI InitAs g_DrvTree.StartThread");
- //start monitoring root driver,and update drvtree
-
- if (g_DrvTree.StartThread() == false)
- {
- //log here
- std::cout << "Failed to start drv tree thread." << std::endl;
- //mLog::FINFO("Failed to start drv tree thread.");
- UnLoadAll();
- return false;
- }
- std::cout << "CDI g_DrvTree.StartThread Use Time " << GetTickCount() - dwTick << std::endl;
- //mLog::FINFO("CDI g_DrvTree.StartThread Use Time {$} ms", GetTickCount() - dwTick);
- dwTick = GetTickCount();
- /*
- if (Master == CCOS_PROC_CLIENT)
- {
- //ccos client
- assert(0);//NOT FINISHED YET
- }
- else */
- static int idx_test = 0;
- if (Master == CCOS_PROC_CHANNEL)
- {
- //ccos channel
- //mLog::FINFO("CDI InitAs g_DrvManager.UpdateRootDrvStatus");
- if (g_DrvManager.UpdateRootDrvStatus(1))
- {
- //mLog::FINFO("CDI g_DrvManager.UpdateRootDrvStatus Use Time {$} ms", GetTickCount() - dwTick);
- dwTick = GetTickCount();
- //mLog::FINFO("CDI InitBusUnit");
- if (InitBusUnit())
- {
- //mLog::FINFO("CDI InitBusUnit Use Time {$} ms ", GetTickCount() - dwTick );
- dwTick = GetTickCount();
- //等待共享内存线程结束
- struct timespec ts;
- clock_gettime(CLOCK_REALTIME, &ts);
- ts.tv_sec += 2; // 2秒超时
- // 使用pthread_timedjoin_np实现超时等待
- if (pthread_timedjoin_np(hShareMemoryHandle, nullptr, &ts) != 0) {
- fprintf(stderr, "InitShareMemory thread timeout\n");
- }
- //mLog::FINFO("CDI WaitForSingleObject hShareMemoryHandle over.");
- return true;
- }
- UnLoadAll();
- }
- return false;
- }
- else if (Master == CCOS_PROC_MASTER)
- {
- //load all drivers in pocket
- //ResDataObject filelist;
- //if (GetDriverConfigFiles(filelist))
- //{
- // for (size_t i = 0; i < filelist.size(); i++)
- // {
- // //1.load drv
- // if (g_DrvManager.LoadDriver(filelist.GetKey(i)) == false)
- // {
- // //log here
- // printf("Failed Load Drver:%s\n", filelist.GetKey(i));
- // }
- // //printf("Load %s succeed\n", filelist.GetKey(i));
- // }
- //}
- size_t idx = 0;
- const char *pszConfigDriverpath = GetDriverConfigFilepath(idx);
- std::cout << "CDI InitAs g_DrvManager.LoadDriver(pszConfigDriverpath) " << idx << std::endl;
- //mLog::FINFO("CDI InitAs g_DrvManager.LoadDriver(pszConfigDriverpath) {$}", idx);
- while (pszConfigDriverpath)
- {
- //mLog::FINFO("CDI InitAs g_DrvManager.LoadDriver: {$}", pszConfigDriverpath);
- std::cout << "CDI InitAs g_DrvManager.LoadDriver:" << pszConfigDriverpath << std::endl;
- string msg = "Load Main Driver ";
- msg += pszConfigDriverpath;
- hstClient.Notify(topic.c_str(), GetDeviceID().c_str(), "Startup", "Status",msg.c_str() );
- if (g_DrvManager.LoadDriver(pszConfigDriverpath) == false)
- {
- //log here
- //mLog::FINFO("Failed Load Drver:{$}", pszConfigDriverpath);
- }
- else
- {
- std::cout << "Load " << pszConfigDriverpath<< "succeed" << std::endl;
- //mLog::FINFO("Load {$} succeed", pszConfigDriverpath);
- }
- //mLog::FINFO("CDI g_DrvManager.LoadDriver Use Time {$} ms", GetTickCount() - dwTick );
- dwTick = GetTickCount();
- pszConfigDriverpath = GetDriverConfigFilepath(++idx);
- }
- std::cout << "CDI UpdateRootDrvStatus" <<std::endl;
- //mLog::FINFO("CDI UpdateRootDrvStatus");
- if (g_DrvManager.UpdateRootDrvStatus(1))
- {
- //mLog::FINFO("CDI g_DrvManager.UpdateRootDrvStatus Use Time {$} ms", GetTickCount() - dwTick);
- dwTick = GetTickCount();
- //mLog::FINFO("CDI InitBusUnit");
- std::cout << "CDI InitBusUnit" << std::endl;
- if (InitBusUnit())
- {
- //mLog::FINFO("CDI InitBusUnit Use Time {$} ms", GetTickCount() - dwTick);
- dwTick = GetTickCount();
- //等待共享内存线程结束
- struct timespec ts;
- clock_gettime(CLOCK_REALTIME, &ts);
- ts.tv_sec += 2; // 2秒超时
- // 使用pthread_timedjoin_np实现超时等待
- if (pthread_timedjoin_np(hShareMemoryHandle, nullptr, &ts) != 0) {
- fprintf(stderr, "InitShareMemory thread timeout\n");
- }
- std::cout << "CDI WaitForSingleObject(hShareMemoryHandle over" << std::endl;
- //mLog::FINFO("CDI WaitForSingleObject(hShareMemoryHandle over");
- idx_test++;
- std::cout << "CDI g_DrvManager.DynDriverInitLoadAll "<< idx_test << std::endl;
- //mLog::FINFO("CDI g_DrvManager.DynDriverInitLoadAll {$}", idx_test);
-
- g_DrvManager.DynDriverInitLoadAll();
- hstClient.Notify(topic.c_str(), GetDeviceID().c_str(), "Startup", "Status", "Start OK");
- topic = "CCOS/HOST/" + mjrID + "/Status/Running";
- string runMsg = "{\"GrpcPort\":" + to_string(nGrpcPort) + "}";
- hstClient.Notify(topic.c_str(), (string("CCOS/DRIVER/")+ GetDeviceID()).c_str(), "Running", "Status", runMsg.c_str());
- //mLog::FINFO("CDI DynDriverInitLoadAll over. Started ok.");
- std::cout << "CDI DynDriverInitLoadAll over. Started ok." << std::endl;
- return true;
- }
- else
- {
- //mLog::FINFO("Failed to init bus unit.");
- }
- }
- std::cout << "CDI UnLoadAll" << std::endl;
- //mLog::FINFO("CDI UnLoadAll");
- UnLoadAll();
- return false;
- }
- /*else if (Master == CCOS_PROC_SLAVE)
- {
- //slave
- assert(0);//NOT FINISHED YET
- }*/
- std::cout << "-*-*-*-* Shoud not Execute, execpet somting failed..... Use Time" << GetTickCount() - dwTick << " ms" << endl;
- dwTick = GetTickCount();
- if (InitBusUnit())
- {
- std::cout << "-*-*-*-* InitBusUnit again Use Time" << GetTickCount() - dwTick << " ms" << endl;
- dwTick = GetTickCount();
- //等待共享内存线程结束
- struct timespec ts;
- clock_gettime(CLOCK_REALTIME, &ts);
- ts.tv_sec += 2; // 2秒超时
- // 使用pthread_timedjoin_np实现超时等待
- if (pthread_timedjoin_np(hShareMemoryHandle, nullptr, &ts) != 0) {
- fprintf(stderr, "InitShareMemory thread timeout\n");
- }
- idx_test++;
- std::cout << "- *-*-*-* ========= g_DrvManager.DynDriverInitLoadAll 2 " << idx_test << endl;
- g_DrvManager.DynDriverInitLoadAll();
- return true;
- }
-
- UnLoadAll();
- return false;
- }
- /*
- bool CDI::ReceivedFromLocalBus(ResDataObject &packet)
- {
- bool ret = true;
- RES_//mLog::FINFO(packet, "Packet from Local Bus");
- //correct it's direction
- try {
- PacketAnalizer::UpdatePacketRoute(packet, CCOS_PACKET_ROUTE_LOCAL);
- //do the normal dispatch
- ret = ReceivedFromBus(packet);
- }
- catch (...)
- {
- ret = false;
- }
- return ret;
- }
- bool CDI::ReceivedFromEthBus(ResDataObject &packet)
- {
- bool ret = true;
- RES_//mLog::FINFO(packet, "Packet from Eth Bus");
- //correct it's direction
- try {
- PacketAnalizer::UpdatePacketRoute(packet, CCOS_PACKET_ROUTE_ETH);
- //do the normal dispatch
- ret = ReceivedFromBus(packet);
- }
- catch (...)
- {
- ret = false;
- }
- return ret;
- }
- */
- bool CDI::SendCcosPacket(ResDataObject& packet)
- {
- CCOS_PACKET_ROUTE Route;
- if (!PacketAnalizer::GetPacketRoute(&packet, Route))
- return false;
- bool sendtoLocalMachine = false;
- bool sendBlockData = false;
- //packet cmd
- PACKET_CMD cmd = PacketAnalizer::GetPacketCmd(&packet);
- if (cmd == PACKET_CMD_DATA)
- {
- sendBlockData = true;
- }
- string DesBusId;
- if (!PacketAnalizer::GetDestinationBusId(packet, DesBusId))
- {
- return false;
- }
- //Precaculate direction
- if (Route == CCOS_PACKET_ROUTE_ANY)
- {
- //choose one
- Route = GetBusIdDirection(DesBusId);
- }
- //caculate again
- if (Route == CCOS_PACKET_ROUTE_LOCAL)
- {
- //target in this machine
- sendtoLocalMachine = true;
- }
- else if (Route == CCOS_PACKET_ROUTE_ETH)
- {
- //target is not in this machine
- }
- else if (Route == CCOS_PACKET_ROUTE_ANY)
- {
- //if still any direction,then try local and try eth
- //local first
- if (DoSendPacket(packet, true, sendBlockData, DesBusId) == CMD_ECHO_OK)
- {
- return CMD_ECHO_OK;
- }
- //try eth
- return DoSendPacket(packet, false, sendBlockData, DesBusId);
- }
- else
- {
- //ignore
- return CMD_ECHO_IGNORE;
- }
- //do send
- return DoSendPacket(packet, sendtoLocalMachine, sendBlockData, DesBusId);
- }
- //1.command comes from client
- //2.dispatch command comes from device
- bool CDI::ReceivedFromBus(ResDataObject &packet)
- {
- bool ret = true;
- /*
- //check destination & dispatch
- CMD_ECHO DispatchRet = DispatchPacket(packet);
- if (DispatchRet == CMD_ECHO_OK)
- {
- //log here
- //mLog::FINFO("Trasform Succeed");
- return true;
- }
- else if (DispatchRet == CMD_ECHO_IGNORE)
- {
- //mLog::FINFO("Ignore Packet");
- return false;
- }
- else if (DispatchRet == CMD_ECHO_NG)//this proc
- {
-
- //dispatch to the process
- //mLog::FINFO("Dispatch to Local");
- DispatchRet = DispatchToLocal(packet);
- if (DispatchRet == CMD_ECHO_OK)
- {
- //mLog::FINFO("Dispatch to Local Succeed");
- return true;
- }
- else if (DispatchRet == CMD_ECHO_NG)//device access failed
- {
- //request in
- //make failed Res and send it
- //mLog::FERROR("Dispatch to Local Failed.no access right");
- Ex_ResponseRemoteClientReq(packet, RET_FAILED, "no access right");
- return true;//保持连线
- }
- else if (DispatchRet == CMD_ECHO_NOTARGET)
- {
- //deal later
- //mLog::FERROR("Dispatch to Local Failed.no target exist");
- }
- else
- {
- //ignore
- //mLog::FERROR("Dispatch to Local Failed.no idea....");
- }
- }
- if (DispatchRet == CMD_ECHO_NOTARGET)
- {
- PACKET_TYPE type = PacketAnalizer::GetPacketType(&packet);
- PACKET_CMD cmd = PacketAnalizer::GetPacketCmd(&packet);
- //failed send packet
- switch (type)
- {
- case PACKET_TYPE_REQ:
- //make INVALID Res and send it
- if (cmd != PACKET_CMD_CLOSE)
- {
- //mLog::FERROR("Response to Owner.no device exist....");
- Ex_ResponseRemoteClientReq(packet, RET_INVALID, "no device exist");
- }
- break;
- case PACKET_TYPE_RES:
- case PACKET_TYPE_NOTIFY:
- //make Close Notify and send it
- //mLog::FERROR("Request Close to Device.no Owner exist...");
- Ex_RequestRemoteClientClose(packet);
- break;
- default:
- //log here??
- //mLog::FERROR("Packet error.WTF happenning???");
- return false;
- break;
- }
- return false;
- }
- else
- {
- //junky packet
- //mLog::FERROR("Packet error junky packet.");
- }
- */
- return false;
- }
- /*
- //broardcast
- bool CDI::ReceivedDeviceNotify(ResDataObject &packet)
- {
- vector<CcosDevFileHandle> OwnerList;
- if (g_HandleManager.GetNotifyOwners(packet, OwnerList))
- {
- //NOT FINISHED YET
- //need to seperate this proc owner,local proc owner,eth owner
- for (DWORD i = 0; i < OwnerList.size(); i++)
- {
- //make notify
- ResDataObject notify;
- notify = packet;
- //add
- PacketAnalizer::UpdateNotifyHandle(notify, OwnerList[i]);
- //printf("Driver Thread:%d,Send Notify\n", GetCurrentThreadId());
- RES_//mLog::FINFO(notify,"Notify to Owners:\n");
- ReceivedFromDevice(notify);
- }
- return true;
- }
- else
- {
- //printf("Driver Thread:%d,Failed to Notify.no packet owner exist\n", GetCurrentThreadId());
- }
- return false;
- }*/
- //notify & response.
- bool CDI::ReceivedFromDevice(ResDataObject &packet)
- {
- /*
- PACKET_TYPE type = PacketAnalizer::GetPacketType(&packet);
- switch (type)
- {
- case PACKET_TYPE_RES:
- case PACKET_TYPE_NOTIFY:
- break;
- default:
- //log here??
- printf("Driver Thread:%d,ReceivedFromDevice.wrong packet type\n", GetCurrentThreadId());
- //mLog::FINFO("ReceivedFromDevice.wrong packet type");
- return false;
- break;
- }
- bool ret = true;
- //check destination & dispatch
- CMD_ECHO DispatchRet = DispatchPacket(packet);
- if (DispatchRet == CMD_ECHO_OK)
- {
- //log here
- //mLog::FINFO("Done Dispatch");
- return true;
- }
- else if (DispatchRet == CMD_ECHO_NG)//this proc
- {
- //this proc
- //mLog::FINFO("Local Dispatch");
- //dispatch to the process
- DispatchRet = DispatchToLocal(packet);
- if (DispatchRet == CMD_ECHO_OK)
- {
- return true;
- }
- //no client exist
- //mLog::FINFO("no client exist in Local");
- Ex_ResponseDeviceRes(packet);
- }
- else if (DispatchRet == CMD_ECHO_NOTARGET)
- {
- //failed send packet to target
- //mLog::FINFO("no client exist in Local");
- Ex_ResponseDeviceRes(packet);
- }
- else
- {
- //junky packet
- }
- */
- return false;
- }
- /*
- //request
- bool CDI::ReceivedFromClient(ResDataObject &packet)
- {
- assert(0); //没有从客户端交互的了
- return true;
-
- PACKET_TYPE type = PacketAnalizer::GetPacketType(&packet);
- switch (type)
- {
- case PACKET_TYPE_REQ:
- break;
- default:
- //log here??
- return false;
- break;
- }
- bool ret = true;
- UINT64 ProcId;
- UINT64 Addr;
- if (PacketAnalizer::GetPacketHandleProcId(&packet, ProcId, false) == true &&
- PacketAnalizer::GetPacketHandleAddr(&packet, Addr, false) == true)
- {
- if (g_ClientManager.FindClient(Addr) == false)
- {
- //log here
- //no client registed
- return false;
- }
- //check destination & dispatch
- CMD_ECHO DispatchRet = DispatchPacket(packet);
- if (DispatchRet == CMD_ECHO_OK)
- {
- //log here
- return true;
- }
- else if (DispatchRet == CMD_ECHO_NG)//this proc
- {
- //target is this proc
- //dispatch to the process
- DispatchRet = To_Local_RequestProcedure(packet);
- if (DispatchRet == CMD_ECHO_OK)
- {
- return true;
- }
- else if (DispatchRet == CMD_ECHO_NG)//access right NG
- {
- //权限不够
- Ex_ResponseClientReq(packet,RET_FAILED,"no access right");
- return true;//保持连线
- }
- //其他情况,全部返回失败,由客户端自行断开
- }
- else if (DispatchRet == CMD_ECHO_NOTARGET)
- {
- //failed send out packet
- //the target must be at outside of the process
- //just return false
- }
- else
- {
- //junky packet
- }
- }
- return false;
- }
- */
- /*
- bool CDI::RegistClient(UINT64 Address)
- {
- return g_ClientManager.RegistClient(Address);
- }
- bool CDI::UnRegistClient(UINT64 Address)
- {
- return g_ClientManager.UnRegistClient(Address);
- }*/
- bool CDI::Registhandle(void* Handle)
- {
- CcosDevFileHandle *pHandle = (CcosDevFileHandle *)Handle;
- bool ret = g_HandleManager.Registhandle(*pHandle);
- //mLog::FINFO("RegistHandle.Id:{$},Result:{$}", (UINT64)(*pHandle)[CCOS_PACKET_HANDLE_KEY], ret);
- return ret;
- }
- bool CDI::UnRegistHandle(UINT64 CrcCode)
- {
- //mLog::FINFO("UnRegistHandle Entry.Id:{$}", CrcCode);
- bool ret = g_HandleManager.UnRegistHandle(CrcCode);
- //mLog::FINFO("UnRegistHandle.Id:{$},Result:{$}", CrcCode, ret);
- return ret;
- }
- void CDI::UnLoadAll()
- {
- //printf("--------Exit System Entry--------\n");
- Thread_Lock();
- //printf("UnLoadAllDCS\n");
- //UnLoadAllDCS();
- //mLog::FINFO("UnLoadAllDrivers");
- //printf("UnLoadAllDrivers\n");
- g_DrvManager.UnloadDrivers();
- //mLog::FINFO("UnLoadRootDriver");
- //printf("UnloadRootDriver\n");
- g_DrvManager.UnloadRootDriver();
- //mLog::FINFO("StopDriverTree");
- if (g_DrvTree.StopThread(100) == false)
- {
- //mLog::FINFO("StopDriverTree Used Terminate!!!!!!!!!!!!!!!");
- //printf("StopDriverTree Used Terminate!!!!!!!!!!!!!!!\n");
- }
- ////mLog::FINFO("HandleManager.Clear");
- //g_HandleManager.Clear();
- //HandleManager没必要卸载,因为它保存的是本地设备的句柄,而本地设备在卸载后,
- //会有统一的Close Notify发给Owner.
- //mLog::FINFO("StopBusManager");
- //printf("StopBusManager\n");
- if (UnloadBusDrv() == false)
- {
- //mLog::FINFO("StopBusManagerThread Used Terminate!!!!!!!!!!!!!!!");
- //printf("StopBusManagerThread Used Terminate!!!!!!!!!!!!!!!\n");
- }
- /*
- //mLog::FINFO("UnRegistAllClient");
- printf("UnRegistAllClient\n");
- g_ClientManager.UnRegistAll();*/
- //mLog::FINFO("Exit LogSystem");
- //printf("ExitLoggerModule\n");
- //ExitLoggerModule();
- Thread_UnLock();
- //printf("SetEventExit\n");
- m_ExitHandle->SetEvent();
- //printf("Clear Sharememory\n");
- //Exit_Circle_SM_IF();
- //printf("--------Exit System Exit--------\n");
- }
- //bool CDI::RegistThread(PVOID pCcosThread)
- //{
- // return true;
- // //return g_PTManager.RegistThread(pCcosThread);
- //}
- //
- //void CDI::UnRegistThread(DWORD Tid)
- //{
- // return;
- // //BusUnRegistThread(Tid);//buss
- // //CleanupForThread(Tid);//locks
- // //g_PTManager.UnRegistThread(Tid);
- //}
- //bool CDI::GetThreadsLogger(DWORD Tid, PVOID &pLogger)
- //{
- // pLogger = g_PTManager.GetThreadLogger(Tid);
- //
- // return (pLogger != NULL);
- //}
- bool CDI::InitBusUnit()
- {
- if (m_prootClient == NULL)
- {
- m_prootClient = new BusUnitClient("CDI_BusUnit_rootClient");
- //for test
- CcosDevFileHandle Handle;
- ((BusUnitClient*)m_prootClient)->GetFileHandle(Handle);
- //mLog::FINFO("RootClient init Address:{$}", (UINT64)Handle.GetTarget()[CCOS_PACK_TARGET_ADDR]);
- //printf("RootClient init Address:%I64u\n", (UINT64)Handle.GetTarget()[CCOS_PACK_TARGET_ADDR]);
- if (((BusUnitClient*)m_prootClient)->Open((const char*)getRootpath(), ALL_ACCESS) >= RET_SUCCEED)
- {
- //for test
- //mLog::FINFO("RootClient Open Succeed");
- //printf("RootClient Open Succeed\n");
- return true;
- }
- //for test
- //mLog::FINFO("RootClient Open Failed");
- //printf("RootClient Open Failed\n");
- delete ((BusUnitClient*)m_prootClient);
- m_prootClient = NULL;
- }
- return false;
- }
- bool CDI::WaitExit(DWORD timeout,bool Exit)
- {
- if (Exit)
- {
- ((BusUnitClient*)m_prootClient)->Close();
- //do the Exit Job
- //printf("UnLoadAll On Purpose\n");
- //mLog::FINFO("UnLoadAll On Purpose ");
- UnLoadAll();
- //printf("UnLoadAll Finished\n");
- usleep(100000);
- return true;
- }
- std::shared_ptr<LinuxEvent> hand = ((BusUnitClient*)m_prootClient)->GetNotifyHandle();
- DWORD wait = hand->Wait(timeout);
- if (wait == WAIT_OBJECT_0)
- {
- //printf("WaitExit:Got Root Notify\n");
- //update status
- ResDataObject packet;
- try {
- //printf("Thread:%d,DrvTree Thread Loop\n", GetCurrentThreadId());
- if (((BusUnitClient*)m_prootClient)->IsClosed() == true)
- {
- //printf("WaitExit:Try Open Root \n");
- //mLog::FINFO("client handle is closed.Try Open Root");
- //try once
- if (((BusUnitClient*)m_prootClient)->Open((const char*)getRootpath(), ALL_ACCESS) == false)
- {
- //printf("Thread:%d,Open Failed\n", GetCurrentThreadId());
- //mLog::FERROR("Thread:{$},Open root : {$} Failed.unloadall...\n", GetCurrentThreadId(), (const char*)getRootpath());
- UnLoadAll();
- return true;
- }
- //printf("WaitExit:Try Open Root Succeed\n");
- }
- //below is opened status
- PACKET_CMD cmd;
- do {
- cmd = ((BusUnitClient*)m_prootClient)->ReadCmd(packet);
- if (cmd == PACKET_CMD_UPDATE)
- {
- //printf("Got Root Update\n");
- string key = PacketAnalizer::GetPacketKey(&packet);
- if (key == "ExitFlag")
- {
- if (((BusUnitClient*)m_prootClient)->GetExitFlag())
- {
- ((BusUnitClient*)m_prootClient)->Close();
- //do the Exit Job
- //printf("Entering Exit Job\n");
- //mLog::FINFO("ExitFlag is Set.Entering Exit Job\n");
- UnLoadAll();
- return true;
- }
- }
- //ignore others
- }
- else
- {
- //ignore others
- //printf("Thread:%d,DrvTree Thread Ignore\n", GetCurrentThreadId(), cmd);
- }
- } while (cmd != PACKET_CMD_NONE);
- }
- catch (...)
- {
- //printf("Thread:%d,Exeption in DrvTree Thread\n", GetCurrentThreadId());
- }
- return false;
- }
- //timeout no quit
- return false;
- }
- void CDI::Ex_RequestRemoteClientClose(ResDataObject &Res)
- {
- try {
- ResDataObject Req;
- //send close notify
- if (PacketAnalizer::MakeCloseRequestByRes(Res, Req))
- {
- DispatchPacket(Req);
- }
- }
- catch (...)
- {
- }
- }
- void CDI::Ex_ResponseRemoteClientReq(ResDataObject &Req, RET_STATUS status, const char *pInfo)
- {
- try {
- ResDataObject Res;
- if (PacketAnalizer::MakeResponseByReq(Res, Req, status, pInfo))
- {
- DispatchPacket(Res);
- }
- //send close notify
-
- }
- catch (...)
- {
- }
- }
- void CDI::Ex_ResponseClientReq(ResDataObject &Req, RET_STATUS status, const char *pInfo)
- {
- try {
- ResDataObject Res;
- PacketAnalizer::MakeResponseByReq(Res, Req, status, pInfo);
- CMD_ECHO ret = CMD_ECHO_OK;//To_Local_ResponseProcedure(Res);
- if (ret == CMD_ECHO_OK)
- {
- //log here
- }
- }
- catch (...)
- {
- }
- }
- void CDI::Ex_ResponseDeviceRes(ResDataObject &Res)
- {
- try {
- //清除句柄
- UINT64 Crc = 0;
- PacketAnalizer::GetPacketHandleCrc(&Res, Crc);
- g_HandleManager.UnRegistHandle(Crc);
- }
- catch (...)
- {
- }
- }
- void CDI::Ex_ResponseEbus(ResDataObject &packet)
- {
- //Req
- //Res
- }
- /*
- CMD_ECHO CDI::DispatchToLocal(ResDataObject &packet)
- {
- //match to this proc
- //request:dispatch to device
- //response:dispatch to client
- //notify:dispatch to client
- CMD_ECHO echo = CMD_ECHO_IGNORE;
- //check req or res
- PACKET_TYPE type = PacketAnalizer::GetPacketType(&packet);
- switch (type)
- {
- case PACKET_TYPE_REQ:
- echo = (To_Local_RequestProcedure(packet));
- break;
- case PACKET_TYPE_RES:
- assert(0); //从eBus上不再会收到res,因为不会发req了,client的收发转到MQTT了
- //echo = To_Local_ResponseProcedure(packet);
- break;
- case PACKET_TYPE_NOTIFY:
- assert(0); //从eBus上不再会收到notify,notify的收发转到MQTT了
- //echo = To_Local_NotifyProcedure(packet);
- break;
- default:
- //log here??
- break;
- }
- return echo;
- }*/
- /*
- bool CDI::AddDPC(PVOID pMDPC, PVOID pDPC, ResDataObject &DrvConfig)
- {
- return g_DrvManager.LoadDPC((MultiDPC*)pMDPC, (DriverDPC*)pDPC, DrvConfig);
- }
- bool CDI::DelDPC(PVOID pMDPC, PVOID pDPC)
- {
- return g_DrvManager.UnLoadDPC((MultiDPC*)pMDPC, (DriverDPC*)pDPC);
- }
- */
- CDI_C_API CDI *GetCommandDispathIF()
- {
- return &g_CDI;
- }
- /*
- CDI_C_API bool InitClientEnv()
- {
- if (GetCommandDispathIF()->InitAs(CCOS_PROC_CLIENT, (UINT64)GetCurrentProcessId()))
- {
- return true;
- }
- return false;
- }
- CDI_C_API bool DestroyClientEnv()
- {
- GetCommandDispathIF()->UnLoadAll();
- return true;
- }
- */
- CDI_C_API CDInterface* GetCDI()
- {
- return &g_CDI;
- }
|