Ejemplo n.º 1
0
 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])
Ejemplo n.º 2
0
def create_screen(sc_line, modes, edid_data, connected):

    name = sc_line.split(' ')[0]
    model = ""
    manufacturer_id = ""
    manufacturer = ""
    product_id = 0
    serial_no = 0
    physical_width = 30.0
    physical_height = 30.0
    if(len(edid_data) > 0):
        bytes = hex2bytes("".join(edid_data[0:8]))
        parsed_edid = Edid(bytes)
        model = parsed_edid.name if parsed_edid.name else ""
        manufacturer_id = parsed_edid.manufacturer_id
        manufacturer = parsed_edid.manufacturer
        physical_width = parsed_edid.width
        physical_height = parsed_edid.height
        product_id = parsed_edid.product
        serial_no = parsed_edid.serial_no

    # Set dpi of modes
    for mode in modes:
        mode.dpi = mode.height / (physical_height/2.54)

    # if connected
    rot = None
    if modes:
        fr = sc_line.split(' ')
        if len(fr) > 2:
            rot = str_to_rot(sc_line.split(' ')[3])

    return Screen(name, 'primary' in sc_line, rot, modes, manufacturer_id, manufacturer, model, physical_width, physical_height, product_id, serial_no, connected)
Ejemplo n.º 3
0
 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])
Ejemplo n.º 4
0
 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])
Ejemplo n.º 5
0
 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])
Ejemplo n.º 6
0
 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])
Ejemplo n.º 7
0
 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])
Ejemplo n.º 8
0
 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])
Ejemplo n.º 9
0
 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])
Ejemplo n.º 10
0
 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
Ejemplo n.º 11
0
 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])
Ejemplo n.º 12
0
    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)
Ejemplo n.º 13
0
    def testCalculateChecksum2(self):
        edid = Edid(data=bytearray(128))
        # change data
        edid[0] = 1

        edid.calculateChecksum()
        self.assertTrue(edid.checkChecksum())
        self.assertEqual(edid[127], 255)
Ejemplo n.º 14
0
 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)
Ejemplo n.º 15
0
 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)
Ejemplo n.º 16
0
 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)
Ejemplo n.º 17
0
    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)
Ejemplo n.º 18
0
 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)
Ejemplo n.º 19
0
    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)
Ejemplo n.º 20
0
    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])
Ejemplo n.º 21
0
def get_edids():
    output = xrandr._output("--verbose")
    display = None
    edid = None
    edids_by_display = {}

    for line in output.split('\n'):
        if 'connected' in line:
            display = line.split(' ')[0]
        elif line.startswith('\tEDID'):
            edid = ""
        elif line.startswith('\t\t') and edid is not None:
            edid += line.strip()
        elif not line.startswith('\t\t') and edid is not None:
            edid = bytes(
                [int("".join(pair), 16) for pair in zip(*[iter(edid)] * 2)])
            edids_by_display[display] = Edid(edid)
            edid = None
            display = None

    return edids_by_display
Ejemplo n.º 22
0
 def testSetEstablishedTimingBitmap(self):
     edid = Edid(data=bytearray(128))
     edid.setEstablishedTimingBitmap(0x123456)
     self.assertEqual(edid[35:38], bytearray.fromhex('12 34 56'))
Ejemplo n.º 23
0
 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)
Ejemplo n.º 24
0
    def testCalculateChecksum(self):
        edid = Edid(data=bytearray(128))
        edid[-1] = 42

        edid.calculateChecksum()
        self.assertEqual(edid[127], 0x00)
Ejemplo n.º 25
0
 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)
Ejemplo n.º 26
0
 def testCheckChecksumInvalid(self):
     edid = Edid(data=self.VALID_EDID_DATA[0])
     edid[127] = 0
     self.assertFalse(edid.checkChecksum())
Ejemplo n.º 27
0
 def testCheckChecksumValid(self):
     for data in self.VALID_EDID_DATA:
         edid = Edid(data=data)
         self.assertTrue(edid.checkChecksum())
Ejemplo n.º 28
0
 def testSetNumberOfExtensions(self):
     edid = Edid(version=1.3)
     edid.setNumberOfExtensions(2)
     self.assertEqual(edid[126], 2)
Ejemplo n.º 29
0
 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)
Ejemplo n.º 30
0
 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)