def testGetEstablishedTimingBitmap(self): establishedTimingBitmaps = [0x210800, 0x200000, 0, 0] for key, data in enumerate(self.VALID_EDID_DATA): edid = Edid(data=data) self.assertEqual( edid.getEstablishedTimingBitmap(), establishedTimingBitmaps[key])
def testGetMaximumVerticalImageSize(self): maximumVerticalImageSizes = [900, 1300, 3400, 1400] for key, data in enumerate(self.VALID_EDID_DATA): edid = Edid(data=data) self.assertEqual( edid.getMaximumVerticalImageSize(), maximumVerticalImageSizes[key])
def testGetSupportedFeaturesBitmap(self): supportedFeaturesBitmaps = [0x0A, 0x05, 0x22, 0x0A] for key, data in enumerate(self.VALID_EDID_DATA): edid = Edid(data=data) self.assertEqual( edid.getSupportedFeaturesBitmap(), supportedFeaturesBitmaps[key])
def testGetVideoInputParametersBitmap(self): videoInputParametersBitmaps = [0x80, 0x08, 0xB5, 0x80] for key, data in enumerate(self.VALID_EDID_DATA): edid = Edid(data=data) self.assertEqual( edid.getVideoInputParametersBitmap(), videoInputParametersBitmaps[key])
def testGetMaximumHorizontalImageSize(self): maximumHorizontalImageSizes = [16, 17, 60, 26] for key, data in enumerate(self.VALID_EDID_DATA): edid = Edid(data=data) self.assertEqual( edid.getMaximumHorizontalImageSize(), maximumHorizontalImageSizes[key])
def testGetYearOfManufacture(self): yearOfManufactures = [2007, 2011, 2014, 2010] for key, data in enumerate(self.VALID_EDID_DATA): edid = Edid(data=data) self.assertEqual( edid.getYearOfManufacture(), yearOfManufactures[key])
def testGetWeekOfManufacture(self): weekOfManufactures = [47, 12, 12, 32] for key, data in enumerate(self.VALID_EDID_DATA): edid = Edid(data=data) self.assertEqual( edid.getWeekOfManufacture(), weekOfManufactures[key])
def testGetManufacturerProductCode(self): manufacturerProductCodes = [956, 256, 44547, 0x3DC4] for key, data in enumerate(self.VALID_EDID_DATA): edid = Edid(data=data) self.assertEqual( edid.getManufacturerProductCode(), manufacturerProductCodes[key])
def testGetNumberOfExtensions(self): numberOfExtensions = [1, 0, 2, 1] for key, data in enumerate(self.VALID_EDID_DATA): edid = Edid(data=data) self.assertEqual( edid.getNumberOfExtensions(), numberOfExtensions[key])
def get_resolutions_display(self, disp): '''return a list of resolutions for the specified display''' # hash resolutions to avoid probing them twice if disp in self._resolutions: return self._resolutions[disp] # get supported resolutions from driver r = ResolutionList(self.backend.get_display_supported_res(disp)) if len(r)==0: r = ResolutionList('800x600, 640x480') self.log.warning('no resolutions found for display %s, falling back to: %s'%(disp, r)) # bump weight of flat-panel display with 1000 res = self.backend.get_display_preferred_res(disp) if res: res = Resolution(res) if res in r: r[r.index(res)].weight += 1000 else: r.append(res) # bump weight of EDID resolutions with 100 edid_data = self.backend.get_display_edid(disp) if edid_data: edid = Edid(edid_data) for d in edid.get_monitor_details(): title, info = d if title != 'Detailed Timing': continue res = Resolution([info['horizontal_active'], info['vertical_active']]) if res in r: r[r.index(res)].weight += 100 else: r.append(res) self.log.info('resolutions of '+str(disp)+': '+', '.join(map(str,sorted(r)))) self._resolutions[disp] = r return r
def testCalculateChecksum(self): edid = Edid(data=bytearray(128)) # put wrong checksum edid[127] = 42 edid.calculateChecksum() self.assertTrue(edid.checkChecksum()) self.assertEqual(edid[127], 0x00)
def testCalculateChecksum2(self): edid = Edid(data=bytearray(128)) # change data edid[0] = 1 edid.calculateChecksum() self.assertTrue(edid.checkChecksum()) self.assertEqual(edid[127], 255)
def testGetChromaticityCoordinatesWhite(self): chromaticityCoordinatesWhites = [ (0.312, 0.329), (0.0, 0.0), (0.313, 0.329), (0.313, 0.329)] for key, data in enumerate(self.VALID_EDID_DATA): edid = Edid(data=data) coordinates = edid.getChromaticityCoordinatesWhite() self.assertAlmostEqual( coordinates[0], chromaticityCoordinatesWhites[key][0], places=3) self.assertAlmostEqual( coordinates[1], chromaticityCoordinatesWhites[key][1], places=3)
def testGetChromaticityCoordinatesRed(self): chromaticityCoordinatesReds = [(0.640, 0.330), (0.0, 0.0), (0.655, 0.332), (0.573, 0.358)] for key, data in enumerate(self.VALID_EDID_DATA): edid = Edid(data=data) coordinates = edid.getChromaticityCoordinatesRed() self.assertAlmostEqual(coordinates[0], chromaticityCoordinatesReds[key][0], places=3) self.assertAlmostEqual(coordinates[1], chromaticityCoordinatesReds[key][1], places=3)
def testGetChromaticityCoordinatesBlue(self): chromaticityCoordinatesBlues = [ (0.150, 0.060), (0.0, 0.0), (0.148, 0.047), (0.153, 0.124)] for key, data in enumerate(self.VALID_EDID_DATA): edid = Edid(data=data) coordinates = edid.getChromaticityCoordinatesBlue() self.assertAlmostEqual( coordinates[0], chromaticityCoordinatesBlues[key][0], places=3) self.assertAlmostEqual( coordinates[1], chromaticityCoordinatesBlues[key][1], places=3)
def testGetChromaticityCoordinatesGreen(self): chromaticityCoordinatesGreen = [(0.300, 0.600), (0.0, 0.0), (0.295, 0.625), (0.339, 0.568)] for key, data in enumerate(self.VALID_EDID_DATA): edid = Edid(data=data) coordinates = edid.getChromaticityCoordinatesGreen() self.assertAlmostEqual(coordinates[0], chromaticityCoordinatesGreen[key][0], places=3) self.assertAlmostEqual(coordinates[1], chromaticityCoordinatesGreen[key][1], places=3)
def testCalculateChecksum3(self): edid = Edid(data=bytearray(128)) for i in range(0, 127): edid[i] = 2 # Databytes: 127 * 2 = 254 # Checksum: 2 # Sum: 256 % 256 = 0 edid.calculateChecksum() self.assertTrue(edid.checkChecksum()) self.assertEqual(edid[127], 2)
def testGetChromaticityCoordinatesRed(self): chromaticityCoordinatesReds = [ (0.640, 0.330), (0.0, 0.0), (0.655, 0.332), (0.573, 0.358)] for key, data in enumerate(self.VALID_EDID_DATA): edid = Edid(data=data) coordinates = edid.getChromaticityCoordinatesRed() self.assertAlmostEqual( coordinates[0], chromaticityCoordinatesReds[key][0], places=3) self.assertAlmostEqual( coordinates[1], chromaticityCoordinatesReds[key][1], places=3)
def testGetChromaticityCoordinatesGreen(self): chromaticityCoordinatesGreen = [ (0.300, 0.600), (0.0, 0.0), (0.295, 0.625), (0.339, 0.568)] for key, data in enumerate(self.VALID_EDID_DATA): edid = Edid(data=data) coordinates = edid.getChromaticityCoordinatesGreen() self.assertAlmostEqual( coordinates[0], chromaticityCoordinatesGreen[key][0], places=3) self.assertAlmostEqual( coordinates[1], chromaticityCoordinatesGreen[key][1], places=3)
def testGetStandardTimingInformation(self): standardTimingInformations = [ [(1280, 5.0 / 4.0, 60), (1600, 4.0 / 3.0, 60)], [(640, 4.0 / 3.0, 60)], [], [] ] for key, data in enumerate(self.VALID_EDID_DATA): edid = Edid(data=data) for index in range(0, 8): standardTimingInformation = edid.getStandardTimingInformation( index) correctStandardTimingInformation = standardTimingInformations[key][ index] if index < len(standardTimingInformations[key]) else (None, None, None) self.assertEqual( standardTimingInformation[0], correctStandardTimingInformation[0]) self.assertEqual( standardTimingInformation[1], correctStandardTimingInformation[1]) self.assertEqual( standardTimingInformation[2], correctStandardTimingInformation[2])
def testCheckChecksumInvalid(self): edid = Edid(data=self.VALID_EDID_DATA[0]) edid[127] = 0 self.assertFalse(edid.checkChecksum())
def testCheckChecksumValid(self): for data in self.VALID_EDID_DATA: edid = Edid(data=data) self.assertTrue(edid.checkChecksum())
def testSetVideoInputParametersBitmap(self): edid = Edid(data=bytearray(128)) edid.setVideoInputParametersBitmap(0x80) self.assertEqual(edid[20], 0x80)
def testSetNumberOfExtensions(self): edid = Edid(version=1.3) edid.setNumberOfExtensions(2) self.assertEqual(edid[126], 2)
def testSetChromaticityCoordinatesRed(self): edid = Edid(data=bytearray(128)) edid.setChromaticityCoordinatesRed(0.888, 0.777) self.assertEqual(edid[25], 0x10) self.assertEqual(edid[27], 0xE3) self.assertEqual(edid[28], 0xC7)
def testSetChromaticityCoordinatesGreen(self): edid = Edid(data=bytearray(128)) edid.setChromaticityCoordinatesGreen(0.888, 0.777) self.assertEqual(edid[25], 0x01) self.assertEqual(edid[29], 0xE3) self.assertEqual(edid[30], 0xC7)
def testSetChromaticityCoordinatesWhite(self): edid = Edid(data=bytearray(128)) edid.setChromaticityCoordinatesWhite(0.888, 0.777) self.assertEqual(edid[26], 0x01) self.assertEqual(edid[33], 0xE3) self.assertEqual(edid[34], 0xC7)
def testSetChromaticityCoordinatesBlue(self): edid = Edid(data=bytearray(128)) edid.setChromaticityCoordinatesBlue(0.888, 0.777) self.assertEqual(edid[26], 0x10) self.assertEqual(edid[31], 0xE3) self.assertEqual(edid[32], 0xC7)
def testCalculateChecksum(self): edid = Edid(data=bytearray(128)) edid[-1] = 42 edid.calculateChecksum() self.assertEqual(edid[127], 0x00)
def testSetMaximumVerticalImageSize(self): edid = Edid(data=bytearray(128)) edid.setMaximumVerticalImageSize(0x80) self.assertEqual(edid[22], 0x80)
def testSetSupportedFeaturesBitmap(self): edid = Edid(data=bytearray(128)) edid.setSupportedFeaturesBitmap(10) self.assertEqual(edid[24], 10)
def testSetStandardTimingInformation(self): for index in range(0, 8): edid = Edid(version=1.2) edid.setStandardTimingInformation(index, 640, 1.0, 70) self.assertEqual(edid[38 + 2 * index + 0], 49) self.assertEqual(edid[38 + 2 * index + 1], 10) edid = Edid(version=1.3) edid.setStandardTimingInformation(index, None, None, None) self.assertEqual(edid[38 + 2 * index + 0], 1) self.assertEqual(edid[38 + 2 * index + 1], 1) edid = Edid(version=1.3) edid.setStandardTimingInformation(index, 256, 16.0 / 10.0, 80) self.assertEqual(edid[38 + 2 * index + 0], 1) self.assertEqual(edid[38 + 2 * index + 1], 20) edid = Edid(version=1.3) edid.setStandardTimingInformation(index, 1024, 4.0 / 3.0, 90) self.assertEqual(edid[38 + 2 * index + 0], 97) self.assertEqual(edid[38 + 2 * index + 1], 94) edid = Edid(version=1.3) edid.setStandardTimingInformation(index, 1600, 5.0 / 4.0, 100) self.assertEqual(edid[38 + 2 * index + 0], 169) self.assertEqual(edid[38 + 2 * index + 1], 168) edid = Edid(version=1.3) edid.setStandardTimingInformation(index, 1920, 16.0 / 9.0, 120) self.assertEqual(edid[38 + 2 * index + 0], 209) self.assertEqual(edid[38 + 2 * index + 1], 252)
def testSetDisplayGamma(self): edid = Edid(data=bytearray(128)) edid.setDisplayGamma(2.2) self.assertEqual(edid[23], 120)
def testSetEstablishedTimingBitmap(self): edid = Edid(data=bytearray(128)) edid.setEstablishedTimingBitmap(0x123456) self.assertEqual(edid[35:38], bytearray.fromhex('12 34 56'))
def testGetDisplayGamma(self): displayGammas = [2.2, 2.2, 2.2, 2.2] for key, data in enumerate(self.VALID_EDID_DATA): edid = Edid(data=data) self.assertEqual(edid.getDisplayGamma(), displayGammas[key])