Até onde sei todos os aparelhos da GVT usam o mesmo controle remoto e a VIVO ao comprar a GVT só mudou o nome.
Protocolo RC6 de 36 bits
O quinto byte alterna (é um protocolo Philips) entre “A” (00001010) e “2” (00000010)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
|
Power 0x8070A60C MUTE 0x8070260D 1 0x8070A601 2 0x80702602 3 0x8070A603 4 0x80702604 5 0x8070A605 6 0x80702606 7 0x8070A607 8 0x80702608 9 0x8070A609 0 0x80702600 Source 0x8070A68B @ 0x807026FB Menu 0x8070A654 Sair 0x80702683 UP 0x8070A658 DOWN 0x80702659 LEFT 0x8070A65A RIGHT 0x8070265B OK 0x8070A65C Voltar 0x807026A9 Guia 0x8070A6CC Opcoes(laranja) 0x807026A3 Info 0x8070A60F GVT 0x807026A2 VOL+ 0x8070A610 VOL- 0x80702611 CH+ 0x8070A61E CH- 0x8070261F RED 0x8070A66D GREEN 0x8070266E YELLOW 0x8070A66F BLUE 0x80702670 REW 0x8070A62B Stop 0x8070A631 Play/Pause 0x8070262C FFW 0x8070A628 ?1 0x807026F0 ?2 0x8070A6A4 REC 0x80702637 ?4 0x8070A6A5 |
|
 |
Este controle tem uma particularidade. As rotinas de leitura da biblioteca IRremoteESP8266 interpretam sem problemas os comandos acima, mas se você usar esses comandos com a função sendRC6 da mesma biblioteca, o receptor da GVT ignora completamente. A mesma biblioteca mostra que o que ela está transmitindo não bate com o remoto original. Se você transmitir com 36 bits é completamente diferente. Se transmitir como 32 bits o código decodificado confere, mas há uma diferença.
Analisando bit por bit eu identifiquei essa diferença. É assim a forma real do código da tecla “zero”:

O zero em preto é o start bit do protocolo RC6. Tudo depois dele (10000000011100000010011000000000) já é o código para a tecla zero (80702600 em binário).
Os quatro bits que antecedem o start bit (1110) não existem no protocolo RC6 como definido pela biblioteca.
E criei uma nova função que chamei de sendRC6gvt.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
void ICACHE_FLASH_ATTR IRsend::sendRC6gvt(unsigned long data, int nbits) { // Set IR carrier frequency enableIROut(36); // Header mark(RC6_HDR_MARK); //header space(RC6_HDR_SPACE); mark(RC6_T1); space(RC6_T1); mark(RC6_T1); space(RC6_T1); mark(RC6_T1); space(RC6_T1); space(RC6_T1); mark(RC6_T1); space(2*RC6_T1); //trailer bits mark(2*RC6_T1); int t; // Data for (unsigned long i = 0, mask = 1UL << (nbits - 1); mask; i++, mask >>= 1) { // The fourth bit we send is a "double width trailer bit". t = RC6_T1; if (data & mask) { // 1 mark(t); space(t); } else { // 0 space(t); mark(t); } } // Footer ledOff(); } |
Eu acrescentei essa rotina ao arquivo IRremoteESP8266.cpp e a chamada para ela em IRremoteESP8266.h. Eu estou usando a versão 1.x. Se você estiver usando a versão 2.x vai precisar fazer algumas mudanças.
Note que você deve chamar essa rotina alternativa dizendo que o código é de 32bits e não de 36. Os outros 4 bits, do cabeçalho, minha rotina transmite “por fora”.
Comentários