Treat signal level in network messages as a (RMS) amplitude, since that
is what was previously done and it gives us better range for small signals. Means a sqrt() call on beast output, but this shouldn't be too bad as it's only done once per message.
This commit is contained in:
parent
fac838b9ad
commit
89d6b64747
8
net_io.c
8
net_io.c
|
@ -293,7 +293,7 @@ void modesSendBeastOutput(struct modesMessage *mm) {
|
||||||
if (0x1A == ch) {*p++ = ch; }
|
if (0x1A == ch) {*p++ = ch; }
|
||||||
}
|
}
|
||||||
|
|
||||||
*p++ = ch = (char) round(mm->signalLevel * 255);
|
*p++ = ch = (char) round(sqrt(mm->signalLevel) * 255);
|
||||||
if (0x1A == ch) {*p++ = ch; }
|
if (0x1A == ch) {*p++ = ch; }
|
||||||
|
|
||||||
for (j = 0; j < msgLen; j++) {
|
for (j = 0; j < msgLen; j++) {
|
||||||
|
@ -569,7 +569,8 @@ int decodeBinMessage(struct client *c, char *p) {
|
||||||
}
|
}
|
||||||
|
|
||||||
ch = *p++; // Grab the signal level
|
ch = *p++; // Grab the signal level
|
||||||
mm.signalLevel = 1e-5 + (unsigned char)ch / 256.0;
|
mm.signalLevel = ((unsigned char)ch / 256.0);
|
||||||
|
mm.signalLevel = mm.signalLevel * mm.signalLevel + 1e-5;
|
||||||
if (0x1A == ch) {p++;}
|
if (0x1A == ch) {p++;}
|
||||||
|
|
||||||
for (j = 0; j < msgLen; j++) { // and the data
|
for (j = 0; j < msgLen; j++) { // and the data
|
||||||
|
@ -645,7 +646,8 @@ int decodeHexMessage(struct client *c, char *hex) {
|
||||||
|
|
||||||
switch(hex[0]) {
|
switch(hex[0]) {
|
||||||
case '<': {
|
case '<': {
|
||||||
mm.signalLevel = 1e-5 + ((hexDigitVal(hex[13])<<4) | hexDigitVal(hex[14])) / 256.0;
|
mm.signalLevel = ((hexDigitVal(hex[13])<<4) | hexDigitVal(hex[14])) / 256.0;
|
||||||
|
mm.signalLevel = mm.signalLevel * mm.signalLevel + 1e-5;
|
||||||
hex += 15; l -= 16; // Skip <, timestamp and siglevel, and ;
|
hex += 15; l -= 16; // Skip <, timestamp and siglevel, and ;
|
||||||
break;}
|
break;}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue