The Corsair User Forums  

Go Back   The Corsair User Forums > Corsair Product Discussion > Corsair Link

Reply
 
Thread Tools Search this Thread Rating: Thread Rating: 252 votes, 5.00 average. Display Modes
  #151  
Old 05-30-2015, 07:12 PM
alias_neo alias_neo is offline
Registered User
alias_neo's PC Specs
 
Join Date: May 2015
Posts: 2
POST ID # = 781899
alias_neo Reputation: 10
Lightbulb Analog to Digital Bridge?

Hi Guys,

Fantastic work on the protocol specification. I got myself a Corsair Link Bridge based on this thread in the hope that it might have somehow worked with the Bridge.

Sadly, even with modified IDs, although I can get a handle to the device in the CorsairLink init, I can't get the ID or anything further.

Has any work been done towards the Analog bridge? I bought this to go in my headless server so I can log some PSU stats, I don't run Windows anywhere so I don't even know what information the PSU can give since I've never been able to run the software.

I have the output of lsusb if it's of any use;

Code:
$ sudo lsusb -D /dev/bus/usb/001/002
Device: ID 1b1c:0c06 Corsair 
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0         8
  idVendor           0x1b1c Corsair
  idProduct          0x0c06 
  bcdDevice            0.03
  iManufacturer           1 Corsair Memory, Inc.
  iProduct                2 RM-Series C-Link Adapter
  iSerial                 0 
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           34
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0x80
      (Bus Powered)
    MaxPower              100mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      0 No Subclass
      bInterfaceProtocol      0 None
      iInterface              0 
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.11
          bCountryCode            0 Not supported
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength      27
          Report Descriptor: (length is 27)
            Item(Global): Usage Page, data= [ 0x00 0xff ] 65280
                            (null)
            Item(Local ): Usage, data= [ 0x01 ] 1
                            (null)
            Item(Main  ): Collection, data= [ 0x01 ] 1
                            Application
            Item(Global): Report Size, data= [ 0x08 ] 8
            Item(Global): Logical Minimum, data= [ 0x00 ] 0
            Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255
            Item(Global): Report Count, data= [ 0x08 ] 8
            Item(Local ): Usage, data= [ 0x01 ] 1
                            (null)
            Item(Main  ): Input, data= [ 0x02 ] 2
                            Data Variable Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile Bitfield
            Item(Global): Report Count, data= [ 0x08 ] 8
            Item(Local ): Usage, data= [ 0x02 ] 2
                            (null)
            Item(Main  ): Output, data= [ 0x02 ] 2
                            Data Variable Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile Bitfield
            Item(Main  ): End Collection, data=none
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0008  1x 8 bytes
        bInterval              10
Device Status:     0x0000
  (Bus Powered)

If I run the modified OpenCorsairLink with the new IDs in place of either the CLINK or the H80I devices I get the following:

Code:
$ sudo ./OpenCorsairLink 
Open Corsair Link (Cooling Node):
Error: Unable to write() No data available
Device ID: 00 mismatch. Not Corsair Cooling Node
Cannot initialize link.
I get the same thing using the other method and my ID.

Anyone able to point me in the right direction? I have zero experience with HID devices but am happy to write up the rest of the code required to communicate with the device if someone can help get me communicating with it.
Reply With Quote


  #152  
Old 05-31-2015, 03:24 AM
red-ray red-ray is offline
Banned
red-ray's PC Specs
 
Join Date: May 2014
Location: England (GMT+1)
Posts: 7,152
POST ID # = 781932
red-ray Reputation: 81
Arrow Corsair RM-Series C-Link Adapter Protocol

Does http://forum.corsair.com/forums/show...521#post755521 tell you all you need?

Last edited by red-ray; 05-31-2015 at 03:26 AM.
Reply With Quote


  #153  
Old 05-31-2015, 07:11 AM
alias_neo alias_neo is offline
Registered User
alias_neo's PC Specs
 
Join Date: May 2015
Posts: 2
POST ID # = 781943
alias_neo Reputation: 10
Default

Quote:
Originally Posted by red-ray View Post
Thanks,

That'll do nicely when I'm finally able to get the data out.

I'm trying to use python currently to prototype this, but I really don't know what I need to write to the device in order to get an input report from it.

Anyone able to offer help with that?
Reply With Quote


  #154  
Old 06-17-2015, 05:12 AM
directhex directhex is offline
Registered User
 
Join Date: Sep 2014
Posts: 10
POST ID # = 785211
directhex Reputation: 10
Default

I'm going all-in.

Found a kernel module someone wrote in 2008 for the Gigabyte Odin GT, which had similar proprietary-protocol-USB-HID based monitoring/control. Using it as a basis for corsair-link.ko. Have some kernel developer friends coaching me.
Reply With Quote


  #155  
