diff --git a/photon-client/src/stores/settings/CameraSettingsStore.ts b/photon-client/src/stores/settings/CameraSettingsStore.ts index ef7799e3a6..32c3f94edf 100644 --- a/photon-client/src/stores/settings/CameraSettingsStore.ts +++ b/photon-client/src/stores/settings/CameraSettingsStore.ts @@ -142,7 +142,8 @@ export const useCameraSettingsStore = defineStore("cameraSettings", { maxWhiteBalanceTemp: d.maxWhiteBalanceTemp, matchedCameraInfo: d.matchedCameraInfo, isConnected: d.isConnected, - hasConnected: d.hasConnected + hasConnected: d.hasConnected, + mismatch: d.mismatch }; return acc; }, {}); diff --git a/photon-client/src/types/SettingTypes.ts b/photon-client/src/types/SettingTypes.ts index 693f14fda5..59fa0d39a8 100644 --- a/photon-client/src/types/SettingTypes.ts +++ b/photon-client/src/types/SettingTypes.ts @@ -266,6 +266,7 @@ export interface UiCameraConfiguration { matchedCameraInfo: PVCameraInfo; isConnected: boolean; hasConnected: boolean; + mismatch: boolean; } export interface CameraSettingsChangeRequest { @@ -388,7 +389,8 @@ export const PlaceholderCameraSettings: UiCameraConfiguration = { PVUsbCameraInfo: undefined }, isConnected: true, - hasConnected: true + hasConnected: true, + mismatch: false }; export enum CalibrationBoardTypes { diff --git a/photon-client/src/types/WebsocketDataTypes.ts b/photon-client/src/types/WebsocketDataTypes.ts index b68fd1df73..4ca05d7895 100644 --- a/photon-client/src/types/WebsocketDataTypes.ts +++ b/photon-client/src/types/WebsocketDataTypes.ts @@ -69,6 +69,7 @@ export interface WebsocketCameraSettingsUpdate { matchedCameraInfo: PVCameraInfo; isConnected: boolean; hasConnected: boolean; + mismatch: boolean; } export interface WebsocketNTUpdate { connected: boolean; diff --git a/photon-client/src/views/CameraMatchingView.vue b/photon-client/src/views/CameraMatchingView.vue index 35d8401aa4..093cb83fb0 100644 --- a/photon-client/src/views/CameraMatchingView.vue +++ b/photon-client/src/views/CameraMatchingView.vue @@ -168,64 +168,7 @@ const deleteThisCamera = (cameraName: string) => { }); }; -const camerasMatch = (camera1: PVCameraInfo, camera2: PVCameraInfo) => { - if (camera1.PVUsbCameraInfo && camera2.PVUsbCameraInfo) - return ( - camera1.PVUsbCameraInfo.name === camera2.PVUsbCameraInfo.name && - camera1.PVUsbCameraInfo.vendorId === camera2.PVUsbCameraInfo.vendorId && - camera1.PVUsbCameraInfo.productId === camera2.PVUsbCameraInfo.productId && - camera1.PVUsbCameraInfo.uniquePath === camera2.PVUsbCameraInfo.uniquePath - ); - else if (camera1.PVCSICameraInfo && camera2.PVCSICameraInfo) - return ( - camera1.PVCSICameraInfo.uniquePath === camera2.PVCSICameraInfo.uniquePath && - camera1.PVCSICameraInfo.baseName === camera2.PVCSICameraInfo.baseName - ); - else if (camera1.PVFileCameraInfo && camera2.PVFileCameraInfo) - return ( - camera1.PVFileCameraInfo.uniquePath === camera2.PVFileCameraInfo.uniquePath && - camera1.PVFileCameraInfo.name === camera2.PVFileCameraInfo.name - ); - else return false; -}; - -const cameraInfoFor = (camera: PVCameraInfo | null): PVUsbCameraInfo | PVCSICameraInfo | PVFileCameraInfo | any => { - if (!camera) return null; - if (camera.PVUsbCameraInfo) { - return camera.PVUsbCameraInfo; - } - if (camera.PVCSICameraInfo) { - return camera.PVCSICameraInfo; - } - if (camera.PVFileCameraInfo) { - return camera.PVFileCameraInfo; - } - return {}; -}; - -/** - * Find the PVCameraInfo currently occupying the same uniquepath as the the given module - */ -const getMatchedDevice = (info: PVCameraInfo | undefined): PVCameraInfo => { - if (!info) { - return { - PVFileCameraInfo: undefined, - PVCSICameraInfo: undefined, - PVUsbCameraInfo: undefined - }; - } - return ( - useStateStore().vsmState.allConnectedCameras.find( - (it) => cameraInfoFor(it).uniquePath === cameraInfoFor(info).uniquePath - ) || { - PVFileCameraInfo: undefined, - PVCSICameraInfo: undefined, - PVUsbCameraInfo: undefined - } - ); -}; - -const cameraCononected = (uniquePath: string): boolean => { +const cameraConnected = (uniquePath: string): boolean => { return ( useStateStore().vsmState.allConnectedCameras.find((it) => cameraInfoFor(it).uniquePath === uniquePath) !== undefined ); @@ -252,8 +195,8 @@ const activeVisionModules = computed(() => // Display connected cameras first .sort( (first, second) => - (cameraCononected(cameraInfoFor(second.matchedCameraInfo).uniquePath) ? 1 : 0) - - (cameraCononected(cameraInfoFor(first.matchedCameraInfo).uniquePath) ? 1 : 0) + (cameraConnected(cameraInfoFor(second.matchedCameraInfo).uniquePath) ? 1 : 0) - + (cameraConnected(cameraInfoFor(first.matchedCameraInfo).uniquePath) ? 1 : 0) ) ); @@ -274,6 +217,45 @@ const setCameraDeleting = (camera: UiCameraConfiguration | WebsocketCameraSettin cameraToDelete.value = camera; }; const yesDeleteMySettingsText = ref(""); + +/** + * Get the connection-type-specific camera info from the given PVCameraInfo object. + */ +const cameraInfoFor = (camera: PVCameraInfo | null): PVUsbCameraInfo | PVCSICameraInfo | PVFileCameraInfo | any => { + if (!camera) return null; + if (camera.PVUsbCameraInfo) { + return camera.PVUsbCameraInfo; + } + if (camera.PVCSICameraInfo) { + return camera.PVCSICameraInfo; + } + if (camera.PVFileCameraInfo) { + return camera.PVFileCameraInfo; + } + return {}; +}; + +/** + * Find the PVCameraInfo currently occupying the same uniquePath as the the given module + */ +const getMatchedDevice = (info: PVCameraInfo | undefined): PVCameraInfo => { + if (!info) { + return { + PVFileCameraInfo: undefined, + PVCSICameraInfo: undefined, + PVUsbCameraInfo: undefined + }; + } + return ( + useStateStore().vsmState.allConnectedCameras.find( + (it) => cameraInfoFor(it).uniquePath === cameraInfoFor(info).uniquePath + ) || { + PVFileCameraInfo: undefined, + PVCSICameraInfo: undefined, + PVUsbCameraInfo: undefined + } + ); +};