63 lines
1.2 KiB
Markdown

# Decoder PA12
## Decisión final
El decoder correcto para leer `PA12` en este kit es:
- byte objetivo: `byte6`
- bit objetivo: `bit1`
- máscara: `0x02`
Expresión correcta:
```js
const byte6 = (b.length > 6) ? b[6] : 0x00;
const pa12 = (byte6 & 0x02) ? 1 : 0;
````
## Lo que se descartó
Se descartó el uso de `byte5` como indicador fiable del estado de `PA12`.
Durante una fase del diagnóstico parecía que dos tramas diferían en `byte5`, pero la prueba determinista sin sensor demostró que ese byte variaba por otros motivos y no era el bit correcto.
## Prueba determinista que cerró el diagnóstico
### Forzando `PA12` a `VDD`
* `raw_hex: "0e647fff003f02ffffffff"`
* `byte6 = 0x02`
* `PA12 = 1`
### Forzando `PA12` a `GND`
* `raw_hex: "0e647fff003700ffffffff"`
* `byte6 = 0x00`
* `PA12 = 0`
## Decoder limpio mínimo
```js
function decodeUplink(input) {
const b = input.bytes;
const byte6 = (b.length > 6) ? b[6] : 0;
const pa12 = (byte6 & 0x02) ? 1 : 0;
return {
data: {
pa12,
drenaje: pa12,
drenaje_inv: pa12 ? 0 : 1,
byte6,
raw_hex: b.map(x => x.toString(16).padStart(2, '0')).join('')
}
};
}
```
## Conclusión
En este kit:
* `byte6 = 0x02` -> `drenaje = 1`
* `byte6 = 0x00` -> `drenaje = 0`