mirror of
https://github.com/f4exb/sdrangel.git
synced 2024-11-25 17:28:50 -05:00
466 lines
9.9 KiB
C++
466 lines
9.9 KiB
C++
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// Copyright (C) 2021 Edouard Griffiths, F4EXB <f4exb06@gmail.com> //
|
|
// //
|
|
// This program is free software; you can redistribute it and/or modify //
|
|
// it under the terms of the GNU General Public License as published by //
|
|
// the Free Software Foundation as version 3 of the License, or //
|
|
// (at your option) any later version. //
|
|
// //
|
|
// This program is distributed in the hope that it will be useful, //
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
|
|
// GNU General Public License V3 for more details. //
|
|
// //
|
|
// You should have received a copy of the GNU General Public License //
|
|
// along with this program. If not, see <http://www.gnu.org/licenses/>. //
|
|
// //
|
|
// Source: http://onfreq.com/syntorx/dcs.html //
|
|
// //
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
#include "dcscodes.h"
|
|
|
|
const QMap<unsigned int, unsigned int> DCSCodes::m_toCanonicalCode {
|
|
{0023, 0023},
|
|
{0340, 0023},
|
|
{0766, 0023},
|
|
{0025, 0025},
|
|
{0026, 0026},
|
|
{0566, 0026},
|
|
{0031, 0031},
|
|
{0374, 0031},
|
|
{0643, 0031},
|
|
{0032, 0032},
|
|
{0036, 0036},
|
|
{0137, 0036},
|
|
{0043, 0043},
|
|
{0355, 0043},
|
|
{0047, 0047},
|
|
{0375, 0047},
|
|
{0707, 0047},
|
|
{0051, 0051},
|
|
{0771, 0051},
|
|
{0520, 0051},
|
|
{0053, 0053},
|
|
{0054, 0054},
|
|
{0405, 0054},
|
|
{0675, 0054},
|
|
{0065, 0065},
|
|
{0301, 0065},
|
|
{0071, 0071},
|
|
{0603, 0071},
|
|
{0717, 0071},
|
|
{0746, 0071},
|
|
{0072, 0072},
|
|
{0470, 0072},
|
|
{0701, 0072},
|
|
{0073, 0073},
|
|
{0640, 0073},
|
|
{0074, 0074},
|
|
{0360, 0074},
|
|
{0721, 0074},
|
|
{0112, 0112},
|
|
{0250, 0112},
|
|
{0505, 0112},
|
|
{0512, 0112},
|
|
{0114, 0114},
|
|
{0327, 0114},
|
|
{0615, 0114},
|
|
{0115, 0115},
|
|
{0534, 0115},
|
|
{0674, 0115},
|
|
{0116, 0116},
|
|
{0060, 0116},
|
|
{0737, 0116},
|
|
{0122, 0122},
|
|
{0535, 0125},
|
|
{0125, 0125},
|
|
{0173, 0125},
|
|
{0131, 0131},
|
|
{0572, 0131},
|
|
{0702, 0131},
|
|
{0132, 0132},
|
|
{0605, 0132},
|
|
{0634, 0132},
|
|
{0714, 0132},
|
|
{0134, 0134},
|
|
{0273, 0134},
|
|
{0143, 0143},
|
|
{0333, 0143},
|
|
{0145, 0145},
|
|
{0525, 0145},
|
|
{0152, 0152},
|
|
{0366, 0152},
|
|
{0415, 0152},
|
|
{0155, 0155},
|
|
{0233, 0155},
|
|
{0660, 0155},
|
|
{0156, 0156},
|
|
{0517, 0156},
|
|
{0741, 0156},
|
|
{0162, 0162},
|
|
{0416, 0162},
|
|
{0553, 0162},
|
|
{0165, 0165},
|
|
{0354, 0165},
|
|
{0172, 0172},
|
|
{0057, 0172},
|
|
{0174, 0174},
|
|
{0142, 0174},
|
|
{0270, 0174},
|
|
{0205, 0205},
|
|
{0135, 0205},
|
|
{0610, 0205},
|
|
{0212, 0212},
|
|
{0253, 0212},
|
|
{0223, 0223},
|
|
{0350, 0223},
|
|
{0475, 0223},
|
|
{0750, 0223},
|
|
{0225, 0225},
|
|
{0536, 0225},
|
|
{0226, 0226},
|
|
{0104, 0226},
|
|
{0557, 0226},
|
|
{0243, 0243},
|
|
{0267, 0243},
|
|
{0342, 0243},
|
|
{0244, 0244},
|
|
{0176, 0244},
|
|
{0417, 0244},
|
|
{0245, 0245},
|
|
{0370, 0245},
|
|
{0246, 0246},
|
|
{0542, 0246},
|
|
{0653, 0246},
|
|
{0554, 0245},
|
|
{0251, 0251},
|
|
{0236, 0251},
|
|
{0704, 0251},
|
|
{0742, 0251},
|
|
{0252, 0252},
|
|
{0661, 0252},
|
|
{0255, 0255},
|
|
{0425, 0255},
|
|
{0261, 0261},
|
|
{0227, 0261},
|
|
{0567, 0261},
|
|
{0263, 0263},
|
|
{0213, 0263},
|
|
{0736, 0263},
|
|
{0265, 0265},
|
|
{0171, 0265},
|
|
{0426, 0265},
|
|
{0266, 0266},
|
|
{0655, 0266},
|
|
{0271, 0271},
|
|
{0427, 0271},
|
|
{0510, 0271},
|
|
{0762, 0271},
|
|
{0274, 0274},
|
|
{0652, 0274},
|
|
{0306, 0306},
|
|
{0147, 0306},
|
|
{0303, 0306},
|
|
{0761, 0306},
|
|
{0311, 0311},
|
|
{0330, 0311},
|
|
{0456, 0311},
|
|
{0561, 0311},
|
|
{0315, 0315},
|
|
{0321, 0315},
|
|
{0673, 0315},
|
|
{0325, 0325},
|
|
{0550, 0325},
|
|
{0626, 0325},
|
|
{0331, 0331},
|
|
{0372, 0331},
|
|
{0507, 0331},
|
|
{0332, 0332},
|
|
{0433, 0332},
|
|
{0552, 0332},
|
|
{0343, 0343},
|
|
{0324, 0343},
|
|
{0570, 0343},
|
|
{0346, 0346},
|
|
{0616, 0346},
|
|
{0635, 0346},
|
|
{0724, 0346},
|
|
{0351, 0351},
|
|
{0353, 0351},
|
|
{0435, 0351},
|
|
{0356, 0356},
|
|
{0521, 0356},
|
|
{0364, 0364},
|
|
{0130, 0364},
|
|
{0641, 0364},
|
|
{0365, 0365},
|
|
{0107, 0365},
|
|
{0371, 0371},
|
|
{0217, 0371},
|
|
{0453, 0371},
|
|
{0530, 0371},
|
|
{0411, 0411},
|
|
{0117, 0411},
|
|
{0756, 0411},
|
|
{0412, 0412},
|
|
{0127, 0412},
|
|
{0441, 0412},
|
|
{0711, 0412},
|
|
{0413, 0413},
|
|
{0133, 0413},
|
|
{0620, 0413},
|
|
{0423, 0423},
|
|
{0234, 0423},
|
|
{0563, 0423},
|
|
{0621, 0423},
|
|
{0713, 0423},
|
|
{0431, 0431},
|
|
{0262, 0431},
|
|
{0316, 0431},
|
|
{0730, 0431},
|
|
{0432, 0432},
|
|
{0432, 0432},
|
|
{0276, 0432},
|
|
{0326, 0432},
|
|
{0445, 0445},
|
|
{0222, 0445},
|
|
{0457, 0445},
|
|
{0575, 0445},
|
|
{0446, 0446},
|
|
{0467, 0446},
|
|
{0511, 0446},
|
|
{0672, 0446},
|
|
{0452, 0452},
|
|
{0524, 0452},
|
|
{0765, 0452},
|
|
{0454, 0454},
|
|
{0545, 0454},
|
|
{0513, 0454},
|
|
{0564, 0454},
|
|
{0455, 0455},
|
|
{0533, 0455},
|
|
{0551, 0455},
|
|
{0462, 0462},
|
|
{0462, 0462},
|
|
{0472, 0462},
|
|
{0623, 0462},
|
|
{0725, 0462},
|
|
{0464, 0464},
|
|
{0237, 0464},
|
|
{0642, 0464},
|
|
{0772, 0464},
|
|
{0465, 0465},
|
|
{0056, 0465},
|
|
{0656, 0465},
|
|
{0466, 0466},
|
|
{0144, 0466},
|
|
{0666, 0466},
|
|
{0503, 0503},
|
|
{0157, 0503},
|
|
{0322, 0503},
|
|
{0506, 0506},
|
|
{0224, 0506},
|
|
{0313, 0506},
|
|
{0574, 0506},
|
|
{0516, 0516},
|
|
{0067, 0516},
|
|
{0720, 0516},
|
|
{0523, 0523},
|
|
{0647, 0523},
|
|
{0726, 0523},
|
|
{0526, 0526},
|
|
{0562, 0526},
|
|
{0645, 0526},
|
|
{0532, 0532},
|
|
{0161, 0532},
|
|
{0345, 0532},
|
|
{0546, 0546},
|
|
{0317, 0546},
|
|
{0614, 0546},
|
|
{0751, 0546},
|
|
{0565, 0565},
|
|
{0307, 0565},
|
|
{0362, 0565},
|
|
{0606, 0606},
|
|
{0153, 0606},
|
|
{0630, 0606},
|
|
{0612, 0612},
|
|
{0254, 0612},
|
|
{0314, 0612},
|
|
{0706, 0612},
|
|
{0624, 0624},
|
|
{0075, 0624},
|
|
{0501, 0624},
|
|
{0627, 0627},
|
|
{0037, 0627},
|
|
{0560, 0627},
|
|
{0631, 0631},
|
|
{0231, 0631},
|
|
{0504, 0631},
|
|
{0636, 0631},
|
|
{0745, 0631},
|
|
{0632, 0632},
|
|
{0123, 0632},
|
|
{0657, 0632},
|
|
{0654, 0654},
|
|
{0163, 0654},
|
|
{0460, 0654},
|
|
{0607, 0654},
|
|
{0662, 0662},
|
|
{0363, 0662},
|
|
{0436, 0662},
|
|
{0443, 0662},
|
|
{0444, 0662},
|
|
{0664, 0664},
|
|
{0344, 0664},
|
|
{0471, 0664},
|
|
{0715, 0664},
|
|
{0703, 0703},
|
|
{0150, 0703},
|
|
{0256, 0703},
|
|
{0712, 0712},
|
|
{0136, 0712},
|
|
{0502, 0712},
|
|
{0723, 0723},
|
|
{0235, 0723},
|
|
{0671, 0723},
|
|
{0611, 0723},
|
|
{0731, 0731},
|
|
{0447, 0731},
|
|
{0473, 0731},
|
|
{0474, 0731},
|
|
{0744, 0731},
|
|
{0732, 0732},
|
|
{0164, 0732},
|
|
{0207, 0732},
|
|
{0734, 0734},
|
|
{0066, 0734},
|
|
{0743, 0743},
|
|
{0312, 0743},
|
|
{0515, 0743},
|
|
{0663, 0743},
|
|
{0754, 0754},
|
|
{0076, 0754},
|
|
{0203, 0754},
|
|
};
|
|
|
|
const QMap<unsigned int, unsigned int> DCSCodes::m_signFlip = {
|
|
{0023, 0047},
|
|
{0025, 0244},
|
|
{0026, 0464},
|
|
{0031, 0627},
|
|
{0032, 0051},
|
|
{0043, 0445},
|
|
{0047, 0023},
|
|
{0051, 0032},
|
|
{0053, 0452},
|
|
{0054, 0413},
|
|
{0065, 0271},
|
|
{0071, 0306},
|
|
{0072, 0245},
|
|
{0073, 0506},
|
|
{0074, 0174},
|
|
{0114, 0712},
|
|
{0115, 0152},
|
|
{0116, 0754},
|
|
{0122, 0225},
|
|
{0125, 0365},
|
|
{0131, 0364},
|
|
{0132, 0546},
|
|
{0134, 0223},
|
|
{0143, 0412},
|
|
{0145, 0274},
|
|
{0152, 0115},
|
|
{0155, 0731},
|
|
{0156, 0265},
|
|
{0162, 0503},
|
|
{0165, 0251},
|
|
{0172, 0036},
|
|
{0174, 0074},
|
|
{0205, 0263},
|
|
{0212, 0356},
|
|
{0223, 0134},
|
|
{0225, 0122},
|
|
{0226, 0411},
|
|
{0243, 0351},
|
|
{0244, 0025},
|
|
{0245, 0072},
|
|
{0246, 0523},
|
|
{0251, 0165},
|
|
{0252, 0462},
|
|
{0255, 0511},
|
|
{0261, 0732},
|
|
{0263, 0205},
|
|
{0265, 0156},
|
|
{0266, 0454},
|
|
{0271, 0065},
|
|
{0274, 0145},
|
|
{0306, 0071},
|
|
{0311, 0664},
|
|
{0315, 0423},
|
|
{0325, 0526},
|
|
{0331, 0465},
|
|
{0332, 0455},
|
|
{0343, 0532},
|
|
{0346, 0612},
|
|
{0351, 0243},
|
|
{0356, 0212},
|
|
{0364, 0131},
|
|
{0365, 0125},
|
|
{0371, 0734},
|
|
{0411, 0226},
|
|
{0412, 0143},
|
|
{0413, 0054},
|
|
{0423, 0315},
|
|
{0431, 0723},
|
|
{0432, 0516},
|
|
{0445, 0043},
|
|
{0446, 0255},
|
|
{0452, 0053},
|
|
{0454, 0655},
|
|
{0455, 0332},
|
|
{0462, 0252},
|
|
{0464, 0026},
|
|
{0465, 0331},
|
|
{0466, 0662},
|
|
{0503, 0162},
|
|
{0506, 0073},
|
|
{0516, 0432},
|
|
{0523, 0246},
|
|
{0526, 0325},
|
|
{0532, 0343},
|
|
{0546, 0132},
|
|
{0565, 0703},
|
|
{0606, 0631},
|
|
{0612, 0346},
|
|
{0624, 0632},
|
|
{0627, 0031},
|
|
{0631, 0606},
|
|
{0632, 0624},
|
|
{0654, 0743},
|
|
{0662, 0466},
|
|
{0664, 0311},
|
|
{0703, 0565},
|
|
{0712, 0114},
|
|
{0723, 0431},
|
|
{0731, 0155},
|
|
{0732, 0261},
|
|
{0734, 0371},
|
|
{0743, 0654},
|
|
{0754, 0116},
|
|
};
|
|
|
|
|
|
void DCSCodes::getCanonicalCodes(QList<unsigned int>& codes)
|
|
{
|
|
codes.clear();
|
|
|
|
for (auto code : m_toCanonicalCode.keys())
|
|
{
|
|
if (code == m_toCanonicalCode.value(code)) {
|
|
codes.append(code);
|
|
}
|
|
}
|
|
}
|