Move all the text decoders to a separate file.
This commit is contained in:
@@ -11,6 +11,7 @@
|
||||
#include <time.h>
|
||||
#include <timeapi.h>
|
||||
#include "SerialPort\SerialPort.h"
|
||||
#include "AVRCommandDecoder.h"
|
||||
|
||||
enum
|
||||
{
|
||||
@@ -251,57 +252,6 @@ bool ProcessSerialReceive(void);
|
||||
void EnumerateComPorts();
|
||||
unsigned long Hex2Dec(uint8_t *p, int dig);
|
||||
|
||||
// Helpers to convert status codes to text
|
||||
const char *BusyToText(uint8_t val);
|
||||
const char *WarnToText(uint8_t val);
|
||||
const char *PlaybackToText(uint8_t val);
|
||||
const char *FsToText(uint8_t val);
|
||||
const char *OffMatrixDiscreteText(uint8_t val);
|
||||
const char *OffMatrixDiscreteAutoText(uint8_t val);
|
||||
const char *ReleaseWaitText(uint8_t val);
|
||||
const char *NotTunedTunedText(uint8_t val);
|
||||
const char *InputModeText(uint8_t val);
|
||||
const char *PresetNumberText(uint8_t val);
|
||||
const char *OSDFullShortOffText(uint8_t val);
|
||||
const char *SleepTimerText(uint8_t val);
|
||||
const char *InputText(uint8_t val);
|
||||
const char *ZonePower(uint8_t val);
|
||||
const char *VolumeDB(uint8_t val);
|
||||
const char *PM10dbText(uint8_t val);
|
||||
const char *M20P0dbText(uint8_t val);
|
||||
const char *BalanceText(uint8_t val);
|
||||
const char *ZeroTo160msText(uint8_t val);
|
||||
const char *ZeroTo5msText(uint8_t val);
|
||||
const char *ZeroTo30msText(uint8_t val);
|
||||
const char *AutoLastText(uint8_t val);
|
||||
const char *M4To0Text(uint8_t val);
|
||||
const char *M5toP5Text(uint8_t val);
|
||||
const char *OffAutoText(uint8_t val);
|
||||
const char *MaxStdMinText(uint8_t val);
|
||||
const char *VarFixText(uint8_t val);
|
||||
const char *Mode1Mode2Text(uint8_t val);
|
||||
const char *LSNText(uint8_t val);
|
||||
const char *LLSSNText(uint8_t val);
|
||||
const char *YesNoneText(uint8_t val);
|
||||
const char *SwfrMainBothText(uint8_t val);
|
||||
const char *LrFrNoneText(uint8_t val);
|
||||
const char *CenterMainText(uint8_t val);
|
||||
const char *SwfrMainText(uint8_t val);
|
||||
const char *SurrMainText(uint8_t val);
|
||||
const char *SixEightText(uint8_t val);
|
||||
const char *CrossOverText(uint8_t val);
|
||||
const char *OffDolbyDspText(uint8_t val);
|
||||
const char *OffOn2OnMultiText(uint8_t val);
|
||||
const char *M10P10dbText(uint8_t val);
|
||||
|
||||
const char *ProgramName(uint8_t val);
|
||||
const char *OffOnText(uint8_t val);
|
||||
const char *FMAMText(uint8_t val);
|
||||
const char *PresetLabelText(uint8_t val);
|
||||
const char *MainSubAllText(uint8_t val);
|
||||
const char *WhichZoneText(uint8_t val);
|
||||
const char *Norm10dbDownText(uint8_t val);
|
||||
const char *MainZoneBText(uint8_t val);
|
||||
|
||||
|
||||
|
||||
@@ -358,6 +308,8 @@ typedef struct {
|
||||
Message_T TxMsg;
|
||||
} UserCmd_T;
|
||||
|
||||
// Runtime commands from the keyboard to send to the AVR
|
||||
//
|
||||
const UserCmd_T UserCommands[] = {
|
||||
{ 'R', "Ready", {"\x11" "000" "\x03", 5 } },
|
||||
{ 'P', "Power On", {"\x02" "07A1D" "\x03", 7} },
|
||||
@@ -390,16 +342,6 @@ typedef struct {
|
||||
const char *(*fncValueToText)(uint8_t rDat);
|
||||
} MessageHandler_T;
|
||||
|
||||
void RxSystemReport( uint8_t rCmd, uint8_t rDat, uint8_t *pMessage, uint32_t msgLen);
|
||||
void RxWarningReport(uint8_t rCmd, uint8_t rDat, uint8_t *pMessage, uint32_t msgLen);
|
||||
void RxPlaybackReport(uint8_t rCmd, uint8_t rDat, uint8_t *pMessage, uint32_t msgLen);
|
||||
void RxFsReport(uint8_t rCmd, uint8_t rDat, uint8_t *pMessage, uint32_t msgLen);
|
||||
|
||||
void RxPowerStatus( uint8_t rCmd, uint8_t rDat, uint8_t *pMessage, uint32_t msgLen);
|
||||
|
||||
void RxMasterVolStatus(uint8_t rCmd, uint8_t rDat, uint8_t *pMessage, uint32_t msgLen);
|
||||
void RxProgramStatus(uint8_t rCmd, uint8_t rDat, uint8_t *pMessage, uint32_t msgLen);
|
||||
|
||||
|
||||
// rCmd: 2-ASCII Hex Bytes converted to uint8_t
|
||||
// configOffset: offset into avrStatus.config.DTxx
|
||||
@@ -526,80 +468,6 @@ const MessageHandler_T MessageHandlers[] = {
|
||||
|
||||
};
|
||||
|
||||
// RCMD 00
|
||||
//
|
||||
void RxSystemReport(uint8_t rCmd, uint8_t rDat, uint8_t *pMessage, uint32_t msgLen) {
|
||||
(void)rCmd, pMessage, msgLen;
|
||||
//SetData(&avrStatus.config.DT8, pMessage + 5, 2);
|
||||
char buf[MAXTEXTLEN];
|
||||
sprintf_s(buf, MAXTEXTLEN, "System Report: %s\n", BusyToText(rDat));
|
||||
Console_Write(buf);
|
||||
Console_ScrollBottomRegion(scrollTop, scrollBot);
|
||||
//ShowAllStatusInfo();
|
||||
}
|
||||
|
||||
// RCMD 01
|
||||
//
|
||||
void RxWarningReport(uint8_t rCmd, uint8_t rDat, uint8_t *pMessage, uint32_t msgLen) {
|
||||
(void)rCmd, pMessage, msgLen;
|
||||
//SetData(&avrStatus.config.DT8, pMessage + 5, 2);
|
||||
char buf[MAXTEXTLEN];
|
||||
sprintf_s(buf, MAXTEXTLEN, "Warning Report: %s\n", WarnToText(rDat));
|
||||
Console_Write(buf);
|
||||
Console_ScrollBottomRegion(scrollTop, scrollBot);
|
||||
//ShowAllStatusInfo();
|
||||
}
|
||||
|
||||
// RCMD 10
|
||||
void RxPlaybackReport(uint8_t rCmd, uint8_t rDat, uint8_t *pMessage, uint32_t msgLen) {
|
||||
(void)rCmd, pMessage, msgLen;
|
||||
char buf[MAXTEXTLEN];
|
||||
sprintf_s(buf, MAXTEXTLEN, "Playback Report: %s\n", PlaybackToText(rDat));
|
||||
Console_Write(buf);
|
||||
Console_ScrollBottomRegion(scrollTop, scrollBot);
|
||||
//ShowAllStatusInfo();
|
||||
}
|
||||
|
||||
// RCMD 11
|
||||
void RxFsReport(uint8_t rCmd, uint8_t rDat, uint8_t *pMessage, uint32_t msgLen) {
|
||||
(void)rCmd, pMessage, msgLen;
|
||||
char buf[MAXTEXTLEN];
|
||||
sprintf_s(buf, MAXTEXTLEN, "Fs Report: %s\n", FsToText(rDat));
|
||||
Console_Write(buf);
|
||||
Console_ScrollBottomRegion(scrollTop, scrollBot);
|
||||
//ShowAllStatusInfo();
|
||||
}
|
||||
|
||||
// RCMD 20
|
||||
void RxPowerStatus(uint8_t rCmd, uint8_t rDat, uint8_t *pMessage, uint32_t msgLen) {
|
||||
(void)rCmd, pMessage, msgLen;
|
||||
//SetData(&avrStatus.config.DT8, pMessage + 5, 2);
|
||||
char buf[MAXTEXTLEN];
|
||||
sprintf_s(buf, MAXTEXTLEN, "Zone Power: %s\n", ZonePower(rDat));
|
||||
Console_Write(buf);
|
||||
Console_ScrollBottomRegion(scrollTop, scrollBot);
|
||||
//ShowAllStatusInfo();
|
||||
}
|
||||
|
||||
// RCMD 26
|
||||
void RxMasterVolStatus(uint8_t rCmd, uint8_t rDat, uint8_t *pMessage, uint32_t msgLen) {
|
||||
(void)rCmd, pMessage, msgLen;
|
||||
char buf[MAXTEXTLEN];
|
||||
sprintf_s(buf, MAXTEXTLEN, "Vol: %s\n", VolumeDB(rDat));
|
||||
Console_Write(buf);
|
||||
Console_ScrollBottomRegion(scrollTop, scrollBot);
|
||||
//ShowAllStatusInfo();
|
||||
}
|
||||
|
||||
// RCMD 28
|
||||
void RxProgramStatus(uint8_t rCmd, uint8_t rDat, uint8_t *pMessage, uint32_t msgLen) {
|
||||
(void)rCmd, pMessage, msgLen;
|
||||
char buf[MAXTEXTLEN];
|
||||
sprintf_s(buf, MAXTEXTLEN, "Vol: %s\n", ProgramName(rDat));
|
||||
Console_Write(buf);
|
||||
Console_ScrollBottomRegion(scrollTop, scrollBot);
|
||||
//ShowAllStatusInfo();
|
||||
}
|
||||
|
||||
int CS_KeyHit() {
|
||||
int h = _kbhit();
|
||||
@@ -806,631 +674,6 @@ static void PCMessage(const char *msg, int len, uint8_t **src, const char * (fnc
|
||||
}
|
||||
|
||||
|
||||
const char * BusyToText(uint8_t val) {
|
||||
static char buf[16];
|
||||
if (val == 0) {
|
||||
strcpy_s(buf, sizeof(buf), "OK");
|
||||
} else if (val == 1) {
|
||||
strcpy_s(buf, sizeof(buf), "BUSY");
|
||||
} else {
|
||||
sprintf_s(buf, sizeof(buf), "0x%02X ?", (unsigned char)val);
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
|
||||
const char * WarnToText(uint8_t val) {
|
||||
static char buf[16];
|
||||
if (val == 0) {
|
||||
strcpy_s(buf, sizeof(buf), "OK");
|
||||
} else if (val == 1) {
|
||||
strcpy_s(buf, sizeof(buf), "BUSY");
|
||||
} else {
|
||||
sprintf_s(buf, sizeof(buf), "0x%02X ?", (unsigned char)val);
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
|
||||
const char *PlaybackToText(uint8_t val) {
|
||||
static char buf[60];
|
||||
const char *playbackList[] = {
|
||||
/* 0 */ "6Ch Input",
|
||||
/* 1 */ "Analog",
|
||||
/* 2 */ "PCM",
|
||||
/* 3 */ "DD (except 2/0)",
|
||||
/* 4 */ "DD (2/0)",
|
||||
/* 5 */ "DD Karaoke",
|
||||
/* 6 */ "DD EX",
|
||||
/* 7 */ "DTS",
|
||||
/* 8 */ "DTS ES",
|
||||
/* 9 */ "Other Digital",
|
||||
/* A */ "DTS Analog Mute",
|
||||
/* B */ "DTS Discrete",
|
||||
/* C */ "Other than AAC 2/0",
|
||||
/* D */ "AAC 2/0",
|
||||
};
|
||||
if (val < sizeof(playbackList)/sizeof(playbackList[0]))
|
||||
strcpy_s(buf, sizeof(buf), playbackList[val]);
|
||||
else
|
||||
sprintf_s(buf, sizeof(buf), "0x%04X ?", val);
|
||||
return buf;
|
||||
}
|
||||
|
||||
const char *FsToText(uint8_t val) {
|
||||
static char buf[60];
|
||||
const char *fsList[] = {
|
||||
/* 0 */ "Analog",
|
||||
/* 1 */ "32 kHz",
|
||||
/* 2 */ "44.1 kHz",
|
||||
/* 3 */ "48 kHz",
|
||||
/* 4 */ "64 kHz",
|
||||
/* 5 */ "88.2 kHz",
|
||||
/* 6 */ "96 kHz",
|
||||
/* 7 */ "unknown",
|
||||
/* 8 */ "128.0 kHz unk",
|
||||
/* 9 */ "176.4 kHz unk",
|
||||
/* A */ "192.0 kHz unk",
|
||||
};
|
||||
if (val < sizeof(fsList) / sizeof(fsList[0]))
|
||||
strcpy_s(buf, sizeof(buf), fsList[val]);
|
||||
else
|
||||
sprintf_s(buf, sizeof(buf), "0x%04X ?", val);
|
||||
return buf;
|
||||
}
|
||||
|
||||
|
||||
|
||||
const char * OffOnText(uint8_t val) {
|
||||
static char buf[16];
|
||||
if (val == 0) {
|
||||
strcpy_s(buf, sizeof(buf), "Off");
|
||||
} else if (val == 1) {
|
||||
strcpy_s(buf, sizeof(buf), "On");
|
||||
} else {
|
||||
sprintf_s(buf, sizeof(buf), "0x%04X ?", val);
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
|
||||
const char *YesNoneText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"Yes", "None", "Unk"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *OffMatrixDiscreteText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"Off", "Matrix On", "Discrete On", "Unk"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *OffMatrixDiscreteAutoText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"Off", "Matrix On", "Discrete On", "Auto", "Unk"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *ReleaseWaitText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"Release", "Wait", "Unk"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *NotTunedTunedText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"Not Tuned", "Tuned", "Unk"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *InputModeText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"Auto", "DTS", "Analog", "Analog Only", "AAC", "Unk"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *SwfrMainBothText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"Subwoofer", "Main", "Both", "Unk"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *LrFrNoneText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"L-R", "F-R", "None", "Unk"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *CenterMainText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"Center", "Main", "Unk"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *SwfrMainText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"Subwoofer", "Main", "Unk"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *SurrMainText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"Surround", "Main", "Unk"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *SixEightText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"6 Ch", "8 Ch", "Unk"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *CrossOverText(uint8_t val) {
|
||||
static char buf[16];
|
||||
static const uint8_t Hz[] = {
|
||||
40, 60, 80, 90, 100, 110, 120, 160, 200, 0
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
sprintf_s(buf, sizeof(buf), "%d Hz", Hz[val]);
|
||||
return buf;
|
||||
}
|
||||
|
||||
const char *OffDolbyDspText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"Off", "Dolby", "DSP"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *OffOn2OnMultiText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"Off", "On (2 Ch)", "On (Multi)"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
|
||||
const char *Norm10dbDownText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"Normal", "-10 db", "Unk"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *MainZoneBText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"Main", "Zone B", "Unk"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
|
||||
const char *FMAMText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"FM", "AM", "Unk"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *AutoLastText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"Auto", "Last", "Unk"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *OSDFullShortOffText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"Full", "Short", "Off", "Unk"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *SleepTimerText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"120 min", "90 min", "60 min", "30 min", "Off", "Unk"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *PresetLabelText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"A", "B", "C", "D", "E", "F", "Unk"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *PresetNumberText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"1", "2", "3", "4", "5", "6", "7", "8", "Unk"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *MainSubAllText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"Main", "Sub", "All", "Unk"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *WhichZoneText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"All", "Zone 1", "Zone 2", "Zone 3", "Unk"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *OffAutoText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"Off", "Auto", "Unk"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *MaxStdMinText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"Max", "Std", "Min", "Unk"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *VarFixText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"Var", "Fix", "Unk"
|
||||
};
|
||||
if (val >= sizeof(buf)/sizeof(buf[0]))
|
||||
val = sizeof(buf)/sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *LSNText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"Large", "Small", "None", "Unk"
|
||||
};
|
||||
if (val >= sizeof(buf)/sizeof(buf[0]))
|
||||
val = sizeof(buf)/sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *LLSSNText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"Large x 2", "Large x1", "Small x 2", "Small x 1", "None", "Unk"
|
||||
};
|
||||
if (val >= sizeof(buf)/sizeof(buf[0]))
|
||||
val = sizeof(buf)/sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *Mode1Mode2Text(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"Mode 1", "Mode 2", "Unk"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *ZonePower(uint8_t val) {
|
||||
static char buf[60];
|
||||
const char *powerList[8] = {
|
||||
/* 0 */ "All Off (Main, Zone 2, Zone 3)",
|
||||
/* 1 */ "All On (Main, Zone 2, Zone 3)",
|
||||
/* 2 */ "Main On | Zone 2 Off | Zone 3 Off",
|
||||
/* 3 */ "Main Off | Zone 2 On | Zone 3 On ",
|
||||
/* 4 */ "Main On | Zone 2 On | Zone 3 Off",
|
||||
/* 5 */ "Main On | Zone 2 Off | Zone 3 Off",
|
||||
/* 6 */ "Main Off | Zone 2 On | Zone 3 On ",
|
||||
/* 7 */ "Main Off | Zone 2 Off | Zone 3 On ",
|
||||
};
|
||||
if (val < 8)
|
||||
strcpy_s(buf, sizeof(buf), powerList[val]);
|
||||
else
|
||||
sprintf_s(buf, sizeof(buf), "0x%04X ?", val);
|
||||
return buf;
|
||||
}
|
||||
|
||||
const char * InputText(uint8_t val) {
|
||||
const char *buf[] = {
|
||||
"0:Phono", "1:CD", "2:Tuner", "3:CD-R", "4:MD-Tape", "5:DVD", "6:D-TV", "7:Cable", "8:unk",
|
||||
"9:VCR1", "A:VCR2", "B:unk", "C:V-Aux", "D:unk", "E:unk", "F:unk",
|
||||
"6 Ch 0:Phono", "6 Ch 1:CD", "6 Ch 2:Tuner", "6 Ch 3:CD-R", "6 Ch 4:MD-Tape", "6 Ch 5:DVD", "6 Ch 6:D-TV", "6 Ch 7:Cable", "6 Ch 8:unk",
|
||||
"6 Ch 9:VCR1", "6 Ch A:VCR2", "6 Ch B:unk", "6 Ch C:V-Aux", "6 Ch D:unk", "6 Ch E:unk", "6 Ch F:unk",
|
||||
"unknown"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *ProgramName(uint8_t val) {
|
||||
static char returnBuf[MAXTEXTLEN] = "";
|
||||
|
||||
returnBuf[0] = '\0';
|
||||
if (val & 0x80) {
|
||||
strcpy_s(returnBuf, MAXTEXTLEN, "STRAIGHT ");
|
||||
}
|
||||
val &= 0x7F; // Not accommodating the other variants yet
|
||||
const char *nameList[] = {
|
||||
"Hall A (HALL1)",
|
||||
"Hall B",
|
||||
"Hall C",
|
||||
"unk",
|
||||
"Hall C",
|
||||
"Hall E",
|
||||
"Live Concert (HALL2)",
|
||||
"unk",
|
||||
"Tokyo",
|
||||
"Freiburg (CHURCH)",
|
||||
"Royaumont",
|
||||
"unk",
|
||||
"Village Gate",
|
||||
"Village Vanguard",
|
||||
"The Bottom Line (JAZZ)",
|
||||
"unk",
|
||||
"The Roxy Theater (ROCK)",
|
||||
"Warehouse Loft",
|
||||
"Arena",
|
||||
"unk",
|
||||
"Disco",
|
||||
"Party",
|
||||
"Game",
|
||||
"7 Ch Stereo",
|
||||
"Pop/Rock (Music Video)",
|
||||
"DJ",
|
||||
"unk",
|
||||
"unk",
|
||||
"Opera",
|
||||
"Pavillion",
|
||||
"unk",
|
||||
"unk",
|
||||
"Mono Movie",
|
||||
"Variety Sports",
|
||||
"unk",
|
||||
"unk",
|
||||
"Spectacre",
|
||||
"Sci - Fi",
|
||||
"unk",
|
||||
"unk",
|
||||
"Adventure",
|
||||
"General",
|
||||
"unk",
|
||||
"unk",
|
||||
"Normal",
|
||||
"Enhanced",
|
||||
"unk",
|
||||
"unk",
|
||||
"PLII Movie",
|
||||
"PLII Music",
|
||||
"Neo: 6 Movie",
|
||||
"Neo: 6 Music",
|
||||
"STEREO A 2CH Stereo",
|
||||
"STEREO B 2CH Direct Stereo"
|
||||
"THX A Cinema",
|
||||
"THX B Music",
|
||||
};
|
||||
if (val < sizeof(nameList)) {
|
||||
strcat_s(returnBuf, MAXTEXTLEN, nameList[val]);
|
||||
} else {
|
||||
strcpy_s(returnBuf, MAXTEXTLEN, "huh?");
|
||||
}
|
||||
return returnBuf;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// VolumeDB
|
||||
//
|
||||
// Convert the communication units of volume into db
|
||||
//
|
||||
// Piecewise
|
||||
// for values 0 to 199
|
||||
// db = 0.5634 x - 112.11
|
||||
// for values 200 to 255
|
||||
// db = 0.5 x - 99.5
|
||||
// Single Linear
|
||||
// db = 0.5574 x - 111.45
|
||||
//
|
||||
const char *VolumeDB(uint8_t val) {
|
||||
static char buf[16];
|
||||
float m, b;
|
||||
|
||||
if (val < 200) {
|
||||
m = 0.5634f;
|
||||
b = -112.11f;
|
||||
} else {
|
||||
m = 0.5f;
|
||||
b = -99.5f;
|
||||
}
|
||||
float db = m * val + b;
|
||||
sprintf_s(buf, sizeof(buf), "%+5.1f db", db);
|
||||
return buf;
|
||||
}
|
||||
|
||||
const char *PM10dbText(uint8_t val) {
|
||||
static char buf[16];
|
||||
float m, b;
|
||||
|
||||
if (val < 0x14 || val > 0x3C) {
|
||||
sprintf_s(buf, sizeof(buf), "%02X OOR ?", val);
|
||||
} else {
|
||||
m = 0.5f;
|
||||
b = -10.0f;
|
||||
float db = m * (val - 0x14) + b;
|
||||
sprintf_s(buf, sizeof(buf), "%+5.1f db", db);
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
|
||||
const char *M20P0dbText(uint8_t val) {
|
||||
static char buf[16];
|
||||
float m, b;
|
||||
|
||||
if (val > 0x28) {
|
||||
sprintf_s(buf, sizeof(buf), "%02X OOR ?", val);
|
||||
} else {
|
||||
m = 0.5f;
|
||||
b = -20.0f;
|
||||
float db = m * (val) + b;
|
||||
sprintf_s(buf, sizeof(buf), "%+5.1f db", db);
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
|
||||
const char *M10P10dbText(uint8_t val) {
|
||||
static char buf[16];
|
||||
float m, b;
|
||||
|
||||
if (val < 0x14 || val > 0x3C) {
|
||||
sprintf_s(buf, sizeof(buf), "%02X OOR ?", val);
|
||||
} else {
|
||||
m = 0.5f;
|
||||
b = -10.0f;
|
||||
float db = m * (val - 0x14) + b;
|
||||
sprintf_s(buf, sizeof(buf), "%+5.1f db", db);
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
|
||||
const char *BalanceText(uint8_t val) {
|
||||
static char buf[16];
|
||||
float m, b;
|
||||
|
||||
if (val > 0x28) {
|
||||
sprintf_s(buf, sizeof(buf), "%02X OOR ?", val);
|
||||
} else {
|
||||
m = 0.5f;
|
||||
b = -20.0f;
|
||||
float lcr = m * (val + b);
|
||||
sprintf_s(buf, sizeof(buf), "%+3.1f L-C-R", lcr);
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
|
||||
const char *M4To0Text(uint8_t val) {
|
||||
static char buf[16];
|
||||
|
||||
if (val > 0x04) {
|
||||
sprintf_s(buf, sizeof(buf), "%02X OOR ?", val);
|
||||
} else {
|
||||
sprintf_s(buf, sizeof(buf), "%u", (int8_t)val - 4);
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
|
||||
const char *M5toP5Text(uint8_t val) {
|
||||
static char buf[16];
|
||||
|
||||
if (val > 0x0A) {
|
||||
sprintf_s(buf, sizeof(buf), "%02X OOR ?", val);
|
||||
} else {
|
||||
sprintf_s(buf, sizeof(buf), "%+d", (int8_t)val - 5);
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
|
||||
const char *ZeroTo160msText(uint8_t val) {
|
||||
static char buf[16];
|
||||
|
||||
if (val > 0xA0) {
|
||||
sprintf_s(buf, sizeof(buf), "%02X OOR ?", val);
|
||||
} else {
|
||||
sprintf_s(buf, sizeof(buf), "%u ms", val);
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
|
||||
const char *ZeroTo5msText(uint8_t val) {
|
||||
static char buf[16];
|
||||
float m, b;
|
||||
|
||||
if (val > 0x0A) {
|
||||
sprintf_s(buf, sizeof(buf), "%02X OOR ?", val);
|
||||
} else {
|
||||
m = 0.5f;
|
||||
b = 0;
|
||||
float delay = m * (val + b);
|
||||
sprintf_s(buf, sizeof(buf), "%+3.1f ms", delay);
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
const char *ZeroTo30msText(uint8_t val) {
|
||||
static char buf[16];
|
||||
float m, b;
|
||||
|
||||
if (val > 0x3C) {
|
||||
sprintf_s(buf, sizeof(buf), "%02X OOR ?", val);
|
||||
} else {
|
||||
m = 0.5f;
|
||||
b = 0;
|
||||
float delay = m * (val + b);
|
||||
sprintf_s(buf, sizeof(buf), "%+3.1f ms", delay);
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
|
||||
|
||||
void ShowAllStatusInfo(void) {
|
||||
|
||||
@@ -126,9 +126,11 @@
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="AVR.cpp" />
|
||||
<ClCompile Include="AVRCommandDecoder.cpp" />
|
||||
<ClCompile Include="SerialPort\SerialPort.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="AVRCommandDecoder.h" />
|
||||
<ClInclude Include="SerialPort\SerialPort.h" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
|
||||
@@ -21,10 +21,16 @@
|
||||
<ClCompile Include="SerialPort\SerialPort.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="AVRCommandDecoder.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="SerialPort\SerialPort.h">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="AVRCommandDecoder.h">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
639
AVR Working Controller/AVRCommandDecoder.cpp
Normal file
639
AVR Working Controller/AVRCommandDecoder.cpp
Normal file
@@ -0,0 +1,639 @@
|
||||
|
||||
|
||||
#include "stdafx.h"
|
||||
#include <Windows.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <ctype.h>
|
||||
#include "AVRCommandDecoder.h"
|
||||
|
||||
// This has to be "big enough" for any of the text conversions
|
||||
//
|
||||
constexpr auto TEXTBUFLEN = 50;
|
||||
|
||||
const char *BusyToText(uint8_t val) {
|
||||
static char buf[16];
|
||||
if (val == 0) {
|
||||
strcpy_s(buf, sizeof(buf), "OK");
|
||||
} else if (val == 1) {
|
||||
strcpy_s(buf, sizeof(buf), "BUSY");
|
||||
} else {
|
||||
sprintf_s(buf, sizeof(buf), "0x%02X ?", (unsigned char)val);
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
|
||||
const char *WarnToText(uint8_t val) {
|
||||
static char buf[16];
|
||||
if (val == 0) {
|
||||
strcpy_s(buf, sizeof(buf), "OK");
|
||||
} else if (val == 1) {
|
||||
strcpy_s(buf, sizeof(buf), "BUSY");
|
||||
} else {
|
||||
sprintf_s(buf, sizeof(buf), "0x%02X ?", (unsigned char)val);
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
|
||||
const char *PlaybackToText(uint8_t val) {
|
||||
static char buf[60];
|
||||
const char *playbackList[] = {
|
||||
/* 0 */ "6Ch Input",
|
||||
/* 1 */ "Analog",
|
||||
/* 2 */ "PCM",
|
||||
/* 3 */ "DD (except 2/0)",
|
||||
/* 4 */ "DD (2/0)",
|
||||
/* 5 */ "DD Karaoke",
|
||||
/* 6 */ "DD EX",
|
||||
/* 7 */ "DTS",
|
||||
/* 8 */ "DTS ES",
|
||||
/* 9 */ "Other Digital",
|
||||
/* A */ "DTS Analog Mute",
|
||||
/* B */ "DTS Discrete",
|
||||
/* C */ "Other than AAC 2/0",
|
||||
/* D */ "AAC 2/0",
|
||||
};
|
||||
if (val < sizeof(playbackList) / sizeof(playbackList[0]))
|
||||
strcpy_s(buf, sizeof(buf), playbackList[val]);
|
||||
else
|
||||
sprintf_s(buf, sizeof(buf), "0x%04X ?", val);
|
||||
return buf;
|
||||
}
|
||||
|
||||
const char *FsToText(uint8_t val) {
|
||||
static char buf[60];
|
||||
const char *fsList[] = {
|
||||
/* 0 */ "Analog",
|
||||
/* 1 */ "32 kHz",
|
||||
/* 2 */ "44.1 kHz",
|
||||
/* 3 */ "48 kHz",
|
||||
/* 4 */ "64 kHz",
|
||||
/* 5 */ "88.2 kHz",
|
||||
/* 6 */ "96 kHz",
|
||||
/* 7 */ "unknown",
|
||||
/* 8 */ "128.0 kHz unk",
|
||||
/* 9 */ "176.4 kHz unk",
|
||||
/* A */ "192.0 kHz unk",
|
||||
};
|
||||
if (val < sizeof(fsList) / sizeof(fsList[0]))
|
||||
strcpy_s(buf, sizeof(buf), fsList[val]);
|
||||
else
|
||||
sprintf_s(buf, sizeof(buf), "0x%04X ?", val);
|
||||
return buf;
|
||||
}
|
||||
|
||||
|
||||
|
||||
const char *OffOnText(uint8_t val) {
|
||||
static char buf[16];
|
||||
if (val == 0) {
|
||||
strcpy_s(buf, sizeof(buf), "Off");
|
||||
} else if (val == 1) {
|
||||
strcpy_s(buf, sizeof(buf), "On");
|
||||
} else {
|
||||
sprintf_s(buf, sizeof(buf), "0x%04X ?", val);
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
|
||||
const char *YesNoneText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"Yes", "None", "Unk"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *OffMatrixDiscreteText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"Off", "Matrix On", "Discrete On", "Unk"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *OffMatrixDiscreteAutoText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"Off", "Matrix On", "Discrete On", "Auto", "Unk"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *ReleaseWaitText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"Release", "Wait", "Unk"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *NotTunedTunedText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"Not Tuned", "Tuned", "Unk"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *InputModeText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"Auto", "DTS", "Analog", "Analog Only", "AAC", "Unk"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *SwfrMainBothText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"Subwoofer", "Main", "Both", "Unk"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *LrFrNoneText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"L-R", "F-R", "None", "Unk"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *CenterMainText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"Center", "Main", "Unk"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *SwfrMainText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"Subwoofer", "Main", "Unk"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *SurrMainText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"Surround", "Main", "Unk"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *SixEightText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"6 Ch", "8 Ch", "Unk"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *CrossOverText(uint8_t val) {
|
||||
static char buf[16];
|
||||
static const uint8_t Hz[] = {
|
||||
40, 60, 80, 90, 100, 110, 120, 160, 200, 0
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
sprintf_s(buf, sizeof(buf), "%d Hz", Hz[val]);
|
||||
return buf;
|
||||
}
|
||||
|
||||
const char *OffDolbyDspText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"Off", "Dolby", "DSP"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *OffOn2OnMultiText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"Off", "On (2 Ch)", "On (Multi)"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
|
||||
const char *Norm10dbDownText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"Normal", "-10 db", "Unk"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *MainZoneBText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"Main", "Zone B", "Unk"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
|
||||
const char *FMAMText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"FM", "AM", "Unk"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *AutoLastText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"Auto", "Last", "Unk"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *OSDFullShortOffText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"Full", "Short", "Off", "Unk"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *SleepTimerText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"120 min", "90 min", "60 min", "30 min", "Off", "Unk"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *PresetLabelText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"A", "B", "C", "D", "E", "F", "Unk"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *PresetNumberText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"1", "2", "3", "4", "5", "6", "7", "8", "Unk"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *MainSubAllText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"Main", "Sub", "All", "Unk"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *WhichZoneText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"All", "Zone 1", "Zone 2", "Zone 3", "Unk"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *OffAutoText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"Off", "Auto", "Unk"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *MaxStdMinText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"Max", "Std", "Min", "Unk"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *VarFixText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"Var", "Fix", "Unk"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *LSNText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"Large", "Small", "None", "Unk"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *LLSSNText(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"Large x 2", "Large x1", "Small x 2", "Small x 1", "None", "Unk"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *Mode1Mode2Text(uint8_t val) {
|
||||
static const char *buf[] = {
|
||||
"Mode 1", "Mode 2", "Unk"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *ZonePower(uint8_t val) {
|
||||
static char buf[60];
|
||||
const char *powerList[8] = {
|
||||
/* 0 */ "All Off (Main, Zone 2, Zone 3)",
|
||||
/* 1 */ "All On (Main, Zone 2, Zone 3)",
|
||||
/* 2 */ "Main On | Zone 2 Off | Zone 3 Off",
|
||||
/* 3 */ "Main Off | Zone 2 On | Zone 3 On ",
|
||||
/* 4 */ "Main On | Zone 2 On | Zone 3 Off",
|
||||
/* 5 */ "Main On | Zone 2 Off | Zone 3 Off",
|
||||
/* 6 */ "Main Off | Zone 2 On | Zone 3 On ",
|
||||
/* 7 */ "Main Off | Zone 2 Off | Zone 3 On ",
|
||||
};
|
||||
if (val < 8)
|
||||
strcpy_s(buf, sizeof(buf), powerList[val]);
|
||||
else
|
||||
sprintf_s(buf, sizeof(buf), "0x%04X ?", val);
|
||||
return buf;
|
||||
}
|
||||
|
||||
const char *InputText(uint8_t val) {
|
||||
const char *buf[] = {
|
||||
"0:Phono", "1:CD", "2:Tuner", "3:CD-R", "4:MD-Tape", "5:DVD", "6:D-TV", "7:Cable", "8:unk",
|
||||
"9:VCR1", "A:VCR2", "B:unk", "C:V-Aux", "D:unk", "E:unk", "F:unk",
|
||||
"6 Ch 0:Phono", "6 Ch 1:CD", "6 Ch 2:Tuner", "6 Ch 3:CD-R", "6 Ch 4:MD-Tape", "6 Ch 5:DVD", "6 Ch 6:D-TV", "6 Ch 7:Cable", "6 Ch 8:unk",
|
||||
"6 Ch 9:VCR1", "6 Ch A:VCR2", "6 Ch B:unk", "6 Ch C:V-Aux", "6 Ch D:unk", "6 Ch E:unk", "6 Ch F:unk",
|
||||
"unknown"
|
||||
};
|
||||
if (val >= sizeof(buf) / sizeof(buf[0]))
|
||||
val = sizeof(buf) / sizeof(buf[0]) - 1;
|
||||
return buf[val];
|
||||
}
|
||||
|
||||
const char *ProgramName(uint8_t val) {
|
||||
static char returnBuf[TEXTBUFLEN] = "";
|
||||
|
||||
returnBuf[0] = '\0';
|
||||
if (val & 0x80) {
|
||||
strcpy_s(returnBuf, TEXTBUFLEN, "STRAIGHT ");
|
||||
}
|
||||
val &= 0x7F; // Not accommodating the other variants yet
|
||||
const char *nameList[] = {
|
||||
"Hall A (HALL1)",
|
||||
"Hall B",
|
||||
"Hall C",
|
||||
"unk",
|
||||
"Hall C",
|
||||
"Hall E",
|
||||
"Live Concert (HALL2)",
|
||||
"unk",
|
||||
"Tokyo",
|
||||
"Freiburg (CHURCH)",
|
||||
"Royaumont",
|
||||
"unk",
|
||||
"Village Gate",
|
||||
"Village Vanguard",
|
||||
"The Bottom Line (JAZZ)",
|
||||
"unk",
|
||||
"The Roxy Theater (ROCK)",
|
||||
"Warehouse Loft",
|
||||
"Arena",
|
||||
"unk",
|
||||
"Disco",
|
||||
"Party",
|
||||
"Game",
|
||||
"7 Ch Stereo",
|
||||
"Pop/Rock (Music Video)",
|
||||
"DJ",
|
||||
"unk",
|
||||
"unk",
|
||||
"Opera",
|
||||
"Pavillion",
|
||||
"unk",
|
||||
"unk",
|
||||
"Mono Movie",
|
||||
"Variety Sports",
|
||||
"unk",
|
||||
"unk",
|
||||
"Spectacre",
|
||||
"Sci - Fi",
|
||||
"unk",
|
||||
"unk",
|
||||
"Adventure",
|
||||
"General",
|
||||
"unk",
|
||||
"unk",
|
||||
"Normal",
|
||||
"Enhanced",
|
||||
"unk",
|
||||
"unk",
|
||||
"PLII Movie",
|
||||
"PLII Music",
|
||||
"Neo: 6 Movie",
|
||||
"Neo: 6 Music",
|
||||
"STEREO A 2CH Stereo",
|
||||
"STEREO B 2CH Direct Stereo"
|
||||
"THX A Cinema",
|
||||
"THX B Music",
|
||||
};
|
||||
if (val < sizeof(nameList)) {
|
||||
strcat_s(returnBuf, TEXTBUFLEN, nameList[val]);
|
||||
} else {
|
||||
strcpy_s(returnBuf, TEXTBUFLEN, "huh?");
|
||||
}
|
||||
return returnBuf;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// VolumeDB
|
||||
//
|
||||
// Convert the communication units of volume into db
|
||||
//
|
||||
// Piecewise
|
||||
// for values 0 to 199
|
||||
// db = 0.5634 x - 112.11
|
||||
// for values 200 to 255
|
||||
// db = 0.5 x - 99.5
|
||||
// Single Linear
|
||||
// db = 0.5574 x - 111.45
|
||||
//
|
||||
const char *VolumeDB(uint8_t val) {
|
||||
static char buf[16];
|
||||
float m, b;
|
||||
|
||||
if (val < 200) {
|
||||
m = 0.5634f;
|
||||
b = -112.11f;
|
||||
} else {
|
||||
m = 0.5f;
|
||||
b = -99.5f;
|
||||
}
|
||||
float db = m * val + b;
|
||||
sprintf_s(buf, sizeof(buf), "%+5.1f db", db);
|
||||
return buf;
|
||||
}
|
||||
|
||||
const char *PM10dbText(uint8_t val) {
|
||||
static char buf[16];
|
||||
float m, b;
|
||||
|
||||
if (val < 0x14 || val > 0x3C) {
|
||||
sprintf_s(buf, sizeof(buf), "%02X OOR ?", val);
|
||||
} else {
|
||||
m = 0.5f;
|
||||
b = -10.0f;
|
||||
float db = m * (val - 0x14) + b;
|
||||
sprintf_s(buf, sizeof(buf), "%+5.1f db", db);
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
|
||||
const char *M20P0dbText(uint8_t val) {
|
||||
static char buf[16];
|
||||
float m, b;
|
||||
|
||||
if (val > 0x28) {
|
||||
sprintf_s(buf, sizeof(buf), "%02X OOR ?", val);
|
||||
} else {
|
||||
m = 0.5f;
|
||||
b = -20.0f;
|
||||
float db = m * (val)+b;
|
||||
sprintf_s(buf, sizeof(buf), "%+5.1f db", db);
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
|
||||
const char *M10P10dbText(uint8_t val) {
|
||||
static char buf[16];
|
||||
float m, b;
|
||||
|
||||
if (val < 0x14 || val > 0x3C) {
|
||||
sprintf_s(buf, sizeof(buf), "%02X OOR ?", val);
|
||||
} else {
|
||||
m = 0.5f;
|
||||
b = -10.0f;
|
||||
float db = m * (val - 0x14) + b;
|
||||
sprintf_s(buf, sizeof(buf), "%+5.1f db", db);
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
|
||||
const char *BalanceText(uint8_t val) {
|
||||
static char buf[16];
|
||||
float m, b;
|
||||
|
||||
if (val > 0x28) {
|
||||
sprintf_s(buf, sizeof(buf), "%02X OOR ?", val);
|
||||
} else {
|
||||
m = 0.5f;
|
||||
b = -20.0f;
|
||||
float lcr = m * (val + b);
|
||||
sprintf_s(buf, sizeof(buf), "%+3.1f L-C-R", lcr);
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
|
||||
const char *M4To0Text(uint8_t val) {
|
||||
static char buf[16];
|
||||
|
||||
if (val > 0x04) {
|
||||
sprintf_s(buf, sizeof(buf), "%02X OOR ?", val);
|
||||
} else {
|
||||
sprintf_s(buf, sizeof(buf), "%u", (int8_t)val - 4);
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
|
||||
const char *M5toP5Text(uint8_t val) {
|
||||
static char buf[16];
|
||||
|
||||
if (val > 0x0A) {
|
||||
sprintf_s(buf, sizeof(buf), "%02X OOR ?", val);
|
||||
} else {
|
||||
sprintf_s(buf, sizeof(buf), "%+d", (int8_t)val - 5);
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
|
||||
const char *ZeroTo160msText(uint8_t val) {
|
||||
static char buf[16];
|
||||
|
||||
if (val > 0xA0) {
|
||||
sprintf_s(buf, sizeof(buf), "%02X OOR ?", val);
|
||||
} else {
|
||||
sprintf_s(buf, sizeof(buf), "%u ms", val);
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
|
||||
const char *ZeroTo5msText(uint8_t val) {
|
||||
static char buf[16];
|
||||
float m, b;
|
||||
|
||||
if (val > 0x0A) {
|
||||
sprintf_s(buf, sizeof(buf), "%02X OOR ?", val);
|
||||
} else {
|
||||
m = 0.5f;
|
||||
b = 0;
|
||||
float delay = m * (val + b);
|
||||
sprintf_s(buf, sizeof(buf), "%+3.1f ms", delay);
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
const char *ZeroTo30msText(uint8_t val) {
|
||||
static char buf[16];
|
||||
float m, b;
|
||||
|
||||
if (val > 0x3C) {
|
||||
sprintf_s(buf, sizeof(buf), "%02X OOR ?", val);
|
||||
} else {
|
||||
m = 0.5f;
|
||||
b = 0;
|
||||
float delay = m * (val + b);
|
||||
sprintf_s(buf, sizeof(buf), "%+3.1f ms", delay);
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
55
AVR Working Controller/AVRCommandDecoder.h
Normal file
55
AVR Working Controller/AVRCommandDecoder.h
Normal file
@@ -0,0 +1,55 @@
|
||||
#pragma once
|
||||
|
||||
|
||||
// Helpers to convert status codes to text
|
||||
const char *BusyToText(uint8_t val);
|
||||
const char *WarnToText(uint8_t val);
|
||||
const char *PlaybackToText(uint8_t val);
|
||||
const char *FsToText(uint8_t val);
|
||||
const char *OffMatrixDiscreteText(uint8_t val);
|
||||
const char *OffMatrixDiscreteAutoText(uint8_t val);
|
||||
const char *ReleaseWaitText(uint8_t val);
|
||||
const char *NotTunedTunedText(uint8_t val);
|
||||
const char *InputModeText(uint8_t val);
|
||||
const char *PresetNumberText(uint8_t val);
|
||||
const char *OSDFullShortOffText(uint8_t val);
|
||||
const char *SleepTimerText(uint8_t val);
|
||||
const char *InputText(uint8_t val);
|
||||
const char *ZonePower(uint8_t val);
|
||||
const char *VolumeDB(uint8_t val);
|
||||
const char *PM10dbText(uint8_t val);
|
||||
const char *M20P0dbText(uint8_t val);
|
||||
const char *BalanceText(uint8_t val);
|
||||
const char *ZeroTo160msText(uint8_t val);
|
||||
const char *ZeroTo5msText(uint8_t val);
|
||||
const char *ZeroTo30msText(uint8_t val);
|
||||
const char *AutoLastText(uint8_t val);
|
||||
const char *M4To0Text(uint8_t val);
|
||||
const char *M5toP5Text(uint8_t val);
|
||||
const char *OffAutoText(uint8_t val);
|
||||
const char *MaxStdMinText(uint8_t val);
|
||||
const char *VarFixText(uint8_t val);
|
||||
const char *Mode1Mode2Text(uint8_t val);
|
||||
const char *LSNText(uint8_t val);
|
||||
const char *LLSSNText(uint8_t val);
|
||||
const char *YesNoneText(uint8_t val);
|
||||
const char *SwfrMainBothText(uint8_t val);
|
||||
const char *LrFrNoneText(uint8_t val);
|
||||
const char *CenterMainText(uint8_t val);
|
||||
const char *SwfrMainText(uint8_t val);
|
||||
const char *SurrMainText(uint8_t val);
|
||||
const char *SixEightText(uint8_t val);
|
||||
const char *CrossOverText(uint8_t val);
|
||||
const char *OffDolbyDspText(uint8_t val);
|
||||
const char *OffOn2OnMultiText(uint8_t val);
|
||||
const char *M10P10dbText(uint8_t val);
|
||||
|
||||
const char *ProgramName(uint8_t val);
|
||||
const char *OffOnText(uint8_t val);
|
||||
const char *FMAMText(uint8_t val);
|
||||
const char *PresetLabelText(uint8_t val);
|
||||
const char *MainSubAllText(uint8_t val);
|
||||
const char *WhichZoneText(uint8_t val);
|
||||
const char *Norm10dbDownText(uint8_t val);
|
||||
const char *MainZoneBText(uint8_t val);
|
||||
|
||||
Reference in New Issue
Block a user