{"version":3,"file":"index.cjs","names":["DataDirectionTypeEnum","ChipTypeEnum","hasProps","CommonIrCabinetTypeEnum","ScreenDriveTypeEnum","ModuleCascadeDiretionEnum","ChipTypeEnum","ScreenDriveTypeEnum","NSCardTypeEnum","Struct","t","groupByProps","hasProps","isSimpleScreen","ScreenPortAddrInfo","isStandardScreen","notEmpty","groupByProps","hasProps","ScreenPortAddrInfo","Struct","ChipTypeEnum","ScanTypeEnum","DataDirectionTypeEnum","ScreenDriveTypeEnum","ChipTypeEnum","ChipTypeEnum","ScreenDriveTypeEnum","MaxValue","AutoAdjustRefreshRateTypeEnum","notEmpty","AutoAdjustRefreshRateParameters","Struct","AddressMapping","Struct","ModulationModeTypeEnum","crc16","SenderModulationInfo","Struct","crc16","SenderRedundancyInfo","Struct","ScanBoardConnectTypeEnum","Session","Struct","Struct","crc16","GraphicsDVIPortInfo","PathReporter","Struct","AddressMapping","Struct","crc16","Struct","ScreenAdjustParams","Struct","Struct","LEDDisplyTypeEnum","ComplexLEDDisplayInfo","PathReporter","Struct","debug","Struct","LEDDisplyTypeEnum","SimpleLEDDisplayInfo","PathReporter","Struct","debug","Struct","LEDDisplyTypeEnum","StandardLEDDisplayInfo","PathReporter","debug","ScreenInfoRelativeAddress","crc16","LEDDisplyTypeEnum","debug","XMLParser","t","SystemParameterConfig","ScanBoardProperty","crc16","isSimpleScreen","ScreenDataInSoftSpace","LEDDisplyTypeEnum","OnePortLoadInfo","isStandardScreen","DviSelectModeEnum","CabinetInDevice","isComplexScreen","LEDDisplyTypeEnum","SimpleLEDDisplayInfo","StandardLEDDisplayInfo","ComplexLEDDisplayInfo","NSCardTypeEnum","Request","TimeoutError","ErrorType","HDEnableModeEnum","VedioSelectModeEnum","NSCardTypeEnum","LEDDisplyTypeEnum","UInt8","UInt32","LEDDisplyTypeEnum","debug","t","ScreenDataInSoftSpace","ErrorType","itFirstNotNull","decodeUIntLE","minimax","Connection","Session","#devices","#screens","#reduList","#modulations","Request","AddressMapping","DeviceType","BaudRateTypeEnum","crc8","#ready","pack","crc16","SoftwareSpaceBaseAddress","TestModeEnum","getScreenLocation","isHorizontalConnection","isTopConnection","PortScanBoardInfo","isLeftConnection","SimpleLEDDisplayInfo","LEDDisplyTypeEnum","VirtualModeTypeEnum","isSimpleScreen","UInt16","unpack","PathReporter","isSimpleScreen","isHorizontalConnection","isLeftConnection","isTopConnection","isStandardScreen","notEmptyXY","ZipReader","Uint8ArrayReader","Uint8ArrayWriter","ZipWriter","XMLParser","Zip","crc16","Request","DeviceType","ErrorType","ResponseError"],"sources":["../src/CommonCalculator.ts","../src/ConfigurationError.ts","../src/CustomTransform.ts","../src/DviScreenConfigInfo.ts","../src/FileInfo.ts","../src/GetScreenPortAddrInfo.ts","../src/GetScreenSenderAddrInfo.ts","../src/AutoRefreshRate.ts","../src/ChipInherentProperties.ts","../src/ScannerCapabilitySUM2030.ts","../src/ScannerCapabilityICN2053.ts","../src/HWAccessorCalculator.ts","../src/HWStatus.ts","../src/ModulationInfo.ts","../src/RedundancyInfo.ts","../src/ScreenConfigInfo.ts","../src/Session.ts","../src/SoftwareSpaceHeader.ts","../src/DVIInfo.ts","../src/ScanBdRecordNoSendParams.ts","../src/findKnownAddresses.ts","../src/ScannerBinData.ts","../src/ScreenAdjustInfo.ts","../src/ComplexRegionInfo.ts","../src/ComplexScreen.ts","../src/PortInfo.ts","../src/SimpleSingleScreen.ts","../src/RegionInfo.ts","../src/StandardScreen.ts","../src/ScreenInfo.ts","../src/configs.ts","../src/convertLEDDisplayInfoToScreenDataInSoftSpace.ts","../src/convertScreenDataInSoftSpaceToLEDDisplayInfo.ts","../src/GetDeviceTypeLanguage.ts","../src/enumerator.ts","../src/packAndSortCabinets.ts","../src/splitScreensByDevice.ts","../src/ScreenConfigurator.ts","../src/getCabinetPosition.ts","../src/NcpDataGroupMapping.ts","../src/NcpConfig.ts","../src/NcpSender.ts"],"sourcesContent":["// Nova.LCT.GigabitSystem.HardwareCaculator.dll\n// noinspection SpellCheckingInspection\n\nimport { ChipTypeEnum } from '@novastar/native/ChipType';\nimport { CommonIrCabinetTypeEnum } from '@novastar/native/CommonIrCabinetType';\nimport { DataDirectionTypeEnum } from '@novastar/native/DataDirectionType';\nimport { ModuleCascadeDiretionEnum } from '@novastar/native/ModuleCascadeDiretion';\nimport type { ScanBoardProperty } from '@novastar/native/ScanBoardProperty';\nimport { ScreenDriveTypeEnum } from '@novastar/native/ScreenDriveType';\n\nimport { hasProps } from './common';\nimport { CutMapInfo, Rectangle } from './fullScreenSelect';\n\nexport function CaculateShiftUnitNum(\n  modWidth: number,\n  modHeight: number,\n  modTotalPointInTable: number,\n  directionType: DataDirectionTypeEnum,\n  cabinetRealWidth: number,\n  cabinetRealHeight: number,\n): number {\n  return (\n    (directionType !== DataDirectionTypeEnum.Horizontal\n      ? cabinetRealHeight / modHeight\n      : cabinetRealWidth / modWidth) * modTotalPointInTable\n  );\n}\n\nexport const GetGrayScaleByGclkNumPerRef = (gclkNumPerRef: number) => {\n  if (gclkNumPerRef > 32768) {\n    return 16;\n  }\n  if (gclkNumPerRef > 16384) {\n    return 15;\n  }\n  if (gclkNumPerRef > 8192) {\n    return 14;\n  }\n  if (gclkNumPerRef > 4096) {\n    return 13;\n  }\n  if (gclkNumPerRef > 2048) {\n    return 12;\n  }\n  if (gclkNumPerRef > 1024) {\n    return 11;\n  }\n  return 10;\n};\n\ntype GetGclkInfoByPartNumPerRefReturnType = {\n  gclkNumPerScan: number;\n  validGclkNumPerScan: number;\n  brightGclkNumPerScan: number;\n};\n\nexport function GetGclkInfoByPartNumPerRef(\n  chipType: ChipTypeEnum,\n  partNumPerRef: number,\n  isPWMModel = true,\n  isGLCK = true,\n): GetGclkInfoByPartNumPerRefReturnType {\n  switch (chipType) {\n    case ChipTypeEnum.Chip_SUM2030:\n    case ChipTypeEnum.Chip_SUM2130:\n    case ChipTypeEnum.Chip_SUM2033:\n    case ChipTypeEnum.Chip_SUM2131:\n    case ChipTypeEnum.Chip_SUM2035:\n    case ChipTypeEnum.Chip_SUM2135:\n    case ChipTypeEnum.Chip_SUM2032:\n      if (partNumPerRef <= 1) {\n        return {\n          gclkNumPerScan: 1041,\n          validGclkNumPerScan: 1024,\n          brightGclkNumPerScan: 1024,\n        };\n      }\n      if (partNumPerRef <= 2) {\n        return {\n          gclkNumPerScan: 529,\n          validGclkNumPerScan: 512,\n          brightGclkNumPerScan: 512,\n        };\n      }\n      if (partNumPerRef <= 4) {\n        return {\n          gclkNumPerScan: 273,\n          validGclkNumPerScan: 256,\n          brightGclkNumPerScan: 256,\n        };\n      }\n      return {\n        gclkNumPerScan: 145,\n        validGclkNumPerScan: 128,\n        brightGclkNumPerScan: 128,\n      };\n    case ChipTypeEnum.Chip_MY9268:\n    case ChipTypeEnum.Chip_MY9266:\n    case ChipTypeEnum.Chip_MY9366:\n    case ChipTypeEnum.Chip_MY9269:\n      if (partNumPerRef <= 1) {\n        return {\n          gclkNumPerScan: 513,\n          validGclkNumPerScan: 1024,\n          brightGclkNumPerScan: 512,\n        };\n      }\n      return {\n        gclkNumPerScan: 129,\n        validGclkNumPerScan: 256,\n        brightGclkNumPerScan: 128,\n      };\n\n    case ChipTypeEnum.Chip_MBI5042:\n    case ChipTypeEnum.Chip_SM16136:\n    case ChipTypeEnum.Chip_MY9262:\n    case ChipTypeEnum.Chip_MBI5030:\n      return {\n        gclkNumPerScan: 1024,\n        validGclkNumPerScan: 1024,\n        brightGclkNumPerScan: 1024,\n      };\n    case ChipTypeEnum.Chip_MY9263:\n      return {\n        gclkNumPerScan: 512,\n        validGclkNumPerScan: 512,\n        brightGclkNumPerScan: 512,\n      };\n    case ChipTypeEnum.Chip_SM16158:\n      if (partNumPerRef <= 1) {\n        return {\n          gclkNumPerScan: 1025,\n          validGclkNumPerScan: 1024,\n          brightGclkNumPerScan: 1024,\n        };\n      }\n      if (partNumPerRef <= 2) {\n        return {\n          gclkNumPerScan: 513,\n          validGclkNumPerScan: 1024,\n          brightGclkNumPerScan: 512,\n        };\n      }\n      if (partNumPerRef <= 4) {\n        return {\n          gclkNumPerScan: 257,\n          validGclkNumPerScan: 512,\n          brightGclkNumPerScan: 256,\n        };\n      }\n      return {\n        gclkNumPerScan: 129,\n        validGclkNumPerScan: 512,\n        brightGclkNumPerScan: 128,\n      };\n\n    case ChipTypeEnum.Chip_MBI5051:\n    case ChipTypeEnum.Chip_MBI5052:\n    case ChipTypeEnum.Chip_MBI5053:\n    case ChipTypeEnum.Chip_MBI5152:\n    case ChipTypeEnum.Chip_MBI5151:\n      if (partNumPerRef <= 1) {\n        return {\n          gclkNumPerScan: 1025,\n          validGclkNumPerScan: 1024,\n          brightGclkNumPerScan: 1024,\n        };\n      }\n      if (partNumPerRef <= 2) {\n        return {\n          gclkNumPerScan: 513,\n          validGclkNumPerScan: 1024,\n          brightGclkNumPerScan: 512,\n        };\n      }\n      return {\n        gclkNumPerScan: 257,\n        validGclkNumPerScan: 512,\n        brightGclkNumPerScan: 256,\n      };\n\n    case ChipTypeEnum.Chip_MBI5050:\n      return {\n        gclkNumPerScan: 1025,\n        validGclkNumPerScan: 1024,\n        brightGclkNumPerScan: 1024,\n      };\n    case ChipTypeEnum.Chip_TLC5958:\n      if ((!isPWMModel && !isGLCK) || (isPWMModel && isGLCK)) {\n        return {\n          gclkNumPerScan: 257,\n          validGclkNumPerScan: 260,\n          brightGclkNumPerScan: 256,\n        };\n      }\n      if (isPWMModel && !isGLCK) {\n        return {\n          gclkNumPerScan: 513,\n          validGclkNumPerScan: 516,\n          brightGclkNumPerScan: 256,\n        };\n      }\n      return {\n        gclkNumPerScan: 129,\n        validGclkNumPerScan: 133,\n        brightGclkNumPerScan: 256,\n      };\n\n    case ChipTypeEnum.Chip_TLC59581:\n      if (!isPWMModel && !isGLCK) {\n        return {\n          gclkNumPerScan: 257,\n          validGclkNumPerScan: 260,\n          brightGclkNumPerScan: 256,\n        };\n      }\n      if (isPWMModel && !isGLCK) {\n        return {\n          gclkNumPerScan: 129,\n          validGclkNumPerScan: 133,\n          brightGclkNumPerScan: 128,\n        };\n      }\n      if (isPWMModel && isGLCK) {\n        return {\n          gclkNumPerScan: 65,\n          validGclkNumPerScan: 69,\n          brightGclkNumPerScan: 64,\n        };\n      }\n      return {\n        gclkNumPerScan: 129,\n        validGclkNumPerScan: 133,\n        brightGclkNumPerScan: 128,\n      };\n\n    case ChipTypeEnum.Chip_MBI5153:\n    case ChipTypeEnum.Chip_MBI5252:\n      if (partNumPerRef <= 1) {\n        return {\n          gclkNumPerScan: 513,\n          validGclkNumPerScan: 512,\n          brightGclkNumPerScan: 512,\n        };\n      }\n      if (partNumPerRef <= 2) {\n        return {\n          gclkNumPerScan: 257,\n          validGclkNumPerScan: 256,\n          brightGclkNumPerScan: 256,\n        };\n      }\n      if (partNumPerRef <= 3) {\n        return {\n          gclkNumPerScan: 257,\n          validGclkNumPerScan: 256,\n          brightGclkNumPerScan: 256,\n        };\n      }\n      return {\n        gclkNumPerScan: 129,\n        validGclkNumPerScan: 128,\n        brightGclkNumPerScan: 128,\n      };\n\n    case ChipTypeEnum.Chip_ICN2053:\n    case ChipTypeEnum.Chip_ICND2055:\n    case ChipTypeEnum.Chip_ICN2065:\n    case ChipTypeEnum.Chip_ICN2050:\n      if (partNumPerRef <= 1) {\n        return {\n          gclkNumPerScan: 1034,\n          validGclkNumPerScan: 1024,\n          brightGclkNumPerScan: 1024,\n        };\n      }\n      if (partNumPerRef <= 2) {\n        return {\n          gclkNumPerScan: 522,\n          validGclkNumPerScan: 512,\n          brightGclkNumPerScan: 512,\n        };\n      }\n      if (partNumPerRef <= 4) {\n        return {\n          gclkNumPerScan: 266,\n          validGclkNumPerScan: 256,\n          brightGclkNumPerScan: 256,\n        };\n      }\n      return {\n        gclkNumPerScan: 138,\n        validGclkNumPerScan: 128,\n        brightGclkNumPerScan: 128,\n      };\n\n    case ChipTypeEnum.Chip_SM16159:\n    case ChipTypeEnum.Chip_SM16169S:\n      if (partNumPerRef <= 1) {\n        return {\n          gclkNumPerScan: 1025,\n          validGclkNumPerScan: 1024,\n          brightGclkNumPerScan: 1024,\n        };\n      }\n      if (partNumPerRef <= 2) {\n        return {\n          gclkNumPerScan: 513,\n          validGclkNumPerScan: 513,\n          brightGclkNumPerScan: 513,\n        };\n      }\n      if (partNumPerRef <= 4) {\n        return {\n          gclkNumPerScan: 257,\n          validGclkNumPerScan: 256,\n          brightGclkNumPerScan: 256,\n        };\n      }\n      return {\n        gclkNumPerScan: 129,\n        validGclkNumPerScan: 128,\n        brightGclkNumPerScan: 128,\n      };\n\n    case ChipTypeEnum.Chip_MBI5253:\n    case ChipTypeEnum.Chip_MBI5253B:\n    case ChipTypeEnum.Chip_MBI5359:\n      if (!isGLCK && !isPWMModel) {\n        if (partNumPerRef <= 1) {\n          return {\n            gclkNumPerScan: 513,\n            validGclkNumPerScan: 512,\n            brightGclkNumPerScan: 512,\n          };\n        }\n        if (partNumPerRef <= 2) {\n          return {\n            gclkNumPerScan: 129,\n            validGclkNumPerScan: 128,\n            brightGclkNumPerScan: 128,\n          };\n        }\n        if (partNumPerRef <= 3) {\n          return {\n            gclkNumPerScan: 128,\n            validGclkNumPerScan: 128,\n            brightGclkNumPerScan: 128,\n          };\n        }\n        return {\n          gclkNumPerScan: 128,\n          validGclkNumPerScan: 128,\n          brightGclkNumPerScan: 128,\n        };\n      }\n      if (isGLCK && !isPWMModel) {\n        if (partNumPerRef <= 1) {\n          return {\n            gclkNumPerScan: 257,\n            validGclkNumPerScan: 256,\n            brightGclkNumPerScan: 256,\n          };\n        }\n        if (partNumPerRef <= 2) {\n          return {\n            gclkNumPerScan: 65,\n            validGclkNumPerScan: 64,\n            brightGclkNumPerScan: 64,\n          };\n        }\n        if (partNumPerRef <= 3) {\n          return {\n            gclkNumPerScan: 64,\n            validGclkNumPerScan: 128,\n            brightGclkNumPerScan: 64,\n          };\n        }\n        return {\n          gclkNumPerScan: 64,\n          validGclkNumPerScan: 128,\n          brightGclkNumPerScan: 64,\n        };\n      }\n      if (!isGLCK && isPWMModel) {\n        if (partNumPerRef <= 1) {\n          return {\n            gclkNumPerScan: 257,\n            validGclkNumPerScan: 256,\n            brightGclkNumPerScan: 256,\n          };\n        }\n        if (partNumPerRef <= 2) {\n          return {\n            gclkNumPerScan: 65,\n            validGclkNumPerScan: 64,\n            brightGclkNumPerScan: 64,\n          };\n        }\n        if (partNumPerRef <= 3) {\n          return {\n            gclkNumPerScan: 64,\n            validGclkNumPerScan: 64,\n            brightGclkNumPerScan: 64,\n          };\n        }\n        return {\n          gclkNumPerScan: 64,\n          validGclkNumPerScan: 64,\n          brightGclkNumPerScan: 64,\n        };\n      }\n      if (partNumPerRef <= 1) {\n        return {\n          gclkNumPerScan: 129,\n          validGclkNumPerScan: 128,\n          brightGclkNumPerScan: 128,\n        };\n      }\n      if (partNumPerRef <= 2) {\n        return {\n          gclkNumPerScan: 33,\n          validGclkNumPerScan: 32,\n          brightGclkNumPerScan: 32,\n        };\n      }\n      if (partNumPerRef <= 3) {\n        return {\n          gclkNumPerScan: 32,\n          validGclkNumPerScan: 64,\n          brightGclkNumPerScan: 32,\n        };\n      }\n      return {\n        gclkNumPerScan: 32,\n        validGclkNumPerScan: 64,\n        brightGclkNumPerScan: 32,\n      };\n\n    case ChipTypeEnum.Chip_MBI5051B:\n    case ChipTypeEnum.Chip_MBI5155:\n      if (partNumPerRef <= 1) {\n        return {\n          gclkNumPerScan: 1025,\n          validGclkNumPerScan: 1024,\n          brightGclkNumPerScan: 1024,\n        };\n      }\n      if (partNumPerRef <= 2) {\n        return {\n          gclkNumPerScan: 513,\n          validGclkNumPerScan: 512,\n          brightGclkNumPerScan: 512,\n        };\n      }\n      if (partNumPerRef <= 3) {\n        return {\n          gclkNumPerScan: 513,\n          validGclkNumPerScan: 512,\n          brightGclkNumPerScan: 512,\n        };\n      }\n      if (partNumPerRef <= 4) {\n        return {\n          gclkNumPerScan: 257,\n          validGclkNumPerScan: 256,\n          brightGclkNumPerScan: 256,\n        };\n      }\n      if (partNumPerRef <= 5) {\n        return {\n          gclkNumPerScan: 513,\n          validGclkNumPerScan: 512,\n          brightGclkNumPerScan: 512,\n        };\n      }\n      if (partNumPerRef <= 6) {\n        return {\n          gclkNumPerScan: 257,\n          validGclkNumPerScan: 256,\n          brightGclkNumPerScan: 256,\n        };\n      }\n      if (partNumPerRef <= 7) {\n        return {\n          gclkNumPerScan: 257,\n          validGclkNumPerScan: 256,\n          brightGclkNumPerScan: 256,\n        };\n      }\n      return {\n        gclkNumPerScan: 129,\n        validGclkNumPerScan: 128,\n        brightGclkNumPerScan: 128,\n      };\n\n    case ChipTypeEnum.Chip_MBI5353:\n    case ChipTypeEnum.Chip_MBI5354:\n      if (!isPWMModel) {\n        if (partNumPerRef <= 1) {\n          return {\n            gclkNumPerScan: 1025,\n            validGclkNumPerScan: 1024,\n            brightGclkNumPerScan: 1024,\n          };\n        }\n        if (partNumPerRef <= 2) {\n          return {\n            gclkNumPerScan: 513,\n            validGclkNumPerScan: 512,\n            brightGclkNumPerScan: 512,\n          };\n        }\n        if (partNumPerRef <= 4) {\n          return {\n            gclkNumPerScan: 257,\n            validGclkNumPerScan: 256,\n            brightGclkNumPerScan: 256,\n          };\n        }\n        return {\n          gclkNumPerScan: 129,\n          validGclkNumPerScan: 128,\n          brightGclkNumPerScan: 128,\n        };\n      }\n      if (partNumPerRef <= 1) {\n        return {\n          gclkNumPerScan: 513,\n          validGclkNumPerScan: 512,\n          brightGclkNumPerScan: 512,\n        };\n      }\n      if (partNumPerRef <= 2) {\n        return {\n          gclkNumPerScan: 257,\n          validGclkNumPerScan: 256,\n          brightGclkNumPerScan: 256,\n        };\n      }\n      if (partNumPerRef <= 4) {\n        return {\n          gclkNumPerScan: 129,\n          validGclkNumPerScan: 128,\n          brightGclkNumPerScan: 128,\n        };\n      }\n      return {\n        gclkNumPerScan: 65,\n        validGclkNumPerScan: 64,\n        brightGclkNumPerScan: 64,\n      };\n\n    case ChipTypeEnum.Chip_MY9373:\n      if (isGLCK) {\n        if (partNumPerRef <= 1) {\n          return {\n            gclkNumPerScan: 513,\n            validGclkNumPerScan: 512,\n            brightGclkNumPerScan: 1024,\n          };\n        }\n        if (partNumPerRef <= 2) {\n          return {\n            gclkNumPerScan: 257,\n            validGclkNumPerScan: 256,\n            brightGclkNumPerScan: 512,\n          };\n        }\n        if (partNumPerRef <= 3) {\n          return {\n            gclkNumPerScan: 129,\n            validGclkNumPerScan: 128,\n            brightGclkNumPerScan: 256,\n          };\n        }\n        return {\n          gclkNumPerScan: 65,\n          validGclkNumPerScan: 64,\n          brightGclkNumPerScan: 128,\n        };\n      }\n      if (partNumPerRef <= 1) {\n        return {\n          gclkNumPerScan: 513,\n          validGclkNumPerScan: 512,\n          brightGclkNumPerScan: 512,\n        };\n      }\n      if (partNumPerRef <= 2) {\n        return {\n          gclkNumPerScan: 257,\n          validGclkNumPerScan: 256,\n          brightGclkNumPerScan: 256,\n        };\n      }\n      if (partNumPerRef <= 3) {\n        return {\n          gclkNumPerScan: 129,\n          validGclkNumPerScan: 128,\n          brightGclkNumPerScan: 128,\n        };\n      }\n      return {\n        gclkNumPerScan: 65,\n        validGclkNumPerScan: 64,\n        brightGclkNumPerScan: 64,\n      };\n\n    case ChipTypeEnum.Chip_MY9348:\n    case ChipTypeEnum.Chip_MY9748:\n      if (!isPWMModel || chipType === ChipTypeEnum.Chip_MY9748) {\n        if (partNumPerRef <= 1) {\n          return {\n            gclkNumPerScan: 512,\n            validGclkNumPerScan: 512,\n            brightGclkNumPerScan: 512,\n          };\n        }\n        if (partNumPerRef <= 2) {\n          return {\n            gclkNumPerScan: 256,\n            validGclkNumPerScan: 256,\n            brightGclkNumPerScan: 256,\n          };\n        }\n        if (partNumPerRef <= 4) {\n          return {\n            gclkNumPerScan: 128,\n            validGclkNumPerScan: 128,\n            brightGclkNumPerScan: 128,\n          };\n        }\n        return {\n          gclkNumPerScan: 64,\n          validGclkNumPerScan: 64,\n          brightGclkNumPerScan: 64,\n        };\n      }\n      if (partNumPerRef <= 1) {\n        return {\n          gclkNumPerScan: 256,\n          validGclkNumPerScan: 256,\n          brightGclkNumPerScan: 256,\n        };\n      }\n      if (partNumPerRef <= 2) {\n        return {\n          gclkNumPerScan: 128,\n          validGclkNumPerScan: 128,\n          brightGclkNumPerScan: 128,\n        };\n      }\n      if (partNumPerRef <= 4) {\n        return {\n          gclkNumPerScan: 64,\n          validGclkNumPerScan: 64,\n          brightGclkNumPerScan: 64,\n        };\n      }\n      return {\n        gclkNumPerScan: 32,\n        validGclkNumPerScan: 32,\n        brightGclkNumPerScan: 32,\n      };\n\n    case ChipTypeEnum.Chip_SM16359:\n      if (partNumPerRef <= 2) {\n        return {\n          gclkNumPerScan: 515,\n          validGclkNumPerScan: 512,\n          brightGclkNumPerScan: 512,\n        };\n      }\n      if (partNumPerRef <= 4) {\n        return {\n          gclkNumPerScan: 259,\n          validGclkNumPerScan: 256,\n          brightGclkNumPerScan: 256,\n        };\n      }\n      if (partNumPerRef <= 8) {\n        return {\n          gclkNumPerScan: 131,\n          validGclkNumPerScan: 128,\n          brightGclkNumPerScan: 128,\n        };\n      }\n      return {\n        gclkNumPerScan: 67,\n        validGclkNumPerScan: 64,\n        brightGclkNumPerScan: 64,\n      };\n\n    default:\n      if (chipType !== ChipTypeEnum.Chip_VOD5153 && chipType !== ChipTypeEnum.Chip_ICND2163) {\n        return {\n          gclkNumPerScan: 129,\n          validGclkNumPerScan: 128,\n          brightGclkNumPerScan: 128,\n        };\n      }\n      return {\n        gclkNumPerScan: 74,\n        validGclkNumPerScan: 64,\n        brightGclkNumPerScan: 64,\n      };\n  }\n}\n\nexport const isValidScanBdProp = hasProps(\n  'IsDExtendMode',\n  'TwentyDataGroupEnable',\n  'Is24DataGroup',\n  'Is28DataGroup',\n  'StandardLedModuleProp',\n  'IsSymmetricalOutputMode',\n  'CommonIrCabinetMode',\n  'IsIrRegular',\n  'ChipPropey',\n  'SpecialFrameRate',\n);\n\nexport const isValidStandardLedModuleProp = hasProps('ScreenDriveType');\n\nexport const GetDoorCountFromScanBdInfo = (scanBdProp: Readonly<ScanBoardProperty>): number => {\n  if (!isValidScanBdProp(scanBdProp)) throw new TypeError('Invalid ScanBoardProperty');\n  const { IsSymmetricalOutputMode, CommonIrCabinetMode } = scanBdProp;\n  if (IsSymmetricalOutputMode) return 2;\n  switch (CommonIrCabinetMode) {\n    case CommonIrCabinetTypeEnum.FourDoor:\n      return 4;\n    case CommonIrCabinetTypeEnum.ThreeDoor:\n      return 3;\n    default:\n      return 1;\n  }\n};\n\nexport const GetMaxCabinetDataGroup = (scanBdProp: Readonly<ScanBoardProperty>): number => {\n  if (!isValidScanBdProp(scanBdProp)) throw new TypeError('Invalid ScanBoardProperty');\n  const {\n    StandardLedModuleProp: { ScreenDriveType },\n    IsDExtendMode,\n    TwentyDataGroupEnable,\n    Is24DataGroup,\n    Is28DataGroup,\n  } = scanBdProp;\n  switch (ScreenDriveType) {\n    case ScreenDriveTypeEnum.Concurrent:\n      if (IsDExtendMode) return 32;\n      if (TwentyDataGroupEnable) return 20;\n      if (Is28DataGroup) return 28;\n      if (Is24DataGroup) return 24;\n      return 16;\n    case ScreenDriveTypeEnum.Serial:\n      return IsDExtendMode ? 128 : 64;\n    default:\n      throw new TypeError('Invalid ScreenDriveType');\n  }\n};\n\nexport type MaxloadSize = {\n  maxWidth: number;\n  maxHeight: number;\n  // maxShiftUnitNum: number;\n};\n\nconst alignGroup = (value: number, screenDriveType: ScreenDriveTypeEnum): number => {\n  if (screenDriveType === ScreenDriveTypeEnum.Serial) {\n    if (value <= 8) return 8;\n    if (value < 16) return 16;\n  } else if (value < 4) {\n    return 4;\n  }\n  return value;\n};\n\nexport const GetHorizontalCascadeMaxLoad = (\n  scanBdProp: Readonly<ScanBoardProperty>,\n  maxLoadedPixels: number,\n  maxArea: number,\n): MaxloadSize => {\n  if (!isValidScanBdProp(scanBdProp)) throw new TypeError('Invalid ScanBoardProperty');\n  const { StandardLedModuleProp, Height } = scanBdProp;\n  if (!isValidStandardLedModuleProp(StandardLedModuleProp))\n    throw new TypeError('Invalid StandardLedModuleProp');\n  const cabinetDataGroup = GetMaxCabinetDataGroup(scanBdProp);\n  const countFromScanBdInfo = GetDoorCountFromScanBdInfo(scanBdProp);\n  const {\n    ScanType,\n    DataGroup,\n    ModulePixelCols,\n    ModulePixelRows,\n    TotalPointInTable,\n    ScreenDriveType,\n  } = StandardLedModuleProp;\n  const num1 = cabinetDataGroup / countFromScanBdInfo / DataGroup;\n  const maxHeight = ModulePixelRows * num1;\n  const rows = Math.ceil(Height / ModulePixelRows);\n  const num3 = alignGroup(rows * DataGroup, ScreenDriveType);\n  const maxC = Math.floor(maxArea / ScanType / num3);\n  const c = Math.floor((maxLoadedPixels * ModulePixelCols) / TotalPointInTable);\n\n  return {\n    maxHeight,\n    maxWidth: Math.min(maxC, c) * countFromScanBdInfo,\n  };\n};\n\nexport const GetVerticalCascadeMaxLoad = (\n  scanBdProp: Readonly<ScanBoardProperty>,\n  maxLoadedPixels: number,\n  maxArea: number,\n): MaxloadSize => {\n  if (!isValidScanBdProp(scanBdProp)) throw new TypeError('Invalid ScanBoardProperty');\n  const { Width, StandardLedModuleProp } = scanBdProp;\n  if (!isValidStandardLedModuleProp(StandardLedModuleProp))\n    throw new TypeError('Invalid StandardLedModuleProp');\n  const cabinetDataGroup = GetMaxCabinetDataGroup(scanBdProp);\n  const countFromScanBdInfo = GetDoorCountFromScanBdInfo(scanBdProp);\n  const {\n    ScanType,\n    DataGroup,\n    ModulePixelCols,\n    ModulePixelRows,\n    TotalPointInTable,\n    ScreenDriveType,\n  } = StandardLedModuleProp;\n  const num1 = cabinetDataGroup / countFromScanBdInfo / DataGroup;\n  const maxWidth = ModulePixelCols * num1;\n  const cols = Math.ceil(Width / ModulePixelCols);\n  const num3 = alignGroup(cols * DataGroup, ScreenDriveType);\n  const maxR = Math.floor(maxArea / ScanType / num3);\n  const r = Math.floor((maxLoadedPixels * ModulePixelRows) / TotalPointInTable);\n  return {\n    maxWidth,\n    maxHeight: Math.min(maxR, r) * countFromScanBdInfo,\n  };\n};\n\nexport const CaculateMaxloadSize = (\n  scanBdProp: Readonly<ScanBoardProperty>,\n  maxLoadedPixels: number,\n  maxArea: number,\n): MaxloadSize => {\n  switch (scanBdProp.ModCascadeType) {\n    case ModuleCascadeDiretionEnum.RightLeft:\n    case ModuleCascadeDiretionEnum.LeftRight: {\n      const { maxWidth, ...other } = GetHorizontalCascadeMaxLoad(\n        scanBdProp,\n        maxLoadedPixels,\n        maxArea,\n      );\n      return {\n        maxWidth: scanBdProp.Height ? Math.min(maxArea / scanBdProp.Height, maxArea) : 0,\n        ...other,\n      };\n    }\n    case ModuleCascadeDiretionEnum.DownUp:\n    case ModuleCascadeDiretionEnum.UpDown: {\n      const { maxHeight, ...other } = GetVerticalCascadeMaxLoad(\n        scanBdProp,\n        maxLoadedPixels,\n        maxArea,\n      );\n      return {\n        maxHeight: scanBdProp.Width ? Math.min(maxArea / scanBdProp.Width, maxArea) : 0,\n        ...other,\n      };\n    }\n    default:\n      throw new TypeError('Invalid ModCascadeType');\n  }\n};\n\nexport const CaculateCutMapAddrIndex = (\n  width: number,\n  cutRect: Rectangle,\n  pointBytes: number,\n): CutMapInfo[] => {\n  const cutMapInfoList: CutMapInfo[] = [];\n  for (let index = 0; index < cutRect.height; index += 1) {\n    const address = ((cutRect.y + index) * width + cutRect.x) * pointBytes;\n    const length = cutRect.width * pointBytes;\n    cutMapInfoList.push({\n      address,\n      length,\n    });\n  }\n  return cutMapInfoList;\n};\n","export default class ConfigurationError extends Error {\n  constructor(msg: string) {\n    super(msg);\n  }\n}\n","/**\n * Nova.LCT.GigabitSystem.DataClass, Nova.LCT.GigabitSystem.Common::CustomTransform\n */\n\nimport { ChipTypeEnum } from '@novastar/native/ChipType';\nimport { NSCardTypeEnum } from '@novastar/native/NSCardType';\nimport { ScreenDriveTypeEnum } from '@novastar/native/ScreenDriveType';\n\nexport const GetSmartMode = (\n  isSmartMode: boolean,\n  screenDriverType: ScreenDriveTypeEnum,\n  chipType: ChipTypeEnum,\n): number => {\n  if (!isSmartMode) return 0;\n  if (chipType === ChipTypeEnum.Chip_MBI5359 || chipType === ChipTypeEnum.Chip_MBI5353) return 1;\n  if (\n    screenDriverType === ScreenDriveTypeEnum.Concurrent &&\n    (chipType === ChipTypeEnum.Chip_MBI5042 ||\n      chipType === ChipTypeEnum.Chip_SM16136 ||\n      chipType === ChipTypeEnum.Chip_MBI5030 ||\n      chipType === ChipTypeEnum.Chip_RFT3630 ||\n      chipType === ChipTypeEnum.Chip_MY9262 ||\n      chipType === ChipTypeEnum.Chip_MY9263 ||\n      chipType === ChipTypeEnum.Chip_MBI5040 ||\n      chipType === ChipTypeEnum.Chip_IT1505 ||\n      chipType === ChipTypeEnum.Chip_MBI5042B ||\n      chipType === ChipTypeEnum.Chip_MBI5043 ||\n      chipType === ChipTypeEnum.Chip_MBI5041B ||\n      chipType === ChipTypeEnum.Chip_MBIA043 ||\n      chipType === ChipTypeEnum.Chip_MBI5041Q ||\n      chipType === ChipTypeEnum.Chip_SUM2028 ||\n      chipType === ChipTypeEnum.Chip_MBI5045 ||\n      chipType === ChipTypeEnum.Chip_GW6205 ||\n      chipType === ChipTypeEnum.Chip_UCS1912 ||\n      chipType === ChipTypeEnum.Chip_LD1512 ||\n      chipType === ChipTypeEnum.Chip_MBI6030 ||\n      chipType === ChipTypeEnum.Chip_MBI6023 ||\n      chipType === ChipTypeEnum.Chip_MY9231 ||\n      chipType === ChipTypeEnum.Chip_MY9221)\n  )\n    return 3;\n  return 2;\n};\n\nexport const IsSaveScreenCfgToHW = (cardType: NSCardTypeEnum): boolean =>\n  cardType === NSCardTypeEnum.NovaProHD ||\n  cardType === NSCardTypeEnum.NovaProHD_II ||\n  cardType === NSCardTypeEnum.V800 ||\n  cardType === NSCardTypeEnum.V700 ||\n  cardType === NSCardTypeEnum.V900 ||\n  cardType === NSCardTypeEnum.VX400S ||\n  cardType === NSCardTypeEnum.VX2 ||\n  cardType === NSCardTypeEnum.VX4 ||\n  cardType === NSCardTypeEnum.VX4S ||\n  cardType === NSCardTypeEnum.VX4S_N ||\n  cardType === NSCardTypeEnum.VX5 ||\n  cardType === NSCardTypeEnum.K4 ||\n  cardType === NSCardTypeEnum.K4S ||\n  cardType === NSCardTypeEnum.K4S_N ||\n  cardType === NSCardTypeEnum.K4A ||\n  cardType === NSCardTypeEnum.VD43 ||\n  cardType === NSCardTypeEnum.VP200 ||\n  cardType === NSCardTypeEnum.VS1 ||\n  cardType === NSCardTypeEnum.VS2 ||\n  cardType === NSCardTypeEnum.TVctrl_230R ||\n  cardType === NSCardTypeEnum.VX4U ||\n  cardType === NSCardTypeEnum.K4U ||\n  cardType === NSCardTypeEnum.VX2U ||\n  cardType === NSCardTypeEnum.K2U ||\n  cardType === NSCardTypeEnum.VX2S ||\n  cardType === NSCardTypeEnum.VS3 ||\n  cardType === NSCardTypeEnum.MCTRL4K ||\n  cardType === NSCardTypeEnum.MCTRLR5 ||\n  cardType === NSCardTypeEnum.VX6 ||\n  cardType === NSCardTypeEnum.VX6S ||\n  cardType === NSCardTypeEnum.VX5S ||\n  cardType === NSCardTypeEnum.MCTRL1600 ||\n  cardType === NSCardTypeEnum.SD2000E ||\n  cardType === NSCardTypeEnum.HDMICard ||\n  cardType === NSCardTypeEnum.MP8_JF ||\n  cardType === NSCardTypeEnum.MCTRL600_A ||\n  cardType === NSCardTypeEnum.MCTRL660_Pro ||\n  cardType === NSCardTypeEnum.MCTRL660_ROE ||\n  cardType === NSCardTypeEnum.K16 ||\n  cardType === NSCardTypeEnum.Prime_4K ||\n  cardType === NSCardTypeEnum.V1260 ||\n  cardType === NSCardTypeEnum.VX16s ||\n  cardType === NSCardTypeEnum.K6s ||\n  cardType === NSCardTypeEnum.V1060 ||\n  cardType === NSCardTypeEnum.UTA3000 ||\n  cardType === NSCardTypeEnum.ProUHD_Jr ||\n  cardType === NSCardTypeEnum.ProUHD ||\n  cardType === NSCardTypeEnum.V760 ||\n  cardType === NSCardTypeEnum.VX1 ||\n  cardType === NSCardTypeEnum.VS0 ||\n  cardType === NSCardTypeEnum.KT3 ||\n  cardType === NSCardTypeEnum.PJ1 ||\n  cardType === NSCardTypeEnum.MCTRL4K_ViewPro ||\n  cardType === NSCardTypeEnum.VD28 ||\n  cardType === NSCardTypeEnum.E8000_2 ||\n  cardType === NSCardTypeEnum.E8000_3 ||\n  cardType === NSCardTypeEnum.V960 ||\n  cardType === NSCardTypeEnum.SX100 ||\n  cardType === NSCardTypeEnum.KT8 ||\n  cardType === NSCardTypeEnum.Mee200 ||\n  cardType === NSCardTypeEnum.Mee400 ||\n  cardType === NSCardTypeEnum.Mee400C ||\n  cardType === NSCardTypeEnum.KT16E ||\n  cardType === NSCardTypeEnum.KT8E ||\n  cardType === NSCardTypeEnum.KT16C ||\n  cardType === NSCardTypeEnum.KT16E_CE ||\n  cardType === NSCardTypeEnum.H9 ||\n  cardType === NSCardTypeEnum.H_20 ||\n  cardType === NSCardTypeEnum.V1160 ||\n  cardType === NSCardTypeEnum.VX1000 ||\n  cardType === NSCardTypeEnum.VX600 ||\n  cardType === NSCardTypeEnum.V1060n ||\n  cardType === NSCardTypeEnum.MTX4000 ||\n  cardType === NSCardTypeEnum.TVSend_4K ||\n  cardType === NSCardTypeEnum.TwoInOne;\n\nexport const IsSystemController = (cardType: NSCardTypeEnum): boolean =>\n  cardType === NSCardTypeEnum.Controller ||\n  cardType === NSCardTypeEnum.HDMICard ||\n  cardType === NSCardTypeEnum.E500 ||\n  cardType === NSCardTypeEnum.Thundervier_S1 ||\n  cardType === NSCardTypeEnum.KT3 ||\n  cardType === NSCardTypeEnum.HDMICard6P ||\n  cardType === NSCardTypeEnum.Sender ||\n  cardType === NSCardTypeEnum.TVCard ||\n  cardType === NSCardTypeEnum.VirtualSender ||\n  cardType === NSCardTypeEnum.NovaProHD ||\n  cardType === NSCardTypeEnum.NovaProHD_II ||\n  cardType === NSCardTypeEnum.K4A ||\n  cardType === NSCardTypeEnum.V800 ||\n  cardType === NSCardTypeEnum.V700 ||\n  cardType === NSCardTypeEnum.V900 ||\n  cardType === NSCardTypeEnum.VX2 ||\n  cardType === NSCardTypeEnum.VX4 ||\n  cardType === NSCardTypeEnum.VX4S ||\n  cardType === NSCardTypeEnum.VX4S_N ||\n  cardType === NSCardTypeEnum.VX5 ||\n  cardType === NSCardTypeEnum.Nova3DHD ||\n  cardType === NSCardTypeEnum.VP200 ||\n  cardType === NSCardTypeEnum.MCTRL4K ||\n  cardType === NSCardTypeEnum.MCTRLR5 ||\n  cardType === NSCardTypeEnum.VX6 ||\n  cardType === NSCardTypeEnum.VX5S ||\n  cardType === NSCardTypeEnum.VX6S ||\n  cardType === NSCardTypeEnum.MCTRL1600 ||\n  cardType === NSCardTypeEnum.K4 ||\n  cardType === NSCardTypeEnum.K4S ||\n  cardType === NSCardTypeEnum.K4S_N ||\n  cardType === NSCardTypeEnum.VD43 ||\n  cardType === NSCardTypeEnum.VS1 ||\n  cardType === NSCardTypeEnum.VS2 ||\n  cardType === NSCardTypeEnum.VS0 ||\n  cardType === NSCardTypeEnum.V760 ||\n  cardType === NSCardTypeEnum.VS3 ||\n  cardType === NSCardTypeEnum.VS4 ||\n  cardType === NSCardTypeEnum.TVctrl_230R ||\n  cardType === NSCardTypeEnum.D_DV18 ||\n  cardType === NSCardTypeEnum.VP200U ||\n  cardType === NSCardTypeEnum.VX4U ||\n  cardType === NSCardTypeEnum.K4U ||\n  cardType === NSCardTypeEnum.K2U ||\n  cardType === NSCardTypeEnum.VX2U ||\n  cardType === NSCardTypeEnum.VX2S ||\n  cardType === NSCardTypeEnum.D_HM14_4K ||\n  cardType === NSCardTypeEnum.JZ_AX100 ||\n  cardType === NSCardTypeEnum.T3 ||\n  cardType === NSCardTypeEnum.JT100 ||\n  cardType === NSCardTypeEnum.T1 ||\n  cardType === NSCardTypeEnum.T2 ||\n  cardType === NSCardTypeEnum.T8 ||\n  cardType === NSCardTypeEnum.T6 ||\n  cardType === NSCardTypeEnum.T1_4G ||\n  cardType === NSCardTypeEnum.T2_4G ||\n  cardType === NSCardTypeEnum.MCTRL660_Pro ||\n  cardType === NSCardTypeEnum.MCTRL660_ROE ||\n  cardType === NSCardTypeEnum.K6s ||\n  cardType === NSCardTypeEnum.V1060 ||\n  cardType === NSCardTypeEnum.K16 ||\n  cardType === NSCardTypeEnum.H9 ||\n  cardType === NSCardTypeEnum.H_20 ||\n  cardType === NSCardTypeEnum.Prime_4K ||\n  cardType === NSCardTypeEnum.V1260 ||\n  cardType === NSCardTypeEnum.VX16s ||\n  cardType === NSCardTypeEnum.PJ1 ||\n  cardType === NSCardTypeEnum.ProUHD_Jr ||\n  cardType === NSCardTypeEnum.ProUHD ||\n  cardType === NSCardTypeEnum.MCTRL4K_ViewPro ||\n  cardType === NSCardTypeEnum.C3 ||\n  cardType === NSCardTypeEnum.T4 ||\n  cardType === NSCardTypeEnum.TCC60_YJ ||\n  cardType === NSCardTypeEnum.VD28 ||\n  cardType === NSCardTypeEnum.Unknown ||\n  cardType === NSCardTypeEnum.TCC50 ||\n  cardType === NSCardTypeEnum.ATM ||\n  cardType === NSCardTypeEnum.E8000_2 ||\n  cardType === NSCardTypeEnum.E8000_3 ||\n  cardType === NSCardTypeEnum.V960 ||\n  cardType === NSCardTypeEnum.JT50 ||\n  cardType === NSCardTypeEnum.SX100 ||\n  cardType === NSCardTypeEnum.KT8 ||\n  cardType === NSCardTypeEnum.TVSend_4K ||\n  cardType === NSCardTypeEnum.VX1 ||\n  cardType === NSCardTypeEnum.Mee200 ||\n  cardType === NSCardTypeEnum.Mee400 ||\n  cardType === NSCardTypeEnum.Mee400C ||\n  cardType === NSCardTypeEnum.KT16E ||\n  cardType === NSCardTypeEnum.KT8E ||\n  cardType === NSCardTypeEnum.KT16C ||\n  cardType === NSCardTypeEnum.T30 ||\n  cardType === NSCardTypeEnum.T80 ||\n  cardType === NSCardTypeEnum.V1160 ||\n  cardType === NSCardTypeEnum.VX1000 ||\n  cardType === NSCardTypeEnum.VX600 ||\n  cardType === NSCardTypeEnum.VX400 ||\n  cardType === NSCardTypeEnum.VX400S;\n\nexport type PortCount = 1 | 2 | 4 | 6 | 8 | 10 | 16 | 20 | 24 | 32;\n\nexport const GetPortNumber = (cardType: NSCardTypeEnum): PortCount => {\n  switch (cardType) {\n    case NSCardTypeEnum.VirtualSender:\n    case NSCardTypeEnum.Thundervier_S1:\n    case NSCardTypeEnum.T1:\n    case NSCardTypeEnum.T2:\n    case NSCardTypeEnum.TCC70:\n    case NSCardTypeEnum.JT20:\n    case NSCardTypeEnum.LCC70:\n    case NSCardTypeEnum.TCC60_YJ:\n    case NSCardTypeEnum.T1_4G:\n    case NSCardTypeEnum.JT50:\n    case NSCardTypeEnum.T2_4G:\n    case NSCardTypeEnum.MCTRL4K_ViewPro:\n    case NSCardTypeEnum.SX100:\n    case NSCardTypeEnum.TCC50:\n      return 1;\n    case NSCardTypeEnum.Sender:\n    case NSCardTypeEnum.FunctionCard:\n    case NSCardTypeEnum.V800:\n    case NSCardTypeEnum.V700:\n    case NSCardTypeEnum.VX2:\n    case NSCardTypeEnum.VX2U:\n    case NSCardTypeEnum.VX2S:\n    case NSCardTypeEnum.K2U:\n    case NSCardTypeEnum.T3:\n    case NSCardTypeEnum.T3H:\n    case NSCardTypeEnum.JT100:\n    case NSCardTypeEnum.VX1:\n    case NSCardTypeEnum.C3:\n    case NSCardTypeEnum.T30:\n    case NSCardTypeEnum.T4:\n    case NSCardTypeEnum.T4H:\n    case NSCardTypeEnum.T4A:\n    case NSCardTypeEnum.T40:\n    case NSCardTypeEnum.T50:\n    case NSCardTypeEnum.JT200:\n      return 2;\n    case NSCardTypeEnum.Controller:\n    case NSCardTypeEnum.HDMICard:\n    case NSCardTypeEnum.MCTRL600_A:\n    case NSCardTypeEnum.NovaProHD:\n    case NSCardTypeEnum.V900:\n    case NSCardTypeEnum.VX4:\n    case NSCardTypeEnum.VX4U:\n    case NSCardTypeEnum.K4U:\n    case NSCardTypeEnum.VX4S:\n    case NSCardTypeEnum.VX4S_N:\n    case NSCardTypeEnum.VX5:\n    case NSCardTypeEnum.K4:\n    case NSCardTypeEnum.K4S:\n    case NSCardTypeEnum.K4S_N:\n    case NSCardTypeEnum.K4A:\n    case NSCardTypeEnum.VD43:\n    case NSCardTypeEnum.VP200:\n    case NSCardTypeEnum.VS1:\n    case NSCardTypeEnum.E500:\n    case NSCardTypeEnum.KT3:\n    case NSCardTypeEnum.JZ_AX100:\n    case NSCardTypeEnum.T8:\n    case NSCardTypeEnum.T8H:\n    case NSCardTypeEnum.T6:\n    case NSCardTypeEnum.T6H:\n    case NSCardTypeEnum.V960:\n    case NSCardTypeEnum.T80:\n    case NSCardTypeEnum.VX400:\n    case NSCardTypeEnum.VX400S:\n    case NSCardTypeEnum.SD2000E:\n    case NSCardTypeEnum.TVSend_4K:\n    case NSCardTypeEnum.MCTRL660_ROE:\n    case NSCardTypeEnum.T60:\n      return 4;\n    case NSCardTypeEnum.HDMICard6P:\n    case NSCardTypeEnum.MCTRL660_Pro:\n    case NSCardTypeEnum.VX6:\n    case NSCardTypeEnum.VX6S:\n    case NSCardTypeEnum.K6s:\n    case NSCardTypeEnum.V1060:\n    case NSCardTypeEnum.UTA3000:\n    case NSCardTypeEnum.VX5S:\n    case NSCardTypeEnum.PJ1:\n    case NSCardTypeEnum.VX600:\n    case NSCardTypeEnum.V1060n:\n    case NSCardTypeEnum.TVctrl_230R:\n      return 6;\n    case NSCardTypeEnum.Nova3DHD:\n    case NSCardTypeEnum.MCTRLR5:\n    case NSCardTypeEnum.NovaProHD_II:\n    case NSCardTypeEnum.E8000_2:\n    case NSCardTypeEnum.KT16C:\n    case NSCardTypeEnum.Mee400C:\n    case NSCardTypeEnum.KT8:\n      return 8;\n    case NSCardTypeEnum.V1160:\n    case NSCardTypeEnum.VX1000:\n      return 10;\n    case NSCardTypeEnum.MCTRL4K:\n    case NSCardTypeEnum.MCTRL1600:\n    case NSCardTypeEnum.K16:\n    case NSCardTypeEnum.H9:\n    case NSCardTypeEnum.Prime_4K:\n    case NSCardTypeEnum.V1260:\n    case NSCardTypeEnum.Mee200:\n    case NSCardTypeEnum.VX16s:\n    case NSCardTypeEnum.ProUHD:\n    case NSCardTypeEnum.MP8_JF:\n    case NSCardTypeEnum.ProUHD_Jr:\n    case NSCardTypeEnum.KT8E:\n    case NSCardTypeEnum.E8000_3:\n      return 16;\n    case NSCardTypeEnum.H_20:\n    case NSCardTypeEnum.MTX4000:\n    case NSCardTypeEnum.TwoInOne:\n      return 20;\n    case NSCardTypeEnum.KT16E_CE:\n      return 24;\n    case NSCardTypeEnum.Mee400:\n    case NSCardTypeEnum.KT16E:\n      return 32;\n    default:\n      return 2;\n  }\n};\n","import { ExtractType, Struct } from 'typed-struct';\n\nexport const DviScreenInfoFlag = 'DSCI';\n/**\n * DSCI\n */\nexport const DviScreenConfigInfo = new Struct('DviScreenConfigInfo')\n  .String('header', DviScreenInfoFlag.length, 'ascii')\n  .UInt16LE('crc')\n  .UInt32LE('dviInfoLength')\n  .UInt32LE('screenInfoLength')\n  .UInt16LE('adjustInfoLength')\n  // .Struct('modulationInfo', ModulationInfo)\n  .back(0)\n  .seek(54)\n  .Buffer('data')\n  .compile();\n\nexport type DviScreenConfigInfo = ExtractType<typeof DviScreenConfigInfo>;\n","// noinspection SpellCheckingInspection\n\nimport * as t from 'io-ts';\n\nexport const ScreenFileType = 'ScreenDataType';\nexport const ScreenFileVersion = '1001';\nexport const FILE_COMPRESS_AREA_START_ADDR = 0x500_2000;\n\n/**\n * Nova.LCT.GigabitSystem.CommonInfoAccessor.dll\n *\n * Nova.LCT.GigabitSystem.CommonInfoAccessor::FileInfoObject\n */\nexport const FileInfoObject = t.type({\n  FileType: t.string,\n  Addr: t.number,\n  SrcLength: t.number,\n  DestLength: t.number,\n  CheckSum: t.number,\n  Version: t.string,\n  DecompressProps: t.string,\n});\n\n/**\n * Nova.LCT.GigabitSystem.CommonInfoAccessor::FileObject\n */\n// export type FileObject = {\n//   FileType: typeof ScreenFileType;\n//   Version: typeof ScreenFileVersion;\n//   Data: Buffer;\n// }\n\nexport type FileInfoObject = t.TypeOf<typeof FileInfoObject>;\n\nexport const FileInfoObjectList = t.type({\n  SectionFormat: t.array(FileInfoObject),\n});\n\nexport type FileInfoObjectList = t.TypeOf<typeof FileInfoObjectList>;\n","import { ScreenPortAddrInfo } from '@novastar/native/ScreenPortAddrInfo';\nimport { makeStruct } from '@novastar/native/common';\nimport range from 'lodash/range';\n\nimport {\n  groupByProps,\n  hasProps,\n  isSimpleScreen,\n  isStandardScreen,\n  LEDDisplayInfo,\n  notEmpty,\n} from './common';\n\nconst GroupKeys = ['SenderIndex', 'PortIndex'] as const;\nconst groupBySenderPort = groupByProps(...GroupKeys);\nconst notEmptySenderPort = hasProps(...GroupKeys);\n\nexport default function GetScreenPortAddrInfo(scr: LEDDisplayInfo) {\n  if (isSimpleScreen(scr)) {\n    const { PortCols = 0, PortRows = 0, PortScanBdInfoList = [] } = scr;\n    return range(PortCols * PortRows).map((index) => {\n      const {\n        ScanBdBegColNo = 0,\n        ScanBdEndColNo = 0,\n        ScanBdBegRowNo = 0,\n        ScanBdEndRowNo = 0,\n        PortIndex = 0,\n      } = PortScanBdInfoList[index] ?? {};\n      const cols = ScanBdEndColNo - ScanBdBegColNo;\n      const rows = ScanBdEndRowNo - ScanBdBegRowNo;\n      const count = cols * rows;\n      return makeStruct(ScreenPortAddrInfo, {\n        SenderIndex: scr.SenderIndex ?? 0,\n        PortIndex,\n        LoadScannerCount: count,\n        MinConnectIndex: 0,\n        MaxConnectIndex: count - 1,\n      });\n    });\n  }\n  const list = (isStandardScreen(scr) ? scr.ScannerRegionList : scr.ScanBoardRegionInfoList) ?? [];\n  const filtered = list.filter(notEmptySenderPort).filter(({ SenderIndex }) => SenderIndex !== 255);\n  return groupBySenderPort(filtered).map(([group, regions]) => {\n    const connections = regions.map(({ ConnectIndex }) => ConnectIndex).filter(notEmpty);\n    return makeStruct(ScreenPortAddrInfo, {\n      ...group,\n      LoadScannerCount: regions.length,\n      MinConnectIndex: Math.min(...connections),\n      MaxConnectIndex: Math.max(...connections),\n    });\n  });\n}\n","import { ScreenPortAddrInfo } from '@novastar/native/ScreenPortAddrInfo';\nimport { makeStruct } from '@novastar/native/common';\nimport sumBy from 'lodash/sumBy';\n\nimport GetScreenPortAddrInfo from './GetScreenPortAddrInfo';\nimport { groupByProps, hasProps, LEDDisplayInfo } from './common';\n\nconst groupBySender = groupByProps('SenderIndex');\nconst notEmptySender = hasProps('SenderIndex');\n\nexport default function GetScreenSenderAddrInfo(scr: LEDDisplayInfo) {\n  const ports = GetScreenPortAddrInfo(scr).filter(notEmptySender);\n  return groupBySender(ports).map(([index, items]) =>\n    makeStruct(ScreenPortAddrInfo, {\n      ...index,\n      LoadScannerCount: sumBy(items, 'LoadScannerCount'),\n    }),\n  );\n}\n","/* eslint-disable no-bitwise,no-param-reassign */\nimport { ExtractType, Struct } from 'typed-struct';\n\nexport const AutoRefreshRate = new Struct('AutoRefreshRate')\n  .UInt16LE('TotalUnitNum')\n  .UInt16LE('TotalGclkUnitNumPerScan')\n  .Custom(\n    'RefNumPerVs',\n    2,\n    (_, buf) => buf[0] + (buf[1] << 7),\n    (_, buf, value) => {\n      buf.writeUInt16LE(value);\n      buf[1] <<= 1;\n      return true;\n    },\n  )\n  .UInt8('GCLKRate')\n  .Custom(\n    'IsEnableTranCntNum',\n    1,\n    (_, buf) => buf[0] === 85,\n    (_, buf, value) => {\n      buf[0] = value ? 85 : 0;\n      return true;\n    },\n  )\n  .UInt8('M1TranCntNum')\n  .UInt8('M2TranCntNum')\n  .UInt16LE('LightTime')\n  .UInt16LE('LightTimeNum2')\n  .compile();\n\nexport type AutoRefreshRate = ExtractType<typeof AutoRefreshRate, false>;\n","// noinspection JSUnusedLocalSymbols\nimport { ChipTypeEnum } from '@novastar/native/ChipType';\nimport { DetectPointTypeEnum } from '@novastar/native/DetectPointType';\nimport { ScanTypeEnum } from '@novastar/native/ScanType';\n\ntype ValueGain = readonly [value: number, gain: number];\n\n/**\n * CurrentGainStepInfo\n */\ntype GainSteps = ReadonlyArray<ValueGain>;\n\ntype ChipInfo = Readonly<{\n  ChipType: ChipTypeEnum;\n  /**\n   * isCommonChip\n   */\n  isCommon: boolean;\n  /**\n   * isSupportCurrentGain\n   */\n  hasGain: boolean;\n  /**\n   * isSupportPointDetect\n   */\n  hasPointDetect: boolean;\n  channelCount: number;\n  gainSteps?: GainSteps;\n}>;\n\nconst chipInfo = (\n  ChipType: ChipTypeEnum,\n  isCommon: boolean,\n  hasGain: boolean,\n  hasPointDetect: boolean,\n  channelCount: number,\n  gainSteps?: GainSteps,\n): ChipInfo => ({\n  ChipType,\n  isCommon,\n  hasGain,\n  hasPointDetect,\n  channelCount,\n  gainSteps,\n});\n\nconst gain16: GainSteps = Array(16).map<ValueGain>((_, index) => [\n  16 * index,\n  index >= 8 ? (56.25 + (index - 8) * 6.25) / 100 : (25 + 3.125 * index) / 100,\n]);\n\nconst gain32: GainSteps = Array(32).map<ValueGain>((_, index) => [8 * index + 4, (index + 9) / 40]);\n\nconst gain64: GainSteps = Array(64).map<ValueGain>((_, index) => [\n  4 * index + 2,\n  index > 31 ? ((index - 32) * 3 + 33) / 65 : (index * 3 + 32) / 256,\n]);\n\nconst gain384: GainSteps = Array(384).map<ValueGain>((_, index) => [\n  index,\n  index < 192 ? (index + 64) / 512 : (index - 128) / 256,\n]);\n\nexport const ChipInherentProperties: { [K in keyof typeof ChipTypeEnum]?: ChipInfo } = {\n  Chip_CommonBase: chipInfo(ChipTypeEnum.Chip_CommonBase, true, false, false, 16),\n  Chip_MBI5167: chipInfo(ChipTypeEnum.Chip_MBI5167, true, false, false, 8),\n  Chip_SUM2017: chipInfo(ChipTypeEnum.Chip_SUM2017, true, false, false, 16),\n  Chip_MBI5037: chipInfo(ChipTypeEnum.Chip_MBI5037, true, false, true, 16),\n  Chip_MY9221: chipInfo(ChipTypeEnum.Chip_MY9221, false, false, false, 12),\n  Chip_MY9231: chipInfo(ChipTypeEnum.Chip_MY9231, false, false, false, 12),\n  Chip_TLS3001: chipInfo(ChipTypeEnum.Chip_TLS3001, false, false, false, 12),\n  Chip_GW6205: chipInfo(ChipTypeEnum.Chip_GW6205, false, false, false, 12),\n  Chip_UCS512C: chipInfo(ChipTypeEnum.Chip_UCS512C, false, false, false, 12),\n  Chip_UCS1912: chipInfo(ChipTypeEnum.Chip_UCS1912, false, false, false, 12),\n  Chip_LD1512: chipInfo(ChipTypeEnum.Chip_LD1512, false, false, false, 12),\n  Chip_GW6202B: chipInfo(ChipTypeEnum.Chip_GW6202B, false, false, false, 12),\n  Chip_MBI6030: chipInfo(ChipTypeEnum.Chip_MBI6030, true, false, true, 16),\n  Chip_MBI6023: chipInfo(ChipTypeEnum.Chip_MBI6023, true, true, false, 16),\n  Chip_MBI5124: chipInfo(ChipTypeEnum.Chip_MBI5124, true, false, false, 16),\n  Chip_SM16017S: chipInfo(ChipTypeEnum.Chip_SM16017S, true, false, false, 16),\n  Chip_MBI5124A: chipInfo(ChipTypeEnum.Chip_MBI5124A, true, false, false, 16),\n  Chip_MBI5124New: chipInfo(ChipTypeEnum.Chip_MBI5124New, true, false, false, 16),\n  Chip_RT5924: chipInfo(ChipTypeEnum.Chip_RT5924, true, false, false, 16),\n  Chip_MY9868: chipInfo(ChipTypeEnum.Chip_MY9868, true, false, false, 16),\n  Chip_MY9868A: chipInfo(ChipTypeEnum.Chip_MY9868A, true, false, false, 16),\n  Chip_ICN2038: chipInfo(ChipTypeEnum.Chip_ICN2038, true, false, false, 16),\n  Chip_ICN2038A: chipInfo(ChipTypeEnum.Chip_ICN2038A, true, false, false, 16),\n  Chip_TLC5958: chipInfo(ChipTypeEnum.Chip_TLC5958, true, false, false, 16),\n  Chip_TLC59581: chipInfo(ChipTypeEnum.Chip_TLC59581, true, false, false, 16),\n  Chip_MBI5166: chipInfo(ChipTypeEnum.Chip_MBI5166, true, false, false, 16),\n  Chip_MBI5266: chipInfo(ChipTypeEnum.Chip_MBI5266, true, false, true, 16),\n  Chip_MBI5122: chipInfo(ChipTypeEnum.Chip_MBI5122, true, false, false, 16),\n  Chip_MBI5041Q: chipInfo(ChipTypeEnum.Chip_MBI5041Q, true, false, false, 16),\n  Chip_ICN2027: chipInfo(ChipTypeEnum.Chip_ICN2027, true, false, false, 16),\n  Chip_LS9960: chipInfo(ChipTypeEnum.Chip_LS9960, true, false, false, 16),\n  Chip_LS9918: chipInfo(ChipTypeEnum.Chip_LS9918, true, false, false, 16),\n  Chip_LS9929: chipInfo(ChipTypeEnum.Chip_LS9929, true, false, false, 16),\n  Chip_LS9926: chipInfo(ChipTypeEnum.Chip_LS9926, true, false, false, 16),\n  Chip_LS9930: chipInfo(ChipTypeEnum.Chip_LS9930, true, false, false, 16),\n  Chip_LS9935: chipInfo(ChipTypeEnum.Chip_LS9935, true, false, false, 16),\n  Chip_ICND2100: chipInfo(ChipTypeEnum.Chip_ICND2100, true, false, false, 16),\n\n  Chip_MBI5036: chipInfo(ChipTypeEnum.Chip_MBI5036, true, true, true, 16, gain64),\n  Chip_SUM2017T: chipInfo(ChipTypeEnum.Chip_SUM2017T, true, true, false, 16, gain32),\n  Chip_SUM2117: chipInfo(ChipTypeEnum.Chip_SUM2117, true, true, false, 16, gain32),\n  Chip_SUM2017TD: chipInfo(ChipTypeEnum.Chip_SUM2017TD, true, true, false, 16, gain32),\n  Chip_MBI5038: chipInfo(ChipTypeEnum.Chip_MBI5038, true, true, false, 16, gain64),\n  Chip_MY9862: chipInfo(ChipTypeEnum.Chip_MY9862, true, true, true, 16, gain64),\n  Chip_MY9862A: chipInfo(ChipTypeEnum.Chip_MY9862A, true, true, true, 16, gain64),\n  Chip_ICN2038S: chipInfo(ChipTypeEnum.Chip_ICN2038S, true, true, true, 16, gain16),\n  Chip_ICND2046: chipInfo(ChipTypeEnum.Chip_ICND2046, true, true, true, 16, gain16),\n  Chip_FM6126: chipInfo(ChipTypeEnum.Chip_FM6126, true, true, true, 16, gain16),\n  Chip_ICN2038S_Common: chipInfo(ChipTypeEnum.Chip_ICN2038S_Common, true, true, true, 16, gain16),\n  Chip_MY9866: chipInfo(ChipTypeEnum.Chip_MY9866, true, true, true, 18, gain16),\n  Chip_MY9866_Common: chipInfo(ChipTypeEnum.Chip_MY9866_Common, true, true, true, 18, gain16),\n\n  /** */\n  Chip_ICN2053: chipInfo(ChipTypeEnum.Chip_ICN2053, false, true, true, 16, gain384),\n};\n\nexport const GetGainProportion = (gain: number): number => {\n  if (gain < 14) return (12.5 + 1.4 * gain) / 100;\n  if (gain < 23) return (31.9 + 1.4 * (gain - 14)) / 100;\n  if (gain < 32) return (44.4 + 1.4 * (gain - 23)) / 100;\n  if (gain < 41) return (56.9 + 1.4 * (gain - 32)) / 100;\n  if (gain < 50) return (69.4 + 1.4 * (gain - 41)) / 100;\n  if (gain < 59) return (81.9 + 1.4 * (gain - 50)) / 100;\n  return (94.4 + 1.4 * (gain - 59)) / 100;\n};\n\nexport const IsPWMChip = (ChipType: ChipTypeEnum): boolean =>\n  [\n    ChipTypeEnum.Chip_MBI5030,\n    ChipTypeEnum.Chip_MBI5040,\n    ChipTypeEnum.Chip_IT1505,\n    ChipTypeEnum.Chip_TLC5948A,\n    ChipTypeEnum.Chip_UCS9812,\n    ChipTypeEnum.Chip_SM16188B,\n    ChipTypeEnum.Chip_MBI5042,\n    ChipTypeEnum.Chip_SM16136,\n    ChipTypeEnum.Chip_MY9262,\n    ChipTypeEnum.Chip_MY9263,\n    ChipTypeEnum.Chip_MBI5050,\n    ChipTypeEnum.Chip_RFT3630,\n    ChipTypeEnum.Chip_SUM2030,\n    ChipTypeEnum.Chip_SUM2130,\n    ChipTypeEnum.Chip_MY9268,\n    ChipTypeEnum.Chip_SCL8060,\n    ChipTypeEnum.Chip_MBI5051,\n    ChipTypeEnum.Chip_MBI5052,\n    ChipTypeEnum.Chip_MBI5053,\n    ChipTypeEnum.Chip_SM16158,\n    ChipTypeEnum.Chip_TLC5958,\n    ChipTypeEnum.Chip_TLC59581,\n    ChipTypeEnum.Chip_MY9266,\n    ChipTypeEnum.Chip_MY9366,\n    ChipTypeEnum.Chip_MBI5042B,\n    ChipTypeEnum.Chip_ISA2020,\n    ChipTypeEnum.Chip_LS9960,\n    ChipTypeEnum.Chip_LS9918,\n    ChipTypeEnum.Chip_LS9929,\n    ChipTypeEnum.Chip_LS9935,\n    ChipTypeEnum.Chip_LS9930,\n    ChipTypeEnum.Chip_LS9926,\n    ChipTypeEnum.Chip_MBI5043,\n    ChipTypeEnum.Chip_MBI5041B,\n    ChipTypeEnum.Chip_MBIA043,\n    ChipTypeEnum.Chip_MBI5041Q,\n    ChipTypeEnum.Chip_SUM2028,\n    ChipTypeEnum.Chip_MY9269,\n    ChipTypeEnum.Chip_MBI5045,\n    ChipTypeEnum.Chip_SUM2032,\n    ChipTypeEnum.Chip_SUM2033,\n    ChipTypeEnum.Chip_SUM2131,\n    ChipTypeEnum.Chip_SUM2035,\n    ChipTypeEnum.Chip_SUM2135,\n    ChipTypeEnum.Chip_MBI5152,\n    ChipTypeEnum.Chip_MY9221,\n    ChipTypeEnum.Chip_MY9231,\n    ChipTypeEnum.Chip_TLS3001,\n    ChipTypeEnum.Chip_GW6205,\n    ChipTypeEnum.Chip_UCS1912,\n    ChipTypeEnum.Chip_LD1512,\n    ChipTypeEnum.Chip_GW6202B,\n    ChipTypeEnum.Chip_MBI6030,\n    ChipTypeEnum.Chip_MBI6023,\n    ChipTypeEnum.Chip_SM16159,\n    ChipTypeEnum.Chip_MBI5151,\n    ChipTypeEnum.Chip_MBI5155,\n    ChipTypeEnum.Chip_MBI5252,\n    ChipTypeEnum.Chip_MY9373,\n    ChipTypeEnum.Chip_MBI5353,\n    ChipTypeEnum.Chip_MBI5354,\n    ChipTypeEnum.Chip_MBI5253,\n    ChipTypeEnum.Chip_MBI5359,\n    ChipTypeEnum.Chip_MBI5253B,\n    ChipTypeEnum.Chip_ICN2053,\n    ChipTypeEnum.Chip_ICND2055,\n    ChipTypeEnum.Chip_ICN2065,\n    ChipTypeEnum.Chip_ICN2050,\n    ChipTypeEnum.Chip_MBI5051B,\n    ChipTypeEnum.Chip_MY9348,\n    ChipTypeEnum.Chip_MY9748,\n    ChipTypeEnum.Chip_ICND2200,\n    ChipTypeEnum.Chip_ICND2163,\n    ChipTypeEnum.Chip_VOD5153,\n    ChipTypeEnum.Chip_SM16169S,\n    ChipTypeEnum.Chip_MBI5153,\n    ChipTypeEnum.Chip_SM16359,\n    ChipTypeEnum.Chip_UCS512C,\n  ].includes(ChipType);\n\nexport const IsChangedOETableChip = (ChipType: ChipTypeEnum): boolean =>\n  [\n    ChipTypeEnum.Chip_MBI5166,\n    ChipTypeEnum.Chip_MBI5266,\n    ChipTypeEnum.Chip_MBI5124A,\n    ChipTypeEnum.Chip_MBI5125A,\n    ChipTypeEnum.Chip_LS9929,\n    ChipTypeEnum.Chip_LS9935,\n    ChipTypeEnum.Chip_LS9918,\n    ChipTypeEnum.Chip_LS9926,\n    ChipTypeEnum.Chip_LS9930,\n  ].includes(ChipType);\n\nexport const IsSupport = (ChipType: ChipTypeEnum): boolean =>\n  [\n    ChipTypeEnum.Chip_CommonBase,\n    ChipTypeEnum.Chip_ICN2038S_Common,\n    ChipTypeEnum.Chip_ICN2027,\n    ChipTypeEnum.Chip_MBI5036,\n    ChipTypeEnum.Chip_MBI5038,\n    ChipTypeEnum.Chip_TLC5929,\n    ChipTypeEnum.Chip_RT5924,\n    ChipTypeEnum.Chip_MY9163,\n    ChipTypeEnum.Chip_MBI5042,\n    ChipTypeEnum.Chip_SM16136,\n    ChipTypeEnum.Chip_MY9262,\n    ChipTypeEnum.Chip_MY9263,\n    ChipTypeEnum.Chip_MBI5050,\n    ChipTypeEnum.Chip_DM13H,\n    ChipTypeEnum.Chip_MBI5030,\n    ChipTypeEnum.Chip_P2510,\n    ChipTypeEnum.Chip_P2518,\n    ChipTypeEnum.Chip_SUM2017,\n    ChipTypeEnum.Chip_SUM2017T,\n    ChipTypeEnum.Chip_SUM2117,\n    ChipTypeEnum.Chip_SUM2017TD,\n    ChipTypeEnum.Chip_SM16027,\n    ChipTypeEnum.Chip_SUM2030,\n    ChipTypeEnum.Chip_SUM2130,\n    ChipTypeEnum.Chip_SUM2018,\n    ChipTypeEnum.Chip_MBI5034,\n    ChipTypeEnum.Chip_MBI5122,\n    ChipTypeEnum.Chip_MBI5040,\n    ChipTypeEnum.Chip_MBI5167,\n    ChipTypeEnum.Chip_IT1505,\n    ChipTypeEnum.Chip_TLC5948A,\n    ChipTypeEnum.Chip_UCS9812,\n    ChipTypeEnum.Chip_SM16188B,\n    ChipTypeEnum.Chip_MY9268,\n    ChipTypeEnum.Chip_SCL8060,\n    ChipTypeEnum.Chip_MBI5224,\n    ChipTypeEnum.Chip_MBI5051,\n    ChipTypeEnum.Chip_MBI5052,\n    ChipTypeEnum.Chip_SM16158,\n    ChipTypeEnum.Chip_ISA2020,\n    ChipTypeEnum.Chip_MBI5053,\n    ChipTypeEnum.Chip_TLC5958,\n    ChipTypeEnum.Chip_TLC59581,\n    ChipTypeEnum.Chip_MY9266,\n    ChipTypeEnum.Chip_MY9366,\n    ChipTypeEnum.Chip_MBI5042B,\n    ChipTypeEnum.Chip_MBI5041B,\n    ChipTypeEnum.Chip_MBI5043,\n    ChipTypeEnum.Chip_MBI5041Q,\n    ChipTypeEnum.Chip_SUM2028,\n    ChipTypeEnum.Chip_MBIA043,\n    ChipTypeEnum.Chip_MY9269,\n    ChipTypeEnum.Chip_MBI5045,\n    ChipTypeEnum.Chip_MBI5039,\n    ChipTypeEnum.Chip_MBI5037,\n    ChipTypeEnum.Chip_SUM2032,\n    ChipTypeEnum.Chip_SUM2033,\n    ChipTypeEnum.Chip_SUM2131,\n    ChipTypeEnum.Chip_SUM2035,\n    ChipTypeEnum.Chip_SUM2135,\n    ChipTypeEnum.Chip_MBI5152,\n    ChipTypeEnum.Chip_MY9221,\n    ChipTypeEnum.Chip_MY9231,\n    ChipTypeEnum.Chip_TLS3001,\n    ChipTypeEnum.Chip_GW6205,\n    ChipTypeEnum.Chip_UCS512C,\n    ChipTypeEnum.Chip_UCS1912,\n    ChipTypeEnum.Chip_LD1512,\n    ChipTypeEnum.Chip_GW6202B,\n    ChipTypeEnum.Chip_MBI5124,\n    ChipTypeEnum.Chip_MBI5125,\n    ChipTypeEnum.Chip_SM16017S,\n    ChipTypeEnum.Chip_ICN2038,\n    ChipTypeEnum.Chip_ICN2038A,\n    ChipTypeEnum.Chip_MY9868,\n    ChipTypeEnum.Chip_MY9862,\n    ChipTypeEnum.Chip_SM16207S,\n    ChipTypeEnum.Chip_SM16237,\n    ChipTypeEnum.Chip_SM16227,\n    ChipTypeEnum.Chip_SM16237P,\n    ChipTypeEnum.Chip_SM16227P,\n    ChipTypeEnum.Chip_ICN2038S,\n    ChipTypeEnum.Chip_ICND2046,\n    ChipTypeEnum.Chip_FM6126,\n    ChipTypeEnum.Chip_FM6142,\n    ChipTypeEnum.Chip_MY9866,\n    ChipTypeEnum.Chip_MY9868A,\n    ChipTypeEnum.Chip_FM6182,\n    ChipTypeEnum.Chip_MY9862A,\n    ChipTypeEnum.Chip_MBI5166,\n    ChipTypeEnum.Chip_MBI5125A,\n    ChipTypeEnum.Chip_MBI5124A,\n    ChipTypeEnum.Chip_MBI5266,\n    ChipTypeEnum.Chip_MBI6030,\n    ChipTypeEnum.Chip_MBI6023,\n    ChipTypeEnum.Chip_SM16159,\n    ChipTypeEnum.Chip_SM16169S,\n    ChipTypeEnum.Chip_MBI5151,\n    ChipTypeEnum.Chip_MBI5051B,\n    ChipTypeEnum.Chip_MBI5155,\n    ChipTypeEnum.Chip_MBI5252,\n    ChipTypeEnum.Chip_MY9373,\n    ChipTypeEnum.Chip_MBI5153,\n    ChipTypeEnum.Chip_MBI5253,\n    ChipTypeEnum.Chip_MBI5359,\n    ChipTypeEnum.Chip_MY9348,\n    ChipTypeEnum.Chip_MY9748,\n    ChipTypeEnum.Chip_MBI5353,\n    ChipTypeEnum.Chip_MBI5354,\n    ChipTypeEnum.Chip_MBI5253B,\n    ChipTypeEnum.Chip_ICN2050,\n    ChipTypeEnum.Chip_ICND2055,\n    ChipTypeEnum.Chip_ICN2065,\n    ChipTypeEnum.Chip_ICN2053,\n    ChipTypeEnum.Chip_LS9960,\n    ChipTypeEnum.Chip_LS9929,\n    ChipTypeEnum.Chip_LS9935,\n    ChipTypeEnum.Chip_LS9926,\n    ChipTypeEnum.Chip_LS9930,\n    ChipTypeEnum.Chip_GW6808,\n    ChipTypeEnum.Chip_LS9918,\n    ChipTypeEnum.Chip_MBI5124New,\n    ChipTypeEnum.Chip_ICND2163,\n    ChipTypeEnum.Chip_VOD5153,\n    ChipTypeEnum.Chip_MY9866_Common,\n    ChipTypeEnum.Chip_SM16359,\n    ChipTypeEnum.Chip_SM16259,\n    ChipTypeEnum.Chip_SCL8080,\n    ChipTypeEnum.Chip_ICND2100,\n    ChipTypeEnum.Chip_MBI5759,\n    ChipTypeEnum.Chip_XM11920G,\n    ChipTypeEnum.Chip_XM11201G,\n    ChipTypeEnum.Chip_XM11202G,\n    ChipTypeEnum.Chip_MBI5251,\n    ChipTypeEnum.Chip_MBI5264,\n    ChipTypeEnum.Chip_MBI5254,\n    ChipTypeEnum.Chip_MBI5850,\n    ChipTypeEnum.Chip_MBI5754,\n    ChipTypeEnum.Chip_CS2033,\n    ChipTypeEnum.Chip_SCL8081,\n    ChipTypeEnum.Chip_SM16369,\n    ChipTypeEnum.Chip_DM413,\n    ChipTypeEnum.Chip_YY6018,\n    ChipTypeEnum.Chip_AXS6018,\n    ChipTypeEnum.Chip_RT5965,\n    ChipTypeEnum.Chip_FM6363,\n    ChipTypeEnum.Chip_FM6353,\n    ChipTypeEnum.Chip_FM6356,\n    ChipTypeEnum.Chip_FM6555,\n    ChipTypeEnum.Chip_FM6565,\n    ChipTypeEnum.Chip_FM6047,\n    ChipTypeEnum.Chip_LS9928,\n    ChipTypeEnum.Chip_LS9935B,\n    ChipTypeEnum.Chip_HS3257,\n    ChipTypeEnum.Chip_HX8055,\n    ChipTypeEnum.Chip_HX8864,\n    ChipTypeEnum.Chip_MY9758,\n    ChipTypeEnum.Chip_ICND2076,\n    ChipTypeEnum.Chip_ICND2159,\n    ChipTypeEnum.Chip_ICND2210,\n    ChipTypeEnum.Chip_CS2066,\n    ChipTypeEnum.Chip_CNS7253,\n    ChipTypeEnum.Chip_CS2017,\n    ChipTypeEnum.Chip_CS2017S,\n    ChipTypeEnum.Chip_FM6127,\n    ChipTypeEnum.Chip_CNS7153,\n    ChipTypeEnum.Chip_ICND2112,\n    ChipTypeEnum.Chip_UCS5603,\n    ChipTypeEnum.Chip_SM16017DS,\n    ChipTypeEnum.Chip_HX8055,\n    ChipTypeEnum.Chip_DP3264,\n  ].includes(ChipType);\n\nexport const IsSupportCurrentChipTypeEnum = (ChipType: ChipTypeEnum) =>\n  ChipType !== ChipTypeEnum.Chip_SUM6082 && ChipType !== ChipTypeEnum.Chip_NVS6867;\n\nexport const IsPWMAndHavePartNum = (ChipType: ChipTypeEnum) =>\n  [\n    ChipTypeEnum.Chip_SUM2030,\n    ChipTypeEnum.Chip_MY9268,\n    ChipTypeEnum.Chip_SUM2130,\n    ChipTypeEnum.Chip_MBI5030,\n    ChipTypeEnum.Chip_MBI5042,\n    ChipTypeEnum.Chip_MY9263,\n    ChipTypeEnum.Chip_SM16136,\n    ChipTypeEnum.Chip_MY9262,\n    ChipTypeEnum.Chip_MBI5051,\n    ChipTypeEnum.Chip_MBI5052,\n    ChipTypeEnum.Chip_SM16158,\n    ChipTypeEnum.Chip_MBI5053,\n    ChipTypeEnum.Chip_MY9266,\n    ChipTypeEnum.Chip_MY9366,\n    ChipTypeEnum.Chip_MBI5042B,\n    ChipTypeEnum.Chip_MBI5041B,\n    ChipTypeEnum.Chip_MBI5043,\n    ChipTypeEnum.Chip_SUM2028,\n    ChipTypeEnum.Chip_MBIA043,\n    ChipTypeEnum.Chip_MY9269,\n    ChipTypeEnum.Chip_MBI5045,\n    ChipTypeEnum.Chip_SUM2032,\n    ChipTypeEnum.Chip_SUM2033,\n    ChipTypeEnum.Chip_SUM2131,\n    ChipTypeEnum.Chip_SUM2035,\n    ChipTypeEnum.Chip_SUM2135,\n    ChipTypeEnum.Chip_SM16159,\n    ChipTypeEnum.Chip_SM16169S,\n    ChipTypeEnum.Chip_MBI5152,\n    ChipTypeEnum.Chip_MBI5151,\n    ChipTypeEnum.Chip_MBI5155,\n    ChipTypeEnum.Chip_MBI5051B,\n    ChipTypeEnum.Chip_MBI5252,\n    ChipTypeEnum.Chip_MY9373,\n    ChipTypeEnum.Chip_MBI5353,\n    ChipTypeEnum.Chip_MBI5354,\n    ChipTypeEnum.Chip_MBI5153,\n    ChipTypeEnum.Chip_MBI5253,\n    ChipTypeEnum.Chip_MBI5359,\n    ChipTypeEnum.Chip_MBI5253B,\n    ChipTypeEnum.Chip_MY9348,\n    ChipTypeEnum.Chip_MY9748,\n    ChipTypeEnum.Chip_ICN2050,\n    ChipTypeEnum.Chip_ICND2055,\n    ChipTypeEnum.Chip_ICN2065,\n    ChipTypeEnum.Chip_ICN2053,\n    ChipTypeEnum.Chip_SM16359,\n  ].includes(ChipType);\n\nexport const IsSupport5042GrayEnhanced = (ChipType: ChipTypeEnum) =>\n  [\n    ChipTypeEnum.Chip_MBI5042,\n    ChipTypeEnum.Chip_MBI5030,\n    ChipTypeEnum.Chip_SM16136,\n    ChipTypeEnum.Chip_MY9263,\n    ChipTypeEnum.Chip_MBI5042B,\n    ChipTypeEnum.Chip_MBI5043,\n    ChipTypeEnum.Chip_MBI5041B,\n    ChipTypeEnum.Chip_SUM2028,\n    ChipTypeEnum.Chip_MBIA043,\n    ChipTypeEnum.Chip_MBI5041Q,\n    ChipTypeEnum.Chip_MBI5045,\n  ].includes(ChipType);\n\nexport const IsSupportMBI5041BNewTiming = (ChipType: ChipTypeEnum) =>\n  [\n    ChipTypeEnum.Chip_MBI5042B,\n    ChipTypeEnum.Chip_SUM2028,\n    ChipTypeEnum.Chip_MBIA043,\n    ChipTypeEnum.Chip_MBI5043,\n    ChipTypeEnum.Chip_MBI5041B,\n    ChipTypeEnum.Chip_MBI5041Q,\n    ChipTypeEnum.Chip_MBI5045,\n    ChipTypeEnum.Chip_MBI5042,\n  ].includes(ChipType);\n\nexport const IsSupportDriverInterDeghostEnable = (ChipType: ChipTypeEnum) =>\n  [\n    ChipTypeEnum.Chip_MBI5051,\n    ChipTypeEnum.Chip_MBI5052,\n    ChipTypeEnum.Chip_SM16158,\n    ChipTypeEnum.Chip_SM16159,\n    ChipTypeEnum.Chip_SM16169S,\n    ChipTypeEnum.Chip_MBI5053,\n    ChipTypeEnum.Chip_MBI5152,\n    ChipTypeEnum.Chip_MBI5151,\n    ChipTypeEnum.Chip_MBI5252,\n    ChipTypeEnum.Chip_MBI5051B,\n    ChipTypeEnum.Chip_MBI5155,\n    ChipTypeEnum.Chip_MY9373,\n    ChipTypeEnum.Chip_MBI5353,\n    ChipTypeEnum.Chip_MBI5354,\n    ChipTypeEnum.Chip_MY9348,\n    ChipTypeEnum.Chip_MY9748,\n    ChipTypeEnum.Chip_MBI5359,\n    ChipTypeEnum.Chip_MBI5253,\n  ].includes(ChipType);\n\nexport const IsSupportNewOERealizeWay = (ChipType: ChipTypeEnum) =>\n  ChipType === ChipTypeEnum.Chip_MBI5124New;\n\nexport const IsSupportPhotographMode = (ChipType: ChipTypeEnum) =>\n  [\n    ChipTypeEnum.Chip_MY9868A,\n    ChipTypeEnum.Chip_MY9862A,\n    ChipTypeEnum.Chip_SM16207S,\n    ChipTypeEnum.Chip_SM16237,\n    ChipTypeEnum.Chip_SM16227,\n    ChipTypeEnum.Chip_ICN2038A,\n    ChipTypeEnum.Chip_ICN2038S,\n    ChipTypeEnum.Chip_ICND2046,\n    ChipTypeEnum.Chip_SM16237DS,\n  ].includes(ChipType);\n\nexport const IsDoubleLatChip = (ChipType: ChipTypeEnum) =>\n  [\n    ChipTypeEnum.Chip_MY9868A,\n    ChipTypeEnum.Chip_MY9862A,\n    ChipTypeEnum.Chip_SM16207S,\n    ChipTypeEnum.Chip_SM16237,\n    ChipTypeEnum.Chip_SM16227,\n    ChipTypeEnum.Chip_ICN2038A,\n    ChipTypeEnum.Chip_ICN2038S,\n    ChipTypeEnum.Chip_ICND2046,\n    ChipTypeEnum.Chip_SM16237DS,\n  ].includes(ChipType);\n\nexport const IsConfigRegisterConcernWithScanType = (ChipType: ChipTypeEnum) =>\n  [\n    ChipTypeEnum.Chip_MBI5050,\n    ChipTypeEnum.Chip_SUM2030,\n    ChipTypeEnum.Chip_SUM2130,\n    ChipTypeEnum.Chip_MY9268,\n    ChipTypeEnum.Chip_SCL8060,\n    ChipTypeEnum.Chip_MY9266,\n    ChipTypeEnum.Chip_MY9366,\n    ChipTypeEnum.Chip_MY9269,\n    ChipTypeEnum.Chip_MBI5051,\n    ChipTypeEnum.Chip_MBI5052,\n    ChipTypeEnum.Chip_SM16158,\n    ChipTypeEnum.Chip_SM16159,\n    ChipTypeEnum.Chip_SM16169S,\n    ChipTypeEnum.Chip_MBI5053,\n    ChipTypeEnum.Chip_TLC5958,\n    ChipTypeEnum.Chip_TLC59581,\n    ChipTypeEnum.Chip_SUM2032,\n    ChipTypeEnum.Chip_SUM2033,\n    ChipTypeEnum.Chip_SUM2131,\n    ChipTypeEnum.Chip_SUM2035,\n    ChipTypeEnum.Chip_SUM2135,\n    ChipTypeEnum.Chip_MBI5152,\n    ChipTypeEnum.Chip_MBI5151,\n    ChipTypeEnum.Chip_MBI5051B,\n    ChipTypeEnum.Chip_MBI5155,\n    ChipTypeEnum.Chip_MBI5252,\n    ChipTypeEnum.Chip_MY9373,\n    ChipTypeEnum.Chip_MBI5353,\n    ChipTypeEnum.Chip_MBI5354,\n    ChipTypeEnum.Chip_MBI5153,\n    ChipTypeEnum.Chip_MBI5253,\n    ChipTypeEnum.Chip_MBI5359,\n    ChipTypeEnum.Chip_MBI5253B,\n    ChipTypeEnum.Chip_MY9348,\n    ChipTypeEnum.Chip_MY9748,\n    ChipTypeEnum.Chip_ICN2050,\n    ChipTypeEnum.Chip_ICND2055,\n    ChipTypeEnum.Chip_ICN2065,\n    ChipTypeEnum.Chip_ICND2163,\n    ChipTypeEnum.Chip_VOD5153,\n    ChipTypeEnum.Chip_ICN2053,\n    ChipTypeEnum.Chip_SM16359,\n  ].includes(ChipType);\n\nexport const IsConfigRegisterConcernWithShiftUnitNum = (ChipType: ChipTypeEnum) =>\n  [ChipTypeEnum.Chip_MBI6030, ChipTypeEnum.Chip_MBI6023].includes(ChipType);\n\nexport const GetDetectPointType = (ChipType: ChipTypeEnum): DetectPointTypeEnum => {\n  switch (ChipType) {\n    case ChipTypeEnum.Chip_MBI5030:\n    case ChipTypeEnum.Chip_MBI5034:\n    case ChipTypeEnum.Chip_MBI5038:\n      return DetectPointTypeEnum.OpenCircuit;\n    case ChipTypeEnum.Chip_MBI5036:\n    case ChipTypeEnum.Chip_MBI5039:\n    case ChipTypeEnum.Chip_RT5924:\n      return DetectPointTypeEnum.BothNoDivision;\n    case ChipTypeEnum.Chip_MBI5040:\n    case ChipTypeEnum.Chip_MY9163:\n    case ChipTypeEnum.Chip_TLC5929:\n    case ChipTypeEnum.Chip_MY9862:\n    case ChipTypeEnum.Chip_MBI5353:\n    case ChipTypeEnum.Chip_MY9263:\n    case ChipTypeEnum.Chip_SM16207S:\n    case ChipTypeEnum.Chip_SM16237:\n    case ChipTypeEnum.Chip_SM16227:\n    case ChipTypeEnum.Chip_MBI5354:\n    case ChipTypeEnum.Chip_MBI5359:\n      return DetectPointTypeEnum.BothDivision;\n    case ChipTypeEnum.Chip_DM13H:\n    case ChipTypeEnum.Chip_MBI5037:\n      return DetectPointTypeEnum.BothDivision;\n    case ChipTypeEnum.Chip_MBI5051:\n    case ChipTypeEnum.Chip_MBI5052:\n    case ChipTypeEnum.Chip_MBI5053:\n    case ChipTypeEnum.Chip_MBI5152:\n    case ChipTypeEnum.Chip_MBI5153:\n    case ChipTypeEnum.Chip_TLC5958:\n    case ChipTypeEnum.Chip_MBI5266:\n    case ChipTypeEnum.Chip_MBI5155:\n    case ChipTypeEnum.Chip_MBI5252:\n    case ChipTypeEnum.Chip_TLC59581:\n    case ChipTypeEnum.Chip_MBI5051B:\n    case ChipTypeEnum.Chip_MBI5253:\n    case ChipTypeEnum.Chip_ICN2053:\n    case ChipTypeEnum.Chip_MY9373:\n    case ChipTypeEnum.Chip_ICND2055:\n    case ChipTypeEnum.Chip_ICN2050:\n    case ChipTypeEnum.Chip_ICN2065:\n    case ChipTypeEnum.Chip_MBI5253B:\n      return DetectPointTypeEnum.OpenCircuit;\n    case ChipTypeEnum.Chip_MBI5045:\n      return DetectPointTypeEnum.OpenCircuit;\n    case ChipTypeEnum.Chip_IT1505:\n      return DetectPointTypeEnum.BothDivision;\n    default:\n      return DetectPointTypeEnum.None;\n  }\n};\n\nexport const IsNoCurrentGainButConfig = (ChipType: ChipTypeEnum): boolean =>\n  [\n    ChipTypeEnum.Chip_SUM2017,\n    ChipTypeEnum.Chip_SM16027,\n    ChipTypeEnum.Chip_MBI5037,\n    ChipTypeEnum.Chip_MY9221,\n    ChipTypeEnum.Chip_TLC5948A,\n    ChipTypeEnum.Chip_MY9231,\n    ChipTypeEnum.Chip_MBI6030,\n    ChipTypeEnum.Chip_MBI6023,\n    ChipTypeEnum.Chip_RT5924,\n    ChipTypeEnum.Chip_TLC5958,\n    ChipTypeEnum.Chip_TLC59581,\n    ChipTypeEnum.Chip_MBI5166,\n    ChipTypeEnum.Chip_MBI5125A,\n    ChipTypeEnum.Chip_MBI5124A,\n    ChipTypeEnum.Chip_MBI5266,\n    ChipTypeEnum.Chip_MBI5122,\n    ChipTypeEnum.Chip_MBI5125,\n    ChipTypeEnum.Chip_MBI5124,\n    ChipTypeEnum.Chip_SM16017S,\n    ChipTypeEnum.Chip_SM16207S,\n    ChipTypeEnum.Chip_MBI5124New,\n  ].includes(ChipType);\n\nexport const DetectPointIsConfigOtherReg = (ChipType: ChipTypeEnum): boolean =>\n  [\n    ChipTypeEnum.Chip_MBI5153,\n    ChipTypeEnum.Chip_ICN2053,\n    ChipTypeEnum.Chip_ICND2055,\n    ChipTypeEnum.Chip_ICN2065,\n    ChipTypeEnum.Chip_ICN2050,\n    ChipTypeEnum.Chip_MBI5252,\n  ].includes(ChipType);\n\nexport const CanManualAdjustRefreshRate = (\n  chipType: ChipTypeEnum,\n  scanType: ScanTypeEnum,\n): boolean => {\n  switch (chipType) {\n    case ChipTypeEnum.Chip_MBI5030:\n    case ChipTypeEnum.Chip_MBI5040:\n    case ChipTypeEnum.Chip_MBI5042:\n    case ChipTypeEnum.Chip_RFT3630:\n    case ChipTypeEnum.Chip_MBI5042B:\n    case ChipTypeEnum.Chip_MBI5045:\n    case ChipTypeEnum.Chip_MY9262:\n    case ChipTypeEnum.Chip_SM16136:\n    case ChipTypeEnum.Chip_SUM2028:\n    case ChipTypeEnum.Chip_MBI5043:\n    case ChipTypeEnum.Chip_MBIA043:\n    case ChipTypeEnum.Chip_MBI5041B:\n    case ChipTypeEnum.Chip_MBI5041Q:\n    case ChipTypeEnum.Chip_MY9263:\n    case ChipTypeEnum.Chip_UCS9812:\n    case ChipTypeEnum.Chip_TLC5948A:\n    case ChipTypeEnum.Chip_SM16188B:\n    case ChipTypeEnum.Chip_IT1505:\n      return scanType !== ScanTypeEnum.Scan_static;\n    case ChipTypeEnum.Chip_MBI5050:\n    case ChipTypeEnum.Chip_SCL8060:\n    case ChipTypeEnum.Chip_SUM2030:\n    case ChipTypeEnum.Chip_MY9268:\n    case ChipTypeEnum.Chip_MBI5051:\n    case ChipTypeEnum.Chip_MBI5052:\n    case ChipTypeEnum.Chip_MBI5053:\n    case ChipTypeEnum.Chip_MY9266:\n    case ChipTypeEnum.Chip_MY9269:\n    case ChipTypeEnum.Chip_SUM2032:\n    case ChipTypeEnum.Chip_MBI5152:\n    case ChipTypeEnum.Chip_MY9221:\n    case ChipTypeEnum.Chip_MBI5151:\n    case ChipTypeEnum.Chip_MBI5153:\n    case ChipTypeEnum.Chip_MBI6030:\n    case ChipTypeEnum.Chip_TLC5958:\n    case ChipTypeEnum.Chip_SM16158:\n    case ChipTypeEnum.Chip_MBI5155:\n    case ChipTypeEnum.Chip_MBI6023:\n    case ChipTypeEnum.Chip_MY9366:\n    case ChipTypeEnum.Chip_MBI5252:\n    case ChipTypeEnum.Chip_SM16159:\n    case ChipTypeEnum.Chip_TLS3001:\n    case ChipTypeEnum.Chip_TLC59581:\n    case ChipTypeEnum.Chip_MBI5353:\n    case ChipTypeEnum.Chip_GW6205:\n    case ChipTypeEnum.Chip_GW6202B:\n    case ChipTypeEnum.Chip_SUM2033:\n    case ChipTypeEnum.Chip_MY9231:\n    case ChipTypeEnum.Chip_SUM2130:\n    case ChipTypeEnum.Chip_SUM2131:\n    case ChipTypeEnum.Chip_MBI5051B:\n    case ChipTypeEnum.Chip_MBI5253:\n    case ChipTypeEnum.Chip_ICN2053:\n    case ChipTypeEnum.Chip_MY9373:\n    case ChipTypeEnum.Chip_MY9348:\n    case ChipTypeEnum.Chip_SUM2035:\n    case ChipTypeEnum.Chip_SUM2135:\n    case ChipTypeEnum.Chip_ICND2055:\n    case ChipTypeEnum.Chip_ICN2050:\n    case ChipTypeEnum.Chip_MBI5354:\n    case ChipTypeEnum.Chip_MBI5359:\n    case ChipTypeEnum.Chip_ICN2065:\n    case ChipTypeEnum.Chip_MBI5253B:\n    case ChipTypeEnum.Chip_MY9748:\n    case ChipTypeEnum.Chip_LD1512:\n    case ChipTypeEnum.Chip_UCS1912:\n    case ChipTypeEnum.Chip_UCS512C:\n    case ChipTypeEnum.Chip_ICND2163:\n    case ChipTypeEnum.Chip_SM16169S:\n    case ChipTypeEnum.Chip_VOD5153:\n      return false;\n    default:\n      return true;\n  }\n};\n","/* eslint-disable no-underscore-dangle */\nimport type { ScanBoardProperty } from '@novastar/native/ScanBoardProperty';\n\nimport ScanBoardCapability from './ScanBoardCapabilty';\n\nexport default class ScannerCapabilitySUM2030 implements ScanBoardCapability {\n  static readonly SUBDIFF = 0.15;\n\n  static readonly BLACKTIME_STATIC = 5;\n\n  readonly IsHasMinimumOE = false;\n\n  readonly MinimumOE = 0;\n\n  readonly LightTimePerSubField = 0;\n\n  readonly TotalLightCdfResault = 0;\n\n  protected _totalUnitNumPerSubField = 0;\n\n  protected _gclkNumPerRef = 0;\n\n  protected _refNumPerVs = 0;\n\n  protected _totalGclkUintNumPerScan = 0;\n\n  protected _lightTimeNum2 = 0;\n\n  protected _dclkUnitCycle = 0;\n\n  protected _gclkUnitCycle = 0;\n\n  protected _scanCount = 0;\n\n  protected _fieldPeriod = 0;\n\n  protected _vsFreq = 60;\n\n  protected _usBlackTime = 0;\n\n  protected _shiftNumPerSubField = 0;\n\n  protected _maxUnitNumPerScan = 0;\n\n  protected _maxGclkNumPerRef = 0;\n\n  protected _brightEfficiency = 0;\n\n  protected _blackingTime = 0;\n\n  protected _maxLoadedPixels = 0;\n\n  protected _fieldWaitTime = 0.1;\n\n  protected _m1TranCntNum = 3;\n\n  protected _m2TranCntNum = 3;\n\n  protected _scanBdProperty: ScanBoardProperty | null = null;\n\n  get TotalUnitNumPerSubField() {\n    return this._totalUnitNumPerSubField;\n  }\n\n  get MaxLoadedPixels() {\n    return this._totalUnitNumPerSubField - 3;\n  }\n\n  get BrightEfficiency() {\n    return this._brightEfficiency;\n  }\n\n  get GclkNumPerRef() {\n    return this._gclkNumPerRef;\n  }\n\n  get RefNumPerVs() {\n    return this._refNumPerVs;\n  }\n\n  get TotalGclkUnitNumPerScan() {\n    return this._totalGclkUintNumPerScan;\n  }\n\n  get LightTimeNum2() {\n    return this._lightTimeNum2;\n  }\n\n  // eslint-disable-next-line class-methods-use-this\n  UpdateParameters(_scanBdProp: ScanBoardProperty, _vsFreq: number): boolean {\n    throw new TypeError('Not implemented');\n  }\n}\n","/* eslint-disable no-underscore-dangle,no-bitwise,no-param-reassign */\n/**\n * Nova.LCT.GigabitSystem.ScanBoardCapability\n */\nimport { ChipTypeEnum } from '@novastar/native/ChipType';\nimport { DataDirectionTypeEnum } from '@novastar/native/DataDirectionType';\nimport type { ScanBoardProperty } from '@novastar/native/ScanBoardProperty';\nimport { ScreenDriveTypeEnum } from '@novastar/native/ScreenDriveType';\n\nimport {\n  CaculateShiftUnitNum,\n  GetGclkInfoByPartNumPerRef,\n  GetGrayScaleByGclkNumPerRef,\n} from './CommonCalculator';\nimport ScannerCapabilitySUM2030 from './ScannerCapabilitySUM2030';\n\nexport default class ScannerCapabilityICN2053 extends ScannerCapabilitySUM2030 {\n  UpdateParameters(scanBdProperty: ScanBoardProperty, vsFreq: number): boolean {\n    this._scanBdProperty = scanBdProperty;\n    const {\n      StandardLedModuleProp,\n      IsIrRegular,\n      Width = 0,\n      Height = 0,\n      IsSymmetricalOutputMode,\n      ShiftUnitNum,\n      DclkUnitCycle,\n      GCLKRate,\n      BlankUnitNumPerScan: blackTime,\n      SubFields: partNumPerRef,\n    } = scanBdProperty;\n    if (!StandardLedModuleProp) throw new TypeError('Unknown StandardLedModuleProp');\n    const {\n      ModulePixelCols,\n      ModulePixelRows,\n      TotalPointInTable,\n      DataDirectType = DataDirectionTypeEnum.Horizontal,\n      ScanType,\n      DriverChipType: chipType,\n    } = StandardLedModuleProp;\n    if (!chipType) throw new TypeError('Unknown chipType');\n    if (!IsIrRegular) {\n      this._shiftNumPerSubField = CaculateShiftUnitNum(\n        ModulePixelCols,\n        ModulePixelRows,\n        TotalPointInTable,\n        DataDirectType,\n        Width,\n        Height,\n      );\n      if (StandardLedModuleProp.ScreenDriveType === ScreenDriveTypeEnum.Serial)\n        this._shiftNumPerSubField *= StandardLedModuleProp.SerialColorNum;\n      if (IsSymmetricalOutputMode) this._shiftNumPerSubField >>>= 1;\n    } else {\n      this._shiftNumPerSubField = ShiftUnitNum;\n    }\n    scanBdProperty.IsEnableTranCntNum = true;\n    scanBdProperty.M1TranCntNum = 3;\n    scanBdProperty.M2TranCntNum = 3;\n\n    this._fieldWaitTime = this._scanBdProperty.IsOpenClearBlankLine ? 0.03 : 0.1;\n    this._dclkUnitCycle = DclkUnitCycle;\n    this._gclkUnitCycle = GCLKRate;\n    this._scanCount = ScanType;\n    this._fieldPeriod = 1000 / vsFreq;\n    this._vsFreq = vsFreq;\n    scanBdProperty.RefNumPerVs = this.CaculateAllParameters(chipType, partNumPerRef, blackTime);\n    scanBdProperty.GrayDepth = GetGrayScaleByGclkNumPerRef(\n      this._gclkNumPerRef -\n        (chipType === ChipTypeEnum.Chip_ICN2050 || chipType === ChipTypeEnum.Chip_ICN2053 ? 1 : 0),\n    );\n    scanBdProperty.TotalGclkUnitNumPerScan = this._totalGclkUintNumPerScan;\n    return true;\n  }\n\n  private CaculateAllParameters(\n    chipType: ChipTypeEnum,\n    partNumPerRef: number,\n    blackTime: number,\n  ): number {\n    const num = 125 * (this._fieldPeriod - this._fieldWaitTime) * 1000;\n    const num2 =\n      (5 * (this._shiftNumPerSubField + 8 + 20) + 20 + 20 + 8 + 1) * this._dclkUnitCycle +\n      14 * (this._m1TranCntNum + 1 + 1);\n    const num3 = this._dclkUnitCycle + this._m1TranCntNum + 1 + 1;\n    const { gclkNumPerScan, validGclkNumPerScan, brightGclkNumPerScan } =\n      GetGclkInfoByPartNumPerRef(chipType, partNumPerRef);\n    this._totalUnitNumPerSubField = Math.floor(\n      (((num - num2) / this._scanCount - num3) / 16 - (this._m1TranCntNum + 1) - 1) /\n        this._dclkUnitCycle,\n    );\n    if (\n      this._scanCount === 1 &&\n      chipType !== ChipTypeEnum.Chip_ICN2053 &&\n      chipType !== ChipTypeEnum.Chip_ICN2050\n    )\n      this._totalUnitNumPerSubField -= 160;\n    if (\n      this._scanCount === 1 &&\n      chipType !== ChipTypeEnum.Chip_ICN2053 &&\n      chipType !== ChipTypeEnum.Chip_ICN2050 &&\n      chipType !== ChipTypeEnum.Chip_VOD5153 &&\n      chipType !== ChipTypeEnum.Chip_ICND2163\n    ) {\n      this._refNumPerVs = 1;\n      this._totalGclkUintNumPerScan = gclkNumPerScan;\n      this._gclkNumPerRef = Math.floor(((125 / this._gclkUnitCycle) * 1000000) / this._vsFreq);\n      this._blackingTime = ScannerCapabilitySUM2030.BLACKTIME_STATIC;\n    } else {\n      this._blackingTime = blackTime;\n      const num5 =\n        48 * this._dclkUnitCycle +\n        this._gclkUnitCycle +\n        4 * (this._m2TranCntNum + 1) +\n        4 +\n        4 * this._gclkUnitCycle;\n      const num6 =\n        (gclkNumPerScan + this._blackingTime) * this._scanCount * this._gclkUnitCycle +\n        (this._m2TranCntNum + 1 + 1) * 2 * this._scanCount +\n        (this._m2TranCntNum + 1) +\n        1 +\n        this._gclkUnitCycle;\n      const num7 = (num - num5) / num6;\n      this._refNumPerVs = Math.max(0, Math.floor(num7));\n      if (this._refNumPerVs === 0) return 0;\n      const num10 =\n        (num - num5) / this._refNumPerVs - this._gclkUnitCycle - (this._m2TranCntNum + 1) - 1;\n      this._totalGclkUintNumPerScan = Math.floor(\n        (num10 / this._scanCount - 2 * (this._m2TranCntNum + 1) - 2) / this._gclkUnitCycle -\n          this._blackingTime,\n      );\n      this._gclkNumPerRef = this._refNumPerVs * validGclkNumPerScan;\n      const num18 = num - (48 - 1 - 4) * this._dclkUnitCycle;\n      const num19 =\n        this._refNumPerVs * this._gclkUnitCycle +\n        (this._totalGclkUintNumPerScan + this._blackingTime) *\n          this._gclkUnitCycle *\n          this._scanCount *\n          this._refNumPerVs;\n      const num20 = 4 + this._refNumPerVs + 2 * this._refNumPerVs * this._scanCount;\n      this._m2TranCntNum = Math.min(3, (num18 - num19) / num20 - 2);\n    }\n    this._brightEfficiency =\n      (((this._fieldPeriod - this._fieldWaitTime) / this._fieldPeriod) * brightGclkNumPerScan) /\n      (this._totalGclkUintNumPerScan + this._blackingTime);\n    return this._refNumPerVs;\n  }\n}\n","// Nova.LCT.GigabitSystem.LEDConfigAccessorBase.dll\nimport { AutoAdjustRefreshRateParameters } from '@novastar/native/AutoAdjustRefreshRateParameters';\nimport { AutoAdjustRefreshRateTypeEnum } from '@novastar/native/AutoAdjustRefreshRateType';\nimport { ChipTypeEnum } from '@novastar/native/ChipType';\nimport MaxValue from '@novastar/native/MaxValue';\nimport type { ScanBoardProperty } from '@novastar/native/ScanBoardProperty';\nimport { ScreenDriveTypeEnum } from '@novastar/native/ScreenDriveType';\nimport { makeStruct } from '@novastar/native/common';\n\nimport { AutoRefreshRate } from './AutoRefreshRate';\nimport { CanManualAdjustRefreshRate } from './ChipInherentProperties';\nimport {\n  CaculateMaxloadSize,\n  isValidScanBdProp,\n  isValidStandardLedModuleProp,\n} from './CommonCalculator';\nimport ScannerCapabilityICN2053 from './ScannerCapabilityICN2053';\nimport { notEmpty } from './common';\n\nexport const OneParameterLen = 16;\n\nexport const AllParameterNumberLen = 128;\n\nexport const GetRateFromRateType = (rateType: AutoAdjustRefreshRateTypeEnum): number => {\n  let rateFromRateType: number;\n  switch (rateType % 16) {\n    case 0:\n      rateFromRateType = 50;\n      break;\n    case 1:\n      rateFromRateType = 60;\n      break;\n    case 2:\n      rateFromRateType = 75;\n      break;\n    case 3:\n      rateFromRateType = 120;\n      break;\n    case 4:\n      rateFromRateType = 48;\n      break;\n    case 5:\n      rateFromRateType = 30;\n      break;\n    case 6:\n      rateFromRateType = 85;\n      break;\n    case 7:\n      rateFromRateType = 100;\n      break;\n    case 8:\n      rateFromRateType = 24;\n      break;\n    case 9:\n      rateFromRateType = 72;\n      break;\n    case 10:\n      rateFromRateType = 25;\n      break;\n    case 11:\n      rateFromRateType = 240;\n      break;\n    case 12:\n      rateFromRateType = 144;\n      break;\n    default:\n      rateFromRateType = 60;\n  }\n  switch (rateType / 16) {\n    case 1:\n      rateFromRateType -= 0.05;\n      break;\n    case 2:\n      rateFromRateType -= 0.1;\n      break;\n    case 3:\n      rateFromRateType += 0.05;\n      break;\n    case 4:\n      rateFromRateType += 0.1;\n      break;\n    case 5:\n      rateFromRateType += 0.15;\n      break;\n    case 6:\n      rateFromRateType += 0.2;\n      break;\n    case 7:\n      rateFromRateType += 0.25;\n      break;\n    default:\n      throw new TypeError('Invalid AutoAdjustRefreshRateTypeEnum');\n  }\n  return rateFromRateType;\n};\n\nexport const CheckIsModeSupport = (\n  scanBdProperty: Readonly<ScanBoardProperty>,\n  fieldRate: number,\n): [boolean, ScanBoardProperty] => {\n  if (!isValidScanBdProp(scanBdProperty)) throw new TypeError('Invalid ScanBoardProperty');\n  const { StandardLedModuleProp, Width, Height } = scanBdProperty;\n  if (!isValidStandardLedModuleProp(StandardLedModuleProp))\n    throw new TypeError('Invalid StandardLedModuleProp');\n  const { DriverChipType, ScreenDriveType, SerialColorNum } = StandardLedModuleProp;\n  // ChipDataMaker.GetChipInfo <- skipped\n  if (DriverChipType !== ChipTypeEnum.Chip_ICN2053) throw new Error('Not implemented');\n  const result = { ...scanBdProperty };\n  const scanBoardCapability = new ScannerCapabilityICN2053();\n  scanBoardCapability.UpdateParameters(result, fieldRate);\n  const k = ScreenDriveType === ScreenDriveTypeEnum.Serial ? SerialColorNum : 1;\n  const { maxWidth, maxHeight } = CaculateMaxloadSize(\n    result,\n    scanBoardCapability.MaxLoadedPixels / k,\n    MaxValue.MAX_SCANNER_AREA,\n  );\n  result.TotalUnitNum = scanBoardCapability.TotalUnitNumPerSubField;\n  result.TotalGclkUnitNumPerScan = scanBoardCapability.TotalGclkUnitNumPerScan;\n  result.LightTime = scanBoardCapability.LightTimePerSubField;\n  result.LightTimeNum2 = scanBoardCapability.LightTimeNum2;\n  return [maxWidth >= Width && maxHeight >= Height, result];\n};\n\nexport const SetVariousScanBdRefreshRate = (\n  scanBdProperty: Readonly<ScanBoardProperty>,\n  isSmartMode: boolean,\n): ReadonlyArray<Required<AutoAdjustRefreshRateParameters>> => {\n  const { StandardLedModuleProp: { DriverChipType: chipType, ScanType: scanType } = {} } =\n    scanBdProperty;\n  if (chipType === undefined || scanType === undefined)\n    throw new TypeError('Invalid ScanBoardProperty');\n  return Object.values(AutoAdjustRefreshRateTypeEnum)\n    .map(Number)\n    .filter<AutoAdjustRefreshRateTypeEnum>(notEmpty)\n    .map((rateType) => {\n      let prop: ScanBoardProperty | undefined;\n      const rateFromRateType = GetRateFromRateType(rateType);\n      if (!isSmartMode) {\n        if (CanManualAdjustRefreshRate(chipType, scanType)) {\n          throw new Error('Not implemented');\n        }\n        const [isSupport, res] = CheckIsModeSupport(scanBdProperty, rateFromRateType);\n        if (isSupport || res.TotalUnitNum - 3 >= res.ShiftUnitNum) prop = res;\n      }\n      const {\n        TotalUnitNum,\n        TotalGclkUnitNumPerScan,\n        RefNumPerVs,\n        GCLKRate,\n        IsEnableTranCntNum,\n        M1TranCntNum,\n        M2TranCntNum,\n        LightTime,\n        LightTimeNum2,\n      } = prop ?? scanBdProperty;\n      return makeStruct(AutoAdjustRefreshRateParameters, {\n        AdjustRateType: rateType,\n        TotalUnitNum,\n        TotalGclkUnitNumPerScan,\n        RefNumPerVs,\n        GCLKRate,\n        IsEnableTranCntNum,\n        M1TranCntNum,\n        M2TranCntNum,\n        LightTime,\n        LightTimeNum2,\n      });\n    });\n};\n\nexport const GetAutoRefreshRateBytesSeq = (\n  autoRateParamList: ReadonlyArray<Required<AutoAdjustRefreshRateParameters>>,\n): Buffer => {\n  const buffer = Buffer.alloc(OneParameterLen * AllParameterNumberLen);\n  autoRateParamList.forEach(({ AdjustRateType, ...props }) => {\n    const data = new AutoRefreshRate(OneParameterLen);\n    Object.assign(data, props);\n    AutoRefreshRate.raw(data).copy(buffer, AdjustRateType * OneParameterLen);\n  });\n  return buffer;\n};\n","/* eslint-disable no-bitwise */\nimport AddressMapping from '@novastar/native/AddressMapping';\nimport { ExtractType, Struct } from 'typed-struct';\n\nconst TempInfo = new Struct('TempInfo')\n  .Bits8({ IsValid: [0, 1] })\n  .back()\n  .Custom('Value', 2, (_, buffer): number => ((buffer[0] & 0x7f) === 1 ? -0.5 : 0.5) * buffer[1])\n  .compile();\n\nconst ValueInfo = new Struct('ValueInfo')\n  .Bits8({\n    IsValid: [0, 1],\n    Value: [1, 7],\n  })\n  .compile();\n\nconst VoltageInfo = new Struct('VoltageInfo')\n  .Bits8({ IsValid: [0, 1] })\n  .back()\n  .Custom('Value', 1, (_, buffer) => (buffer[0] & 0x7f) / 10)\n  .compile();\n\nconst FanSpeedInfo = new Struct('FanSpeedInfo')\n  .Bits8({ IsValid: [0, 1] })\n  .back()\n  .Custom('Value', 1, (_, buffer) => (buffer[0] & 0x7f) * 50)\n  .compile();\n\nconst moduleStatusLow = {\n  offset:\n    AddressMapping.Scanner_RowLineRelatedInfoOfModuleStatusAddr -\n    AddressMapping.Scanner_AllMonitorDataAddr,\n  length: AddressMapping.Scanner_RowLineRelatedInfoOfModuleStatusOccupancy,\n};\n\nconst moduleStatusHigh = {\n  offset:\n    AddressMapping.Scanner_ModuleStatusOfMonitorCardAddr -\n    AddressMapping.Scanner_AllMonitorDataAddr,\n  length: AddressMapping.Scanner_ModuleStatusOfMonitorCardBytesCnt,\n};\n\nexport const HWStatus = new Struct('HWStatus')\n  .Struct('tempInfoInScanCard', TempInfo) // 0\n  .Struct('humidityInfoInScanCard', ValueInfo) // 2\n  .Struct('voltageInfoInScanCard', VoltageInfo) // 3\n  .back(0)\n  .seek(AddressMapping.AttachedMonitorCardExistAddr - AddressMapping.Scanner_AllMonitorDataAddr)\n  .Boolean8('isConnectMonitorCard') // 32\n  .back(0)\n  .seek(\n    AddressMapping.Scanner_TempInfoOfMonitorCardAddr - AddressMapping.Scanner_AllMonitorDataAddr,\n  )\n  .Struct('tempInfoInMonitorCard', TempInfo) // 39\n  .Struct('humidityInfoInMonitorCard', ValueInfo) // 41\n  .Struct('smokeWarnInfo', ValueInfo) // 42\n  .StructArray(\n    'fanSpeedInfoListMonitorCard',\n    FanSpeedInfo,\n    AddressMapping.Scanner_FanSpeedOfMonitorCardNum,\n  ) // 43\n  .StructArray(\n    'valtageInfoListMonitorCard',\n    VoltageInfo,\n    AddressMapping.Scanner_VoltageOfMonitorCardNum,\n  ) // 47\n  .Buffer('analogInputData', AddressMapping.Scanner_AnalogInputOfMonitorCardNum) // 56\n  .seek(1)\n  .UInt8('generalStatus') // 65\n  .back(0)\n  .seek(moduleStatusLow.offset)\n  .Buffer('moduleStatusLow', moduleStatusLow.length) // 11\n  .back(0)\n  .seek(moduleStatusHigh.offset)\n  .Buffer('moduleStatusHigh', moduleStatusHigh.length) // 66\n  .compile(); // 82\n\nexport type HWStatus = ExtractType<typeof HWStatus, false>;\n","import { ModulationModeTypeEnum } from '@novastar/native/ModulationModeType';\nimport { SenderModulationInfo } from '@novastar/native/SenderModulationInfo';\nimport { makeStruct } from '@novastar/native/common';\nimport { Struct, typed } from 'typed-struct';\n\nimport { crc16 } from './common';\n\nexport const SenderModulationFlag = 'SSPE';\nexport const SenderModulationDataVer = 1002;\n\nconst ModulationMode = new Struct('ModulationMode')\n  .UInt8('mode', typed<ModulationModeTypeEnum>())\n  .back(0)\n  .seek(128)\n  .compile();\n\nconst ModulationInfo = new Struct('ModulationInfo')\n  .UInt8('portIndex')\n  .back(0)\n  .seek(128)\n  .StructArray('modes', ModulationMode)\n  .compile();\n\nexport const ModulationInfoHeader = new Struct('ModulationInfoHeader')\n  .String('header', {\n    encoding: 'ascii',\n    length: SenderModulationFlag.length,\n  })\n  .UInt16LE('version')\n  .UInt16LE('crc')\n  .UInt16LE('length')\n  .UInt8('count')\n  .back(0)\n  .seek(256)\n  .Buffer('data')\n  .compile();\n\nconst useDistributor = [ModulationModeTypeEnum.OneToEight, ModulationModeTypeEnum.TwoToFour];\n\nexport const decodeModulationInfo = (buf: Buffer): Required<SenderModulationInfo>[] => {\n  const header = new ModulationInfoHeader(buf);\n  if (crc16(buf.slice(ModulationInfoHeader.getOffsetOf('crc') + 2), 0) !== header.crc)\n    throw new Error('Invalid ModulationInfoHeader crc');\n  const result: Required<SenderModulationInfo>[] = [];\n  for (\n    let SenderIndex = 0, offset = 0;\n    SenderIndex < header.count && offset < header.length;\n    SenderIndex += 1\n  ) {\n    const portIndex = header.data[offset];\n    const length = ModulationInfo.baseSize + ModulationMode.baseSize * portIndex;\n    const info = new ModulationInfo(header.data.slice(offset, offset + length)).toJSON();\n    const modes = info.modes.map(({ mode }) => mode);\n    result.push(\n      makeStruct(SenderModulationInfo, {\n        SenderIndex,\n        PortIndex: info.portIndex,\n        ModulationModeTypeInfoList: modes,\n        IsUseDistributor: modes.some((mode) => useDistributor.includes(mode)),\n      }),\n    );\n    offset += length;\n  }\n  return result;\n};\n\nexport const encodeModulationInfo = (\n  modulations: ReadonlyArray<Required<SenderModulationInfo>>,\n): Buffer => {\n  const length = modulations.reduce(\n    (acc, item) =>\n      acc +\n      ModulationInfo.baseSize +\n      item.ModulationModeTypeInfoList.length * ModulationMode.baseSize,\n    0,\n  );\n  const infoHeader = new ModulationInfoHeader(ModulationInfoHeader.baseSize + length);\n  infoHeader.length = length;\n  infoHeader.version = SenderModulationDataVer;\n  infoHeader.count = modulations.length;\n  for (let index = 0, offset = 0; index < modulations.length; index += 1) {\n    const { ModulationModeTypeInfoList } = modulations[index];\n    const size =\n      ModulationInfo.baseSize + ModulationMode.baseSize * ModulationModeTypeInfoList.length;\n    const info = new ModulationInfo(infoHeader.data.slice(offset, offset + size));\n    info.portIndex = ModulationModeTypeInfoList.length;\n    ModulationModeTypeInfoList.forEach((mode, i) => {\n      info.modes[i].mode = mode;\n    });\n    offset += size;\n  }\n  const raw = ModulationInfoHeader.raw(infoHeader);\n  infoHeader.crc = crc16(raw.slice(ModulationInfoHeader.getOffsetOf('crc') + 2), 0);\n  return raw;\n};\n","import { SenderRedundancyInfo } from '@novastar/native/SenderRedundancyInfo';\nimport { makeStruct } from '@novastar/native/common';\nimport { ExtractType, Struct } from 'typed-struct';\n\nimport { crc16 } from './common';\n\nexport const ReduFlag = 'REDU';\nexport const ReduDataVer = 1001;\n\nconst RedundancyItem = new Struct('RedundancyItem')\n  .UInt32LE('MasterSenderIndex')\n  .UInt32LE('MasterPortIndex')\n  .UInt32LE('SlaveSenderIndex')\n  .UInt32LE('SlavePortIndex')\n  .compile();\n\nexport const RedundancyInfo = new Struct('RedundancyInfo')\n  .String('header', ReduFlag.length, 'ascii')\n  .UInt16LE('version')\n  .UInt16LE('crc')\n  .UInt16LE('length')\n  .StructArray('items', RedundancyItem)\n  .compile();\n\nexport type RedundancyInfo = ExtractType<typeof RedundancyInfo, false>;\n\nconst dataOffset = RedundancyInfo.getOffsetOf('crc') + 2;\n\nexport const decodeRedundancyInfo = (data: Buffer): Required<SenderRedundancyInfo>[] => {\n  const { crc: crcInfo, items } = new RedundancyInfo(data).toJSON();\n  if (crc16(data.slice(dataOffset), 0) !== crcInfo) throw new Error('Invalid RedundancyInfo crc');\n  return items.map((item) => makeStruct(SenderRedundancyInfo, item));\n};\n\nexport const encodeRedundancyInfo = (\n  reduList: ReadonlyArray<Required<SenderRedundancyInfo>>,\n): Buffer => {\n  const length = reduList.length * RedundancyItem.baseSize;\n  const info = new RedundancyInfo(RedundancyInfo.baseSize + length);\n  info.header = ReduFlag;\n  info.version = ReduDataVer;\n  info.length = length;\n  reduList.forEach((item, index) => {\n    Object.assign(info.items[index], item);\n  });\n  const raw = RedundancyInfo.raw(info);\n  info.crc = crc16(raw.slice(dataOffset), 0);\n  return raw;\n};\n","import { ScanBoardConnectTypeEnum } from '@novastar/native/ScanBoardConnectType';\nimport { ExtractType, Struct, typed } from 'typed-struct';\n\nexport const ScreenConfigInfo = new Struct('ScreenConfigInfo')\n  .UInt8('Type', typed<1 | 3 | 5>())\n  .seek(1)\n  .UInt16LE('X')\n  .UInt16LE('Y')\n  .UInt16LE('PixelColsInScanBd')\n  .UInt16LE('PixelRowsInScanBd')\n  .UInt8('ScanBdRows')\n  .UInt8('ScanBdCols')\n  .Custom(\n    'ConnectType',\n    1,\n    (type, [value]) => {\n      switch (value) {\n        case 0:\n          return ScanBoardConnectTypeEnum.LeftTop_Horizontal;\n        case 1:\n          return ScanBoardConnectTypeEnum.LeftTop_Vertical;\n        case 2:\n          return ScanBoardConnectTypeEnum.RightTop_Horizontal;\n        case 3:\n          return ScanBoardConnectTypeEnum.RightTop_Vertical;\n        case 4:\n          return ScanBoardConnectTypeEnum.LeftBottom_Horizontal;\n        case 5:\n          return ScanBoardConnectTypeEnum.LeftBottom_Vertical;\n        case 6:\n          return ScanBoardConnectTypeEnum.RightBottom_Horizontal;\n        default:\n          return ScanBoardConnectTypeEnum.RightBottom_Vertical;\n      }\n    },\n    (type, buf, value: ScanBoardConnectTypeEnum) => {\n      let data: number;\n      switch (value) {\n        case ScanBoardConnectTypeEnum.LeftTop_Horizontal:\n          data = 0;\n          break;\n        case ScanBoardConnectTypeEnum.LeftTop_Vertical:\n          data = 1;\n          break;\n        case ScanBoardConnectTypeEnum.RightTop_Horizontal:\n          data = 2;\n          break;\n        case ScanBoardConnectTypeEnum.RightTop_Vertical:\n          data = 3;\n          break;\n        case ScanBoardConnectTypeEnum.LeftBottom_Horizontal:\n          data = 4;\n          break;\n        case ScanBoardConnectTypeEnum.LeftBottom_Vertical:\n          data = 5;\n          break;\n        case ScanBoardConnectTypeEnum.RightBottom_Horizontal:\n          data = 6;\n          break;\n        default:\n          data = 7;\n          break;\n      }\n      return buf.writeUInt8(data) > 0;\n    },\n  )\n  .UInt16LE('CabinetsPerPort')\n  .compile();\n\nexport type ScreenConfigInfo = ExtractType<typeof ScreenConfigInfo, false>;\n","import { API, Session } from '@novastar/codec';\n\nimport './api';\nimport { Id } from './common';\n\nexport type SessionAPI = Id<API & Session>;\n\nexport type { API };\n\nexport default Session;\n","import { ExtractType, Struct } from 'typed-struct';\n\nexport const SoftwareSpaceHeaderFlag = 'NSSD';\nexport const SoftwareSpaceHeaderVersion = 1001;\n\nexport const ParamSize = 7;\n\nexport const SoftwareSpaceHeader = new Struct('SoftwareSpaceHeader')\n  .String('header', 4, 'ascii')\n  .UInt16LE('crc') // 4\n  .UInt16LE('version') // 6\n  .UInt16LE('paramSize') // 8\n  .UInt16LE('paramCRC') // 10\n  .UInt32LE('compressedSize') // 12\n  .UInt32LE('fileInfoSize') // 16\n  .UInt16LE('fileInfoCRC') // 20\n  // .back(0)\n  // .seek(512)\n  .compile();\n\nexport type SoftwareSpaceHeader = ExtractType<typeof SoftwareSpaceHeader, false>;\n","import { GraphicsDVIPortInfo } from '@novastar/native/GraphicsDVIPortInfo';\nimport { isLeft } from 'fp-ts/Either';\nimport { PathReporter } from 'io-ts/PathReporter';\nimport { ExtractType, Struct } from 'typed-struct';\n\nimport { crc16 } from './common';\n\nexport const DVIInfo = new Struct('DVIInfo')\n  .UInt16LE('version')\n  .UInt16LE('crc')\n  .UInt8('DviPortCols')\n  .UInt8('DviPortRows')\n  .UInt8('GraphicsWidth')\n  .UInt8('GraphicsHeight')\n  .compile();\n\nexport type DVIInfo = ExtractType<typeof DVIInfo, false>;\n\nexport const decodeGraphicsDVIPortInfo = (data: Buffer): [GraphicsDVIPortInfo, number] => {\n  const info = new DVIInfo(data);\n  if (info.crc !== crc16(data.slice(4), 0)) throw new TypeError('Invalid dvi info crc');\n  const validation = GraphicsDVIPortInfo.decode(info.toJSON());\n  if (isLeft(validation))\n    throw new TypeError(`Invalid dvi info: ${PathReporter.report(validation)}`);\n  return [validation.right, info.version];\n};\n","import { ExtractType, Struct } from 'typed-struct';\n\nexport const ScanBdRecordNoSendParams = new Struct('ScanBdRecordNoSendParams')\n  .UInt32LE('size')\n  .UInt16LE('num', 1)\n  .UInt32LE('address')\n  .UInt32LE('length')\n  .UInt16LE('delay')\n  .UInt16LE('pollingTime')\n  .UInt16LE('pollingWaitTime')\n  .seek(12)\n  .Buffer('data')\n  .compile();\n\nexport type ScanBdRecordNoSendParams = ExtractType<typeof ScanBdRecordNoSendParams, false>;\n\nexport type SendParam = Pick<\n  ScanBdRecordNoSendParams,\n  'address' | 'data' | 'delay' | 'pollingTime' | 'pollingWaitTime'\n> & {\n  name?: string;\n};\n","import AddressMapping from '@novastar/native/AddressMapping';\n\nconst knownAddresses = new Map<number, string[]>();\n\nObject.entries(AddressMapping).forEach(([key, address]) => {\n  if (typeof address === 'number') {\n    const value = knownAddresses.get(address);\n    if (value !== undefined) value.push(key);\n    else knownAddresses.set(address, [key]);\n  }\n});\n\nexport default function findKnownAddresses(address: number): string | undefined {\n  return knownAddresses.get(address)?.join(', ');\n}\n","// cspell:ignore RCCB\nimport { ExtractType, Struct } from 'typed-struct';\n\nimport { ScanBdRecordNoSendParams, SendParam } from './ScanBdRecordNoSendParams';\nimport { crc16 } from './common';\nimport findKnownAddresses from './findKnownAddresses';\n\nexport const ScannerBinDataFlag = 'RCCB';\n\n/**\n * RCCB\n */\nexport const ScannerBinData = new Struct('ScannerBinData')\n  .String('header', 'ascii', ScannerBinDataFlag.length)\n  .UInt32LE('length')\n  .UInt16LE('crc')\n  .UInt16LE('version', 1001)\n  .seek(52)\n  .Buffer('data')\n  .compile();\n\nexport type ScannerBinData = ExtractType<typeof ScannerBinData, false>;\n\nexport const decodeScannerBinData = (buffer: Buffer): SendParam[] => {\n  const { header, crc: binCrc, length, data } = new ScannerBinData(buffer);\n  if (header !== ScannerBinDataFlag) throw new Error('Invalid ScannerBinData header');\n  if (length !== buffer.length) throw new Error('Invalid ScannerBinData length');\n  if (crc16(data, 0x5555) !== binCrc) throw new Error('Invalid ScannerBinData CRC');\n  const params: SendParam[] = [];\n  const dataLength = length - ScannerBinData.baseSize;\n  for (let offset = 0; offset < dataLength; ) {\n    const {\n      address,\n      data: paramData,\n      delay,\n      length: paramLength,\n      pollingTime,\n      pollingWaitTime,\n      size,\n    } = new ScanBdRecordNoSendParams(data.slice(offset));\n    if (size !== ScanBdRecordNoSendParams.baseSize + paramLength || offset + size > dataLength) {\n      throw new Error('Invalid ScannerBinData record');\n    }\n    const name = findKnownAddresses(address);\n    params.push({\n      address,\n      data: Buffer.from(paramData.slice(0, paramLength)),\n      delay,\n      pollingTime,\n      pollingWaitTime,\n      name,\n    });\n    offset += size;\n  }\n  return params;\n};\n","import { ScreenAdjustParams } from '@novastar/native/ScreenAdjustParams';\nimport { makeStruct } from '@novastar/native/common';\nimport { Struct } from 'typed-struct';\n\nconst ScreenAdjustParam = new Struct('ScreenAdjustParam')\n  .UInt8('ScreenXZoomType')\n  .UInt8('ScreenXScale')\n  .UInt8('ScreenYZoomType')\n  .UInt8('ScreenYScale')\n  .UInt8('VirtualMap')\n  .String('ScreenName', 20)\n  .UInt8('ThreeD')\n  .back(0)\n  .seek(40)\n  .compile();\n\nconst ScreenAdjustParamOld = new Struct('ScreenAdjustParamOld')\n  .UInt8('ScreenXZoomType')\n  .UInt8('ScreenXScale')\n  .UInt8('ScreenYZoomType')\n  .UInt8('ScreenYScale')\n  .UInt8('VirtualMap')\n  .String('ScreenName', 20)\n  .UInt8('ThreeD')\n  .back(0)\n  .seek(41)\n  .compile();\n\nconst ScreenAdjustInfo = new Struct('ScreenAdjustInfo')\n  .UInt16LE('version')\n  .back(0)\n  .seek(132)\n  .UInt8('count')\n  .StructArray('oldParams', ScreenAdjustParamOld)\n  .back()\n  .StructArray('params', ScreenAdjustParam)\n  .compile();\n\n// eslint-disable-next-line import/prefer-default-export\nexport function decodeScreenAdjustInfo(buffer: Buffer): Required<ScreenAdjustParams>[] {\n  const info = new ScreenAdjustInfo(buffer).toJSON();\n  const { version, count } = info;\n  const paramSize = version <= 1001 ? ScreenAdjustParamOld.baseSize : ScreenAdjustParam.baseSize;\n  const length = count * paramSize + ScreenAdjustInfo.baseSize;\n  if (buffer.length < length) throw new Error('Invalid adjust length');\n  const params = version <= 1001 ? info.oldParams : info.params;\n  if (params.length !== count) throw new TypeError('Wrong number of adjust parameters');\n  return params.map((param) => makeStruct(ScreenAdjustParams, param));\n}\n","import { ExtractType, Struct } from 'typed-struct';\n\nexport const ComplexRegionInfo = new Struct('ComplexRegionInfo')\n  .UInt8('SenderIndex')\n  .UInt8('PortIndex')\n  .UInt16LE('ConnectIndex')\n  .UInt16LE('X')\n  .UInt16LE('Y')\n  .UInt16LE('XInPort')\n  .UInt16LE('YInPort')\n  .UInt16LE('Width')\n  .UInt16LE('Height')\n  .compile();\n\nexport type ComplexRegionInfo = ExtractType<typeof ComplexRegionInfo, false>;\n","import { ComplexLEDDisplayInfo } from '@novastar/native/ComplexLEDDisplayInfo';\nimport { LEDDisplyTypeEnum } from '@novastar/native/LEDDisplyType';\nimport { VirtualModeTypeEnum } from '@novastar/native/VirtualModeType';\nimport { isLeft } from 'fp-ts/Either';\nimport { PathReporter } from 'io-ts/PathReporter';\nimport { ExtractType, Struct, typed } from 'typed-struct';\n\nimport { ComplexRegionInfo } from './ComplexRegionInfo';\n\nexport const ComplexScreen = new Struct('ComplexScreen')\n  .UInt8('Type', LEDDisplyTypeEnum.ComplexType)\n  .UInt8('VirtualMode', typed<VirtualModeTypeEnum>())\n  .UInt32LE('ScannerCount')\n  .StructArray('ScanBoardRegionInfoList', ComplexRegionInfo)\n  .compile();\n\nexport type ComplexScreen = ExtractType<typeof ComplexScreen, false>;\n\nexport const decodeComplexLEDDisplayInfo = (data: Buffer): ComplexLEDDisplayInfo => {\n  const screen = new ComplexScreen(data).toJSON();\n  const validation = ComplexLEDDisplayInfo.decode(screen);\n  if (isLeft(validation))\n    throw new TypeError(`Invalid complex screen: ${PathReporter.report(validation)}`);\n  return validation.right;\n};\n","import { ScanBoardConnectTypeEnum } from '@novastar/native/ScanBoardConnectType';\nimport { ExtractType, Struct, typed } from 'typed-struct';\n\nexport const PortInfo = new Struct('PortInfo')\n  .UInt8('ConnectType', typed<ScanBoardConnectTypeEnum>())\n  .UInt8('PortIndex')\n  .UInt16LE('ScanBdBegColNo')\n  .UInt16LE('ScanBdBegRowNo')\n  .UInt16LE('ScanBdEndColNo')\n  .UInt16LE('ScanBdEndRowNo')\n  .compile();\n\nexport type PortInfo = ExtractType<typeof PortInfo, false>;\n","import { LEDDisplyTypeEnum } from '@novastar/native/LEDDisplyType';\nimport { SimpleLEDDisplayInfo } from '@novastar/native/SimpleLEDDisplayInfo';\nimport { VirtualModeTypeEnum } from '@novastar/native/VirtualModeType';\nimport debugFactory from 'debug';\nimport { isLeft } from 'fp-ts/Either';\nimport { PathReporter } from 'io-ts/PathReporter';\nimport { ExtractType, Struct, typed } from 'typed-struct';\n\nimport { PortInfo } from './PortInfo';\n\nconst debug = debugFactory('novastar:simple-screen');\n\nexport const SimpleSingleScreen = new Struct('SimpleSingleScreen')\n  .UInt8('Type', LEDDisplyTypeEnum.SimpleSingleType)\n  .UInt8('VirtualModeType', typed<VirtualModeTypeEnum>())\n  .UInt16LE('X')\n  .UInt16LE('Y')\n  .UInt8('SenderIndex')\n  .UInt8('PortCols')\n  .UInt8('PortRows')\n  .UInt16LE('ScanBdCols')\n  .UInt16LE('ScanBdRows')\n  .UInt16LE('PixelColsInScanBd')\n  .UInt16LE('PixelRowsInScanBd')\n  .StructArray('PortScanBdInfoList', PortInfo)\n  .compile();\n\n// export type ExtractType<C> = C extends new () => infer T ? T : never;\n\nexport type SimpleSingleScreen = ExtractType<typeof SimpleSingleScreen, false>;\n\nexport const decodeSimpleLEDDisplayInfo = (data: Buffer): SimpleLEDDisplayInfo => {\n  const screen = new SimpleSingleScreen(data).toJSON();\n  debug(`parse: ${JSON.stringify(screen)}`);\n  const validation = SimpleLEDDisplayInfo.decode(screen);\n  if (isLeft(validation))\n    throw new TypeError(`Invalid simple display info: ${PathReporter.report(validation)}`);\n  return validation.right;\n};\n","import { ExtractType, Struct } from 'typed-struct';\n\nexport const RegionInfo = new Struct('RegionInfo')\n  .UInt8('SenderIndex')\n  .UInt8('PortIndex')\n  .UInt16LE('ConnectIndex')\n  .UInt16LE('X')\n  .UInt16LE('Y')\n  .UInt16LE('XInPort')\n  .UInt16LE('YInPort')\n  .UInt16LE('Width')\n  .UInt16LE('Height')\n  .UInt8('DVIIndex')\n  .compile();\n\nexport type RegionInfo = ExtractType<typeof RegionInfo, false>;\n","import { LEDDisplyTypeEnum } from '@novastar/native/LEDDisplyType';\nimport { StandardLEDDisplayInfo } from '@novastar/native/StandardLEDDisplayInfo';\nimport { VirtualModeTypeEnum } from '@novastar/native/VirtualModeType';\nimport debugFactory from 'debug';\nimport { isLeft } from 'fp-ts/Either';\nimport { PathReporter } from 'io-ts/PathReporter';\nimport { ExtractType, Struct, typed } from 'typed-struct';\n\nimport { RegionInfo } from './RegionInfo';\n\nconst debug = debugFactory('novastar:standard-screen');\nexport const StandardScreen = new Struct('StandardScreen')\n  .UInt8('Type', LEDDisplyTypeEnum.StandardType)\n  .UInt8('VirtualMode', typed<VirtualModeTypeEnum>())\n  .UInt16LE('X')\n  .UInt16LE('Y')\n  .UInt16LE('ScanBdCols')\n  .UInt16LE('ScanBdRows')\n  .StructArray('ScannerRegionList', RegionInfo)\n  .compile();\n\nexport type StandardScreen = ExtractType<typeof StandardScreen, false>;\n\nexport const decodeStandardLEDDisplayInfo = (data: Buffer): StandardLEDDisplayInfo => {\n  const screen = new StandardScreen(data).toJSON();\n  debug(`parse: ${JSON.stringify(screen)}`);\n  const validation = StandardLEDDisplayInfo.decode(screen);\n  if (isLeft(validation))\n    throw new TypeError(`Invalid standard screen info: ${PathReporter.report(validation)}`);\n  return validation.right;\n};\n","import { LEDDisplyTypeEnum } from '@novastar/native/LEDDisplyType';\nimport ScreenInfoRelativeAddress from '@novastar/native/ScreenInfoRelativeAddress';\nimport debugFactory from 'debug';\n\nimport { decodeComplexLEDDisplayInfo } from './ComplexScreen';\nimport { decodeSimpleLEDDisplayInfo } from './SimpleSingleScreen';\nimport { decodeStandardLEDDisplayInfo } from './StandardScreen';\nimport { crc16, LEDDisplayInfo } from './common';\n\nconst debug = debugFactory('novastar:ScreenInfo');\nconst ScreenDataNewVer = 1005;\n\nexport type DVI1600Info = {\n  si: number;\n  x1: number;\n  y1: number;\n  x2: number;\n  y2: number;\n  x3: number;\n  y3: number;\n  x4: number;\n  y4: number;\n};\n\nfunction decodeDVI1600Info(data: Buffer): DVI1600Info | undefined {\n  const StartAddressIndex = 28;\n  const scrCrc = data.readUInt16LE(ScreenInfoRelativeAddress.SCREEN_HEADERINFO_CRC);\n  if (crc16(data.slice(ScreenInfoRelativeAddress.SCREEN_HEADERINFO_RESERVED), 0) !== scrCrc)\n    throw new TypeError('Invalid CRC');\n  const screenCount = data.readUInt8(ScreenInfoRelativeAddress.SCREEN_HEADERINFO_SCREENCOUNT);\n  const typeOffset =\n    ScreenInfoRelativeAddress.SCREEN_HEADERINFO_SCREENLENINFOADDR + screenCount * 4;\n  if (data.length < typeOffset + 1) throw new Error('Invalid length');\n  const dviExtendsPos = data.readUInt32LE(StartAddressIndex);\n  let dviExtends: DVI1600Info | undefined;\n  if (dviExtendsPos < data.length) {\n    const offset = dviExtendsPos + 2;\n    const dviExtendsLength = data.readUInt16LE(dviExtendsPos);\n    dviExtends = JSON.parse(data.slice(offset, offset + dviExtendsLength).toString());\n  }\n  debug(`dviExtends: ${JSON.stringify(dviExtends)}`);\n  return dviExtends;\n}\n\nexport type ScreenInfo = {\n  screens: LEDDisplayInfo[];\n  version: number;\n  dviExtends?: DVI1600Info;\n};\n\n/**\n * SoftWareSpaceAnalyser:443\n * @param data\n */\nexport function decodeScreenInfo(data: Buffer): ScreenInfo {\n  if (\n    crc16(data.slice(ScreenInfoRelativeAddress.SCREEN_HEADERINFO_RESERVED), 0) !==\n    data.readUInt16LE(ScreenInfoRelativeAddress.SCREEN_HEADERINFO_CRC)\n  )\n    throw new Error('Invalid screen info crc');\n  if (data.length < ScreenInfoRelativeAddress.SCREEN_HEADERINFO_SCREENLENINFOADDR)\n    throw new Error('Invalid length of screen info');\n  const version = data.readUInt16LE(ScreenInfoRelativeAddress.SCREEN_HEADERINFO_VERSION);\n  debug(`version: ${version}`);\n  const dviExtends = version === ScreenDataNewVer + 1 ? decodeDVI1600Info(data) : undefined;\n  const screenCount = data.readUInt8(ScreenInfoRelativeAddress.SCREEN_HEADERINFO_SCREENCOUNT);\n  debug(`screenCount: ${screenCount}`);\n  let screenDataPos =\n    screenCount * 4 + ScreenInfoRelativeAddress.SCREEN_HEADERINFO_SCREENLENINFOADDR;\n  if (data.length < screenDataPos) throw new Error('Invalid length of screen info');\n  const screens: LEDDisplayInfo[] = [];\n  for (let i = 0; i < screenCount; i += 1) {\n    const length = data.readUInt32LE(\n      ScreenInfoRelativeAddress.SCREEN_HEADERINFO_SCREENLENINFOADDR + 4 * i,\n    );\n    const type = data.readUInt8(screenDataPos);\n    debug(`[${i}]; type: ${type}; length: ${length}`);\n    switch (type) {\n      case LEDDisplyTypeEnum.SimpleSingleType:\n        screens.push(decodeSimpleLEDDisplayInfo(data.slice(screenDataPos, screenDataPos + length)));\n        break;\n      case LEDDisplyTypeEnum.StandardType:\n        screens.push(\n          decodeStandardLEDDisplayInfo(data.slice(screenDataPos, screenDataPos + length)),\n        );\n        break;\n      case LEDDisplyTypeEnum.ComplexType:\n        screens.push(\n          decodeComplexLEDDisplayInfo(data.slice(screenDataPos, screenDataPos + length)),\n        );\n        break;\n      default:\n        throw new TypeError('Invalid led display type');\n    }\n    screenDataPos += length;\n  }\n  return {\n    version,\n    screens,\n    dviExtends,\n  };\n}\n","import fs from 'fs';\n\nimport type { GraphicsDVIPortInfo } from '@novastar/native/GraphicsDVIPortInfo';\nimport { ScanBoardProperty } from '@novastar/native/ScanBoardProperty';\nimport { SystemParameterConfig } from '@novastar/native/SystemParameterConfig';\nimport Zip from 'adm-zip';\nimport debugFactory from 'debug';\nimport { type X2jOptions, XMLParser } from 'fast-xml-parser';\nimport { isLeft } from 'fp-ts/Either';\nimport * as t from 'io-ts';\n\nimport { decodeGraphicsDVIPortInfo } from './DVIInfo';\nimport { DviScreenConfigInfo, DviScreenInfoFlag } from './DviScreenConfigInfo';\nimport { SendParam } from './ScanBdRecordNoSendParams';\nimport { decodeScannerBinData } from './ScannerBinData';\nimport { decodeScreenAdjustInfo } from './ScreenAdjustInfo';\nimport { decodeScreenInfo, ScreenInfo } from './ScreenInfo';\nimport { crc16 } from './common';\n\nconst debug = debugFactory('novastar:config');\n\nconst options: X2jOptions = {\n  ignoreAttributes: false,\n  parseTagValue: false,\n};\n\nconst parser = new XMLParser(options);\n\nconst makeCfgParser =\n  <C extends t.Mixed>(codec: C) =>\n  (data: Buffer): t.TypeOf<C> => {\n    const cfg = parser.parse(data);\n    const { decode } = t.exact(t.type({ [codec.name]: codec }));\n    const res = decode(cfg);\n    if (isLeft(res)) {\n      throw new TypeError(\n        res.left\n          .map(({ context, message }) => {\n            const location = context\n              .map(({ key }) => key)\n              .filter(Boolean)\n              .join('.');\n            return `${location}: ${message ?? 'Invalid value'}`;\n          })\n          .join('\\n'),\n      );\n    }\n    return res.right[codec.name];\n  };\n\nconst systemParameterParser = makeCfgParser(SystemParameterConfig);\n\nconst scanboardParser = makeCfgParser(ScanBoardProperty);\n\n/**\n * *.scfg\n * @param pathname\n */\nexport const loadSystemConfig = (pathname: string): SystemParameterConfig => {\n  const data = fs.readFileSync(pathname);\n  return systemParameterParser(data);\n};\n\n/**\n * *.rcfgx\n * @param pathname\n */\nexport const loadScanBoardConfig = (\n  pathname: string,\n): readonly [ScanBoardProperty, SendParam[]] => {\n  const zip = new Zip(pathname);\n  const [xmlData, binData] = zip.getEntries().map((entry) => zip.readFile(entry));\n  if (!xmlData) throw new Error('Invalid archive');\n  const xml = scanboardParser(xmlData);\n  const params: SendParam[] = binData ? decodeScannerBinData(binData) : [];\n  return [xml, params];\n};\n\nexport type ScrConfig = ScreenInfo & {\n  dviVersion: number;\n  dviInfo: GraphicsDVIPortInfo;\n};\n\n/**\n * @param buffer\n */\nexport const decodeScreenConfig = (buffer: Buffer): ScrConfig => {\n  const {\n    crc: crcInfo,\n    dviInfoLength,\n    screenInfoLength,\n    adjustInfoLength,\n    data,\n    header,\n  } = new DviScreenConfigInfo(buffer);\n  if (header !== DviScreenInfoFlag) throw new TypeError('Invalid DSCI header');\n  const size = DviScreenConfigInfo.baseSize + dviInfoLength + screenInfoLength + adjustInfoLength;\n  if (buffer.length < size) throw new Error('Invalid buffer length');\n  if (\n    crc16(buffer.slice(DviScreenConfigInfo.getOffsetOf('crc') + 2, size - adjustInfoLength), 0) !==\n    crcInfo\n  )\n    throw new TypeError('Invalid CRC');\n  const [dviInfo, dviVersion] = decodeGraphicsDVIPortInfo(data.slice(0, dviInfoLength));\n  debug(`dviInfo: ${JSON.stringify(dviInfo)}`);\n  debug(`dviVersion: ${dviVersion}`);\n  const screenInfo = decodeScreenInfo(data.slice(dviInfoLength, dviInfoLength + screenInfoLength));\n  const adjustInfo = decodeScreenAdjustInfo(\n    data.slice(\n      dviInfoLength + screenInfoLength,\n      dviInfoLength + screenInfoLength + adjustInfoLength,\n    ),\n  );\n  if (adjustInfo.length > 0) {\n    if (adjustInfo.length !== screenInfo.screens.length)\n      throw new Error('Invalid adjust info count');\n    screenInfo.screens = screenInfo.screens.map(({ ScrAdjustParams, ...props }, index) => ({\n      ScrAdjustParams: adjustInfo[index],\n      ...props,\n    }));\n  }\n  if (size + 11 < buffer.length) {\n    /* empty */\n  }\n  return {\n    ...screenInfo,\n    dviVersion,\n    dviInfo,\n  };\n};\n\n/**\n * *.scr\n * @param pathname\n */\nexport const loadScreenConfig = (pathname: string): ScrConfig =>\n  decodeScreenConfig(fs.readFileSync(pathname));\n","import { randomUUID } from 'node:crypto';\n\nimport { CabinetInDevice } from '@novastar/native/CabinetInDevice';\nimport { DviSelectModeEnum } from '@novastar/native/DviSelectMode';\nimport { LEDDisplyTypeEnum } from '@novastar/native/LEDDisplyType';\nimport { OnePortLoadInfo } from '@novastar/native/OnePortLoadInfo';\nimport { ScreenDataInSoftSpace } from '@novastar/native/ScreenDataInSoftSpace';\nimport { makeStruct } from '@novastar/native/common';\n\nimport { isComplexScreen, isSimpleScreen, isStandardScreen, LEDDisplayInfo } from './common';\n\n/**\n * Nova.LCT.GigabitSystem.CommonInfoAccessor.dll\n * Nova.LCT.GigabitSystem.CommonInfoAccessor::NewScreenDataConvertor::ConvertFromEditZoneToSoftSpace\n * @param scr\n * @param index\n */\nexport default function convertLEDDisplayInfoToScreenDataInSoftSpace(\n  scr: LEDDisplayInfo,\n  index: number,\n): ScreenDataInSoftSpace {\n  const UUID = randomUUID();\n  if (isSimpleScreen(scr)) {\n    return makeStruct(ScreenDataInSoftSpace, {\n      UUID,\n      ScreenIndex: index,\n      VirMode: scr.VirtualMode,\n      ScrType: LEDDisplyTypeEnum.SimpleSingleType,\n      ScrX: scr.X,\n      ScrY: scr.Y,\n      DeviceID: scr.SenderIndex,\n      PortCols: scr.PortCols,\n      PortRows: scr.PortRows,\n      CabinetCol: scr.ScanBdCols,\n      CabinetRow: scr.ScanBdRows,\n      CabinetWidth: scr.PixelColsInScanBd,\n      CabinetHeight: scr.PixelRowsInScanBd,\n      OnePortLoadInfo: scr.PortScanBdInfoList?.map((port) =>\n        makeStruct(OnePortLoadInfo, {\n          LineType: port.ConnectType,\n          Port: port.PortIndex,\n          StartCabCol: port.ScanBdBegColNo,\n          StartCabRow: port.ScanBdBegRowNo,\n          EndCabCol: port.ScanBdEndColNo,\n          EndCabRow: port.ScanBdEndRowNo,\n        }),\n      ),\n    });\n  }\n  if (isStandardScreen(scr)) {\n    if (\n      (scr.ScanBoardRows ?? 0) * (scr.ScanBoardCols ?? 0) !==\n      (scr.ScannerRegionList?.length ?? 0)\n    )\n      throw new TypeError('Invalid ScannerRegionList length');\n    const [first] = scr.ScannerRegionList ?? [];\n    return makeStruct(ScreenDataInSoftSpace, {\n      UUID,\n      ScreenIndex: index,\n      ScrType: LEDDisplyTypeEnum.StandardType,\n      VirMode: scr.VirtualMode,\n      ScrX: scr.X,\n      ScrY: scr.Y,\n      CabinetCol: scr.ScanBoardCols,\n      CabinetRow: scr.ScanBoardRows,\n      DVIlist: scr.DVIOffest,\n      DviSelect: first?.DviSelect ?? DviSelectModeEnum.DVI,\n      CabinetInDevice: scr.ScannerRegionList?.map((region) =>\n        makeStruct(CabinetInDevice, {\n          DevID: region.SenderIndex,\n          NetPort: region.PortIndex,\n          ConnectID: region.ConnectIndex,\n          XPos: region.X,\n          YPos: region.Y,\n          Width: region.Width,\n          Height: region.Height,\n          RowIndexInScreen: region.RowIndexInScreen,\n          ColIndexInScreen: region.ColIndexInScreen,\n          DviIndex: region.DVIIndex,\n        }),\n      ),\n    });\n  }\n  if (isComplexScreen(scr)) {\n    return makeStruct(ScreenDataInSoftSpace, {\n      UUID,\n      ScreenIndex: index,\n      ScrType: LEDDisplyTypeEnum.ComplexType,\n      VirMode: scr.VirtualMode,\n      CabinetInDevice: scr.ScanBoardRegionInfoList?.map((region) =>\n        makeStruct(CabinetInDevice, {\n          DevID: region.SenderIndex,\n          NetPort: region.PortIndex,\n          ConnectID: region.ConnectIndex,\n          XPos: region.X,\n          YPos: region.Y,\n          Width: region.Width,\n          Height: region.Height,\n        }),\n      ),\n    });\n  }\n  throw new TypeError('Invalid screen type');\n}\n","import { ComplexLEDDisplayInfo } from '@novastar/native/ComplexLEDDisplayInfo';\nimport { LEDDisplyTypeEnum } from '@novastar/native/LEDDisplyType';\nimport { ScanBoardRegionInfo } from '@novastar/native/ScanBoardRegionInfo';\nimport { ScreenDataInSoftSpace } from '@novastar/native/ScreenDataInSoftSpace';\nimport { SimpleLEDDisplayInfo } from '@novastar/native/SimpleLEDDisplayInfo';\nimport { StandardLEDDisplayInfo } from '@novastar/native/StandardLEDDisplayInfo';\nimport { makeStruct } from '@novastar/native/common';\n\nimport { LEDDisplayInfo } from './common';\n\nexport default function convertScreenDataInSoftSpaceToLEDDisplayInfo(\n  scr: ScreenDataInSoftSpace,\n): LEDDisplayInfo {\n  switch (scr.ScrType) {\n    case LEDDisplyTypeEnum.SimpleSingleType:\n      return makeStruct(SimpleLEDDisplayInfo, {\n        Type: LEDDisplyTypeEnum.SimpleSingleType,\n        VirtualMode: scr.VirMode,\n        X: scr.ScrX,\n        Y: scr.ScrY,\n        SenderIndex: scr.DeviceID,\n        PixelColsInScanBd: scr.CabinetWidth,\n        PixelRowsInScanBd: scr.CabinetHeight,\n        ScanBdCols: scr.CabinetCol,\n        ScanBdRows: scr.CabinetRow,\n        PortCols: scr.PortCols,\n        PortRows: scr.PortRows,\n        PortScanBdInfoList: scr.OnePortLoadInfo?.map((info) => ({\n          ConnectType: info.LineType,\n          PortIndex: info.Port,\n          ScanBdBegColNo: info.StartCabCol,\n          ScanBdBegRowNo: info.StartCabRow,\n          ScanBdEndColNo: info.EndCabCol,\n          ScanBdEndRowNo: info.EndCabRow,\n        })),\n      });\n    case LEDDisplyTypeEnum.StandardType:\n      if ((scr.CabinetCol ?? 0) * (scr.CabinetRow ?? 0) !== (scr.CabinetInDevice?.length ?? 0))\n        throw new TypeError('Invalid CabinetInDevice');\n      return makeStruct(StandardLEDDisplayInfo, {\n        Type: LEDDisplyTypeEnum.StandardType,\n        VirtualMode: scr.VirMode,\n        X: scr.ScrX,\n        Y: scr.ScrY,\n        DVIOffest: scr.DVIlist,\n        ScanBoardCols: scr.CabinetCol,\n        ScanBoardRows: scr.CabinetRow,\n        ScannerRegionList: scr.CabinetInDevice?.map(\n          (cab) =>\n            ({\n              SenderIndex: cab.DevID,\n              PortIndex: cab.NetPort,\n              ConnectIndex: cab.ConnectID,\n              X: cab.XPos,\n              Y: cab.YPos,\n              Width: cab.Width,\n              Height: cab.Height,\n              RowIndexInScreen: cab.RowIndexInScreen,\n              ColIndexInScreen: cab.ColIndexInScreen,\n              DVIIndex: cab.DviIndex,\n            }) as ScanBoardRegionInfo,\n        ),\n      });\n    case LEDDisplyTypeEnum.ComplexType:\n      return makeStruct(ComplexLEDDisplayInfo, {\n        Type: LEDDisplyTypeEnum.ComplexType,\n        VirtualMode: scr.VirMode,\n        ScanBoardRegionInfoList: scr.CabinetInDevice?.map(\n          (cab) =>\n            ({\n              SenderIndex: cab.DevID,\n              PortIndex: cab.NetPort,\n              ConnectIndex: cab.ConnectID,\n              X: cab.XPos,\n              Y: cab.YPos,\n              Width: cab.Width,\n              Height: cab.Height,\n            }) as ScanBoardRegionInfo,\n        ),\n      });\n    default:\n      throw new TypeError(`Unknown screen type: ${JSON.stringify(scr.ScrType)}`);\n  }\n}\n","import { NSCardTypeEnum } from '@novastar/native/NSCardType';\n\n/**\n * SenderStateForm\n */\nexport default function GetDeviceTypeLanguage(deviceType: NSCardTypeEnum): string {\n  switch (deviceType) {\n    case NSCardTypeEnum.Controller:\n      return 'MCTRL500';\n    case NSCardTypeEnum.Sender:\n      return 'MCTRL300';\n    case NSCardTypeEnum.HDMICard6P:\n      return 'MCTRL700';\n    case NSCardTypeEnum.HDMICard:\n      return 'MCTRL600/660';\n    case NSCardTypeEnum.VS4:\n      return 'J6';\n    case NSCardTypeEnum.MCTRL660_Pro:\n      return 'MCTRL660 PRO';\n    case NSCardTypeEnum.MCTRL660_ROE:\n      return 'MCTRL660 ROE';\n    case NSCardTypeEnum.E8000_1:\n    case NSCardTypeEnum.E8000_2:\n    case NSCardTypeEnum.E8000_3:\n      return 'E8000';\n    case NSCardTypeEnum.Prime_4K:\n      return '4K-Prime';\n    case NSCardTypeEnum.ProUHD:\n      return 'NovaPro UHD';\n    case NSCardTypeEnum.ProUHD_Jr:\n      return 'NovaPro UHD Jr';\n    case NSCardTypeEnum.H9:\n    case NSCardTypeEnum.H_20:\n      return 'H series';\n    default:\n      return NSCardTypeEnum[deviceType] ?? 'Unknown';\n  }\n}\n","/* eslint-disable no-await-in-loop */\nimport { decodeUIntLE, ErrorType, Request, TimeoutError } from '@novastar/codec';\nimport { HDEnableModeEnum } from '@novastar/native/HDEnableMode';\nimport { NSCardTypeEnum } from '@novastar/native/NSCardType';\nimport { VedioSelectModeEnum } from '@novastar/native/VedioSelectMode';\n\nimport { GetPortNumber } from './CustomTransform';\nimport { DeviceInfo } from './DeviceInfo';\nimport GetDeviceTypeLanguage from './GetDeviceTypeLanguage';\nimport { SessionAPI } from './Session';\n\n/**\n * ControllerProcessor:637\n * @param session\n * @param index\n */\nasync function readMaxPackageSize(session: SessionAPI, index: number): Promise<number> {\n  const req = new Request(1);\n  req.address = 6;\n  req.destination = index;\n  const res = await session.connection.trySend(req);\n  if (res && res.data[0] === 0xa8) {\n    const req1 = new Request(2);\n    req1.address = 7;\n    const res1 = await session.connection.trySend(req1);\n    if (res1) return decodeUIntLE(res1);\n  }\n  return 256;\n}\n\nasync function readOptional<T>(read: () => Promise<T>, fallback: T): Promise<T> {\n  try {\n    return await read();\n  } catch (e) {\n    if (e instanceof TimeoutError) return fallback;\n    throw e;\n  }\n}\n\nasync function readDeviceInfo(session: SessionAPI, index: number): Promise<DeviceInfo | null> {\n  try {\n    const model = await session.tryReadControllerModelId(index);\n    if (!model || model.ack !== ErrorType.Succeeded) return null;\n    const deviceInfo: DeviceInfo = {\n      model: decodeUIntLE(model),\n      mac: [...(await readOptional(() => session.ReadControllerSnHigh(index), Buffer.alloc(0)))]\n        .map((byte) => byte.toString(16).padStart(2, '0'))\n        .join(':'),\n      maxPackageSize: await readMaxPackageSize(session, index),\n      companyId: await readOptional(() => session.ReadCompanyID(index), 0),\n      audioControl: await readOptional(() => session.ReadAudioControl(index), 0),\n      dviSelect: await readOptional(() => session.ReadDviSelect(index), 0),\n      hdEnable:\n        (await readOptional(() => session.ReadHDEnable(index), HDEnableModeEnum.Bit8)) ||\n        HDEnableModeEnum.Bit8,\n      videoSelect:\n        (await readOptional(() => session.ReadDviMode(index), 0)) === 90\n          ? VedioSelectModeEnum.Manual\n          : VedioSelectModeEnum.Auto,\n      fieldRate: 60,\n      portCount: 2,\n    };\n\n    /**\n     * ControllerProcessor:604\n     */\n    if (deviceInfo.model !== NSCardTypeEnum.FunctionCard) {\n      const req = new Request(88);\n      req.address = 0x1400_0000;\n      const res = await session.connection.trySend(req);\n      if (res && res.ack === 0 && res.data[0] === 0xa8) {\n        const len = res.data[17];\n        deviceInfo.name = res.data.slice(18, 18 + len).toString();\n      }\n    }\n    if (!deviceInfo.name) deviceInfo.name = GetDeviceTypeLanguage(deviceInfo.model);\n    deviceInfo.portCount = GetPortNumber(deviceInfo.model);\n    return deviceInfo;\n  } catch (e) {\n    if (!(e instanceof TimeoutError)) throw e;\n    return null;\n  }\n}\n\n/**\n * Nova.LCT.Message.Server.ControllerProcessor\n * ControllerProcessor::FindEquipment\n * @param session\n */\nexport default async function enumerateDevices(session: SessionAPI): Promise<DeviceInfo[]> {\n  const devices: DeviceInfo[] = [];\n  session.pushTimeout(1500);\n  try {\n    const destination = 255;\n    await session.SetSortOrder(destination, true, 0);\n    for (let i = 0; ; i += 1) {\n      const info = await readDeviceInfo(session, i);\n      if (!info) break;\n      devices.push(info);\n    }\n  } finally {\n    session.popTimeout();\n  }\n  return devices;\n}\n","import { LEDDisplyTypeEnum } from '@novastar/native/LEDDisplyType';\nimport { ScreenDataInSoftSpace } from '@novastar/native/ScreenDataInSoftSpace';\nimport { UInt32, UInt8 } from '@novastar/native/common';\nimport sortBy from 'lodash/sortBy';\n\n/**\n * ScreenInfoAccessor:NewSoftSpaceReadCompeleteCallBack\n */\nexport default function packAndSortCabinets(\n  screenList: ScreenDataInSoftSpace[],\n  index: number,\n): ScreenDataInSoftSpace[] {\n  return sortBy(\n    Object.values(\n      screenList.reduce<Record<string, ScreenDataInSoftSpace>>((acc, screen) => {\n        const copy: ScreenDataInSoftSpace = { ...screen };\n        if (!copy.UUID) throw new TypeError('Unknown screen UUID');\n        switch (copy.ScrType) {\n          case LEDDisplyTypeEnum.SimpleSingleType:\n            if (UInt8.is(index)) copy.DeviceID = index;\n            break;\n          case LEDDisplyTypeEnum.StandardType:\n          case LEDDisplyTypeEnum.ComplexType:\n            copy.CabinetInDevice = copy.CabinetInDevice?.map(({ DevID, ...cabinet }) => ({\n              ...cabinet,\n              DevID: DevID !== 255 && UInt32.is(index) ? index : DevID,\n            }));\n            break;\n          default:\n            throw new TypeError('Unknown screen type');\n        }\n        const { [copy.UUID]: prev, ...other } = acc;\n        if (prev && copy.CabinetInDevice) {\n          if (!prev.CabinetInDevice) prev.CabinetInDevice = copy.CabinetInDevice;\n          else prev.CabinetInDevice.push(...copy.CabinetInDevice);\n        }\n        return { [copy.UUID]: prev ?? copy, ...other };\n      }, {}),\n    ).map(({ CabinetInDevice: cabs, ...screen }) => ({\n      CabinetInDevice: cabs && sortBy(cabs, ['YPos', 'XPos']),\n      ...screen,\n    })),\n    'ScreenIndex',\n  );\n}\n","import { LEDDisplyTypeEnum } from '@novastar/native/LEDDisplyType';\nimport { ScreenDataInSoftSpace } from '@novastar/native/ScreenDataInSoftSpace';\nimport sortBy from 'lodash/sortBy';\n\n/**\n * Nova.LCT.GigabitSystem.CommonInfoAccessor.dll\n *\n * Nova.LCT.GigabitSystem.CommonInfoAccessor::NewScreenDataConvertor::GetDeviceScreenData\n * @param screens\n */\nexport default function splitScreensByDevice(\n  screens: ScreenDataInSoftSpace[],\n): ScreenDataInSoftSpace[][] {\n  return sortBy(\n    Object.entries(\n      screens.reduce<Record<number, ScreenDataInSoftSpace[]>>((acc, scr) => {\n        switch (scr.ScrType) {\n          case LEDDisplyTypeEnum.SimpleSingleType: {\n            if (typeof scr.DeviceID !== 'number') throw new TypeError('Invalid DeviceID');\n            const { [scr.DeviceID]: prev, ...other } = acc;\n            return { [scr.DeviceID]: [...prev, scr], ...other } as Record<\n              number,\n              ScreenDataInSoftSpace[]\n            >;\n          }\n          case LEDDisplyTypeEnum.StandardType:\n          case LEDDisplyTypeEnum.ComplexType: {\n            const ids =\n              scr.CabinetInDevice?.map(({ DevID }) => DevID).filter((DevID) => DevID !== 255) ?? [];\n            return (scr.CabinetInDevice ?? []).reduce<Record<number, ScreenDataInSoftSpace[]>>(\n              (res, cab) => {\n                const key: number = (cab.DevID !== 255 ? cab.DevID : ids?.[0]) ?? 0;\n                const { [key]: prev, ...other } = res;\n                if (!prev)\n                  return {\n                    [key]: [\n                      {\n                        ...scr,\n                        CabinetInDevice: [cab],\n                      },\n                    ],\n                    ...other,\n                  };\n                const copy = [...prev];\n                const found = copy.findIndex((item) => item.UUID === scr.UUID);\n                if (found !== -1) {\n                  const [item] = copy.splice(found, 1);\n                  copy.splice(found, 0, {\n                    ...item,\n                    CabinetInDevice: item.CabinetInDevice ? [...item.CabinetInDevice, cab] : [cab],\n                  });\n                } else {\n                  copy.push({\n                    ...scr,\n                    CabinetInDevice: [cab],\n                  });\n                }\n                return {\n                  [key]: copy,\n                  ...other,\n                };\n              },\n              acc,\n            );\n          }\n          default:\n            throw new TypeError('Invalid screen type');\n        }\n      }, {}),\n    ),\n    ([index]) => index,\n  ).map(([_, value]) => value);\n}\n","/* eslint-disable no-bitwise */\nimport { Duplex } from 'stream';\n\nimport {\n  Connection,\n  decodeUIntLE,\n  delay,\n  DeviceType,\n  ErrorType,\n  type Packet,\n  Request,\n  series,\n} from '@novastar/codec';\nimport AddressMapping from '@novastar/native/AddressMapping';\nimport { BaudRateTypeEnum } from '@novastar/native/BaudRateType';\nimport { LEDDisplyTypeEnum } from '@novastar/native/LEDDisplyType';\nimport { PortScanBoardInfo } from '@novastar/native/PortScanBoardInfo';\nimport type { ScanBoardProperty } from '@novastar/native/ScanBoardProperty';\nimport { ScreenDataInSoftSpace } from '@novastar/native/ScreenDataInSoftSpace';\nimport type { SenderModulationInfo } from '@novastar/native/SenderModulationInfo';\nimport type { SenderRedundancyInfo } from '@novastar/native/SenderRedundancyInfo';\nimport { SimpleLEDDisplayInfo } from '@novastar/native/SimpleLEDDisplayInfo';\nimport SoftwareSpaceBaseAddress from '@novastar/native/SoftwareSpaceBaseAddress';\nimport { TestModeEnum } from '@novastar/native/TestMode';\nimport { VirtualModeTypeEnum } from '@novastar/native/VirtualModeType';\nimport { makeStruct, UInt16 } from '@novastar/native/common';\nimport debugFactory from 'debug';\nimport { isLeft } from 'fp-ts/Either';\nimport * as t from 'io-ts';\nimport { PathReporter } from 'io-ts/PathReporter';\nimport range from 'lodash/range';\n\nimport { isValidScanBdProp, isValidStandardLedModuleProp } from './CommonCalculator';\nimport ConfigurationError from './ConfigurationError';\nimport { GetSmartMode, IsSystemController } from './CustomTransform';\nimport { DeviceInfo } from './DeviceInfo';\nimport { DviScreenConfigInfo, DviScreenInfoFlag } from './DviScreenConfigInfo';\nimport {\n  FILE_COMPRESS_AREA_START_ADDR,\n  FileInfoObject,\n  FileInfoObjectList,\n  ScreenFileType,\n  ScreenFileVersion,\n} from './FileInfo';\nimport GetScreenPortAddrInfo from './GetScreenPortAddrInfo';\nimport GetScreenSenderAddrInfo from './GetScreenSenderAddrInfo';\nimport { GetAutoRefreshRateBytesSeq, SetVariousScanBdRefreshRate } from './HWAccessorCalculator';\nimport { HWStatus } from './HWStatus';\nimport {\n  decodeModulationInfo,\n  encodeModulationInfo,\n  ModulationInfoHeader,\n  SenderModulationFlag,\n} from './ModulationInfo';\nimport {\n  decodeRedundancyInfo,\n  encodeRedundancyInfo,\n  ReduFlag,\n  RedundancyInfo,\n} from './RedundancyInfo';\nimport { ScreenConfigInfo } from './ScreenConfigInfo';\nimport Session, { SessionAPI } from './Session';\nimport {\n  ParamSize,\n  SoftwareSpaceHeader,\n  SoftwareSpaceHeaderFlag,\n  SoftwareSpaceHeaderVersion,\n} from './SoftwareSpaceHeader';\nimport {\n  AllowedNames,\n  crc16,\n  crc8,\n  isHorizontalConnection,\n  isLeftConnection,\n  isSimpleScreen,\n  isTopConnection,\n  itFirstNotNull,\n  LEDDisplayInfo,\n  minimax,\n  pack,\n  unpack,\n} from './common';\nimport { decodeScreenConfig } from './configs';\nimport convertLEDDisplayInfoToScreenDataInSoftSpace from './convertLEDDisplayInfoToScreenDataInSoftSpace';\nimport convertScreenDataInSoftSpaceToLEDDisplayInfo from './convertScreenDataInSoftSpaceToLEDDisplayInfo';\nimport enumerateDevices from './enumerator';\nimport { getScreenLocation } from './getScreenLocation';\nimport packAndSortCabinets from './packAndSortCabinets';\nimport splitScreensByDevice from './splitScreensByDevice';\n\nconst debug = debugFactory('novastar:screen');\nexport const AllSenders = 0xff;\nexport const AllPorts = 0xff;\nexport const AllScanBoards = 0xffff;\n\n// const DVIDataVer = 1001;\n// const ScrAdjustParamsVer = 1002;\n/**\n * RedundancyInfoAccessor\n */\n// const ReduHeaderInfoLen = 10;\n/**\n * SenderModulationInfoAccessor\n */\n\nconst ParamAddress = 0x0500_0200;\nconst FileInfoCompressedAddress = 0x0500_0400;\n\nconst ScreenDataInSoftSpaceList = t.type({\n  ScreenDataInSoftSpace: t.array(ScreenDataInSoftSpace),\n});\n\ntype ConsolidatedResult = null | boolean;\n\nconst consolidateResults = (results: (ErrorType | null)[]): ConsolidatedResult =>\n  results.every((res) => res == null) ? null : results.every((res) => res === ErrorType.Succeeded);\n\nexport type BrightnessRGBV = {\n  overall: number;\n  red: number;\n  green: number;\n  blue: number;\n  vRed: number;\n};\n\ntype ReadFunction<T> = (SenderIndex: number, PortIndex: number, ScanIndex: number) => Promise<T>;\n\ntype WriteFunction<T> = (\n  SenderIndex: number,\n  PortIndex: number,\n  ScanIndex: number,\n  broadcast: boolean,\n  value: T,\n) => Promise<void>;\n\ntype ReadNames<T = number | Buffer> = AllowedNames<SessionAPI, ReadFunction<T>>;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype WriteNames<T = any> = AllowedNames<SessionAPI, WriteFunction<T>>;\n\ntype FilterHasTry<T> = {\n  [Key in keyof T]: Key extends string ? (`try${Key}` extends keyof T ? Key : never) : never;\n};\n\ntype ValueType<T> = T extends WriteFunction<infer V> ? V : never;\n\ntype ValueTypeFromName<N extends WriteNames> = ValueType<SessionAPI[N]>;\n\n/**\n * Factory method for creating an asynchronous generator function to sequentially read data from\n * all receiving cards of the specified screen.\n * @template T Return type\n * @param screen Selected screen\n */\nexport type ScreenReadAsyncGenerator<T> = (screen?: number) => AsyncGenerator<T | null>;\n\nexport type ScreenWriter<T> = (value: T, screen?: number) => Promise<ConsolidatedResult>;\n\nconst firstCreator =\n  <T>(genFactory: ScreenReadAsyncGenerator<T>) =>\n  (screen?: number): Promise<T | null> => {\n    const it = genFactory(screen);\n    return itFirstNotNull(it);\n  };\n\ntype Codec<I, O = I> = (value: I) => O;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst identity = <T>(value: any): T => value;\n\n/*\ntype AsyncGeneratorType<T> = T extends AsyncGenerator<infer R> ? R : never;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype GeneratorFactory = (...args: ReadonlyArray<any>) => AsyncGenerator<any>;\n\ntype FirstWrapper<T extends GeneratorFactory> = (\n  ...args: Parameters<T>\n) => Promise<AsyncGeneratorType<ReturnType<T>> | null>;\n\ntype FirstWrapperCreator = <T extends GeneratorFactory>(gen: T) => FirstWrapper<T>;\n\nconst first: FirstWrapperCreator = gen =>\n  async (...args) => {\n    const generator = gen(...args);\n    for await (const res of generator) {\n      if (res !== null) return res;\n    }\n    return null;\n  };\n*/\n\nconst stringConverter = (res: Packet): string => {\n  const end = Math.max(0, res.data.indexOf(0));\n  return res.data.toString('utf-8', 0, end);\n};\n\n// noinspection JSMethodCanBeStatic,JSUnusedGlobalSymbols\n/**\n *\n */\nexport default class ScreenConfigurator {\n  /**\n   * Current session\n   */\n  readonly session: SessionAPI;\n\n  /**\n   * Find all connected devices in the current session/connection, read screen configurations.\n   */\n  reload: () => Promise<void> = this.queue(this.reloadImpl);\n\n  /**\n   * Save screen configurations to devices.\n   */\n  save: () => Promise<void> = this.queue(this.saveImpl);\n\n  ReadHWStatus: ScreenReadAsyncGenerator<ReturnType<HWStatus['toJSON']>> = this.createReadGenerator(\n    'ReadAllStatus',\n    (res) => new HWStatus(res.data).toJSON(),\n  );\n\n  ReadReceivingCardMCURemarks = this.createReadGenerator(\n    'ReadScanner_McuProgramRemarks',\n    stringConverter,\n  );\n\n  ReadReceivingCardFPGARemarks = this.createReadGenerator(\n    'ReadScanner_FPGAProgramRemarks',\n    stringConverter,\n  );\n\n  ReadChipType = this.createReadGenerator('ReadDriverType', decodeUIntLE);\n\n  ReadFirstChipType = firstCreator(this.ReadChipType);\n\n  WriteBrightness: ScreenWriter<number> = this.createWriter('SetGlobalBrightness', (percent) =>\n    Math.ceil((minimax(0, 100, percent) * 255) / 100),\n  );\n\n  ReadBrightness: ScreenReadAsyncGenerator<number> = this.createReadGenerator(\n    'ReadGlobalBrightness',\n    (res) => Math.round((decodeUIntLE(res) * 10000) / 255) / 100,\n  );\n\n  ReadFirstBrightness = firstCreator(this.ReadBrightness);\n\n  WriteDisplayMode: ScreenWriter<TestModeEnum> = this.createWriter('SetSelfTestMode');\n\n  ReadDisplayMode = this.createReadGenerator('ReadSelfTestMode', decodeUIntLE);\n\n  ReadFirstDisplayMode = firstCreator(this.ReadDisplayMode);\n\n  ReadGamma: ScreenReadAsyncGenerator<number> = this.createReadGenerator(\n    'ReadGamma',\n    (res) => decodeUIntLE(res) / 10,\n  );\n\n  ReadFirstGamma = firstCreator(this.ReadGamma);\n\n  ReadRGBVBrightness: ScreenReadAsyncGenerator<BrightnessRGBV> = this.createReadGenerator(\n    'ReadAllBrightnessInfo',\n    (res) => {\n      const [overall, red, green, blue, vRed] = res.data;\n      return {\n        overall,\n        red,\n        green,\n        blue,\n        vRed,\n      } as BrightnessRGBV;\n    },\n  );\n\n  ReadFirstRGBVBrightness = firstCreator(this.ReadRGBVBrightness);\n\n  WriteGamma: ScreenWriter<number> = this.createWriter('SetGamma', (gamma) => (gamma * 10) & 0xff);\n\n  ReadFirstFuncCardLightSensor = firstCreator(this.ReadAllFuncCardLightSensor.bind(this));\n\n  ReadFuncCardLightSensor = this.queue(this.readFuncCardLightSensorImpl);\n\n  #ready = Promise.resolve();\n\n  #devices: DeviceInfo[] = [];\n\n  #screens: LEDDisplayInfo[] = [];\n\n  #reduList: Required<SenderRedundancyInfo>[] = [];\n\n  #modulations: Required<SenderModulationInfo>[] = [];\n\n  constructor(connection: Connection<Duplex>);\n\n  constructor(session: SessionAPI);\n\n  constructor(arg: SessionAPI | Connection<Duplex>) {\n    this.session = (arg instanceof Connection ? new Session(arg) : arg) as SessionAPI;\n    // this.session.Distribute_SetRebootAppFpgaProgram(0,0,0,true,0);\n  }\n\n  get devices(): ReadonlyArray<Readonly<DeviceInfo>> {\n    return this.#devices;\n  }\n\n  get screens(): ReadonlyArray<Readonly<LEDDisplayInfo>> {\n    return this.#screens;\n  }\n\n  get reduList(): ReadonlyArray<Readonly<Required<SenderRedundancyInfo>>> {\n    return this.#reduList;\n  }\n\n  get modulations(): ReadonlyArray<Readonly<Required<SenderModulationInfo>>> {\n    return this.#modulations;\n  }\n\n  reset(): void {\n    this.#devices = [];\n    this.#screens = [];\n    this.#reduList = [];\n    this.#modulations = [];\n  }\n\n  /**\n   * FormMain\n   */\n  GetScreenAllPort(\n    screen: number,\n    toRead = false,\n  ): {\n    SenderIndex: number;\n    PortIndex: number;\n    ScanIndex: number;\n    SlaveSenderIndex?: number;\n    SlavePortIndex?: number;\n  }[] {\n    if (!toRead && (screen === -1 || this.screens.length === 0))\n      return [\n        {\n          SenderIndex: AllSenders,\n          PortIndex: AllPorts,\n          ScanIndex: AllScanBoards,\n        },\n      ];\n    if (this.screens.length === 0) return [];\n    const scr = this.screens[screen];\n    if (!scr) throw new TypeError(`Invalid screen index: ${screen}`);\n    const list = GetScreenPortAddrInfo(scr).flatMap(\n      ({ SenderIndex, PortIndex, MinConnectIndex, LoadScannerCount }) => {\n        const { SlaveSenderIndex, SlavePortIndex } =\n          this.reduList.find(\n            (item) => item.MasterPortIndex === PortIndex && item.MasterSenderIndex === SenderIndex,\n          ) ?? {};\n        return toRead\n          ? range(MinConnectIndex, MinConnectIndex + LoadScannerCount).map((ScanIndex) => ({\n              SenderIndex,\n              PortIndex,\n              SlaveSenderIndex,\n              SlavePortIndex,\n              ScanIndex,\n            }))\n          : {\n              SenderIndex,\n              PortIndex,\n              SlaveSenderIndex,\n              SlavePortIndex,\n              ScanIndex: 0xffff,\n            };\n      },\n    );\n\n    return toRead ? list.filter(({ SenderIndex }) => SenderIndex !== AllSenders) : list;\n  }\n\n  async WriteRGBVBrightness(\n    { overall, red, green, blue, vRed }: BrightnessRGBV,\n    screen = 0,\n  ): Promise<null | boolean> {\n    const addresses = this.GetScreenAllPort(screen);\n    const value = Buffer.from([overall, red, green, blue, vRed]);\n    if (addresses.length === 0) {\n      const req = new Request(value, true);\n      req.address = AddressMapping.AllBrightnessInfoAddr;\n      req.deviceType = DeviceType.ReceivingCard;\n      req.destination = AllSenders;\n      req.port = AllPorts;\n      req.rcvIndex = AllScanBoards;\n      await this.session.connection.send(req);\n      return true;\n    }\n    const results = await series(addresses, async (address) => {\n      const req = new Request(value);\n      req.address = AddressMapping.AllBrightnessInfoAddr;\n      req.deviceType = DeviceType.ReceivingCard;\n      req.destination = address.SenderIndex;\n      req.port = address.PortIndex;\n      req.rcvIndex = address.ScanIndex;\n      const res = await this.session.connection.trySend(req);\n      return res && res.ack;\n    });\n    return consolidateResults(results);\n  }\n\n  async FactoryReset(screen = 0): Promise<ErrorType | null> {\n    this.session.pushTimeout(60000);\n    try {\n      return this.session.trySetReturnFactoryValues(screen, 0);\n    } finally {\n      this.session.popTimeout();\n    }\n  }\n\n  async SendRemoveDeadPixels(): Promise<boolean | null> {\n    const req = new Request([2]);\n    req.address = 0x0100_009e;\n    req.deviceType = DeviceType.ReceivingCard;\n    req.destination = AllSenders;\n    req.port = AllPorts;\n    req.rcvIndex = AllScanBoards;\n    const res = await this.session.connection.trySend(req);\n    return res && res.ack === ErrorType.Succeeded;\n  }\n\n  async ReadHasDVISignalIn(device = 0): Promise<boolean | null> {\n    const res = await this.session.tryReadIsHasDVI(device);\n    return res && res.ack === 0 && res.data[0] !== 0;\n  }\n\n  async *ReadAllFuncCardLightSensor(): AsyncGenerator<number | null> {\n    const { portCount = 4 } = this.devices[0] ?? [];\n    for (let PortIndex = 0; PortIndex < portCount; PortIndex += 1) {\n      yield this.ReadFuncCardLightSensor(0, PortIndex, 0);\n    }\n  }\n\n  protected async readFuncCardLightSensorImpl(\n    senderIndex = 0,\n    portIndex = 0,\n    cardIndex = 0,\n  ): Promise<number | null> {\n    const data = Buffer.from([\n      cardIndex,\n      BaudRateTypeEnum.BT_115200bps,\n      0,\n      0,\n      0x55,\n      0xaa,\n      1,\n      2,\n      0x80,\n      0xff,\n      0x81,\n    ]);\n    const req = new Request(data);\n    req.address = AddressMapping.FuncCard_WriteOutDeviceAddr;\n    req.deviceType = DeviceType.FunctionCard;\n    req.destination = senderIndex;\n    req.port = portIndex;\n    req.rcvIndex = cardIndex;\n    let res = await this.session.connection.trySend(req);\n    if (!res || res.ack !== 0) return null;\n    res = await this.session.tryFuncCard_ReadOutDeviceValue_1(senderIndex, portIndex, cardIndex);\n    if (\n      !res ||\n      res.ack !== 0 ||\n      res.data.length !== 5 ||\n      res.data[0] !== 1 ||\n      res.data[1] !== 2 ||\n      crc8(res.data.slice(1, -1)) !== res.data[4] ||\n      (res.data[2] & 0x80) === 0\n    )\n      return null;\n    return (((res.data[2] & 0x7f) << 8) + res.data[3]) * 2;\n  }\n\n  protected createReadGenerator<N extends ReadNames, T>(\n    name: N,\n    decoder: (res: Packet) => T,\n  ): ScreenReadAsyncGenerator<T> {\n    return {\n      async *[name](this: ScreenConfigurator, screen = 0): AsyncGenerator<Awaited<T> | null> {\n        const addresses = this.GetScreenAllPort(screen, true);\n        for (const address of addresses) {\n          const { SenderIndex, PortIndex, ScanIndex } = address;\n          yield this.session[`try${name}`](SenderIndex, PortIndex, ScanIndex).then((res) =>\n            !res || res.ack !== 0 ? null : decoder(res),\n          );\n        }\n      },\n    }[name].bind(this);\n  }\n\n  protected createWriter<N extends FilterHasTry<SessionAPI>[WriteNames], I = ValueTypeFromName<N>>(\n    name: N,\n    encoder: Codec<I, ValueTypeFromName<N>> = identity,\n  ): ScreenWriter<I> {\n    return {\n      async [name](this: ScreenConfigurator, value: I, screen = -1): Promise<ConsolidatedResult> {\n        const addresses = this.GetScreenAllPort(screen);\n        // debug(`addresses: ${JSON.stringify(addresses)}`);\n        const val = encoder(value) as never;\n        const results = await series(addresses, async ({ SenderIndex, PortIndex, ScanIndex }) => {\n          if (name === 'SetGlobalBrightness') {\n            try {\n              await this.session[`${name}`](SenderIndex, PortIndex, ScanIndex, true, val);\n            } catch (err) {\n              console.error(\n                `Failed to set brightness for sender ${SenderIndex} port ${PortIndex}:`,\n                err,\n              );\n              return null;\n            }\n            return null;\n          }\n          return this.session[`try${name}`](SenderIndex, PortIndex, ScanIndex, val);\n        });\n        return consolidateResults(results);\n      },\n    }[name].bind(this);\n  }\n\n  protected queue<A, R>(\n    func: (this: ScreenConfigurator, ...args: A[]) => Promise<R>,\n  ): (...args: A[]) => Promise<R> {\n    return (...args) =>\n      new Promise((resolve, reject) => {\n        this.#ready = this.#ready\n          .finally()\n          .then(() => func.apply(this, args).then(resolve, reject));\n      });\n  }\n\n  /**\n   * ScreenInfoAccessor::LoadDviScreenInfoFromHW\n   * NovaLCT::FormMain::OnEquipmentChangeEvent\n   */\n  protected async reloadImpl(): Promise<void> {\n    this.reset();\n    this.#devices = await enumerateDevices(this.session);\n    debug(`devices: ${JSON.stringify(this.devices)}`);\n    // if (this.devices.length > 1) throw new Error('An unexpected number of devices!');\n    await series(this.devices, async ({ maxPackageSize, model }, index): Promise<void> => {\n      if (!IsSystemController(model)) return;\n      this.session.connection.maxLength = maxPackageSize;\n      await this.readBase(index);\n      await this.readRedundancy(index);\n      await this.readModulation(index);\n    });\n  }\n\n  // TODO: Not Impl\n  /**\n   * Nova.LCT.GigabitSystem.CommonInfoAccessor.dll\n   *\n   * Nova.LCT.GigabitSystem.CommonInfoAccessor::ScreenInfoAccessor::SaveDviScreenInfoToHW\n   * @protected\n   */\n  protected async saveImpl(): Promise<void> {\n    // Only one device expected\n    // SetScreenConfigFalg\n    await series(this.devices, async ({ maxPackageSize }, index) => {\n      this.session.connection.maxLength = maxPackageSize;\n      await this.session.SetSender_ScreenConfigFlagSpace(index, false, [85, 0]);\n    });\n    const items = splitScreensByDevice(\n      this.screens.map(convertLEDDisplayInfoToScreenDataInSoftSpace),\n    );\n    if (items.length !== this.devices.length) throw new Error('Invalid number of devices');\n    // NewSoftSpaceBasicAccessor::CompressFile\n    await series(items, async (screens, index) => {\n      const src = JSON.stringify(\n        ScreenDataInSoftSpaceList.encode({\n          ScreenDataInSoftSpace: screens,\n        }),\n      );\n      const [props, fileCompressDataArea] = await pack(src);\n      const info: FileInfoObject = {\n        FileType: ScreenFileType,\n        Version: ScreenFileVersion,\n        Addr: FILE_COMPRESS_AREA_START_ADDR,\n        SrcLength: src.length,\n        DestLength: fileCompressDataArea.length,\n        DecompressProps: props,\n        CheckSum: crc16(fileCompressDataArea, 0x55aa),\n      };\n      // NewSoftSpaceBasicAccessor::CompressFileInfo\n      const srcInfo = Buffer.from(\n        JSON.stringify({\n          SectionFormat: [info],\n        }),\n      );\n      const [infoProps, fileInfoCompressDataArea] = await pack(srcInfo);\n      const nonCompressDataArea = Buffer.alloc(ParamSize);\n      nonCompressDataArea.writeUInt16LE(infoProps.length);\n      nonCompressDataArea.write(infoProps, 2, 'binary');\n      // NewSoftSpaceBasicAccessor::ConstructSpaceHeader\n      const ss = new SoftwareSpaceHeader();\n      ss.header = SoftwareSpaceHeaderFlag;\n      ss.version = SoftwareSpaceHeaderVersion;\n      ss.paramSize = ParamSize;\n      ss.paramCRC = crc16(nonCompressDataArea, 0x55aa);\n      ss.compressedSize = fileInfoCompressDataArea.length;\n      ss.fileInfoSize = srcInfo.length;\n      ss.fileInfoCRC = crc16(fileInfoCompressDataArea, 0x55aa);\n      const raw = SoftwareSpaceHeader.raw(ss);\n      ss.crc = crc16(raw.slice(SoftwareSpaceHeader.getOffsetOf('crc') + 2), 0x55aa);\n      const spaceData = Buffer.alloc(0x2000 + fileCompressDataArea.length);\n      raw.copy(spaceData);\n      nonCompressDataArea.copy(spaceData, 512);\n      fileInfoCompressDataArea.copy(spaceData, 1024);\n      fileCompressDataArea.copy(spaceData, 0x2000);\n      await this.WriteData(index, AddressMapping.Sender_SoftwareSpaceAddr, spaceData);\n    });\n  }\n\n  protected async saveRedundancy(index: number): Promise<void> {\n    const data = encodeRedundancyInfo(this.reduList);\n    await this.session.SetSender_SoftwareSpace(\n      index,\n      false,\n      data,\n      data.length,\n      SoftwareSpaceBaseAddress.REDUNDANCY_BASE_ADDRESS,\n    );\n  }\n\n  // ScannerPropertyAccessor\n  protected async sendParametersToScanBoardGroupImpl(\n    scanBdProperty: Readonly<ScanBoardProperty>,\n    isSmartMode = false,\n    _isSmartNoSend = true,\n    senderIndex = 255,\n    portIndex = 255,\n    scanBdIndex = 0xffff,\n  ): Promise<void> {\n    if (!isValidScanBdProp(scanBdProperty)) throw new TypeError('Invalid ScanBoardProperty');\n    const copy = { ...scanBdProperty };\n    const { StandardLedModuleProp, Support22BitModel } = scanBdProperty;\n    if (!isValidStandardLedModuleProp(StandardLedModuleProp))\n      throw new TypeError('Invalid StandardLedModuleProp');\n    const { ScreenDriveType, DriverChipType } = StandardLedModuleProp;\n    // ChipDataMaker.GetChipInfo <- skipped (2053)\n    if (!isSmartMode) {\n      await this.session.SetSelfTestMode(\n        senderIndex,\n        portIndex,\n        scanBdIndex,\n        false,\n        TestModeEnum.ParaFreeze,\n      );\n      await delay(1000);\n    }\n    // ScannerPropertyDataProcess.Instance.ScanBdPropertyExchanged <- skipped\n    if (Support22BitModel) {\n      await this.session.SetScannerxBitEnable(senderIndex, portIndex, scanBdIndex, false, 100);\n      await delay(100);\n    }\n    const autoRefreshRates = GetAutoRefreshRateBytesSeq(\n      SetVariousScanBdRefreshRate(scanBdProperty, isSmartMode),\n    );\n    await this.session.SetScanner_AutoRefreshRate(\n      senderIndex,\n      portIndex,\n      scanBdIndex,\n      false,\n      autoRefreshRates,\n    );\n    const smartMode = GetSmartMode(isSmartMode, ScreenDriveType, DriverChipType);\n    await this.session.SetSmartSetMode(senderIndex, portIndex, scanBdIndex, false, smartMode);\n    copy.IsEnableOtherRefreshNumParams = !isSmartMode;\n  }\n\n  /**\n   * Nova.LCT.GigabitSystem.LEDConfigAccessor\n   *\n   * Nova.LCT.GigabitSystem.HWConfigAccessor::PollingScannerParam\n   *\n   * ScannerPropertyAccessor::StartPollingScannerAccessor\n   * @protected\n   */\n  protected async ExecuteCheck(req: Readonly<Request>): Promise<void> {\n    const { destination, port, rcvIndex } = req;\n    let attempts = 20;\n    while (attempts > 0) {\n      // ReadRegisterState\n      // eslint-disable-next-line no-await-in-loop\n      const res = await this.session.tryReadScannerFunctionInfo(destination, port, rcvIndex);\n      if (res) return;\n      attempts -= 1;\n      // eslint-disable-next-line no-await-in-loop\n      if (attempts) await delay(400);\n    }\n    throw new Error('Hardware timeout');\n  }\n\n  /**\n   * Nova.LCT.GigabitSystem.CommonInfoAccessor, RedundancyInfoAccessor\n   */\n  private async readRedundancy(index: number): Promise<void> {\n    const info = new RedundancyInfo(\n      await this.session.ReadSender_SoftwareSpace(\n        index,\n        RedundancyInfo.baseSize,\n        SoftwareSpaceBaseAddress.REDUNDANCY_BASE_ADDRESS,\n      ),\n    );\n    debug(`redundancyHeader: ${info.header} (${info.length})`);\n    if (info.header !== ReduFlag || info.length === 0) return;\n    const data = await this.session.ReadSender_SoftwareSpace(\n      index,\n      RedundancyInfo.baseSize + info.length,\n      SoftwareSpaceBaseAddress.REDUNDANCY_BASE_ADDRESS,\n    );\n    const reduList = decodeRedundancyInfo(data);\n    this.#reduList = index === 0 ? reduList : this.#reduList.concat(reduList);\n    debug(`redundancy: ${JSON.stringify(this.reduList)}`);\n  }\n\n  private async readModulation(index = 0): Promise<void> {\n    const data = await this.session.ReadSender_SoftwareSpace(\n      index,\n      ModulationInfoHeader.baseSize,\n      SoftwareSpaceBaseAddress.MODULATION_BASE_ADDRESS,\n    );\n    const header = new ModulationInfoHeader(data);\n    if (header.header !== SenderModulationFlag || header.length === 0) return;\n    const total = header.length + ModulationInfoHeader.baseSize;\n    const buf = await this.session.ReadSender_SoftwareSpace(\n      0,\n      total,\n      SoftwareSpaceBaseAddress.MODULATION_BASE_ADDRESS,\n    );\n    const modulations = decodeModulationInfo(buf);\n    this.#modulations = index === 0 ? modulations : this.#modulations.concat(modulations);\n    debug(`modulations: ${JSON.stringify(this.modulations)}`);\n  }\n\n  private async saveModulation(index: number): Promise<void> {\n    const data = encodeModulationInfo(this.modulations);\n    await this.session.SetSender_SoftwareSpace(\n      index,\n      false,\n      data,\n      data.length,\n      SoftwareSpaceBaseAddress.MODULATION_BASE_ADDRESS,\n    );\n  }\n\n  private async readBase(index: number) {\n    debug(`try readBase:${index}`);\n    const spaceHeader = await this.session.ReadSender_SoftwareSpace(\n      index,\n      512, // HEADER_LENGTH\n      SoftwareSpaceBaseAddress.BASE_ADDRESS,\n    );\n    /**\n     * ScreenInfoAccessor::OnReadSpaceTypeCompleted\n     */\n    const header = spaceHeader.slice(0, 4).toString('ascii');\n    debug(`readBase: ${header}`);\n    switch (header) {\n      case 'NSSD': // after sendConfig;\n        return this.ReadSoftSpaceData(spaceHeader, index);\n      case DviScreenInfoFlag:\n        return this.ReadDviScreenInfo(spaceHeader, index);\n      case '\\x00\\x00\\x00\\x00': // Quick Config\n        return this.ReadSenderScreenConfigInfo(index);\n      default:\n        throw new TypeError('Unknown header type');\n    }\n  }\n\n  /**\n   * Nova.GigabitController.FrmSysConfigMode\n   */\n  private async SetScreenALLWidth(): Promise<boolean | null> {\n    const results = await series(this.screens, (scr) => {\n      const location = getScreenLocation(scr);\n      const senders = GetScreenSenderAddrInfo(scr);\n      return series(senders, ({ SenderIndex }) =>\n        this.session.trySetSenderVideoEnclosingMode(\n          SenderIndex,\n          location.rightBottom.x,\n          location.rightBottom.y,\n        ),\n      );\n    });\n    return consolidateResults(results.flat(1));\n  }\n\n  private async ReadDviScreenInfo(header: Buffer, index: number): Promise<void> {\n    debug(`${DviScreenInfoFlag}: ReadDviScreenInfo`);\n    if (header.length < DviScreenConfigInfo.baseSize)\n      throw new TypeError('Invalid DviScreenConfigInfo header length');\n    const dsci = new DviScreenConfigInfo(header.slice(0, DviScreenConfigInfo.baseSize));\n    const { dviInfoLength, screenInfoLength, adjustInfoLength } = dsci;\n    const data = await this.session.ReadSender_SoftwareSpace(\n      index,\n      DviScreenConfigInfo.baseSize + dviInfoLength + screenInfoLength + adjustInfoLength,\n      SoftwareSpaceBaseAddress.BASE_ADDRESS,\n    );\n    const { screens } = decodeScreenConfig(data);\n    this.#screens = index === 0 ? screens : this.#screens.concat(screens);\n    // if (crc(data, crc(DviScreenConfigInfo.raw(dsci).slice(6), 0)) !== crcInfo)\n    //   throw new Error(`Invalid DviScreenConfigInfo crc`);\n    // [this.#dviInfo, this.#dviVersion] = parseGraphicsDVIPortInfo(data.slice(0, dviInfoLength));\n    // debug(`dviInfo: ${JSON.stringify(this.#dviInfo)}`);\n    // debug(`dviVersion: ${this.#dviVersion}`);\n    // [this.#screens, this.#screenVersion] = parseScreenInfo(\n    //   data.slice(dviInfoLength, dviInfoLength + screenInfoLength)\n    // );\n    // const adjustInfo = parseScreenAdjustInfo(data.slice(dviInfoLength + screenInfoLength));\n    // if (adjustInfo.length > 0) {\n    //   if (adjustInfo.length !== this.screens.length) throw new Error('Invalid adjust info\n    // count'); this.#screens = this.#screens.map(({ ScrAdjustParams, ...other }, i) => ({\n    // ...other, ScrAdjustParams: adjustInfo[i], })); } debug(`screens:\n    // ${JSON.stringify(this.#screens)}`);\n  }\n\n  private async ReadSenderScreenConfigInfo(index: number): Promise<void> {\n    debug('0000: ReadSenderScreenConfigInfo');\n    const res = await this.session.tryReadSender_ScreenConfigSpace(index);\n    if (!res) return;\n    const {\n      Type,\n      ScanBdCols,\n      ScanBdRows,\n      CabinetsPerPort,\n      PixelColsInScanBd,\n      PixelRowsInScanBd,\n      ConnectType,\n      X,\n      Y,\n    } = new ScreenConfigInfo(res.data);\n    switch (Type) {\n      case 1: {\n        if (!ScanBdCols || !ScanBdRows || !CabinetsPerPort) throw new Error('Invalid screen cfg');\n        const total = ScanBdRows * ScanBdCols;\n        const portCount = Math.ceil(total / CabinetsPerPort);\n        if (CabinetsPerPort % (isHorizontalConnection(ConnectType) ? ScanBdCols : ScanBdRows) !== 0)\n          throw new ConfigurationError('Invalid cabinetsPerPort');\n        let portCols: number;\n        let portRows: number;\n        let ports: PortScanBoardInfo[];\n        if (isHorizontalConnection(ConnectType)) {\n          portCols = 1;\n          portRows = portCount;\n          const getRow = (row: number) =>\n            minimax(0, ScanBdRows, isTopConnection(ConnectType) ? row : ScanBdRows - row);\n          const rowsPerPort = CabinetsPerPort / ScanBdCols;\n          ports = range(portCount).map<PortScanBoardInfo>((PortIndex) => {\n            const extremes = [\n              getRow(PortIndex * rowsPerPort),\n              getRow((PortIndex + 1) * rowsPerPort),\n            ];\n            return makeStruct(PortScanBoardInfo, {\n              PortIndex,\n              ConnectType,\n              ScanBdBegColNo: 0,\n              ScanBdEndColNo: ScanBdCols,\n              ScanBdBegRowNo: Math.min(...extremes),\n              ScanBdEndRowNo: Math.max(...extremes),\n            });\n          });\n        } else {\n          portCols = portCount;\n          portRows = 1;\n          const getCol = (col: number) =>\n            minimax(0, ScanBdCols, isLeftConnection(ConnectType) ? col : ScanBdCols - col);\n          const colsPerPort = CabinetsPerPort / ScanBdRows;\n          ports = range(portCount).map<PortScanBoardInfo>((PortIndex) => {\n            const extremes = [\n              getCol(PortIndex * colsPerPort),\n              getCol((PortIndex + 1) * colsPerPort),\n            ];\n            return makeStruct(PortScanBoardInfo, {\n              PortIndex,\n              ConnectType,\n              ScanBdBegRowNo: 0,\n              ScanBdEndRowNo: ScanBdRows,\n              ScanBdBegColNo: Math.min(...extremes),\n              ScanBdEndColNo: Math.max(...extremes),\n            });\n          });\n        }\n        const screens = [\n          makeStruct(SimpleLEDDisplayInfo, {\n            Type: LEDDisplyTypeEnum.SimpleSingleType,\n            PixelColsInScanBd,\n            PixelRowsInScanBd,\n            ScanBdCols,\n            ScanBdRows,\n            PortCols: portCols,\n            PortRows: portRows,\n            SenderIndex: 0,\n            X,\n            Y,\n            VirtualMode: VirtualModeTypeEnum.Disable,\n            PortScanBdInfoList: ports,\n          }),\n        ];\n        this.#screens = index === 0 ? screens : this.#screens.concat(screens);\n        break;\n      }\n      case 3: {\n        if (this.#screens.length === 1) {\n          const [screen] = this.#screens;\n          if (isSimpleScreen(screen) && UInt16.is(X) && UInt16.is(Y)) {\n            screen.X = X;\n            screen.Y = Y;\n          }\n        }\n        break;\n      }\n      case 5:\n        break;\n      default:\n        throw new TypeError('Invalid screen config type');\n    }\n    debug(`screens: ${JSON.stringify(this.screens)}`);\n  }\n\n  private async ReadData(index: number, address: number, length: number): Promise<Buffer> {\n    const req = new Request(length);\n    req.address = address;\n    req.destination = index;\n    const { data } = await this.session.connection.send(req);\n    return data;\n  }\n\n  private async WriteData(index: number, address: number, data: Buffer): Promise<void> {\n    const req = new Request(data);\n    req.address = address;\n    req.destination = index;\n    await this.session.connection.send(req);\n  }\n\n  private async ReadSoftSpaceData(spaceHeader: Buffer, index: number): Promise<void> {\n    debug('NSSD: ReadSoftSpaceData');\n    const ss = new SoftwareSpaceHeader(spaceHeader);\n    if (crc16(spaceHeader.slice(SoftwareSpaceHeader.getOffsetOf('crc') + 2), 0x55aa) !== ss.crc)\n      throw new Error('Invalid space header crc');\n    if (ss.paramSize !== ParamSize) throw new Error('Invalid uncompressedSize');\n    const paramData = await this.ReadData(index, ParamAddress, ss.paramSize);\n    if (ss.paramCRC !== crc16(paramData, 0x55aa)) throw new Error('Param crc error');\n    const fileInfoCompressData = await this.ReadData(\n      index,\n      FileInfoCompressedAddress,\n      ss.compressedSize,\n    );\n    if (ss.fileInfoCRC !== crc16(fileInfoCompressData, 0x55aa))\n      throw new Error('FileInfoCRC error');\n    const fileInfoListV = FileInfoObjectList.decode(\n      JSON.parse(await unpack(paramData.slice(2), ss.fileInfoSize, fileInfoCompressData)),\n    );\n    if (isLeft(fileInfoListV))\n      throw new Error(`Invalid fileInfoList: ${PathReporter.report(fileInfoListV)}`);\n    const fileInfoList = fileInfoListV.right;\n    debug(`fileInfoList: ${JSON.stringify(fileInfoList)}`);\n    // console.log(inspect(fileInfoList, false, null));\n    const screens = (\n      await series(fileInfoList.SectionFormat, async (info): Promise<ScreenDataInSoftSpace[]> => {\n        const fi = await this.ReadData(index, info.Addr, info.DestLength);\n        const list = JSON.parse(await unpack(info.DecompressProps, info.SrcLength, fi));\n        // console.log(inspect(list, false, null));\n        const screenListV = ScreenDataInSoftSpaceList.decode(list);\n        if (isLeft(screenListV)) {\n          console.error(PathReporter.report(screenListV));\n          throw new Error('Invalid screenList');\n        }\n        // console.log('screenList:', inspect(screenListV.right, false, null));\n        return packAndSortCabinets(screenListV.right.ScreenDataInSoftSpace, index);\n      })\n    )\n      .flat(1)\n      .map(convertScreenDataInSoftSpaceToLEDDisplayInfo);\n\n    // console.log('packed:', screensByDevices.length, inspect(screensByDevices, false, null));\n    this.#screens = index === 0 ? screens : this.#screens.concat(screens);\n    debug(`screens: ${JSON.stringify(this.screens)}`);\n    // console.log('screens:', inspect(this.#screens, false, null));\n    // this.screens.forEach((screen, i) => {\n    //   console.log('ports', inspect(GetScreenPortAddrInfo(screen), false, null));\n    //   console.log('scr:', inspect(GetScreenSenderAddrInfo(screen), false, null));\n    //   console.log('all:', inspect(this.GetScreenAllPort(i), false, null));\n    // });\n  }\n}\n","import {\n  isHorizontalConnection,\n  isLeftConnection,\n  isSimpleScreen,\n  isStandardScreen,\n  isTopConnection,\n  LEDDisplayInfo,\n} from './common';\nimport { notEmptyXY } from './getScreenLocation';\n\nexport type CabinetPosition = {\n  column: number;\n  row: number;\n  left: number;\n  top: number;\n  sender: number;\n  port: number;\n  card: number;\n};\n\nconst getCabinetPosition = (\n  screen: LEDDisplayInfo,\n  sender: number,\n  port: number,\n  card: number,\n): CabinetPosition | null => {\n  if (isSimpleScreen(screen)) {\n    if (screen.SenderIndex !== sender) return null;\n    const portInfo = screen.PortScanBdInfoList.find(({ PortIndex }) => PortIndex === port);\n    if (!portInfo) return null;\n    const {\n      ConnectType = 0,\n      ScanBdBegColNo = 0,\n      ScanBdEndColNo = 0,\n      ScanBdBegRowNo = 0,\n      ScanBdEndRowNo = 0,\n    } = portInfo;\n    const cols = ScanBdEndColNo - ScanBdBegColNo;\n    const rows = ScanBdEndRowNo - ScanBdBegRowNo;\n    if (cols === 0 || rows === 0) return null;\n    let [column, row] = isHorizontalConnection(ConnectType)\n      ? [card % cols, Math.floor(card / cols)]\n      : [Math.floor(card / rows), card % rows];\n    if ((row % 2 === 1) === isLeftConnection(ConnectType)) {\n      column = cols - column;\n    }\n    if ((column % 2 === 1) === isTopConnection(ConnectType)) {\n      row = rows - row;\n    }\n    return {\n      sender,\n      port,\n      card,\n      column,\n      row,\n      left: column * screen.PixelColsInScanBd,\n      top: row * screen.PixelRowsInScanBd,\n    };\n  }\n  const list = isStandardScreen(screen)\n    ? screen.ScannerRegionList.filter(notEmptyXY)\n    : screen.ScanBoardRegionInfoList.filter(notEmptyXY);\n  const cabinet = list.find(\n    ({ SenderIndex, PortIndex, ConnectIndex }) =>\n      SenderIndex === sender && PortIndex === port && ConnectIndex === card,\n  );\n  if (!cabinet) return null;\n  const [uniqX, uniqY] = list.reduce(\n    ([xSet, ySet], { X, Y }) => {\n      xSet.add(X);\n      ySet.add(Y);\n      return [xSet, ySet];\n    },\n    [new Set<number>(), new Set<number>()],\n  );\n  const sortedX = [...uniqX.values()].sort();\n  const sortedY = [...uniqY.values()].sort();\n  return {\n    sender,\n    port,\n    card,\n    row: cabinet.RowIndexInScreen ?? sortedY.findIndex((y) => y === cabinet.Y),\n    column: cabinet.ColIndexInScreen ?? sortedX.findIndex((x) => x === cabinet.X),\n    left: cabinet.X ?? 0,\n    top: cabinet.Y ?? 0,\n  };\n};\n\nexport default getCabinetPosition;\n","import type { NcpCabinetConfig } from './NcpConfig';\nconst dataGroupMappingAddress = 0x2800_0000;\nconst pointTableAddress = 0x0400_0000;\nconst scanBoardDataAddress = 0x0200_0000;\nconst highLoadOffset = 251;\nconst highLoadMask = 0x10;\nconst unusedDataGroup = 0xff;\n\nexport interface NcpDataGroupBlock {\n  /** Zero-based block number in physical DATA order. */\n  index: number;\n  /** Zero-based first physical DATA group occupied by this block. */\n  physicalStart: number;\n  /** Zero-based last physical DATA group occupied by this block. */\n  physicalEnd: number;\n  /** Logical groups routed to the consecutive physical DATA groups. */\n  logicalGroups: number[];\n}\n\nexport interface NcpDataGroupMapping {\n  address: number;\n  capacity: number;\n  blocks: NcpDataGroupBlock[];\n}\n\n/**\n * Decode the irregular-cabinet physical-to-logical DATA group routing table from an NCP cabinet.\n * Empty physical positions are encoded as 0xff. Consecutive assigned positions form one block.\n */\nexport const getNcpDataGroupMapping = (\n  cabinet: Pick<NcpCabinetConfig, 'parameters'>,\n): NcpDataGroupMapping | undefined => {\n  const parameter = cabinet.parameters.find(({ address }) => address === dataGroupMappingAddress);\n  if (!parameter) return undefined;\n\n  const blocks: NcpDataGroupBlock[] = [];\n  for (let physicalGroup = 0; physicalGroup < parameter.data.length; ) {\n    if (parameter.data[physicalGroup] === unusedDataGroup) {\n      physicalGroup += 1;\n      continue;\n    }\n    const physicalStart = physicalGroup;\n    const logicalGroups: number[] = [];\n    while (\n      physicalGroup < parameter.data.length &&\n      parameter.data[physicalGroup] !== unusedDataGroup\n    ) {\n      logicalGroups.push(parameter.data[physicalGroup]);\n      physicalGroup += 1;\n    }\n    blocks.push({\n      index: blocks.length,\n      physicalStart,\n      physicalEnd: physicalGroup - 1,\n      logicalGroups,\n    });\n  }\n\n  return {\n    address: parameter.address,\n    capacity: parameter.data.length,\n    blocks,\n  };\n};\n\nconst validateOrder = (order: readonly number[], blockCount: number): void => {\n  if (\n    order.length !== blockCount ||\n    order.some((index) => !Number.isInteger(index) || index < 0 || index >= blockCount) ||\n    new Set(order).size !== blockCount\n  ) {\n    throw new RangeError('DATA group order must be a complete permutation of the source blocks');\n  }\n};\n\n/**\n * Return an NCP cabinet copy whose physical DATA blocks have been assigned to screen positions in\n * the requested order. Both the output-to-logical-group assignments and the corresponding physical\n * columns of the scanner run-line table are moved. The original decoded cabinet and its RCCB binary\n * are left unchanged; the returned parameter list is ready to send.\n */\nexport const reorderNcpDataGroupBlocks = (\n  cabinet: NcpCabinetConfig,\n  order: readonly number[],\n): NcpCabinetConfig => {\n  const mapping = getNcpDataGroupMapping(cabinet);\n  if (!mapping) throw new TypeError('NCP cabinet does not contain a DATA group mapping table');\n  validateOrder(order, mapping.blocks.length);\n\n  const blockLength = mapping.blocks[0]?.logicalGroups.length ?? 0;\n  if (!blockLength || mapping.blocks.some((block) => block.logicalGroups.length !== blockLength)) {\n    throw new TypeError('NCP DATA group blocks have different sizes and cannot be reordered');\n  }\n\n  const pointTable = cabinet.parameters.find(({ address }) => address === pointTableAddress);\n  const scanBoardData = cabinet.parameters.find(({ address }) => address === scanBoardDataAddress);\n  if (!pointTable || !scanBoardData || scanBoardData.data.length <= highLoadOffset) {\n    throw new TypeError('NCP cabinet does not contain a compatible DATA group run-line table');\n  }\n  const entrySize = scanBoardData.data[highLoadOffset] & highLoadMask ? 4 : 2;\n  const rowSize = mapping.capacity * entrySize;\n  if (pointTable.data.length % rowSize !== 0) {\n    throw new TypeError('NCP cabinet does not contain a compatible DATA group run-line table');\n  }\n\n  const parameters = cabinet.parameters.map((parameter) => {\n    if (parameter.address === dataGroupMappingAddress) {\n      const data = Buffer.from(parameter.data);\n      mapping.blocks.forEach((target, targetIndex) => {\n        const source = mapping.blocks[order[targetIndex]];\n        Buffer.from(source.logicalGroups).copy(data, target.physicalStart);\n      });\n      return { ...parameter, data };\n    }\n    if (parameter.address === pointTableAddress) {\n      const data = Buffer.from(parameter.data);\n      mapping.blocks.forEach((target, targetIndex) => {\n        const source = mapping.blocks[order[targetIndex]];\n        for (let row = 0; row < parameter.data.length; row += rowSize) {\n          const targetOffset = row + target.physicalStart * entrySize;\n          const sourceOffset = row + source.physicalStart * entrySize;\n          parameter.data.copy(\n            data,\n            targetOffset,\n            sourceOffset,\n            sourceOffset + blockLength * entrySize,\n          );\n        }\n      });\n      return { ...parameter, data };\n    }\n    return parameter;\n  });\n\n  return { ...cabinet, parameters };\n};\n","import fs from 'fs';\nimport path from 'path';\n\nimport { Uint8ArrayReader, Uint8ArrayWriter, ZipReader, ZipWriter } from '@zip.js/zip.js';\nimport Zip from 'adm-zip';\nimport { XMLParser } from 'fast-xml-parser';\n\nimport { decodeScannerBinData } from './ScannerBinData';\nimport { ScannerBinData } from './ScannerBinData';\nimport { ScanBdRecordNoSendParams } from './ScanBdRecordNoSendParams';\nimport type { SendParam } from './ScanBdRecordNoSendParams';\nimport { crc16 } from './common';\nimport { reorderNcpDataGroupBlocks } from './NcpDataGroupMapping';\n\n// cspell:ignore RCCB\n\nconst outerPassword = 'N0@|,[)9.$eP';\nconst packagePassword = '*^Tm!{>6v8=&';\nconst maxFirmwareSize = 64 * 1024 * 1024;\n\nexport interface NcpConfigInfo {\n  packageName: string;\n  packageSize: number;\n  compressedSize: number;\n  encrypted: boolean;\n}\n\nexport interface NcpCabinetBaseInfo {\n  name?: string;\n  manufacture?: string;\n  cardModel?: string;\n  firmwareVersion?: string;\n  icType?: string;\n  refreshRate?: number;\n  scanType?: number;\n  [key: string]: unknown;\n}\n\nexport interface NcpCabinetConfig {\n  name: string;\n  revision?: number;\n  firmwareFile?: string;\n  firmware?: NcpReceivingCardFirmware;\n  baseInfo: NcpCabinetBaseInfo;\n  /** Original RCCB binary accepted by Taurus ScreenService. */\n  binary: Buffer;\n  /** Register writes extracted from the cabinet RCCB binary. */\n  parameters: SendParam[];\n}\n\nexport interface ReceivingCardFirmwareFile {\n  label: string;\n  filename: string;\n  version?: string;\n  remark?: string;\n}\n\nexport interface ReceivingCardFirmwareInfo {\n  filename: string;\n  version?: string;\n  model?: string;\n  modelId: number;\n  files: ReceivingCardFirmwareFile[];\n}\n\nexport interface NcpReceivingCardFirmware {\n  data: Buffer;\n  info: ReceivingCardFirmwareInfo;\n}\n\nexport interface NcpConfig {\n  formatVersion?: number;\n  packageName?: string;\n  cabinets: NcpCabinetConfig[];\n}\n\ntype JsonObject = Record<string, unknown>;\n\nconst asObject = (value: unknown, message: string): JsonObject => {\n  if (typeof value !== 'object' || value === null || Array.isArray(value))\n    throw new TypeError(message);\n  return value as JsonObject;\n};\n\nconst stringValue = (value: unknown): string | undefined => {\n  if (typeof value === 'string') return value || undefined;\n  if (typeof value === 'number' && Number.isFinite(value)) return String(value);\n  return undefined;\n};\n\nconst nonNegativeInteger = (value: unknown): number | undefined => {\n  const parsed = typeof value === 'number' ? value : Number.parseInt(String(value), 10);\n  return Number.isInteger(parsed) && parsed >= 0 ? parsed : undefined;\n};\n\nconst unzip = async (buffer: Buffer, password?: string): Promise<Map<string, Buffer>> => {\n  const reader = new ZipReader(new Uint8ArrayReader(buffer));\n  try {\n    const result = new Map<string, Buffer>();\n    for (const entry of await reader.getEntries()) {\n      if (entry.directory) continue;\n      const data = await entry.getData(new Uint8ArrayWriter(), password ? { password } : undefined);\n      result.set(entry.filename.replaceAll('\\\\', '/'), Buffer.from(data));\n    }\n    return result;\n  } finally {\n    await reader.close();\n  }\n};\n\nconst zip = async (files: ReadonlyMap<string, Buffer>, password?: string): Promise<Buffer> => {\n  const output = new Uint8ArrayWriter();\n  const writer = new ZipWriter(output);\n  for (const [filename, data] of files) {\n    await writer.add(\n      filename,\n      new Uint8ArrayReader(data),\n      password ? { password, encryptionStrength: 3 } : undefined,\n    );\n  }\n  return Buffer.from(await writer.close());\n};\n\nconst findFile = (files: Map<string, Buffer>, filename: string): Buffer | undefined => {\n  const normalized = filename.replaceAll('\\\\', '/');\n  const exact = files.get(normalized);\n  if (exact) return exact;\n  const basename = normalized.split('/').at(-1)?.toLowerCase();\n  return [...files].find(([name]) => name.split('/').at(-1)?.toLowerCase() === basename)?.[1];\n};\n\nconst firmwareFiles = (value: unknown): ReceivingCardFirmwareFile[] => {\n  const entries = Array.isArray(value) ? value : value === undefined ? [] : [value];\n  return entries.flatMap((entry) => {\n    const file = asObject(entry, 'Invalid receiving-card firmware file entry');\n    const filename = stringValue(file.FileName);\n    const label = stringValue(file.FileLabel);\n    return filename && label\n      ? [\n          {\n            label,\n            filename,\n            version: stringValue(file.Version),\n            remark: stringValue(file.Remark),\n          },\n        ]\n      : [];\n  });\n};\n\n/** Inspect and validate a NovaStar receiving-card firmware ZIP archive. */\nexport const decodeReceivingCardFirmware = async (\n  data: Buffer,\n  filename = 'firmware.zip',\n): Promise<ReceivingCardFirmwareInfo> => {\n  if (data.byteLength > maxFirmwareSize) {\n    throw new RangeError(`Receiving-card firmware is too large: ${data.byteLength} bytes`);\n  }\n  const files = await unzip(data);\n  const config = findFile(files, 'Config.xml');\n  if (!config) throw new TypeError('Receiving-card firmware Config.xml is missing');\n  const parsed = new XMLParser({ ignoreAttributes: false, parseTagValue: false }).parse(\n    config.toString('utf8'),\n  );\n  const root = asObject(\n    asObject(parsed, 'Invalid firmware XML').DataPackage,\n    'Invalid firmware XML',\n  );\n  if (stringValue(root.DeviceTypes) !== 'Scanner') {\n    throw new TypeError('Firmware is not intended for receiving cards');\n  }\n  const configBasic =\n    typeof root.BasicInfo === 'object' && root.BasicInfo !== null && !Array.isArray(root.BasicInfo)\n      ? asObject(root.BasicInfo, 'Invalid receiving-card firmware model')\n      : undefined;\n  const iniEntry = [...files].find(([name]) => name.toLowerCase().endsWith('.ini'))?.[1];\n  const ini = iniEntry\n    ? asObject(JSON.parse(iniEntry.toString('utf8')), 'Invalid receiving-card firmware INI')\n    : undefined;\n  const iniBasic =\n    ini &&\n    typeof ini.BasicInfo === 'object' &&\n    ini.BasicInfo !== null &&\n    !Array.isArray(ini.BasicInfo)\n      ? asObject(ini.BasicInfo, 'Invalid receiving-card firmware INI model')\n      : undefined;\n  const modelId = nonNegativeInteger(root.ModuleID);\n  const result: ReceivingCardFirmwareInfo = {\n    filename,\n    version: stringValue(root.Version),\n    model: stringValue(configBasic?.Type) ?? stringValue(iniBasic?.Type),\n    modelId: modelId ?? 0,\n    files: firmwareFiles(root.FileInfo),\n  };\n  if (!modelId || !result.files.length) {\n    throw new TypeError('Receiving-card firmware metadata is incomplete');\n  }\n  for (const file of result.files) {\n    if (!findFile(files, file.filename)) {\n      throw new TypeError(`Receiving-card firmware file is missing: ${file.filename}`);\n    }\n  }\n  return result;\n};\n\n/** Inspect an NCP container without decrypting it. */\nexport const inspectNcpConfig = (buffer: Buffer): NcpConfigInfo => {\n  const entries = new Zip(buffer).getEntries().filter((entry) => !entry.isDirectory);\n  if (entries.length !== 1 || entries[0]?.entryName !== 'package') {\n    throw new TypeError('Invalid NCP container');\n  }\n  const [entry] = entries;\n  return {\n    packageName: entry.entryName,\n    packageSize: entry.header.size,\n    compressedSize: entry.header.compressedSize,\n    encrypted: (entry.header.flags & 1) !== 0,\n  };\n};\n\n/** Decode a current NovaLCT NCP package into cabinet register-write sequences. */\nexport const decodeNcpConfig = async (buffer: Buffer): Promise<NcpConfig> => {\n  inspectNcpConfig(buffer);\n  const outer = await unzip(buffer, outerPassword);\n  const payload = outer.get('package');\n  if (!payload) throw new TypeError('Invalid NCP package entry');\n  const packageFiles = await unzip(payload, packagePassword);\n  const manifestData = packageFiles.get('manifest.json');\n  if (!manifestData) throw new TypeError('NCP manifest is missing');\n  const manifest = asObject(JSON.parse(manifestData.toString('utf8')), 'Invalid NCP manifest');\n  const cabinetPackage = asObject(manifest.cabinetPackage, 'Invalid NCP cabinet package');\n  const description = asObject(cabinetPackage.description, 'Invalid NCP description');\n  if (!Array.isArray(cabinetPackage.cabinets)) throw new TypeError('Invalid NCP cabinet list');\n\n  const cabinets = await Promise.all(\n    cabinetPackage.cabinets.map(async (value): Promise<NcpCabinetConfig> => {\n      const cabinet = asObject(value, 'Invalid NCP cabinet');\n      if (typeof cabinet.name !== 'string' || typeof cabinet.cfgName !== 'string') {\n        throw new TypeError('Invalid NCP cabinet identity');\n      }\n      const cfgArchive = packageFiles.get(cabinet.cfgName);\n      if (!cfgArchive) throw new TypeError(`NCP cabinet file is missing: ${cabinet.cfgName}`);\n      const cfgFiles = await unzip(cfgArchive);\n      const cfgData = cfgFiles.get('config.json');\n      if (!cfgData) throw new TypeError(`NCP cabinet manifest is missing: ${cabinet.name}`);\n      const cfg = asObject(JSON.parse(cfgData.toString('utf8')), 'Invalid NCP cabinet manifest');\n      if (!Array.isArray(cfg.files)) throw new TypeError('Invalid NCP cabinet file list');\n      const binDescriptor = cfg.files\n        .map((item) => asObject(item, 'Invalid NCP cabinet file'))\n        .find(({ fileName }) => typeof fileName === 'string' && fileName.endsWith('.bin'));\n      if (!binDescriptor || typeof binDescriptor.fileName !== 'string') {\n        throw new TypeError(`NCP cabinet binary is missing: ${cabinet.name}`);\n      }\n      const binary = cfgFiles.get(binDescriptor.fileName);\n      if (!binary) throw new TypeError(`NCP cabinet binary is missing: ${cabinet.name}`);\n      const firmwareFile =\n        typeof cabinet.firmwareFile === 'string' ? cabinet.firmwareFile : undefined;\n      const firmwareData = firmwareFile ? findFile(packageFiles, firmwareFile) : undefined;\n      if (firmwareFile && !firmwareData) {\n        throw new TypeError(`NCP firmware file is missing: ${firmwareFile}`);\n      }\n      return {\n        name: cabinet.name,\n        revision: typeof cabinet.revision === 'number' ? cabinet.revision : undefined,\n        firmwareFile,\n        firmware:\n          firmwareFile && firmwareData\n            ? {\n                data: firmwareData,\n                info: await decodeReceivingCardFirmware(firmwareData, firmwareFile),\n              }\n            : undefined,\n        baseInfo: asObject(cfg.baseInfo, 'Invalid NCP cabinet base info'),\n        binary,\n        parameters: decodeScannerBinData(binary),\n      };\n    }),\n  );\n  return {\n    formatVersion: typeof manifest.formatVersion === 'number' ? manifest.formatVersion : undefined,\n    packageName: typeof description.packName === 'string' ? description.packName : undefined,\n    cabinets,\n  };\n};\n\nconst rewriteScannerDataGroupOrder = (\n  binary: Buffer,\n  cabinet: NcpCabinetConfig,\n  order: readonly number[],\n): Buffer => {\n  const reordered = reorderNcpDataGroupBlocks(cabinet, order);\n\n  const result = Buffer.from(binary);\n  const dataLength = result.length - ScannerBinData.baseSize;\n  let parameterIndex = 0;\n  for (let offset = 0; offset < dataLength; ) {\n    const recordOffset = ScannerBinData.baseSize + offset;\n    const record = new ScanBdRecordNoSendParams(result.subarray(recordOffset));\n    if (\n      record.size !== ScanBdRecordNoSendParams.baseSize + record.length ||\n      offset + record.size > dataLength\n    ) {\n      throw new TypeError('Invalid ScannerBinData record');\n    }\n    const original = cabinet.parameters[parameterIndex];\n    const replacement = reordered.parameters[parameterIndex];\n    if (!original || !replacement || record.address !== original.address) {\n      throw new TypeError('NCP ScannerBinData parameters do not match the decoded cabinet');\n    }\n    if (record.length !== replacement.data.length) {\n      throw new TypeError('NCP ScannerBinData parameter length changed unexpectedly');\n    }\n    replacement.data.copy(result, recordOffset + ScanBdRecordNoSendParams.baseSize);\n    parameterIndex += 1;\n    offset += record.size;\n  }\n  if (parameterIndex !== cabinet.parameters.length) {\n    throw new TypeError('NCP ScannerBinData parameter record is missing');\n  }\n  result.writeUInt16LE(crc16(result.subarray(ScannerBinData.baseSize), 0x5555), 8);\n  decodeScannerBinData(result);\n  return result;\n};\n\n/**\n * Create a new encrypted NCP package with reordered DATA group blocks in one cabinet. The input\n * buffer is not changed. All other cabinet, firmware, mode and manifest files are retained.\n */\nexport const rewriteNcpDataGroupOrder = async (\n  buffer: Buffer,\n  cabinetIndex: number,\n  order: readonly number[],\n): Promise<Buffer> => {\n  const decoded = await decodeNcpConfig(buffer);\n  const cabinet = decoded.cabinets[cabinetIndex];\n  if (!cabinet) throw new RangeError(`NCP cabinet does not exist: ${cabinetIndex}`);\n\n  const outer = await unzip(buffer, outerPassword);\n  const payload = outer.get('package');\n  if (!payload) throw new TypeError('Invalid NCP package entry');\n  const packageFiles = await unzip(payload, packagePassword);\n  const manifestData = packageFiles.get('manifest.json');\n  if (!manifestData) throw new TypeError('NCP manifest is missing');\n  const manifest = asObject(JSON.parse(manifestData.toString('utf8')), 'Invalid NCP manifest');\n  const cabinetPackage = asObject(manifest.cabinetPackage, 'Invalid NCP cabinet package');\n  if (!Array.isArray(cabinetPackage.cabinets)) throw new TypeError('Invalid NCP cabinet list');\n  const cabinetDescriptor = asObject(cabinetPackage.cabinets[cabinetIndex], 'Invalid NCP cabinet');\n  if (typeof cabinetDescriptor.cfgName !== 'string') throw new TypeError('Invalid NCP cabinet');\n\n  const cfgArchive = packageFiles.get(cabinetDescriptor.cfgName);\n  if (!cfgArchive) {\n    throw new TypeError(`NCP cabinet file is missing: ${cabinetDescriptor.cfgName}`);\n  }\n  const cfgFiles = await unzip(cfgArchive);\n  const cfgData = cfgFiles.get('config.json');\n  if (!cfgData) throw new TypeError(`NCP cabinet manifest is missing: ${cabinet.name}`);\n  const cfg = asObject(JSON.parse(cfgData.toString('utf8')), 'Invalid NCP cabinet manifest');\n  if (!Array.isArray(cfg.files)) throw new TypeError('Invalid NCP cabinet file list');\n  const binDescriptor = cfg.files\n    .map((item) => asObject(item, 'Invalid NCP cabinet file'))\n    .find(({ fileName }) => typeof fileName === 'string' && fileName.endsWith('.bin'));\n  if (!binDescriptor || typeof binDescriptor.fileName !== 'string') {\n    throw new TypeError(`NCP cabinet binary is missing: ${cabinet.name}`);\n  }\n  const binary = cfgFiles.get(binDescriptor.fileName);\n  if (!binary) throw new TypeError(`NCP cabinet binary is missing: ${cabinet.name}`);\n\n  cfgFiles.set(binDescriptor.fileName, rewriteScannerDataGroupOrder(binary, cabinet, order));\n  packageFiles.set(cabinetDescriptor.cfgName, await zip(cfgFiles));\n  outer.set('package', await zip(packageFiles, packagePassword));\n  return zip(outer, outerPassword);\n};\n\nexport const loadNcpConfigInfo = (pathname: string): NcpConfigInfo =>\n  inspectNcpConfig(fs.readFileSync(pathname));\n\nexport const loadNcpConfig = (pathname: string): Promise<NcpConfig> =>\n  decodeNcpConfig(fs.readFileSync(pathname));\n\nexport const saveNcpDataGroupOrder = async (\n  sourcePath: string,\n  destinationPath: string,\n  cabinetIndex: number,\n  order: readonly number[],\n): Promise<void> => {\n  if (path.resolve(sourcePath) === path.resolve(destinationPath)) {\n    throw new RangeError('Reordered NCP must be saved to a new file');\n  }\n  const rewritten = await rewriteNcpDataGroupOrder(\n    fs.readFileSync(sourcePath),\n    cabinetIndex,\n    order,\n  );\n  fs.writeFileSync(destinationPath, rewritten);\n};\n","import { delay, DeviceType, ErrorType, Request, ResponseError } from '@novastar/codec';\n\nimport type { NcpCabinetConfig } from './NcpConfig';\nimport type { SessionAPI } from './Session';\n\nexport interface NcpTarget {\n  sender: number;\n  port: number;\n  receivingCard: number;\n}\n\nexport interface NcpSendProgress {\n  completed: number;\n  total: number;\n  completedBytes: number;\n  totalBytes: number;\n  address: number;\n  name?: string;\n}\n\nexport interface NcpSendOptions {\n  allReceivingCards?: boolean;\n  readinessTargets?: readonly NcpTarget[];\n  onProgress?: (progress: NcpSendProgress) => void;\n}\n\nconst scannerBusyAddress = 0x0200_0001;\nconst pollingRetryDelay = 200;\nconst pollingWaitFlag = 0x8000;\nconst pollingCompletionDelay = 1000;\n\nconst assertUInt = (name: string, value: number, max: number): void => {\n  if (!Number.isInteger(value) || value < 0 || value > max) {\n    throw new RangeError(`Invalid ${name}: ${value}`);\n  }\n};\n\nconst waitForReceivingCard = async (\n  session: SessionAPI,\n  target: NcpTarget,\n  timeout: number,\n): Promise<void> => {\n  const deadline = Date.now() + timeout + 10_000;\n  while (true) {\n    const request = new Request(16, 'NCP:poll');\n    request.address = scannerBusyAddress;\n    request.deviceType = DeviceType.ReceivingCard;\n    request.destination = target.sender;\n    request.port = target.port;\n    request.rcvIndex = target.receivingCard;\n    request.timeout = 5_000;\n    // NovaLCT treats an ACK=0 reply as an idle card and ACK=1 as still busy.\n    // eslint-disable-next-line no-await-in-loop\n    const response = await session.connection.trySend(request);\n    if (response?.ack === ErrorType.Succeeded) return;\n    if (response && response.ack !== ErrorType.Timeout) {\n      throw new ResponseError(response, request.tag);\n    }\n    if (Date.now() >= deadline) throw new Error('Receiving card did not become ready');\n    // eslint-disable-next-line no-await-in-loop\n    await delay(pollingRetryDelay);\n  }\n};\n\nconst getPollingCompletionDelay = (encodedDelay: number): number =>\n  pollingCompletionDelay + (encodedDelay & (pollingWaitFlag - 1));\n\n/**\n * Send one decoded NCP cabinet configuration. The target is used for addressed writes and as the\n * default readiness-polling address; `allReceivingCards` switches parameter writes to broadcast.\n * Firmware and multi-mode files embedded in the NCP are intentionally not flashed.\n */\nexport const sendNcpCabinetConfig = async (\n  session: SessionAPI,\n  cabinet: NcpCabinetConfig,\n  target: NcpTarget,\n  options: NcpSendOptions = {},\n): Promise<void> => {\n  assertUInt('sender', target.sender, 0xfe);\n  assertUInt('port', target.port, 0xfe);\n  assertUInt('receivingCard', target.receivingCard, 0xfffe);\n  const readinessTargets = options.readinessTargets ?? [target];\n  readinessTargets.forEach((readinessTarget) => {\n    assertUInt('sender', readinessTarget.sender, 0xfe);\n    assertUInt('port', readinessTarget.port, 0xfe);\n    assertUInt('receivingCard', readinessTarget.receivingCard, 0xfffe);\n  });\n  const { parameters } = cabinet;\n  const totalBytes = parameters.reduce((sum, parameter) => sum + parameter.data.length, 0);\n  let completedBytes = 0;\n  for (let index = 0; index < parameters.length; index += 1) {\n    const parameter = parameters[index];\n    const request = new Request(parameter.data, parameter.name ?? 'NCP');\n    request.address = parameter.address;\n    request.deviceType = DeviceType.ReceivingCard;\n    request.destination = options.allReceivingCards ? 0xff : target.sender;\n    request.port = options.allReceivingCards ? 0xff : target.port;\n    request.rcvIndex = options.allReceivingCards ? 0xffff : target.receivingCard;\n    const chunks = Request.makeChunks(request, session.connection.maxLength);\n    for (let chunkIndex = 0; chunkIndex < chunks.length; chunkIndex += 1) {\n      const chunk = chunks[chunkIndex];\n      // eslint-disable-next-line no-await-in-loop\n      await session.connection.send(chunk);\n      completedBytes += chunk.length;\n      options.onProgress?.({\n        completed: index + (chunkIndex === chunks.length - 1 ? 1 : 0),\n        total: parameters.length,\n        completedBytes,\n        totalBytes,\n        address: chunk.address,\n        name: parameter.name,\n      });\n    }\n    // NovaLCT waits before polling. Some commands need several seconds before\n    // the receiving card starts responding to readiness requests.\n    // eslint-disable-next-line no-await-in-loop\n    if (parameter.delay > 0) await delay(parameter.delay);\n    if (parameter.pollingTime > 0) {\n      for (const readinessTarget of readinessTargets) {\n        // eslint-disable-next-line no-await-in-loop\n        await waitForReceivingCard(session, readinessTarget, parameter.pollingTime);\n      }\n      // eslint-disable-next-line no-await-in-loop\n      await delay(getPollingCompletionDelay(parameter.pollingWaitTime));\n    }\n  }\n};\n"],"mappings":"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"}