Old 06-17-2015, 02:06 PM
directhex directhex is offline
Registered User
 
Join Date: Sep 2014
Posts: 10
POST ID # = 785277
directhex Reputation: 10
Default

Sorry, perhaps I'm being dense, but I don't understand what H100i registers 15 and 18 are for
Reply With Quote


  #156  
Old 06-17-2015, 04:36 PM
red-ray red-ray is offline
Banned
red-ray's PC Specs
 
Join Date: May 2014
Location: England (GMT+1)
Posts: 7,152
POST ID # = 785312
red-ray Reputation: 81
Default

Do you mean 15. and 18. or 0x15 and 0x18? Add a link to what you are looking at.
Reply With Quote


  #157  
Old 06-19-2015, 06:31 PM
directhex directhex is offline
Registered User
 
Join Date: Sep 2014
Posts: 10
POST ID # = 785694
directhex Reputation: 10
Default

0x15 and 0x18 on http://forum.corsair.com/v3/showpost...1&postcount=32 - I'm not sure I understand what those are used for, from the description
Reply With Quote


  #158  
Old 06-19-2015, 06:43 PM
red-ray red-ray is offline
Banned
red-ray's PC Specs
 
Join Date: May 2014
Location: England (GMT+1)
Posts: 7,152
POST ID # = 785699
red-ray Reputation: 81
Default

0x15 RW 2 bytes Report external temperature to fan controller - used for controlling fans via external sensors

This needs to be written when using curve mode 7 (manual) to set the external temperature. An example would be setting the Disk temperature to control fans that cool the Disk Drive.

0x18 RW 2 bytes Fan under speed threshold

I have not used this. I expect if the fan drops below this value the status (0x03) will be set of 0xFF.
Reply With Quote


  #159  
Old 06-22-2015, 07:59 AM
levi.baker88 levi.baker88 is offline
Registered User
levi.baker88's PC Specs
 
Join Date: Sep 2014
Location: Australia
Posts: 43
POST ID # = 786057
levi.baker88 Reputation: 10
Default

Very interesting read and rather impressive. Someone, somewhere, always finds a way.
Reply With Quote


1 members found this post helpful.
  #160  
Old 06-26-2015, 04:50 PM
directhex directhex is offline
Registered User
 
Join Date: Sep 2014
Posts: 10
POST ID # = 786908
directhex Reputation: 10
Default

Does

Code:
03 01 09 01 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Look like a correct HID report to send to an H100i to get the FW version?

I'm no longer causing kernel oopses all the bloody time, but my report_in is all 0's. I'm not sure if the problem is in my kernel send/reply code, or the actual HID report I'm sending.

3 significant bytes, command id 1, retrieve 2-byte value opcode, register 0x01 (firmware version)
Reply With Quote


  #161  
Old 06-26-2015, 05:44 PM
red-ray red-ray is offline
Banned
red-ray's PC Specs
 
Join Date: May 2014
Location: England (GMT+1)
Posts: 7,152
POST ID # = 786918
red-ray Reputation: 81
Arrow Send a 0x4F command

I suspect the attached SIV startup log may help you know what to send. Note that on Windows there is a one byte header (the RID) which I don't think is there on Linux.

SIV-Startup-More.txt is an annotated log with rather more CL hardware connected. This is the sort of setup I advise you to design for as CL 3 only reports some of these devices. 2 x CLCC are missing and all the devices attached via them and one of the RM-Series C-Link Adapters.

I don't think this thread mentioned the 0x4F command. This should be sent first to find out which bridge channels are being used and what type of device they are. There are 8 bytes in the reply, one for each C-Link channel. The channel index must be in the high nibble of the command.

Quote:
Code:
GID     @ 07:58:38 seq 01 -> 00 02 01 4F 00 00 00 00 00 00 00 00 00 00 00 00
GID                seq 01 <- 00 01 0F 05 FF 05 05 01 FF FF FF 00 00 00 00 00

#define CLC_SET_BYTE    0x06    // 06 AA BB          - Write BB into one-byte register AA
#define CLC_GET_BYTE    0x07    // 07 AA             - Read from one-byte register AA
#define CLC_SET_WORD    0x08    // 08 AA BB CC       - Write BB CC into two-byte register AA
#define CLC_GET_WORD    0x09    // 09 AA             - Read from two-byte register AA
#define CLC_SET_MANY    0x0A    // 0A AA 03 00 11 22 - Write 3-byte sequence (00 11 22) into 3-byte register AA
#define CLC_GET_MANY    0x0B    // 0B AA 03          - Read from 3-byte register AA
#define CLC_GET_CHAN    0x4F    // 4F                - Report Channels - 8 byte reply

