mirror of
				https://github.com/f4exb/sdrangel.git
				synced 2025-10-30 20:40:20 -04:00 
			
		
		
		
	
		
			
	
	
		
			466 lines
		
	
	
		
			9.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
		
		
			
		
	
	
			466 lines
		
	
	
		
			9.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
|  | //////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | ||
|  | // Copyright (C) 2021 Edouard Griffiths, F4EXB                                                              //
 | ||
|  | //                                                                                                          //
 | ||
|  | // 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); | ||
|  |         } | ||
|  |     } | ||
|  | } |