#include "StdAfx.h" #include "WheelDPC.h" #include "DevTree.h" #include "WheelOemDevice.h" WHEELDPC_API DriverDPC* GetDriverDPC() { return (DriverDPC*)(new WheelDPC()); } WHEELDPC_API void ReleaseDriverDPC(DriverDPC *p) { WheelDPC *org = (WheelDPC*)p; delete org; } WheelDPC::WheelDPC(void) { m_pWorkpath = new std::string(); } WheelDPC::~WheelDPC(void) { delete m_pWorkpath; } bool WheelDPC::DriverEntry(ResDataObject &Configuration) { return LogicDriver::DriverEntry(Configuration); } //bool SYSTEM_CALL WheelDPC::Driver_Probe(ResDataObject& PARAM_OUT HardwareInfo) //{ // ResDataObject Config; // GetConfiguration(&Config); // // HardwareInfo.add("MajorID", (const char*)Config["MajorID"]); // HardwareInfo.add("MinorID", (const char*)Config["MinorID"]); // HardwareInfo.add("VendorID", (const char*)Config["VendorID"]); // HardwareInfo.add("ProductID", (const char*)Config["ProductID"]); // HardwareInfo.add("SerialID", (const char*)Config["SerialID"]); // // return true; // //} bool WheelDPC::Device_Probe(ResDataObject &HardwareInfo) { HardwareInfo.add("MajorID", "wheel"); HardwareInfo.add("MinorID", "drv"); HardwareInfo.add("VendorID", "Ecom"); HardwareInfo.add("ProductID", "Wheel"); HardwareInfo.add("SerialID", Thread_GetUniqTick()); return true; } bool WheelDPC::SetDeviceWorkPath(const char *pWorkPath) { return true; } bool WheelDPC::SetDriverWorkPath(const char *pWorkPath) { (*m_pWorkpath) = pWorkPath; //要把读取单一硬件属性的过程放到此处 return true; } bool WheelDPC::Connect() { LogicDriver::Connect();//make sure it's connected return true; } void WheelDPC::DisConnect() { LogicDriver::DisConnect();//make sure it's Disconnected } RET_STATUS SYSTEM_CALL WheelDPC::GetDriverDictionary(ResDataObject& PARAM_OUT DriverInfo) { DriverInfo.add("DriverType", "Wheel"); DriverInfo.add("DeviceName", "asdf"); DriverInfo.add("DateOfManufacture", "2017.10.20"); DriverInfo.add("SoftwareVersion", "Alpha1.0"); DriverInfo.add("HardwareVersion", "Alpha1.0"); DriverInfo.add("Description", "Root Drver"); DriverInfo.add("Properties", "None"); return RET_SUCCEED; } PVOID WheelDPC::LoadLogicDevices() { PRINTA_INFO(m_pLog, "Load Logic Devices"); DevTree *pTree = (DevTree *)GetDeviceTree(); Wheel_OemDevice *p = new Wheel_OemDevice(); LogicDevice *pret = (LogicDevice *)p; pTree->Add((PVOID)pret, TYPE_DEVICE); return (PVOID)pTree; } void WheelDPC::UnloadLogicDevices() { PRINTA_INFO(m_pLog, "UnLoad Logic Devices"); DevTree *pTree = (DevTree *)GetDeviceTree(); size_t Size = pTree->size(); for (size_t i = 0; i < Size; i++) { DevTreeNode node = (*pTree)[i]; if (node.m_NodeType == TYPE_DEVICE) { LogicDevice *pdev = (LogicDevice*)node.m_pObject; delete pdev; } else { //tree dev //do not copy this!!!! //UnloadLogicDevices(node.m_pObject); } } pTree->clear(); PRINTA_INFO(m_pLog, "UnLoad Over"); }