HamBook – Rev 56
?pathlinks?
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;
}
}
}
}