HamBook – Rev 56

Subversion Repositories:
Rev:
using HamBook.Utilities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Serialization;

namespace HamBook.Radios.Yaesu.FT_891
{
    [Radio("Yaesu FT-891")]
    [XmlRoot(Namespace = "Yaesu FT-891")]
    public class RadioMenu : Generic.RadioMenu
    {
        public override int[] Indices =>
            new[]
            {
                101, 102, 03, 201, 202, 203, 204, 205, 206,
                207, 301, 302, 401, 402, 403, 404, 405, 406,
                407, 408, 409, 410, 411, 501, 502, 503, 505,
                506, 507, 508, 509, 510, 511, 512, 513, 514,
                515, 516, 517, 518, 519, 520, 601, 602, 603,
                604, 605, 606, 607, 701, 702, 703, 704, 705,
                706, 707, 708, 709, 710, 711, 712, 713, 801,
                802, 803, 804, 805, 806, 807, 808, 809, 810,
                811, 812, 901, 902, 903, 904, 905, 906, 1001,
                1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009,
                1010, 1011, 1101, 1102, 1103, 1104, 1105, 1106,
                1107, 1108, 1109, 1201, 1202, 1203, 1204, 1301,
                1302, 1401, 1402, 1403, 1404, 1405, 1406, 1407,
                1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508,
                1509, 1010, 1511, 1512, 1513, 1514, 1515, 1516,
                1517, 1518, 1601, 1602, 1603, 1604, 1605, 1606,
                1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614,
                1615, 1616, 1617, 1618, 1619, 1620, 1621, 1622,
                1623 //, 1701, 1801, 1802, 1803
            };

