diff --git a/AVR Working Controller/AVR.cpp b/AVR Working Controller/AVR.cpp index 838a96f..8a1d185 100644 --- a/AVR Working Controller/AVR.cpp +++ b/AVR Working Controller/AVR.cpp @@ -28,7 +28,7 @@ DWORD const retryInterval = 1000; // ms // // typedef struct { - uint8_t DT0; // * Baud Rate + uint8_t DT0; // * Baud Rate '@' uint8_t DT1; // * Receive Buffer 'E' uint8_t DT2; // * Receive Buffer '0' uint8_t DT3; // * '1' @@ -41,165 +41,136 @@ typedef struct { uint8_t DT10; // 6ch input 0:Off, 1:On uint8_t DT11; // Input Mode 0:AUTO, 2:DTS, 4:Analog, 5:Analog Only uint8_t DT12; // Audio Mute 0:Off, 1:On - uint8_t DT13; - uint8_t DT14; - uint8_t DT15; - uint8_t DT16; - uint8_t DT17; - uint8_t DT18; - uint8_t DT19; + uint8_t DT13; // Zone2 Input 0: PHONO / 1: CD / 2: TUNER / 3: CD-R / 4: MD-TAPE / 5: DVD / 6: D-TV-LD / 7: CBL-SAT / 9: VCR1 / A: VCR2-DVR / C: V-AUX + uint8_t DT14; // Zone2 Mute 0: OFF / 1: ON + uint8_t DT15; // Master Volume Upper 4 bit + uint8_t DT16; // Master Volume Lower 4 bit + uint8_t DT17; // Zone2 Volume Upper 4 bit + uint8_t DT18; // Zone2 Volume Lower 4 bit + uint8_t DT19; // Program Upper 4 bit + uint8_t DT20; // Program Lower 4 bit + uint8_t DT21; // Effect 0: OFF / 1: ON + uint8_t DT22; // 6.1/ES key status 0: OFF / 1: MATRIX ON / 2: DISCRETE ON / 3: AUTO + uint8_t DT23; // OSD* 0: FULL / 1: SHORT / 2: OFF + uint8_t DT24; // Sleep 0: 120 / 2: 90 / 3: 60 / 4: 30 / 5: OFF + uint8_t DT25; // Tuner Page 0: Page A / 1: Page B / 2: Page C / 3: Page D / 4: PageE + uint8_t DT26; // Tuner No. 0: No.1 / 1: No.2 / 2: No.3 / 3: No.4 / 4: No.5 / 5: No.6 / 6: No.7 / 7: No.8 + uint8_t DT27; // Night mode 0: OFF / 1: ON + uint8_t DT28; // Care + uint8_t DT29; // Speaker relay A 0: OFF / 1: ON + uint8_t DT30; // Speaker relay B 0: OFF / 1: ON + uint8_t DT31; // Playback 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 ES Discrete + uint8_t DT32; // Fs 0: Analog / 1: 32kHz / 2: 44.1kHz / 3: 48kiHz / 4: 64kHz / 5: 88.2kHz / 6: 96kHz / 7: Unknown B: DTS 96/24 + uint8_t DT33; // EX/ES playback 0: OFF / 1: MATRIX ON / 2: DISCRETE ON + uint8_t DT34; // Thr / Bypass 0: Normal / 1: Bypass + uint8_t DT35; // RED dts 0: Release / 1: Wait + uint8_t DT36; // Head Phone 0: OFF / 1: ON + uint8_t DT37; // TUNER BAND 0: FM / 1: AM + uint8_t DT38; // TUNER TUNED 0: NOT TUNED / 1: TUNED + uint8_t DT39; // DC1 Control Out 0: LOW / 1: HIGH - uint8_t DT20; - uint8_t DT21; - uint8_t DT22; - uint8_t DT23; - uint8_t DT24; - uint8_t DT25; - uint8_t DT26; - uint8_t DT27; - uint8_t DT28; - uint8_t DT29; + uint8_t DT40; // Don’t care + uint8_t DT41; // Don't Care + uint8_t DT42; // 0-2 DC1 TRG Ctrl. 0: Zone1 / 1: Zone2 / 2: Zone1&2 + uint8_t DT43; // 0/1 dts 96/24 0: OFF / 1: ON + uint8_t DT44; // 0-2 DC2 TRG Ctrl. 0: Zone1 / 1: Zone2 / 2: Zone1&2 + uint8_t DT45; // 0/1 DC2 Trigger 0: LOW / 1: HIGH + uint8_t DT46; // SP B set 0: Zone1 / 1: Zone2 + uint8_t DT47; // Zone 2 SP out 0: OFF / 1: ON + uint8_t DT48; // MAIN R Upper 4bit + uint8_t DT49; // Lower 4bit + uint8_t DT50; // MAIN L Upper 4bit + uint8_t DT51; // Lower 4bit + uint8_t DT52; // CENTER Upper 4bit + uint8_t DT53; // Lower 4bit + uint8_t DT54; // REAR R Upper 4bit + uint8_t DT55; // Lower 4bit + uint8_t DT56; // REAR L Upper 4bit + uint8_t DT57; // Lower 4bit + uint8_t DT58; // SUR BACK Upper 4bit + uint8_t DT59; // R Lower 4bit + uint8_t DT60; // SUR BACK Upper 4bit + uint8_t DT61; // L Lower 4bit + uint8_t DT62; // FRONT R Upper 4bit + uint8_t DT63; // Lower 4bit + uint8_t DT64; // FRONT L Upper 4bit + uint8_t DT65; // Lower 4bit + uint8_t DT66; // SWFR 1 Upper 4bit + uint8_t DT67; // Lower 4bit + uint8_t DT68; // Don't Care + uint8_t DT69; // Don't Care + uint8_t DT70; // Don't Care + uint8_t DT71; // Don't Care + uint8_t DT72; // Don't Care + uint8_t DT73; // Don't Care + uint8_t DT74; // LFE Lvl. SP Upper 4bit + uint8_t DT75; // Lower 4bit + uint8_t DT76; // LFE Lvl. HP Upper 4bit + uint8_t DT77; // Lower 4bit + uint8_t DT78; // Audio Delay Upper 4bit + uint8_t DT79; // Lower 4bit - uint8_t DT30; - uint8_t DT31; - uint8_t DT32; - uint8_t DT33; - uint8_t DT34; - uint8_t DT35; - uint8_t DT36; - uint8_t DT37; - uint8_t DT38; - uint8_t DT39; + uint8_t DT80; // Don't Care + uint8_t DT81; // Don't Care + uint8_t DT82; // Don't Care + uint8_t DT83; // Don't Care + uint8_t DT84; // Input mode set 0: AUTO / 1: LAST + uint8_t DT85; // Dimmer 0: -4 / 1: -3 / 2: -2 / 3: -1 / 4: 0 + uint8_t DT86; // OSD Message + uint8_t DT87; // OSD shift Upper 4bit + uint8_t DT88; // Lower 4bit + uint8_t DT89; // Glay back 0: OFF / 1: AUTO + uint8_t DT90; // Video conversion 0: OFF / 1: ON + uint8_t DT91; // D. Range SP 0: MAX / 1: STD / 2: MIN + uint8_t DT92; // HP 0: MAX / 1: STD / 2: MIN + uint8_t DT93; // Zone 2 vol. Out + uint8_t DT94; // Don't Care + uint8_t DT95; // Memory guard 0: OFF / 1: ON + uint8_t DT96; // SP set Center 0: Large / 1: Small / 2: None + uint8_t DT97; // Main 0: Large / 1: Small + uint8_t DT98; // Rear L/R 0: Large / 1: Small / 2: None + uint8_t DT99; // Rear CT 0: Large / 1: Small / 2: None + uint8_t DT100; // Front 0: Yes / 1: None + uint8_t DT101; // LFE/BASS 0: SWFR / 1: Main / 2: Both + uint8_t DT102; // 6CH Center 0: Center / 1: Main + uint8_t DT103; // SWFR 0: SWFR / 1: Main + uint8_t DT104; // Main level 0: Normal / 1: -10dB + uint8_t DT105; // Test mode 0: OFF / 1: Dolby / 2: DTS + uint8_t DT106; // Don't Care + uint8_t DT107; // LVL 6CH MAIN L Upper 4bit + uint8_t DT108; // Lower 4bit + uint8_t DT109; // MAIN R Upper 4bit + uint8_t DT110; // Lower 4bit + uint8_t DT111; // CENTER Upper 4bit + uint8_t DT112; // Lower 4bit + uint8_t DT113; // SL Upper 4bit + uint8_t DT114; // Lower 4bit + uint8_t DT115; // SR Upper 4bit + uint8_t DT116; // Lower 4bit + uint8_t DT117; // SBL Upper 4bit + uint8_t DT118; // Lower 4bit + uint8_t DT119; // SBR Upper 4bit + uint8_t DT120; // Lower 4bit + uint8_t DT121; // FRONT L Upper 4bit + uint8_t DT122; // Lower 4bit + uint8_t DT123; // FRONT R Upper 4bit + uint8_t DT124; // Lower 4bit + uint8_t DT125; // SWFR Upper 4bit + uint8_t DT126; // Lower 4bit + uint8_t DT127; // 0 - C Z3 Input + uint8_t DT128; // 0/1 Z3 Mute + uint8_t DT129; // 0 - F Z3 Volume Upper 4bit - uint8_t DT40; - uint8_t DT41; - uint8_t DT42; - uint8_t DT43; - uint8_t DT44; - uint8_t DT45; - uint8_t DT46; - uint8_t DT47; - uint8_t DT48; - uint8_t DT49; + uint8_t DT130; // 0 - F Lower 4bit + uint8_t DT131; // Don't Care + uint8_t DT132; // MULTI_CH SELECT 00:6CH / 01:8CH TUNER / 02: 8CH CD / 04: 8CH CD-R / 05: 8CH DVD / 06: DTV / 07: 8CH CBL/SAT / 09: 8CH VCR1 / 0A: VCR2/DVR / 0C: VAUX + uint8_t DT133; // MULTI_CH SURROUND to 00: Surround / 01: Main + uint8_t DT134; // SP SET SW1 00: L-R / 01: F-R / 02: NONE + uint8_t DT135; // SP SET CROSSOVER 00: 40Hz / 01: 60Hz / 02: 80Hz / 03: 90Hz / 04: 100Hz / 05: 110Hz / 06: 120Hz / 07: 160Hz / 08: 200Hz + uint8_t DT136; // COMPONENT OSD 00: OFF / 01: ON + uint8_t DT137; // PB/SB SELECT 00: PR / 01: SB - uint8_t DT50; - uint8_t DT51; - uint8_t DT52; - uint8_t DT53; - uint8_t DT54; - uint8_t DT55; - uint8_t DT56; - uint8_t DT57; - uint8_t DT58; - uint8_t DT59; - - uint8_t DT60; - uint8_t DT61; - uint8_t DT62; - uint8_t DT63; - uint8_t DT64; - uint8_t DT65; - uint8_t DT66; - uint8_t DT67; - uint8_t DT68; - uint8_t DT69; - - uint8_t DT70; - uint8_t DT71; - uint8_t DT72; - uint8_t DT73; - uint8_t DT74; - uint8_t DT75; - uint8_t DT76; - uint8_t DT77; - uint8_t DT78; - uint8_t DT79; - - uint8_t DT80; - uint8_t DT81; - uint8_t DT82; - uint8_t DT83; - uint8_t DT84; - uint8_t DT85; - uint8_t DT86; - uint8_t DT87; - uint8_t DT88; - uint8_t DT89; - - uint8_t DT90; - uint8_t DT91; - uint8_t DT92; - uint8_t DT93; - uint8_t DT94; - uint8_t DT95; - uint8_t DT96; - uint8_t DT97; - uint8_t DT98; - uint8_t DT99; - - uint8_t DT100; - uint8_t DT101; - uint8_t DT102; - uint8_t DT103; - uint8_t DT104; - uint8_t DT105; - uint8_t DT106; - uint8_t DT107; - uint8_t DT108; - uint8_t DT109; - - uint8_t DT110; - uint8_t DT111; - uint8_t DT112; - uint8_t DT113; - uint8_t DT114; - uint8_t DT115; - uint8_t DT116; - uint8_t DT117; - uint8_t DT118; - uint8_t DT119; - - uint8_t DT120; - uint8_t DT121; - uint8_t DT122; - uint8_t DT123; - uint8_t DT124; - uint8_t DT125; - uint8_t DT126; - uint8_t DT127; - uint8_t DT128; - uint8_t DT129; - - uint8_t DT130; - uint8_t DT131; - uint8_t DT132; - uint8_t DT133; - uint8_t DT134; - uint8_t DT135; - uint8_t DT136; - uint8_t DT137; // PB/SB Select 00: PR, 01: SB // Last documented register - uint8_t DT138; - uint8_t DT139; - - uint8_t DT140; - uint8_t DT141; - uint8_t DT142; - uint8_t DT143; - uint8_t DT144; - uint8_t DT145; - uint8_t DT146; - uint8_t DT147; - uint8_t DT148; - uint8_t DT149; - - uint8_t DT150; - uint8_t DT151; - uint8_t DT152; - uint8_t DT153; - uint8_t DT154; - uint8_t DT155; - - uint8_t DT156_255[100]; + uint8_t DT138[100]; // From here on is just buffer in case it sends more data } AVR_Configuration_T; @@ -285,10 +256,54 @@ 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 *OnOffText(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); + + void ShowAllStatusInfo(); @@ -304,6 +319,7 @@ WORD wOldColorAttrs; // Save the current console colors short consoleWidth = 105; short consoleHeight = 80; +short consoleScrollHeight = 30; // 0 99 // +---------------------------------------------------------------+ // | Program banner information | 0 @@ -318,9 +334,8 @@ short consoleHeight = 80; // | | // | | 79 // +---------------------------------------------------------------+ 80 -short scrollTop = 59; -short scrollBot = 79; -short consoleScrollHeight = 20; +short scrollBot = 0; // set at init: consoleHeight - 1 +short scrollTop = 0; // set at init: consoleHeight - consoleScrollHeight - 1 void Console_Init(); @@ -371,7 +386,6 @@ typedef struct { uint8_t configOffset; // offset into the Config DT0 - DT155 array, or 0xFF for no action uint8_t numToTransfer; // number of bytes to transfer into the Config array, or 0 for no action bool showAll; // true to call ShowAllStatusInfo after processing - void (*fncHelper)(uint8_t rCmd, uint8_t rDat, uint8_t *pMessage, uint32_t msgLen); const char *TextFormatter; // used primarily for development printf(TextFormatter, value) const char *(*fncValueToText)(uint8_t rDat); } MessageHandler_T; @@ -390,43 +404,125 @@ void RxProgramStatus(uint8_t rCmd, uint8_t rDat, uint8_t *pMessage, uint32_t msg // rCmd: 2-ASCII Hex Bytes converted to uint8_t // configOffset: offset into avrStatus.config.DTxx // numToTransfer: number of bytes to transfer from message to config (0 = none) +// show all status // fncHelper: optional function to call upon receipt // const MessageHandler_T MessageHandlers[] = { - //rCmd cfgOfs num ShowAll function - {0x00, 7, 1, 1, RxSystemReport }, - {0x01, 0, 0, 0, RxWarningReport }, - {0x10, 31, 1, 1, RxPlaybackReport }, - {0x11, 32, 1, 1, RxFsReport }, - {0x12, 33, 1, 1, NULL }, // EX/EX - {0x13, 34, 1, 1, NULL }, // Thr / Bypass - {0x14, 35, 1, 1, NULL }, // RED dts - {0x15, 38, 1, 1, NULL }, // Tuner tuned - {0x16, 43, 1, 1, NULL }, // Dts 96/24 - {0x20, 8, 0, 1, NULL, "Zone Power: %s", ZonePower}, - {0x21, 9, 1, 1, NULL }, // Input Source - {0x22, 11, 1, 1, NULL }, // Input Mode - {0x23, 12, 1, 1, NULL, "Mute: %s", OnOffText}, - {0x24, 13, 1, 1, NULL }, // Zone 2 Input Source - {0x25, 14, 1, 1, NULL, "Zone 2 Mute: %s", OnOffText}, - {0x26, 15, 2, 1, RxMasterVolStatus, "Volume: %s", VolumeDB}, - {0x27, 17, 2, 1, NULL }, // Zone 2 Vol - {0x28, 19, 2, 1, RxProgramStatus, "Program: %s", ProgramName}, // Program - {0x29, 25, 1, 1, NULL }, // Tuner Page - {0x2A, 26, 1, 1, NULL }, // Tuner Preset Number - {0x2B, 23, 1, 1, NULL }, // OSD - {0x2C, 24, 1, 1, NULL }, // Sleep Timer - {0x2D, 22, 1, 1, NULL }, // EX/ES(Key) - {0x2E, 29, 1, 1, NULL }, // Speaker Relay A - {0x2F, 30, 1, 1, NULL }, // Speaker Relay B + // + // Configuration Map for Response Messages + // + // +--------------------------- rCmd + // | +----------------------- DT Block Offset + // | | +-------------------- Number of Bytes to transfer into the DT Block + // | | | +----------------- Force a 'show all' status screen update + // | | | | + // | | | | +-------- sprintf format string for the following + // | | | | | +--- Help to convert numeric value to text + // | | | | | | + { 0x00, 7, 1, 1, "System Report: %s", BusyToText }, + { 0x01, 0, 0, 0, "Warning Report: %s", WarnToText }, + { 0x10, 31, 1, 1, "Playback Report: %s", PlaybackToText }, + { 0x11, 32, 1, 1, "Fs Report: %s", FsToText }, + { 0x12, 33, 1, 1, "Ex/Ex: %s", OffMatrixDiscreteText }, // EX/EX + { 0x13, 34, 1, 1, "Thr Bypass: %s", OffOnText }, // Thr / Bypass + { 0x14, 35, 1, 1, "RED dts: %s", ReleaseWaitText}, // RED dts + { 0x15, 38, 1, 1, "Tuner tuned: %s", NotTunedTunedText}, // Tuner tuned + { 0x16, 43, 1, 1, "DTS 96/24: %s", OffOnText}, // Dts 96/24 + { 0x20, 8, 0, 1, "Zone Power: %s", ZonePower }, + { 0x21, 9, 1, 1, "Input: %s", InputText}, // Input Source + { 0x22, 11, 1, 1, "Input Mode: %s", InputModeText}, // Input Mode + { 0x23, 12, 1, 1, "Mute: %s", OffOnText }, + { 0x24, 13, 1, 1, "Zone 2 Input: %s", InputText}, // Zone 2 Input Source + { 0x25, 14, 1, 1, "Zone 2 Mute: %s", OffOnText }, + { 0x26, 15, 2, 1, "Volume: %s", VolumeDB }, + { 0x27, 17, 2, 1, "Zone 2 Vol: %s", VolumeDB}, // Zone 2 Vol + { 0x28, 19, 2, 1, "Program: %s", ProgramName }, // Program + { 0x29, 25, 1, 1, "Tuner Page: %s", PresetLabelText}, // Tuner Page + { 0x2A, 26, 1, 1, "Tuner Preset: %s", PresetNumberText}, // Tuner Preset Number + { 0x2B, 23, 1, 1, "OSD: %s", OSDFullShortOffText}, // OSD + { 0x2C, 24, 1, 1, "Sleep: %s", SleepTimerText}, // Sleep Timer + { 0x2D, 22, 1, 1, "EX/ES(Key): %s", OffMatrixDiscreteAutoText}, // EX/ES(Key) + { 0x2E, 29, 1, 1, "SP Relay A: ", OffOnText}, // Speaker Relay A + { 0x2F, 30, 1, 1, "SP Relay B: ", OffOnText}, // Speaker Relay B + { 0x30, 0, 0, 0, "Home Preset:%s", PresetLabelText }, // Preset A, B, ... F + { 0x31, 0, 0, 0, "Home Memory:%s", PresetLabelText }, // Preset A, B, ... F + { 0x32, 0, 0, 0, "Home Vol Preset: %s", PresetLabelText }, // Preset A, B, ... F + { 0x33, 0, 0, 0, "Home Vol Memory: %s", PresetLabelText }, // Preset A, B, ... F + { 0x34, 36, 1, 1, "Headphone: %s", OffOnText }, + { 0x35, 37, 1, 1, "FM/AM: %s", FMAMText }, + { 0x36, 39, 1, 1, "DC1 Trigger Out: %s", OffOnText }, + { 0x37, 0, 0, 0, "Home Zone 2 Vol Preset: %s", PresetLabelText }, + { 0x38, 0, 0, 0, "Home Zone 2 Vol: %s", PresetLabelText }, + { 0x39, 0, 0, 0, "Dual Mono: %s", MainSubAllText }, + { 0x3A, 42, 1, 1, "DC1 Trigger Control: %s", WhichZoneText }, + { 0x3B, 44, 1, 1, "DC2 Trigger Control: %s", WhichZoneText }, + { 0x3C, 45, 1, 1, "DC2 Trigger Out: %s", OffOnText }, + { 0x3D, 104, 0, 0, "Main Level: %s", Norm10dbDownText }, + { 0x3E, 46, 1, 1, "SP B Set: %s", MainZoneBText }, + { 0x3F, 46, 1, 1, "Zone 2 Speaker: %s", OffOnText }, - {0x36, 39, 1, 1, NULL, "Trigger Out 1: %s", OnOffText}, + { 0x40, 48, 2, 1, "Level Main R: %s", PM10dbText }, + { 0x41, 50, 2, 1, "Level Main L: %s", PM10dbText }, + { 0x42, 52, 2, 1, "Level Center: %s", PM10dbText }, + { 0x43, 54, 2, 1, "Level Rear R: %s", PM10dbText }, + { 0x44, 56, 2, 1, "Level Rear L: %s", PM10dbText }, + { 0x45, 58, 2, 1, "Level Sur Back R: %s", PM10dbText }, + { 0x46, 60, 2, 1, "Level Sur Back L: %s", PM10dbText }, + { 0x47, 62, 2, 1, "Level Front R: %s", PM10dbText }, + { 0x48, 64, 2, 1, "Level Front L: %s", PM10dbText }, + { 0x49, 66, 2, 1, "Level Swfr 1: %s", PM10dbText }, + { 0x4A, 0, 0, 0, "Level Swfr 2: %s", PM10dbText }, - {0x3C, 45, 1, 1, NULL, "Trigger Out 2: %s", OnOffText}, + { 0x50, 0, 0, 0, "Main L/R Bal: %s", BalanceText }, + { 0x51, 74, 2, 1, "LFE Level SP: %s", M20P0dbText }, + { 0x52, 76, 2, 1, "LFE Level HP: %s", M20P0dbText }, + { 0x53, 78, 2, 1, "Audio Delay: %s", ZeroTo160msText }, + { 0x54, 0, 0, 0, "SP Delay Center: %s", ZeroTo5msText }, + { 0x55, 0, 0, 0, "SP Delay Rear CT: %s", ZeroTo30msText }, - {0x82, 27, 1, 1, NULL, "Night Mode: %s", OnOffText}, + { 0x60, 84, 1, 1, "Input Mode: %s", AutoLastText }, + { 0x61, 85, 1, 1, "Dimmer: %s", M4To0Text }, + { 0x62, 87, 2, 1, "OSD Shift: %s", M5toP5Text }, + { 0x63, 89, 1, 1, "Gray Back: %s", OffAutoText }, + { 0x64, 91, 1, 1, "Dynamic Range SP: %s", MaxStdMinText }, + { 0x65, 92, 1, 1, "Dynamic Range HP: %s", MaxStdMinText }, + { 0x66, 93, 0, 0, "Zone 2 Vol out: %s", VarFixText }, + { 0x67, 0, 0, 0, "Zone 2 Mode: %s", Mode1Mode2Text }, + { 0x68, 95, 1, 1, "Mem Guard: %s", OffOnText }, + { 0x69, 90, 1, 1, "Video Conv: %s", OffOnText }, + { 0x6A, 136, 1, 1, "Comp OSD: %s", OffOnText }, + { 0x6B, 0, 0, 0, "Zone 3 Vol out: %s", VarFixText }, + { 0x70, 96, 1, 1, "Center Sp Size: %s", LSNText }, + { 0x71, 97, 1, 1, "Main Sp Size: %s", LSNText }, + { 0x72, 98, 1, 1, "Rear LR Sp Size: %s", LSNText }, + { 0x73, 99, 1, 1, "Sur Back Size: %s", LLSSNText }, + { 0x74, 100, 1, 1, "Front Sp: %s", YesNoneText }, + { 0x75, 101, 1, 1, "LFE Bass Out: %s", SwfrMainBothText }, + { 0x76, 134, 1, 1, "SW1: %s", LrFrNoneText }, + + { 0x78, 102, 1, 1, "6 Ch Center: %s", CenterMainText }, + { 0x79, 103, 1, 1, "6 Ch Swfr: %s", SwfrMainText }, + { 0x7A, 133, 1, 1, "6 Ch Surround: %s", SurrMainText }, + { 0x7B, 0, 0, 0, "Multi Ch Select: %s", SixEightText }, + { 0x7E, 135, 1, 1, "SW Crossover", CrossOverText }, - {0xA1, 0, 0, 0, NULL, "Zone 3 Mute: %s\n", OnOffText}, + { 0x80, 105, 1, 1, "Test Mode: %s", OffDolbyDspText }, + { 0x81, 0, 0, 0, "Analog Special: %s", OffOn2OnMultiText }, + { 0x82, 27, 1, 1, "Night Mode: %s", OffOnText }, + + { 0x90, 0, 0, 0, "Multi Ch Level Main R: %s", M10P10dbText }, + { 0x91, 0, 0, 0, "Multi Ch Level Main L: %s", M10P10dbText }, + { 0x92, 0, 0, 0, "Multi Ch Level Center: %s", M10P10dbText }, + { 0x93, 0, 0, 0, "Multi Ch Level Rear R: %s", M10P10dbText }, + { 0x94, 0, 0, 0, "Multi Ch Level Rear L: %s", M10P10dbText }, + { 0x95, 0, 0, 0, "Multi Ch Level Sur B R: %s", M10P10dbText }, + { 0x96, 0, 0, 0, "Multi Ch Level Sur B L: %s", M10P10dbText }, + { 0x97, 0, 0, 0, "Multi Ch Level Front R: %s", M10P10dbText }, + { 0x98, 0, 0, 0, "Multi Ch Level Front L: %s", M10P10dbText }, + { 0x99, 0, 0, 0, "Multi Ch Level Swfr 1: %s", M20P0dbText }, + { 0x9A, 0, 0, 0, "Multi Ch Level Swfr 2: %s", M20P0dbText }, + + { 0xA1, 0, 0, 0, "Zone 3 Mute: %s\n", OffOnText }, }; @@ -468,7 +564,7 @@ void RxPlaybackReport(uint8_t rCmd, uint8_t rDat, uint8_t *pMessage, uint32_t ms 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, "Playback Report: %s\n", FsToText(rDat)); + sprintf_s(buf, MAXTEXTLEN, "Fs Report: %s\n", FsToText(rDat)); Console_Write(buf); Console_ScrollBottomRegion(scrollTop, scrollBot); //ShowAllStatusInfo(); @@ -665,13 +761,15 @@ void EmitRuntimeHelp() { Console_Write(buf); } if (avr.IsOpen()) { + Console_ScrollBottomRegion(scrollTop, scrollBot); Console_SetCursor(0, -1); printf(" Com Status: RTS: %-3s ", avr.Get_RTS_State() ? "ON" : "OFF"); printf("DTR: %-3s ", avr.Get_DTR_State() ? "ON" : "OFF"); printf("CTS: %-3s ", avr.Get_CTS_State() ? "ON" : "OFF"); printf("DSR: %-3s ", avr.Get_DSR_State() ? "ON" : "OFF"); - printf("RI: %-3s\n", avr.Get_RI_State() ? "ON" : "OFF"); + printf("RI: %-3s", avr.Get_RI_State() ? "ON" : "OFF"); Console_ScrollBottomRegion(scrollTop, scrollBot); + Console_SetCursor(0, -1); } } @@ -683,7 +781,7 @@ void EmitRuntimeHelp() { // and pre and post-pending \n // static void PCMessage(const char *msg, int len, uint8_t **src, const char * (fncHelper)(uint8_t val) = NULL) { - char buf[MAXTEXTLEN]; + char buf[MAXTEXTLEN] = ""; const char *p = buf; if (fncHelper) { @@ -698,7 +796,7 @@ static void PCMessage(const char *msg, int len, uint8_t **src, const char * (fnc buf[len] = '\0'; } - char outBuf[MAXTEXTLEN]; + char outBuf[MAXTEXTLEN] = ""; sprintf_s(outBuf, MAXTEXTLEN, "%17s %-8s", msg, p @@ -781,7 +879,7 @@ const char *FsToText(uint8_t val) { -const char * OnOffText(uint8_t val) { +const char * OffOnText(uint8_t val) { static char buf[16]; if (val == 0) { strcpy_s(buf, sizeof(buf), "Off"); @@ -793,6 +891,289 @@ const char * OnOffText(uint8_t 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] = { @@ -813,15 +1194,16 @@ const char *ZonePower(uint8_t val) { } const char * InputText(uint8_t val) { - const char *inputList[13] = { - "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" + 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 <= 12) { - return inputList[val]; - } else { - return "huh?"; - } + if (val >= sizeof(buf) / sizeof(buf[0])) + val = sizeof(buf) / sizeof(buf[0]) - 1; + return buf[val]; } const char *ProgramName(uint8_t val) { @@ -928,6 +1310,129 @@ const char *VolumeDB(uint8_t val) { 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) { if (avrStatus.headerValid) { bool priorState = Console_SetCursorVisibility(false); @@ -943,43 +1448,43 @@ void ShowAllStatusInfo(void) { PCMessage("Cmd Timeout", 3, &p); PCMessage("Handshake", 1, &p); PCMessage("Busy", 1, &p, BusyToText); - PCMessage("Power", 1, &p, OnOffText); + PCMessage("Power", 1, &p, OffOnText); if (avrStatus.configValid) { PCMessage("Input", 1, &p, InputText); PCMessage("6 ch", 1, &p); PCMessage("Inp mode", 1, &p); - PCMessage("Mute", 1, &p, OnOffText); + PCMessage("Mute", 1, &p, OffOnText); PCMessage("Zone 2", 1, &p, InputText); - PCMessage("Mute 2", 1, &p, OnOffText); + PCMessage("Mute 2", 1, &p, OffOnText); PCMessage("Volume", 2, &p, VolumeDB); PCMessage("Volume 2", 2, &p, VolumeDB); PCMessage("pgm", 2, &p); - PCMessage("effect", 1, &p, OnOffText); + PCMessage("effect", 1, &p, OffOnText); PCMessage("6.1/es status", 1, &p); PCMessage("OSD", 1, &p); PCMessage("sleep", 1, &p); PCMessage("Tuner Pg", 1, &p); PCMessage("Tuner #", 1, &p); - PCMessage("Night", 1, &p, OnOffText); + PCMessage("Night", 1, &p, OffOnText); PCMessage("?????", 1, &p); - PCMessage("Spkr A", 1, &p, OnOffText); - PCMessage("Spkr B", 1, &p, OnOffText); + PCMessage("Spkr A", 1, &p, OffOnText); + PCMessage("Spkr B", 1, &p, OffOnText); PCMessage("Playback", 1, &p); PCMessage("Fs", 1, &p); PCMessage("Ex/Es", 1, &p); PCMessage("Thr Bypass", 1, &p); PCMessage("Red DTS", 1, &p); - PCMessage("Headph", 1, &p, OnOffText); + PCMessage("Headph", 1, &p, OffOnText); PCMessage("Tuner Band", 1, &p); PCMessage("Tuner Tuned", 1, &p); PCMessage("DC1 Control Out", 1, &p); PCMessage("?????", 2, &p); PCMessage("DC1 Trig Ctrl", 1, &p); - PCMessage("DTS 96/24", 1, &p, OnOffText); + PCMessage("DTS 96/24", 1, &p, OffOnText); PCMessage("DC2 Trig Ctrl", 1, &p); PCMessage("DC2 Trig", 1, &p); PCMessage("Spkr B Set", 1, &p); - PCMessage("Zone 2 SP out", 1, &p, OnOffText); + PCMessage("Zone 2 SP out", 1, &p, OffOnText); PCMessage("Main R", 2, &p); PCMessage("Main L", 2, &p); PCMessage("Center", 2, &p); @@ -1000,12 +1505,12 @@ void ShowAllStatusInfo(void) { PCMessage("OSD Msg", 1, &p); PCMessage("OSD Shift", 2, &p); PCMessage("Gray Back", 1, &p); - PCMessage("Video Conv", 1, &p, OnOffText); + PCMessage("Video Conv", 1, &p, OffOnText); PCMessage("D Range SP", 1, &p); PCMessage("D Range HP", 1, &p); PCMessage("Zone 2 Vol out", 1, &p); PCMessage("?????", 1, &p); - PCMessage("Memory Guard", 1, &p, OnOffText); + PCMessage("Memory Guard", 1, &p, OffOnText); PCMessage("SP set center", 1, &p); PCMessage("SP set main", 1, &p); PCMessage("SP set rear L/R", 1, &p); @@ -1035,7 +1540,7 @@ void ShowAllStatusInfo(void) { PCMessage("MultiCh Surround", 1, &p); PCMessage("SP Set SW1", 1, &p); PCMessage("SP Set Crossover", 1, &p); - PCMessage("Component OSD", 1, &p, OnOffText); + PCMessage("Component OSD", 1, &p, OffOnText); PCMessage("PB/SB Select", 1, &p); } printf("\n"); @@ -1066,13 +1571,13 @@ void ProcessKeyboard(void) { case 'S': avr.Set_RTS_State(TRUE); Console_SetCursor(0, -1); - printf("RTS set ON\n"); + printf("RTS set ON"); Console_ScrollBottomRegion(scrollTop, scrollBot); break; case 's': avr.Set_RTS_State(FALSE); Console_SetCursor(0, -1); - printf("RTS set OFF\n"); + printf("RTS set OFF"); Console_ScrollBottomRegion(scrollTop, scrollBot); break; default: @@ -1085,7 +1590,7 @@ void ProcessKeyboard(void) { } if (!cmdFound) { Console_SetCursor(0, -1); - printf("Unrecognized command '%c' (0x%02X)\n", isprint(c) ? c : '.', (unsigned char)c); + printf("Unrecognized command '%c' (0x%02X)", isprint(c) ? c : '.', (unsigned char)c); Console_ScrollBottomRegion(scrollTop, scrollBot); } break; @@ -1158,8 +1663,8 @@ int __cdecl main(int argc, char *argv[]) { } if (AttachToSerialPort()) { - printf("AVR - a command shell utility for a Yamaha RX-2400 AVR by D.Smart\n"); - printf("Attached to Serial Port on COM%i at %i baud\n", avrOnPort, avrBaud); + printf("AVR - a command shell utility for a Yamaha RX-2400 AVR by D.Smart "); + printf("[COM%i at %i baud]", avrOnPort, avrBaud); Console_WriteAt(0, scrollTop - 1, "----------------------------------------"); do { @@ -1256,9 +1761,9 @@ void ProcessResponse(uint8_t *szBuffer, uint32_t len) { if (MessageHandlers[i].numToTransfer == 2) { memcpy(&avrStatus.config.DT0 + MessageHandlers[i].configOffset, &szBuffer[5], 2); } - if (MessageHandlers[i].fncHelper) { - (*MessageHandlers[i].fncHelper)(rcmd, rdat, szBuffer, len); - } + //if (MessageHandlers[i].fncHelper) { + // (*MessageHandlers[i].fncHelper)(rcmd, rdat, szBuffer, len); + //} if (MessageHandlers[i].TextFormatter && MessageHandlers[i].fncValueToText) { sprintf_s(buf, MAXTEXTLEN, MessageHandlers[i].TextFormatter, MessageHandlers[i].fncValueToText(rdat)); Console_Write(buf); @@ -1269,84 +1774,13 @@ void ProcessResponse(uint8_t *szBuffer, uint32_t len) { } } } - Console_SetCursor(0, -1); if (!found) { - sprintf_s(buf, MAXTEXTLEN, "type: %X, guard: %X, cmd: %02X, data: %02X", type, guard, rcmd, rdat); + Console_SetCursor(0, -1); + sprintf_s(buf, MAXTEXTLEN, "***** type: %X, guard: %X, cmd: %02X, data: %02X", type, guard, rcmd, rdat); Console_Write(buf); Console_ScrollBottomRegion(scrollTop, scrollBot); } -// switch (rcmd) { -// case 0x20: // Power status -// SetData(&avrStatus.config.DT8, Dec2Hex(rdat, 1)); -// sprintf_s(buf, MAXTEXTLEN, "Zone Power: %s\n", ZonePower(rdat)); -// Console_Write(buf); -// Console_ScrollBottomRegion(scrollTop, scrollBot); -// ShowAllStatusInfo(); -// break; -// case 0x23: // Mute -// SetData(&avrStatus.config.DT12, Dec2Hex(rdat, 1)); -// sprintf_s(buf, MAXTEXTLEN, "Mute: %s\n", OnOffText(rdat)); -// Console_Write(buf); -// Console_ScrollBottomRegion(scrollTop, scrollBot); -// ShowAllStatusInfo(); -// break; -// case 0x25: // Zone 2 Mute -// SetData(&avrStatus.config.DT14, Dec2Hex(rdat, 1)); -// sprintf_s(buf, MAXTEXTLEN, "Zone 2 Mute: %s\n", OnOffText(rdat)); -// Console_Write(buf); -// Console_ScrollBottomRegion(scrollTop, scrollBot); -// ShowAllStatusInfo(); -// break; -// case 0x26: // Master Volume -// RxMasterVolStatus(rcmd, rdat, szBuffer, len); -// SetData(&avrStatus.config.DT15, Dec2Hex(rdat, 2)); -// sprintf_s(buf, MAXTEXTLEN, "Vol: %s\n", VolumeDB(rdat)); -// Console_Write(buf); -// Console_ScrollBottomRegion(scrollTop, scrollBot); -// ShowAllStatusInfo(); -// break; -// case 0x28: // Program -// SetData(&avrStatus.config.DT19, Dec2Hex(rdat, 2)); -// sprintf_s(buf, MAXTEXTLEN, "Prog: %s\n", ProgramName(rdat)); -// Console_Write(buf); -// Console_ScrollBottomRegion(scrollTop, scrollBot); -// ShowAllStatusInfo(); -// break; -// case 0x82: // Night Mode -// SetData(&avrStatus.config.DT27, Dec2Hex(rdat, 1)); -// sprintf_s(buf, MAXTEXTLEN, "Night Mode: %s\n", OnOffText(rdat)); -// Console_Write(buf); -// Console_ScrollBottomRegion(scrollTop, scrollBot); -// ShowAllStatusInfo(); -// break; -// case 0x36: // DC1 Trigger -// SetData(&avrStatus.config.DT39, Dec2Hex(rdat, 1)); -// sprintf_s(buf, MAXTEXTLEN, "Trigger Out 1: %s\n", OnOffText(rdat)); -// Console_Write(buf); -// Console_ScrollBottomRegion(scrollTop, scrollBot); -// ShowAllStatusInfo(); -// break; -// case 0x3C: // DC2 Trigger -// SetData(&avrStatus.config.DT45, Dec2Hex(rdat, 1)); -// sprintf_s(buf, MAXTEXTLEN, "Trigger Out 2: %s\n", OnOffText(rdat)); -// Console_Write(buf); -// Console_ScrollBottomRegion(scrollTop, scrollBot); -// ShowAllStatusInfo(); -// break; -// case 0xA1: // Zone 3 Mute -// //SetData(&avrStatus.config.DT14, Dec2Hex(rdat, 1)); -// sprintf_s(buf, MAXTEXTLEN, "Zone 3 Mute: %s\n", OnOffText(rdat)); -// Console_Write(buf); -// Console_ScrollBottomRegion(scrollTop, scrollBot); -// ShowAllStatusInfo(); -// break; -// default: // Everything not yet handled -// sprintf_s(buf, MAXTEXTLEN, "type: %X, guard: %X, cmd: %02X, data: %02X", type, guard, rcmd, rdat); -// Console_Write(buf); -// Console_ScrollBottomRegion(scrollTop, scrollBot); -// break; -// } } // AnalyzeResponse @@ -1501,6 +1935,8 @@ void Console_Init() { fprintf(stderr, "Error: Unable to get console buffer info. Code: %lu\n", GetLastError()); exit(1); } + scrollBot = consoleHeight - 1; + scrollTop = consoleHeight - consoleScrollHeight - 1; // Desired size (width x height) COORD newSize; @@ -1596,7 +2032,7 @@ void Console_WriteAt(short x, short y, const char *text) { void Console_SetCursor(short x, short y) { GetConsoleScreenBufferInfo(hStdout, &csbi); csbi.dwCursorPosition.X = (short)((x < 0) ? csbi.srWindow.Right + x : x); - csbi.dwCursorPosition.Y = (short)((y < 0) ? csbi.srWindow.Bottom + y : y); + csbi.dwCursorPosition.Y = (short)((y < 0) ? csbi.srWindow.Bottom + 1 + y : y); SetConsoleCursorPosition(hStdout, csbi.dwCursorPosition); } diff --git a/DataSheets/Yamaha RX-V2400_RS232C_CommandsForSW.pdf.xlsx b/DataSheets/Yamaha RX-V2400_RS232C_CommandsForSW.pdf.xlsx index 18a7e29..de4b644 100644 Binary files a/DataSheets/Yamaha RX-V2400_RS232C_CommandsForSW.pdf.xlsx and b/DataSheets/Yamaha RX-V2400_RS232C_CommandsForSW.pdf.xlsx differ diff --git a/DataSheets/Yamaha RX-V2400_RS232C_Standard.pdf b/DataSheets/Yamaha RX-V2400_RS232C_Standard.pdf index b905352..313d0c4 100644 Binary files a/DataSheets/Yamaha RX-V2400_RS232C_Standard.pdf and b/DataSheets/Yamaha RX-V2400_RS232C_Standard.pdf differ