Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Rise Mode Temp 6 Pro — display no Linux

Driver que faz o display do air cooler Rise Mode Temp 6 Pro funcionar no Linux, mostrando temperatura e uso da CPU em tempo real — o mesmo que o software oficial faz no Windows.

O protocolo foi obtido por engenharia reversa do DeviceDriver.exe oficial e confirmado contra o report descriptor do próprio dispositivo. Este repositório contém apenas código próprio e a documentação do protocolo; nenhum arquivo da Rise Mode é redistribuído.

  • Dispositivo: USB 1a2c:4984 (identifica-se como "SEMICO USB Gaming Keyboard")
  • Testado em: Ubuntu, kernel 7.0
  • Não precisa de root para rodar (só para instalar a regra udev)

Provavelmente funciona também no Temp 8 e em outros air coolers Rise Mode com display, já que compartilham o mesmo software oficial. Se você testar em outro modelo, abra uma issue contando o resultado.

Instalação

git clone https://github.com/aseriosouza/risemode-temp6pro-linux.git
cd risemode-temp6pro-linux
./install.sh

O install.sh faz tudo: instala o python3-psutil se faltar, cria a regra udev (pede sudo) e registra um serviço de usuário que sobe no login.

Pronto — o display já deve estar mostrando a temperatura.

Desinstalar

./install.sh --uninstall

Uso

O serviço roda sozinho. Para controlá-lo:

systemctl --user status risemode-display     # ver estado
systemctl --user restart risemode-display    # reiniciar
systemctl --user stop risemode-display       # parar
journalctl --user -u risemode-display -f     # acompanhar o log

Rodando na mão:

./rise_temp6pro.py                # loop com valores reais
./rise_temp6pro.py --demo         # alterna 11 e 99, para conferir a olho
./rise_temp6pro.py --test         # 88 °C / 88% fixo
./rise_temp6pro.py --fahrenheit   # temperatura em Fahrenheit
./rise_temp6pro.py --interval 2   # atualiza a cada 2 segundos

Problemas

O display não acende

Quase sempre é o driver usbhid desanexado — acontece se algum script com pyusb/libusb pegou o dispositivo antes. Conserto:

sudo ./reanexar.sh

Depois:

./rise_temp6pro.py --demo

"nenhum /dev/hidraw do cooler encontrado"

Mesma causa acima. Se o reanexar.sh não resolver, desconecte e reconecte o cabo USB do cooler.

Conferir se o sistema enxerga o dispositivo

./detectar.sh

Deve aparecer 1a2c:4984 na lista. Se não aparecer, o problema é o cabo USB — esses coolers ligam num header USB interno da placa-mãe, e é comum o conector estar mal encaixado ou deslocado um pino.

O protocolo

Feature report ID 0x07, buffer de 64 bytes, enviado pelo ioctl HIDIOCSFEATURE em /dev/hidrawN — o equivalente exato do HidD_SetFeature que o software do Windows usa.

buf[0] = 0x07                 report ID
buf[1] = temperatura / 100 % 10
buf[2] = temperatura / 10  % 10
buf[3] = temperatura % 10
buf[4] = flags: bit0 (0x01) = Fahrenheit (0 = Celsius)
                bit4 (0x10) = o segundo valor é uso de CPU em %
buf[5] = uso / 100 % 10
buf[6] = uso / 10  % 10
buf[7] = uso % 10
buf[8..63] = 0

Temperatura é limitada a 999, uso a 100. Não há checksum. O software oficial envia a cada 1000 ms.

O próprio dispositivo declara isso no report descriptor, numa collection vendor-defined 0xFF01:

06 01 ff   Usage Page (Vendor-defined 0xFF01)
09 01      Usage 1
a1 01      Collection (Application)
85 07        Report ID 0x07
09 03        Usage 3
15 00        Logical Minimum 0
26 ff 00     Logical Maximum 255
75 08        Report Size 8 bits
95 3f        Report Count 63
b1 02        FEATURE (Data,Var,Abs)

Existe ainda um handshake [0x07, 0xFD, 0, ...] que o software oficial envia ao conectar e cuja resposta traz a versão do firmware, mas ele não é necessário para o display funcionar.

Detalhes que custaram caro

Ficam registrados porque não são óbvios e podem poupar horas de quem for mexer em displays parecidos:

1. Use hidraw, não pyusb/libusb. Esta é a lição principal. Mandar o mesmo report por ctrl_transfer do pyusb parece funcionar — o dispositivo aceita tudo e retorna sucesso — mas nada aparece na tela.

2. O dispositivo precisa estar ligado ao usbhid. Se um script com pyusb desanexar o driver do kernel, a interface fica em usbfs, o /dev/hidraw some, e o controlador entra num estado que engana o diagnóstico: aceita qualquer coisa em silêncio. Sinais desse estado:

  • STALL ao tentar ler o report descriptor
  • GET_REPORT devolvendo sempre 07 00 02 00... para qualquer report ID, o que parece uma resposta válida mas é enlatada

3. O display apaga se o fluxo parar. É preciso reenviar continuamente. Mandar um ou dois pacotes só faz a tela piscar.

4. O nó hidraw certo é o da segunda interface. O dispositivo cria dois nós; o do display é o que tem 85 07 e b1 02 no report_descriptor. O driver escolhe sozinho.

5. O flag 0x10 no buf[4] é obrigatório para o segundo número ser interpretado como uso de CPU. Sem ele o display ignora o valor.

Arquivos

Arquivo O que faz
rise_temp6pro.py O driver
install.sh Instala regra udev + serviço de usuário
reanexar.sh Devolve o dispositivo ao usbhid (precisa de sudo)
detectar.sh Diagnóstico: lista os dispositivos USB

Créditos

Ponto de partida: evozniak/risemode-driver, que faz o mesmo para o water cooler Rise Mode Aura Ice Black (USB aa88:8666, protocolo diferente deste).

Licença

MIT — veja LICENSE.

About

Driver Linux para o display do air cooler Rise Mode Temp 6 Pro (USB 1a2c:4984) - mostra temperatura e uso da CPU

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages