sdrangel/sdrbase/dsp/dcscodes.cpp

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);
}
}
}