63 lines
1.2 KiB
Markdown
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` |