27" Thunderbolt display support

Issue #6 resolved
Jens Holst Schumacher repo owner created an issue

Suggested by FrancoisC http://hardforum.com/showpost.php?p=1038594919&postcount=818

"Here's the USB ID for the thunderbolt display, so it can be supported in Brightness Controller! 0x9227

I'm planning on building my next PC and keep my Thunderbolt screen, just waiting for motherboard with the right output, coming soon from MSI (Z77A-GD80) and Intel."

Comments (16)

  1. Jens Holst Schumacher reporter
    • changed status to open

    I have had a look at some linux code supporting older models and compared it with the current version of the cinema display. And it looks like Apple really enjoys to change things :-( So the PID is probably not going to be enough to add support the thunderbolt display.

    The next version of brightness crontroller till include an option to gather as much information about the display as i can.

  2. Jens Holst Schumacher reporter
    • changed version to 0.9
    • changed status to on hold

    On hold until 0.9 has been released and a user has gatherd the nessecary HID Capability Information using #7

  3. Jens Holst Schumacher reporter
    • changed version to 1.0
    • changed status to open
    <?xml version="1.0" encoding="utf-16"?>
    <ArrayOfHidDeviceInfo xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <HidDeviceInfo>
        <Path>\\?\hid#vid_05ac&amp;pid_9227#e&amp;14cecad&amp;0&amp;0000#{4d1e55b2-f16f-11cf-88cb-001111000030}</Path>
        <ProductString>Apple Thunderbolt Display</ProductString>
        <ManufacturerString>Apple Inc.</ManufacturerString>
        <HidAttributes>
          <Size>12</Size>
          <VendorID>1452</VendorID>
          <ProductID>37415</ProductID>
          <VersionNumber>312</VersionNumber>
        </HidAttributes>
        <HidCaps>
          <Usage>1</Usage>
          <UsagePage>128</UsagePage>
          <InputReportByteLength>3</InputReportByteLength>
          <OutputReportByteLength>0</OutputReportByteLength>
          <FeatureReportByteLength>9</FeatureReportByteLength>
          <Reserved>
            <unsignedShort>0</unsignedShort>
            <unsignedShort>0</unsignedShort>
            <unsignedShort>0</unsignedShort>
            <unsignedShort>0</unsignedShort>
            <unsignedShort>0</unsignedShort>
            <unsignedShort>0</unsignedShort>
            <unsignedShort>0</unsignedShort>
            <unsignedShort>0</unsignedShort>
            <unsignedShort>0</unsignedShort>
            <unsignedShort>0</unsignedShort>
            <unsignedShort>0</unsignedShort>
            <unsignedShort>0</unsignedShort>
            <unsignedShort>0</unsignedShort>
            <unsignedShort>0</unsignedShort>
            <unsignedShort>0</unsignedShort>
            <unsignedShort>0</unsignedShort>
            <unsignedShort>0</unsignedShort>
          </Reserved>
          <NumberLinkCollectionNodes>1</NumberLinkCollectionNodes>
          <NumberInputButtonCaps>1</NumberInputButtonCaps>
          <NumberInputValueCaps>0</NumberInputValueCaps>
          <NumberInputDataIndices>1</NumberInputDataIndices>
          <NumberOutputButtonCaps>0</NumberOutputButtonCaps>
          <NumberOutputValueCaps>0</NumberOutputValueCaps>
          <NumberOutputDataIndices>0</NumberOutputDataIndices>
          <NumberFeatureButtonCaps>0</NumberFeatureButtonCaps>
          <NumberFeatureValueCaps>6</NumberFeatureValueCaps>
          <NumberFeatureDataIndices>6</NumberFeatureDataIndices>
        </HidCaps>
        <FeatureValueCaps>
          <HidValueCaps>
            <UsagePage>130</UsagePage>
            <ReportID>16</ReportID>
            <IsAlias>false</IsAlias>
            <BitField>2</BitField>
            <LinkCollection>0</LinkCollection>
            <LinkUsage>1</LinkUsage>
            <LinkUsagePage>128</LinkUsagePage>
            <IsRange>false</IsRange>
            <IsStringRange>false</IsStringRange>
            <IsDesignatorRange>false</IsDesignatorRange>
            <IsAbsolute>true</IsAbsolute>
            <HasNull>false</HasNull>
            <Reserved>0</Reserved>
            <BitSize>16</BitSize>
            <ReportCount>1</ReportCount>
            <Reserved2>
              <unsignedShort>0</unsignedShort>
              <unsignedShort>0</unsignedShort>
              <unsignedShort>0</unsignedShort>
              <unsignedShort>0</unsignedShort>
              <unsignedShort>0</unsignedShort>
            </Reserved2>
            <UnitsExp>0</UnitsExp>
            <Units>0</Units>
            <LogicalMin>0</LogicalMin>
            <LogicalMax>65535</LogicalMax>
            <PhysicalMin>0</PhysicalMin>
            <PhysicalMax>0</PhysicalMax>
            <UsageMin>16</UsageMin>
            <UsageMax>16</UsageMax>
            <StringMin>0</StringMin>
            <StringMax>0</StringMax>
            <DesignatorMin>0</DesignatorMin>
            <DesignatorMax>0</DesignatorMax>
            <DataIndexMin>0</DataIndexMin>
            <DataIndexMax>0</DataIndexMax>
          </HidValueCaps>
          <HidValueCaps>
            <UsagePage>130</UsagePage>
            <ReportID>102</ReportID>
            <IsAlias>false</IsAlias>
            <BitField>2</BitField>
            <LinkCollection>0</LinkCollection>
            <LinkUsage>1</LinkUsage>
            <LinkUsagePage>128</LinkUsagePage>
            <IsRange>false</IsRange>
            <IsStringRange>false</IsStringRange>
            <IsDesignatorRange>false</IsDesignatorRange>
            <IsAbsolute>true</IsAbsolute>
            <HasNull>false</HasNull>
            <Reserved>0</Reserved>
            <BitSize>8</BitSize>
            <ReportCount>1</ReportCount>
            <Reserved2>
              <unsignedShort>0</unsignedShort>
              <unsignedShort>0</unsignedShort>
              <unsignedShort>0</unsignedShort>
              <unsignedShort>0</unsignedShort>
              <unsignedShort>0</unsignedShort>
            </Reserved2>
            <UnitsExp>0</UnitsExp>
            <Units>0</Units>
            <LogicalMin>1</LogicalMin>
            <LogicalMax>2</LogicalMax>
            <PhysicalMin>0</PhysicalMin>
            <PhysicalMax>0</PhysicalMax>
            <UsageMin>102</UsageMin>
            <UsageMax>102</UsageMax>
            <StringMin>0</StringMin>
            <StringMax>0</StringMax>
            <DesignatorMin>0</DesignatorMin>
            <DesignatorMax>0</DesignatorMax>
            <DataIndexMin>1</DataIndexMin>
            <DataIndexMax>1</DataIndexMax>
          </HidValueCaps>
          <HidValueCaps>
            <UsagePage>65426</UsagePage>
            <ReportID>225</ReportID>
            <IsAlias>false</IsAlias>
            <BitField>2</BitField>
            <LinkCollection>0</LinkCollection>
            <LinkUsage>1</LinkUsage>
            <LinkUsagePage>128</LinkUsagePage>
            <IsRange>false</IsRange>
            <IsStringRange>false</IsStringRange>
            <IsDesignatorRange>false</IsDesignatorRange>
            <IsAbsolute>true</IsAbsolute>
            <HasNull>false</HasNull>
            <Reserved>0</Reserved>
            <BitSize>8</BitSize>
            <ReportCount>1</ReportCount>
            <Reserved2>
              <unsignedShort>0</unsignedShort>
              <unsignedShort>0</unsignedShort>
              <unsignedShort>0</unsignedShort>
              <unsignedShort>0</unsignedShort>
              <unsignedShort>0</unsignedShort>
            </Reserved2>
            <UnitsExp>0</UnitsExp>
            <Units>0</Units>
            <LogicalMin>0</LogicalMin>
            <LogicalMax>1</LogicalMax>
            <PhysicalMin>0</PhysicalMin>
            <PhysicalMax>0</PhysicalMax>
            <UsageMin>225</UsageMin>
            <UsageMax>225</UsageMax>
            <StringMin>0</StringMin>
            <StringMax>0</StringMax>
            <DesignatorMin>0</DesignatorMin>
            <DesignatorMax>0</DesignatorMax>
            <DataIndexMin>2</DataIndexMin>
            <DataIndexMax>2</DataIndexMax>
          </HidValueCaps>
          <HidValueCaps>
            <UsagePage>65426</UsagePage>
            <ReportID>235</ReportID>
            <IsAlias>false</IsAlias>
            <BitField>2</BitField>
            <LinkCollection>0</LinkCollection>
            <LinkUsage>1</LinkUsage>
            <LinkUsagePage>128</LinkUsagePage>
            <IsRange>false</IsRange>
            <IsStringRange>false</IsStringRange>
            <IsDesignatorRange>false</IsDesignatorRange>
            <IsAbsolute>true</IsAbsolute>
            <HasNull>false</HasNull>
            <Reserved>0</Reserved>
            <BitSize>16</BitSize>
            <ReportCount>1</ReportCount>
            <Reserved2>
              <unsignedShort>0</unsignedShort>
              <unsignedShort>0</unsignedShort>
              <unsignedShort>0</unsignedShort>
              <unsignedShort>0</unsignedShort>
              <unsignedShort>0</unsignedShort>
            </Reserved2>
            <UnitsExp>0</UnitsExp>
            <Units>0</Units>
            <LogicalMin>0</LogicalMin>
            <LogicalMax>65535</LogicalMax>
            <PhysicalMin>0</PhysicalMin>
            <PhysicalMax>0</PhysicalMax>
            <UsageMin>235</UsageMin>
            <UsageMax>235</UsageMax>
            <StringMin>0</StringMin>
            <StringMax>0</StringMax>
            <DesignatorMin>0</DesignatorMin>
            <DesignatorMax>0</DesignatorMax>
            <DataIndexMin>3</DataIndexMin>
            <DataIndexMax>3</DataIndexMax>
          </HidValueCaps>
          <HidValueCaps>
            <UsagePage>65426</UsagePage>
            <ReportID>236</ReportID>
            <IsAlias>false</IsAlias>
            <BitField>2</BitField>
            <LinkCollection>0</LinkCollection>
            <LinkUsage>1</LinkUsage>
            <LinkUsagePage>128</LinkUsagePage>
            <IsRange>false</IsRange>
            <IsStringRange>false</IsStringRange>
            <IsDesignatorRange>false</IsDesignatorRange>
            <IsAbsolute>true</IsAbsolute>
            <HasNull>false</HasNull>
            <Reserved>0</Reserved>
            <BitSize>32</BitSize>
            <ReportCount>2</ReportCount>
            <Reserved2>
              <unsignedShort>0</unsignedShort>
              <unsignedShort>0</unsignedShort>
              <unsignedShort>0</unsignedShort>
              <unsignedShort>0</unsignedShort>
              <unsignedShort>0</unsignedShort>
            </Reserved2>
            <UnitsExp>0</UnitsExp>
            <Units>0</Units>
            <LogicalMin>-2147483648</LogicalMin>
            <LogicalMax>2147483647</LogicalMax>
            <PhysicalMin>0</PhysicalMin>
            <PhysicalMax>0</PhysicalMax>
            <UsageMin>236</UsageMin>
            <UsageMax>236</UsageMax>
            <StringMin>0</StringMin>
            <StringMax>0</StringMax>
            <DesignatorMin>0</DesignatorMin>
            <DesignatorMax>0</DesignatorMax>
            <DataIndexMin>4</DataIndexMin>
            <DataIndexMax>4</DataIndexMax>
          </HidValueCaps>
          <HidValueCaps>
            <UsagePage>65426</UsagePage>
            <ReportID>237</ReportID>
            <IsAlias>false</IsAlias>
            <BitField>2</BitField>
            <LinkCollection>0</LinkCollection>
            <LinkUsage>1</LinkUsage>
            <LinkUsagePage>128</LinkUsagePage>
            <IsRange>false</IsRange>
            <IsStringRange>false</IsStringRange>
            <IsDesignatorRange>false</IsDesignatorRange>
            <IsAbsolute>true</IsAbsolute>
            <HasNull>false</HasNull>
            <Reserved>0</Reserved>
            <BitSize>8</BitSize>
            <ReportCount>1</ReportCount>
            <Reserved2>
              <unsignedShort>0</unsignedShort>
              <unsignedShort>0</unsignedShort>
              <unsignedShort>0</unsignedShort>
              <unsignedShort>0</unsignedShort>
              <unsignedShort>0</unsignedShort>
            </Reserved2>
            <UnitsExp>0</UnitsExp>
            <Units>0</Units>
            <LogicalMin>1</LogicalMin>
            <LogicalMax>2</LogicalMax>
            <PhysicalMin>0</PhysicalMin>
            <PhysicalMax>0</PhysicalMax>
            <UsageMin>237</UsageMin>
            <UsageMax>237</UsageMax>
            <StringMin>0</StringMin>
            <StringMax>0</StringMax>
            <DesignatorMin>0</DesignatorMin>
            <DesignatorMax>0</DesignatorMax>
            <DataIndexMin>5</DataIndexMin>
            <DataIndexMax>5</DataIndexMax>
          </HidValueCaps>
        </FeatureValueCaps>
        <InputButtonCaps>
          <HidButtonCaps>
            <UsagePage>130</UsagePage>
            <ReportID>16</ReportID>
            <IsAlias>false</IsAlias>
            <BitField>0</BitField>
            <LinkCollection>0</LinkCollection>
            <LinkUsage>1</LinkUsage>
            <LinkUsagePage>128</LinkUsagePage>
            <IsRange>false</IsRange>
            <IsStringRange>false</IsStringRange>
            <IsDesignatorRange>false</IsDesignatorRange>
            <IsAbsolute>true</IsAbsolute>
            <Reserved>
              <unsignedInt>0</unsignedInt>
              <unsignedInt>0</unsignedInt>
              <unsignedInt>0</unsignedInt>
              <unsignedInt>0</unsignedInt>
              <unsignedInt>0</unsignedInt>
              <unsignedInt>0</unsignedInt>
              <unsignedInt>0</unsignedInt>
              <unsignedInt>0</unsignedInt>
              <unsignedInt>0</unsignedInt>
              <unsignedInt>0</unsignedInt>
            </Reserved>
            <UsageMin>16</UsageMin>
            <UsageMax>16</UsageMax>
            <StringMin>0</StringMin>
            <StringMax>0</StringMax>
            <DesignatorMin>0</DesignatorMin>
            <DesignatorMax>0</DesignatorMax>
            <DataIndexMin>0</DataIndexMin>
            <DataIndexMax>0</DataIndexMax>
          </HidButtonCaps>
        </InputButtonCaps>
      </HidDeviceInfo>
    </ArrayOfHidDeviceInfo>
    

    HID information collected by FrancoisC at hardforum http://hardforum.com/showpost.php?p=1038833083&postcount=846

  4. Jens Holst Schumacher reporter

    Differences from 27" cinema display are simmilar to differences to the 24" cinema display. (different BitSize for report id 16 and stuff like that) Alle the UI and control logic are in place so i just need to a class with the specifics for the TB display.

  5. Log in to comment