        public override int MenuToCAT(int menu, string value)
        {
            switch (menu)
            {
                case 205:
                    return Array.IndexOf(new[] { "OFF", "0.5", "1.0", "2.0" }, value);

                case 508:
                case 509:
                case 510:
                case 511:
                case 512:
                case 515:
                case 1623:
                case 206:
                    return Array.IndexOf(new[] { "DISABLE", "ENABLE" }, value);

                case 207:
                    return Array.IndexOf(new[] { "UPPER", "LOWER" }, value);

                case 401:
                    return Array.IndexOf(new[] { "OFF", "BUG", "ELEKEY-A", "ELEKEY-B", "ELEKEY-Y", "ACS" },
                        value);

                case 1006:
                case 1007:
                case 402:
                    return Array.IndexOf(new[] { "NOR", "REV" }, value);

                case 403:
                    var list = new List<string>();
                    for (var j = 2.0; j <= 4.5; j += 0.1)
                    {
                        var v = $"{(decimal)j:f1}";
                        list.Add(v);
                    }

                    return list.IndexOf(value);

                case 404:
                    return Array.IndexOf(
                        new[] { "OFF" }.Concat(Mathematics.GenerateRange(1, 690).Select(o => o.ToString()))
                            .ToArray(), value);

                case 405:
                    return Array.IndexOf(new[] { "1290", "AUNO", "AUNT", "A2NO", "A2NT", "12NO", "12NT" },
                        value);

                case 407:
                case 408:
                case 409:
                case 410:
                case 411:
                    return Array.IndexOf(new[] { "TEXT", "MESSAGE" }, value);

                case 501:
                    return Array.IndexOf(new[] { 1, 3, 10 }, value);

                case 502:
                    return Array.IndexOf(new[] { 10, 30, 50 }, value);

                case 505:
                    return Array.IndexOf(new[] { "RF", "SQL" }, value);

                case 506:
                    return Array.IndexOf(new[] { 4800, 9600, 19200, 38400 }, value);

                case 507:
                    return Array.IndexOf(new[] { 10, 100, 1000, 3000 }, value);

                case 513:
                    return Array.IndexOf(Mathematics.GenerateRange(-20, 20).ToArray(), value);

                case 514:
                    return Array.IndexOf(
                        new[] { "OFF" }.Concat(Mathematics.GenerateRange(1, 30).Select(o => o.ToString()))
                            .ToArray(),
                        value);

                case 516:
                    return Array.IndexOf(new[] { "PAUSE", "TIME" }, value);

                case 517:
                    return Array.IndexOf(Mathematics.GenerateRange(-25, 25).ToArray(), value);

                case 518:
                    return Array.IndexOf(new[] { "RX", "TX", "TRX" }, value);

                case 519:
                    return Array.IndexOf(new[] { "OFF", "1", "2", "4", "6", "8", "10", "12" }, value);

                case 520:
                    return Array.IndexOf(new[] { "NORMAL", "CONTEST" }, value);

                case 601:
                    return Array.IndexOf(new[] { "OFF" }.Concat(Mathematics.GenerateRange(100, 1000, 50)
                        .Select(o => o.ToString())).ToArray(), value);

                case 1102:
                case 1104:
                case 1002:
                case 1004:
                case 806:
                case 808:
                case 704:
                case 702:
                case 604:
                case 602:
                    return Array.IndexOf(new[] { 6, 18 }, value);

                case 603:
                    return Array.IndexOf(new[] { "OFF" }.Concat(Mathematics.GenerateRange(700, 4000, 50)
                        .Select(o => o.ToString())).ToArray(), value);

                case 1105:
                case 901:
                case 809:
                case 605:
                    return Array.IndexOf(new[] { "MIC", "REAR" }, value);

                case 1108:
                case 903:
                case 810:
                case 607:
                    return Array.IndexOf(new[] { "DAKY", "RTS", "DTR" }, value);

                case 701:
                    return Array.IndexOf(new[] { "OFF" }.Concat(Mathematics.GenerateRange(100, 1000, 50)
                        .Select(o => o.ToString())).ToArray(), value);

                case 703:
                    return Array.IndexOf(new[] { "OFF" }.Concat(Mathematics.GenerateRange(700, 4000, 50)
                        .Select(o => o.ToString())).ToArray(), value);

                case 706:
                    return Array.IndexOf(new[] { "OFF", "50M", "ON" }, value);

                case 1107:
                case 707:
                    return Array.IndexOf(new[] { "USB", "LSB", "AUTO" }, value);

                case 708:
                    return Array.IndexOf(new[] { "SEMI", "FULL" }, value);

                case 709:
                    return Array.IndexOf(Mathematics.GenerateRange(30, 3000, 10).ToArray(), value);

                case 710:
                    return Array.IndexOf(new[] { string.Empty, "2", "4" }, value);

                case 711:
                    return Array.IndexOf(new[] { "FREQ", "PITCH" }, value);

                case 712:
                    return Array.IndexOf(new[] { "OFF", "DAKY", "RTS", "DTR" }, value);

                case 713:
                    return Array.IndexOf(new[] { 15, 20, 25, 30 }, value);

                case 801:
                    return Array.IndexOf(new[] { "PSK", "OTHERS" }, value);

                case 802:
                    return Array.IndexOf(new[] { 1000, 1500, 2000 }, value);

                case 803:
                    return Array.IndexOf(Mathematics.GenerateRange(-3000, 3000, 10).ToArray(), value);

                case 804:
                    return Array.IndexOf(Mathematics.GenerateRange(-3000, 3000, 10).ToArray(), value);

                case 805:
                    return Array.IndexOf(new[] { "OFF" }.Concat(Mathematics.GenerateRange(100, 1000, 50)
                        .Select(o => o.ToString())).ToArray(), value);

                case 807:
                    return Array.IndexOf(new[] { "OFF" }.Concat(Mathematics.GenerateRange(700, 4000, 50)
                        .Select(o => o.ToString())).ToArray(), value);

                case 1011:
                case 812:
                    return Array.IndexOf(new[] { "USB", "LSB" }, value);

                case 904:
                    return Array.IndexOf(Mathematics.GenerateRange(0, 1000, 10).ToArray(), value);

                case 905:
                    return Array.IndexOf(Mathematics.GenerateRange(0, 4000, 10).ToArray(), value);

                case 906:
                    return Array.IndexOf(new[] { "Tn-Rn", "Tn-Riv", "Tiv-Rn", "Tiv-Riv" }, value);

                case 1001:
                    return Array.IndexOf(new[] { "OFF" }.Concat(Mathematics.GenerateRange(100, 1000, 50)
                        .Select(o => o.ToString())).ToArray(), value);

                case 1003:
                    return Array.IndexOf(new[] { "OFF" }.Concat(Mathematics.GenerateRange(700, 4000, 50)
                        .Select(o => o.ToString())).ToArray(), value);

                case 1005:
                    return Array.IndexOf(new[] { "SHIFT", "DTR", "RTS" }, value);

                case 1009:
                    return Array.IndexOf(new[] { 170, 200, 425, 850 }, value);

                case 1010:
                    return Array.IndexOf(new[] { 1275, 2125 }, value);

                case 1101:
                    return Array.IndexOf(new[] { "OFF" }.Concat(Mathematics.GenerateRange(100, 1000, 50)
                        .Select(o => o.ToString())).ToArray(), value);

                case 1103:
                    return Array.IndexOf(new[] { "OFF" }.Concat(Mathematics.GenerateRange(700, 4000, 50)
                        .Select(o => o.ToString())).ToArray(), value);

                case 1109:
                    return Array.IndexOf(
                        new[] { "100-3000", "100-2900", "200-2800", "300-2700", "400-2600" }, value);

                case 1201:
                    return Array.IndexOf(new[] { "NARROW", "MEDIUM", "WIDE" }, value);

                case 1202:
                    return Array.IndexOf(Mathematics.GenerateRange(-40, 20).ToArray(), value);

                case 1204:
                    return Array.IndexOf(new[] { "NARROW", "WIDE" }, value);

                case 1301:
                    return Array.IndexOf(new[] { "OFF", "3", "5", "10" }, value);

                case 1302:
                    return Array.IndexOf(new[] { 37.5, 75, 150, 375, 750 }, value);

                case 1401:
                    return Array.IndexOf(new[] { 50, 100, 500 }, value);

                case 1402:
                    return Array.IndexOf(new[] { 2, 5, 10 }, value);

                case 1403:
                case 1404:
                    return Array.IndexOf(new[] { 2, 5, 10 }, value);
                case 1405:
                    return Array.IndexOf(new[] { 2, 5, 10 }, value);
                case 1406:
                    return Array.IndexOf(new[] { 2.5, 5, 2.9, 10, 12.5, 25 }, value);
                case 1407:
                    return Array.IndexOf(new[] { 5, 6.25, 10, 12.5, 15, 20, 25 }, value);
                case 1501:
                    return Array.IndexOf(new[] { "OFF" }.Concat(Mathematics.GenerateRange(100, 700, 100)
                        .Select(o => o.ToString())).ToArray(), value);
                case 1504:
                    return Array.IndexOf(new[] { "OFF" }.Concat(Mathematics.GenerateRange(700, 1500, 100)
                        .Select(o => o.ToString())).ToArray(), value);
                case 1514:
                case 1511:
                case 1508:
                case 1505:
                    return Array.IndexOf(Mathematics.GenerateRange(-20, 10).ToArray(), value);
                case 1507:
                    return Array.IndexOf(new[] { "OFF" }.Concat(Mathematics.GenerateRange(1500, 3200, 100)
                        .Select(o => o.ToString())).ToArray(), value);
                case 1510:
                    return Array.IndexOf(new[] { "OFF" }.Concat(Mathematics.GenerateRange(100, 700, 100)
                        .Select(o => o.ToString())).ToArray(), value);
                case 1513:
                    return Array.IndexOf(new[] { "OFF" }.Concat(Mathematics.GenerateRange(700, 1500, 100)
                        .Select(o => o.ToString())).ToArray(), value);
                case 1515:
                    return Array.IndexOf(Mathematics.GenerateRange(1, 10).ToArray(), value);
                case 1516:
                    return Array.IndexOf(new[] { "OFF" }.Concat(Mathematics.GenerateRange(1500, 3200, 100)
                        .Select(o => o.ToString())).ToArray(), value);
                case 1614:
                case 1613:
                case 1612:
                case 1611:
                case 1610:
                case 1609:
                case 1608:
                case 1607:
                case 1606:
                case 1603:
                case 1604:
                case 1601:
                    return Array.IndexOf(Mathematics.GenerateRange(5, 100).ToArray(), value);
                case 1605:
                case 1602:
                    return Array.IndexOf(Mathematics.GenerateRange(5, 40).ToArray(), value);
                case 1615:
                    return Array.IndexOf(new[] { "OFF", "EXTERNAL", "ATAS", "LAMP" }, value);
                case 1616:
                    return Array.IndexOf(new[] { "MIC", "DATA" }, value);
                case 1618:
                    return Array.IndexOf(Mathematics.GenerateRange(30, 3000, 10).ToArray(), value);
                case 1622:
                case 1620:
                case 1619:
                    return Array.IndexOf(Mathematics.GenerateRange(0, 100).ToArray(), value);
                case 1621:
                    return Array.IndexOf(Mathematics.GenerateRange(30, 3000).ToArray(), value);
                default:
                    if (!int.TryParse(value, out var result))
                    {
                        throw new ArgumentException();
                    }

                    return result;
            }
        }
    }
}