#define CCT_PSUS        0x01    // PSU type Channel
#define CCT_FLOW        0x03    // AirFlow  Channel
#define CCT_LINK        0x05    //    Link  Channel
Attached Files
File Type: txt SIV-Startup-Log.txt (10.8 KB, 163 views)
File Type: txt SIV-Startup-More.txt (41.0 KB, 163 views)

Last edited by red-ray; 02-04-2017 at 08:56 AM. Reason: Added SIV startup log and channel info
Reply With Quote


1 members found this post helpful.
  #162  
Old 06-27-2015, 04:57 AM
directhex directhex is offline
Registered User
 
Join Date: Sep 2014
Posts: 10
POST ID # = 786980
directhex Reputation: 10
Default

Quote:
Originally Posted by red-ray View Post
I suspect the attached SIV startup log may help you know what to send. Note that on Windows there is a one byte header (the RID) which I don't think is there on Linux.

I don't think this thread mentions the 0x4F command. This should be sent first to find out which bridge channels are being used and what type of device they are. There are 8 bytes on the reply, one for each C-Link channel. The channel index must be in the high nibble of the command.

Code:
GID     @ 07:58:38 seq 01 -> 00 02 01 4F 00 00 00 00 00 00 00 00 00 00 00 00
GID                seq 01 <- 00 01 0F 05 FF 05 05 01 FF FF FF 00 00 00 00 00

#define CLC_SET_BYTE    0x06    // 06 AA BB          - Write BB into one-byte register AA
#define CLC_GET_BYTE    0x07    // 07 AA             - Read from one-byte register AA
#define CLC_SET_WORD    0x08    // 08 AA BB CC       - Write BB CC into two-byte register AA
#define CLC_GET_WORD    0x09    // 09 AA             - Read from two-byte register AA
#define CLC_SET_MANY    0x0A    // 0A AA 03 00 11 22 - Write 3-byte sequence (00 11 22) into 3-byte register AA
#define CLC_GET_MANY    0x0B    // 0B AA 03          - Read from 3-byte register AA
#define CLC_GET_CHAN    0x4F    // 4F                - Report Channels - 8 byte reply

#define CCT_PSUS        0x01    // PSU type Channel
#define CCT_FLOW        0x03    // AirFlow  Channel
#define CCT_LINK        0x05    //    Link  Channel
Brilliant, thank you. That looks exactly like what I've been missing.
Reply With Quote


  #163  
Old 07-20-2015, 10:02 AM
Nadar Nadar is offline
Registered User
 
Join Date: Apr 2013
Posts: 49
POST ID # = 790313
Nadar Reputation: 12
Default

Quote:
Originally Posted by red-ray View Post
I have some code in SIV that manages to read the temperature, fan and pump speeds from a H100iGTX, but it also seems to set the fans to 100%. The SIV message trace is as below.
The USB trace I sent you earlier was useless? I can do another, but I simply don't know how to get a usable trace with a software capturer.
Reply With Quote


  #164  
Old 07-20-2015, 07:46 PM
Nadar Nadar is offline
Registered User
 
Join Date: Apr 2013
Posts: 49
POST ID # = 790436
Nadar Reputation: 12
Default

Quote:
Originally Posted by red-ray View Post
That was a while ago, I can't find it and can't even remember which cooler you have. Was it the raw trace file or a hex printout of the data in the packets? I just need the hex printout. Now I have managed to get SIV showing signs of life I suspect I will try harder.
I have the H100iGTX and sent you a USBPcap trace (Wireshark compatible). The problem was that it captured everything on the root hub in question, including mouse and keyboard events, so some filterint was needed.

There's not a lot of possibilities for capturing USB via software on Windows as far as I can see, if you like me to try something else just name it.

Quote:
Originally Posted by red-ray View Post
Looking at http://forums.aida64.com/topic/892-t...u-cooler-data/ I suspect AIDA64 may report your cooler. Does it and if so do the fans get switched to 100%?
AIDA64 is payware only offering "trials" which is probably full of nagware and other nasties. I'd rather not install that.
Reply With Quote


  #165  
Old 07-23-2015, 03:07 AM
red-ray red-ray is offline
Banned
red-ray's PC Specs
 
Join Date: May 2014
Location: England (GMT+1)
Posts: 7,152
POST ID # = 790888
red-ray Reputation: 81
Default CAM X41 USB Trace

Using the following USB trace of CAM reporting an X41 I got SIV working with all of the H110iGTX, H100iGTX, H80iHT and NZXT X41 coolers.

Attached Images
File Type: png X41_CAM_USB_TRAFFIC.png (159.8 KB, 2546 views)
Reply With Quote


1 members found this post helpful.
Reply

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 10:36 AM.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2019, vBulletin Solutions, Inc.