Aiemmin selvittelin fyysisen rajapinnan toteutusta, sekä liikenteen kaappaamista. Seuraava askel on saada äänenvoimakkuustieto esille, jotta saan projektin alkuperäisen tavoitteen täytettyä. Mutta, homma lähti vähän lapasesta. Näistä lisää tulevissa julkaisuissa.
Datan dekoodaus
Kehysten alku mietitytti. Äänenvoimakkuuskehykset alkoivat aina samalla tavalla, 1F0 01F, mutta ensimmäinen sana vaihtui sen mukaan, ohjasinko äänenvoimakkuutta analogisäätimellä vai GLM-sovelluksella. Toinen sana pysyi koko ajan samana.
Päättelin, että ensimmäinen on osoite tai lähettäjän tunniste ja toinen äänenvoimakkuuskomento. Kolme seuraavaa sanaa muuttuivat asetusarvon mukana, joten niissä kulki itse äänenvoimakkuus. Lopussa oli vielä kaksi sanaa, jotka näyttivät tarkisteelta, ja viimeisenä päättymismerkki.
Tässä kohdassa tekoälystä oli hyötyä. Annoin sille joitain eri äänenvoimakkuusasetuksia ja väylältä luetut arvot, ja se löysi niiden välisen korrelaation. Pian laskentakaava putkahtikin ulos:
Tässä raw on 24-bittinen arvo, joka muodostuu kolmesta datasanasta. Esimerkiksi:
07F 0FF 0FF: 0,0 dB000 000 008: −120,4 dB (tämä on hieman harhaanjohtava, sillä GLM-ohjelma näyttää tässä −100,0 dB)
Sanat, joita tarkisteeksi epäilin, olivat aluksi Claudelle täysi mysteeri. Kun annoin sille vihjeen, että kyseessä voisi olla CRC, korrelaatio löytyi taas. Kyseessä on CRC-16/GSM, jonka parametrit ovat:
- Polynomial:
0x1021 - Initial value:
0x0000 - RefIn / RefOut:
False(no bit-reversal of input bytes or final result) - XorOut:
0xFFFF(the raw CRC is inverted at the end)
CRC lasketaan osoitesanan alatavusta (esimerkiksi 0xF0) ja sen jälkeisestä datasta, eli päättävää 07E-merkkiä ei oteta mukaan. Claude kirjoitti myös esimerkkikoodin CRC:n laskemiseksi.
Äänenvoimakkuuden lukeminen onnistuu ilman CRC:täkin. Sen tarkistaminen on silti kannattavaa, sillä väylällä voi tulla bittivirheitä. Näytöllä väärä arvo vilahtaa vain hetken, mutta jos virheellinen arvo päätyisi vahvistimeen asti, korvat voisivat joutua koville 😉
Yksi kokonainen äänifreimi
Katsotaan lopuksi yksi kehys sana kerrallaan. Äänenvoimakkuus on −45,0 dB, ja sitä säädetään GLM-sovelluksella:
1FF 01F 000 0B8 044 0F5 0FD 07E
| Sana | Arvo | Merkitys |
|---|---|---|
| 1 | 1FF | Osoite, broadcast |
| 2 | 01F | Äänenvoimakkuuskomento |
| 3–5 | 000 0B8 044 | raw = 0x00B844 = 47172, josta 20 × log10(47172) − 138,4738 = −45,0 dB |
| 6–7 | 0F5 0FD | CRC-16/GSM |
| 8 | 07E | Kehyksen päättävä merkki |
Sama äänenvoimakkuus, kun sitä säädetään kaukosäätimellä tai analogisäätimellä, näyttää tältä:
1F0 01F 000 0B8 044 090 004 07E
Eroja on kaksi. Osoite on 1F0, eli lähettäjänä on hubi, ja CRC on eri (090 004). Äänenvoimakkuuden arvo ei muutu. CRC vaihtuu, koska se lasketaan osoitteen alatavusta alkaen, joten eri osoite antaa eri CRC:n, vaikka muu sisältö olisi sama.
Nyt kaikki on selvillä näyttöprojektin toteuttamiseksi, joka on ensikerran aihe.