inline s32 Factory::AddDevice(DeviceParam & pParam) { s32 nId = GetDeviceID(); FactoryDeviceChangeData change; Device *pDevice = NULL; DeviceParam pParam2; Lock(); pParam.m_Conf.data.conf.nId = nId; if (pParam.m_Conf.data.conf.nType == VSC_DEVICE_CAM) { m_DeviceMap[nId] = new Device(*m_pVdb, *m_pVHdfsdb, pParam); pDevice = m_DeviceMap[nId]; }else { m_DeviceMap[nId] = NULL; return -1; } m_DeviceParamMap[nId] = pParam; m_DeviceOnlineMap[nId] = 0; m_Conf.AddDevice(pParam.m_Conf, nId); UnLock(); change.id = nId; change.type = FACTORY_DEVICE_ADD; CallDeviceChange(change); /* Try to online the device and lock */ Lock(); pDevice->GetDeviceParam(pParam2); UnLock(); pParam2.m_wipOnline = pParam2.CheckOnline(); if (pParam2.m_OnlineUrl == FALSE) { pParam2.m_wipOnlineUrl = pParam2.UpdateUrl(); } /* Try to make the device online */ Lock(); DeviceStatus bCheck = pDevice->CheckDevice(pParam2.m_strUrl, pParam2.m_strUrlSubStream, pParam2.m_bHasSubStream, pParam2.m_wipOnline, pParam2.m_wipOnlineUrl); FactoryDeviceChangeData change2; change2.id = nId; if (bCheck == DEV_OFF2ON) { change.type = FACTORY_DEVICE_ONLINE; m_DeviceOnlineMap[nId] = 1; UnLock(); CallDeviceChange(change); Lock(); } UnLock(); return nId; }
inline BOOL Factory::StartRecord(s32 nIndex) { DeviceParam pParam; FactoryDeviceChangeData change; if (nIndex <=0 || nIndex >= FACTORY_DEVICE_ID_MAX) { return FALSE; } GetDeviceParamById(pParam, nIndex); if (pParam.m_Conf.data.conf.Recording == 1) { return TRUE; } Lock(); pParam.m_Conf.data.conf.Recording = 1; m_Conf.UpdateDeviceData(nIndex, pParam.m_Conf); m_DeviceParamMap[nIndex] = pParam; if (m_DeviceMap[nIndex] != NULL) { m_DeviceMap[nIndex]->SetRecord(TRUE); m_DeviceMap[nIndex]->StartRecord(); } UnLock(); change.id = nIndex; change.type = FACTORY_DEVICE_RECORDING_ON; CallDeviceChange(change); return TRUE; }
inline s32 Factory::AddVGroup(VSCVGroupDataItem &pParam) { VSCVGroupData VGroupData; FactoryDeviceChangeData change; int id = -1; Lock(); m_Conf.GetVGroupData(VGroupData); /* Just use 1 to CONF_VGROUP_NUM_MAX */ for (s32 i = 1; i < CONF_VGROUP_NUM_MAX; i ++) { if (VGroupData.data.conf.group[i].Used == 1) { continue; }else { memcpy(&(VGroupData.data.conf.group[i]), &pParam, sizeof(VSCVGroupDataItem)); VGroupData.data.conf.group[i].Used = 1; VGroupData.data.conf.group[i].nId = i; id = i; break; } } m_Conf.UpdateVGroupData(VGroupData); UnLock(); change.id = id; change.type = FACTORY_VGROUP_ADD; CallDeviceChange(change); return id; }
inline BOOL Factory::DelDevice(s32 nIndex) { FactoryDeviceChangeData change; VDC_DEBUG( "%s DelDevice %d\n",__FUNCTION__, nIndex); if (nIndex <=0 || nIndex >= FACTORY_DEVICE_ID_MAX) { return FALSE; } //TODO check is this device can be delete or not Lock(); VDC_DEBUG( "%s Cleanup Begin\n",__FUNCTION__); m_DeviceMap[nIndex]->Cleanup(); VDC_DEBUG( "%s Cleanup End\n",__FUNCTION__); delete m_DeviceMap[nIndex]; m_DeviceMap[nIndex] = NULL; m_DeviceParamMap.erase(nIndex); m_DeviceMap.erase(nIndex); m_Conf.DelDevice(nIndex); UnLock(); ReleaseDeviceID(nIndex); change.id = nIndex; change.type = FACTORY_DEVICE_DEL; CallDeviceChange(change); return TRUE; }
inline s32 Factory::AddTour(VSCTourDataItem &pParam) { VSCTourData TourData; FactoryDeviceChangeData change; int id = -1; Lock(); m_Conf.GetTourData(TourData); /* Just use 1 to CONF_TOUR_NUM_MAX */ for (s32 i = 1; i < CONF_TOUR_NUM_MAX; i ++) { if (TourData.data.conf.tour[i].Used == 1) { continue; } else { memcpy(&(TourData.data.conf.tour[i]), &pParam, sizeof(VSCTourDataItem)); TourData.data.conf.tour[i].Used = 1; TourData.data.conf.tour[i].nId = i; id = i; break; } } m_Conf.UpdateTourData(TourData); UnLock(); change.id = id; change.type = FACTORY_TOUR_ADD; CallDeviceChange(change); return id; }
inline BOOL Factory::DelVms(s32 Id) { VSCVmsData * pVmsData = new VSCVmsData; VSCVmsData &VmsData = *pVmsData; FactoryDeviceChangeData change; Lock(); m_Conf.GetVmsData(VmsData); if (Id < CONF_VMS_NUM_MAX && Id > 0) { VmsData.data.conf.vms[Id].Used = 0; } else { UnLock(); delete pVmsData; return FALSE; } m_Conf.UpdateVmsData(VmsData); UnLock(); change.id = Id; change.type = FACTORY_VMS_DEL; CallDeviceChange(change); delete pVmsData; return TRUE; }
inline s32 Factory::AddVms(VSCVmsDataItem &pParam) { VSCVmsData * pVmsData = new VSCVmsData; VSCVmsData &VmsData = *pVmsData; FactoryDeviceChangeData change; int id = -1; Lock(); m_Conf.GetVmsData(VmsData); /* Just use 1 to CONF_VMS_NUM_MAX */ for (s32 i = 1; i < CONF_VMS_NUM_MAX; i ++) { if (VmsData.data.conf.vms[i].Used == 1) { continue; } else { memcpy(&(VmsData.data.conf.vms[i]), &pParam, sizeof(VSCVmsDataItem)); VmsData.data.conf.vms[i].Used = 1; VmsData.data.conf.vms[i].nId = i; id = i; break; } } m_Conf.UpdateVmsData(VmsData); UnLock(); change.id = id; change.type = FACTORY_VMS_ADD; CallDeviceChange(change); delete pVmsData; return id; }
inline s32 Factory::AddVIPC(VIPCDeviceParam & pParam) { s32 nId = GetVIPCID(); FactoryDeviceChangeData change; VDC_DEBUG( "%s GetDeviceID %d\n",__FUNCTION__, nId); Lock(); pParam.m_Conf.data.conf.nId = nId; m_VIPCDeviceParamMap[nId] = pParam; m_Conf.AddVIPC(pParam.m_Conf, nId); UnLock(); change.id = nId; change.type = FACTORY_VIPC_ADD; CallDeviceChange(change); return nId; }
inline BOOL Factory::DelVGroup(s32 Id) { VSCVGroupData VGroupData; FactoryDeviceChangeData change; Lock(); m_Conf.GetVGroupData(VGroupData); if (Id < CONF_VGROUP_NUM_MAX && Id > 0) { VGroupData.data.conf.group[Id].Used = 0; }else { UnLock(); return FALSE; } m_Conf.UpdateVGroupData(VGroupData); UnLock(); change.id = Id; change.type = FACTORY_VGROUP_DEL; CallDeviceChange(change); return TRUE; }
inline BOOL Factory::DelView(s32 Id) { VSCViewData ViewData; FactoryDeviceChangeData change; Lock(); m_Conf.GetViewData(ViewData); if (Id < CONF_VMS_NUM_MAX && Id > 0) { ViewData.data.conf.view[Id].Used = 0; }else { UnLock(); return FALSE; } m_Conf.UpdateViewData(ViewData); UnLock(); change.id = Id; change.type = FACTORY_VIEW_DEL; CallDeviceChange(change); return TRUE; }
inline BOOL Factory::DelVIPC(s32 nIndex) { FactoryDeviceChangeData change; VDC_DEBUG( "%s DelDevice %d\n",__FUNCTION__, nIndex); if (nIndex <=0 || nIndex >= FACTORY_DEVICE_ID_MAX) { return FALSE; } change.id = nIndex; change.type = FACTORY_VIPC_DEL; CallDeviceChange(change); Lock(); m_VIPCDeviceParamMap.erase(nIndex); m_Conf.DelVIPC(nIndex); ReleaseVIPCID(nIndex); UnLock(); return TRUE; }
inline BOOL Factory::DelTour(s32 Id) { VSCTourData TourData; FactoryDeviceChangeData change; Lock(); m_Conf.GetTourData(TourData); if (Id < CONF_VMS_NUM_MAX && Id > 0) { TourData.data.conf.tour[Id].Used = 0; } else { UnLock(); return FALSE; } m_Conf.UpdateTourData(TourData); UnLock(); change.id = Id; change.type = FACTORY_TOUR_DEL; CallDeviceChange(change); return TRUE; }
inline s32 Factory::AddDevice(DeviceParam & pParam) { s32 nId = GetDeviceID(); FactoryDeviceChangeData change; Lock(); pParam.m_Conf.data.conf.nId = nId; if (pParam.m_Conf.data.conf.nType == VSC_DEVICE_CAM) { m_DeviceMap[nId] = new Device(*m_pVdb, *m_pVHdfsdb, pParam); }else { m_DeviceMap[nId] = NULL; } m_DeviceParamMap[nId] = pParam; m_Conf.AddDevice(pParam.m_Conf, nId); UnLock(); change.id = nId; change.type = FACTORY_DEVICE_ADD; CallDeviceChange(change); return nId; }
inline BOOL Factory::UpdateDeviceGroup(s32 nIndex, s32 nGroup) { DeviceParam pParam; FactoryDeviceChangeData change; if (nIndex <=0 || nIndex >= FACTORY_DEVICE_ID_MAX) { return FALSE; } GetDeviceParamById(pParam, nIndex); if (pParam.m_Conf.data.conf.GroupId == nGroup) { return TRUE; } Lock(); pParam.m_Conf.data.conf.GroupId = nGroup; m_DeviceParamMap[nIndex] = pParam; m_Conf.UpdateDeviceData(nIndex, pParam.m_Conf); UnLock(); change.id = nIndex; change.type = FACTORY_DEVICE_GROUP_CHANGE; CallDeviceChange(change); return TRUE; }
inline void Factory::run() { DeviceParamMap paramMap; /* Create the thread to update the Disk status */ while (1) { paramMap.clear(); { /* Got all the device param */ Lock(); DeviceMap::iterator it = m_DeviceMap.begin(); for(; it!=m_DeviceMap.end(); ++it) { s32 nIndex = (*it).first; DeviceParam pParam; m_DeviceMap[nIndex]->GetDeviceParam(pParam); paramMap[nIndex] = pParam; } UnLock(); } { /* Loop all the deviceparam */ DeviceParamMap::iterator it = paramMap.begin(); for(; it!=paramMap.end(); ++it) { /* Loop to check the device and update the url */ s32 nIndex = (*it).first; (*it).second.m_wipOnline = (*it).second.CheckOnline(); if ((*it).second.m_OnlineUrl == FALSE) { (*it).second.m_wipOnlineUrl = (*it).second.UpdateUrl(); } } } { /* Loop all the deviceparam result and set to device */ DeviceParamMap::iterator it = paramMap.begin(); for(; it!=paramMap.end(); ++it) { /* Loop to check the device and update the url */ s32 nIndex = (*it).first; Lock(); DeviceMap::iterator it1 = m_DeviceMap.find(nIndex), ite1 = m_DeviceMap.end(); if (it1 == ite1) { /* the id may be delete */ UnLock(); continue; } DeviceStatus bCheck = m_DeviceMap[nIndex]->CheckDevice( (*it).second.m_strUrl, (*it).second.m_strUrlSubStream, (*it).second.m_bHasSubStream, (*it).second.m_wipOnline, (*it).second.m_wipOnlineUrl); FactoryDeviceChangeData change; change.id = nIndex; switch (bCheck) { case DEV_OFF2ON: { change.type = FACTORY_DEVICE_ONLINE; UnLock(); CallDeviceChange(change); Lock(); break; } case DEV_ON2OFF: { change.type = FACTORY_DEVICE_OFFLINE; UnLock(); CallDeviceChange(change); Lock(); break; } default: { break; } } UnLock(); } } ve_sleep(1000 * 20); } }