libdrmconf 0.12.1
A library to program DMR radios.
Loading...
Searching...
No Matches
opengd77base_codeplug.hh
1#ifndef OPENGD77BASE_CODEPLUG_HH
2#define OPENGD77BASE_CODEPLUG_HH
3
4#include "channel.hh"
5#include "codeplug.hh"
6#include "gpssystem.hh"
7#include "contact.hh"
8#include "zone.hh"
9#include "satellitedatabase.hh"
10
11#include <QGeoCoordinate>
12
13
14class OpenGD77BaseCodeplug : public Codeplug
15{
16 Q_OBJECT
17
18public:
20 enum ImageType { EEPROM = 0, FLASH = 1 };
21
22public:
24 static uint32_t encodeAngle(double degee);
26 static double decodeAngle(uint32_t code);
27
29 static uint16_t encodeSelectiveCall(const SelectiveCall &call);
31 static SelectiveCall decodeSelectiveCall(uint16_t code);
32
33public:
36 class ChannelElement: public Codeplug::Element
37 {
38 public:
40 enum Mode {
41 MODE_ANALOG = 0,
42 MODE_DIGITAL = 1
43 };
44
46 enum class Alias {
47 None = 0, APRS = 1, Text = 2, Both = 3
48 };
49
51 enum class SquelchMode {
52 Global, Open, Normal, Closed
53 };
54
55 protected:
57 ChannelElement(uint8_t *ptr, size_t size);
58
59 public:
61 explicit ChannelElement(uint8_t *ptr);
63 virtual ~ChannelElement();
64
66 static constexpr unsigned int size() { return 0x0038; }
67
69 virtual void clear();
70
72 virtual QString name() const;
74 virtual void setName(const QString &n);
75
77 virtual Frequency rxFrequency() const;
79 virtual void setRXFrequency(const Frequency &freq);
81 virtual Frequency txFrequency() const;
83 virtual void setTXFrequency(const Frequency &freq);
84
86 virtual Mode mode() const;
88 virtual void setMode(Mode mode);
89
91 virtual bool globalPower() const;
93 virtual Channel::Power power() const;
95 virtual void setPower(Channel::Power pwr);
97 virtual void clearPower();
98
100 virtual bool hasFixedPosition() const;
102 virtual QGeoCoordinate fixedPosition() const;
104 virtual void setFixedPosition(const QGeoCoordinate &coordinate);
106 virtual void clearFixedPosition();
107
109 virtual SelectiveCall rxTone() const;
111 virtual void setRXTone(const SelectiveCall &code);
113 virtual SelectiveCall txTone() const;
115 virtual void setTXTone(const SelectiveCall &code);
116
118 virtual bool isSimplex() const;
120 virtual void enableSimplex(bool enable);
121
123 virtual bool powerSave() const;
125 virtual void enablePowerSave(bool enable);
126
128 virtual bool beep() const;
130 virtual void enableBeep(bool enable);
131
133 virtual bool hasDMRId() const;
135 virtual unsigned int dmrId() const;
137 virtual void setDMRId(unsigned int id);
139 virtual void clearDMRId();
140
142 virtual bool hasGroupList() const;
144 virtual unsigned groupListIndex() const;
146 virtual void setGroupListIndex(unsigned index);
148 virtual void clearGroupListIndex();
149
151 virtual unsigned colorCode() const;
153 virtual void setColorCode(unsigned cc);
154
156 virtual bool hasAPRSIndex() const;
158 virtual unsigned int aprsIndex() const;
160 virtual void setAPRSIndex(unsigned int index);
162 virtual void clearAPRSIndex();
163
165 virtual bool hasTXContact() const;
167 virtual unsigned int txContactIndex() const;
169 virtual void setTXContactIndex(unsigned int index);
171 virtual void clearTXContact();
172
174 virtual OpenGD77ChannelExtension::TalkerAlias aliasTimeSlot1() const;
176 virtual void setAliasTimeSlot1(OpenGD77ChannelExtension::TalkerAlias alias);
178 virtual OpenGD77ChannelExtension::TalkerAlias aliasTimeSlot2() const;
180 virtual void setAliasTimeSlot2(OpenGD77ChannelExtension::TalkerAlias alias);
181
183 virtual DMRChannel::TimeSlot timeSlot() const;
185 virtual void setTimeSlot(DMRChannel::TimeSlot ts);
186
188 virtual FMChannel::Bandwidth bandwidth() const;
190 virtual void setBandwidth(FMChannel::Bandwidth bw);
191
193 virtual bool rxOnly() const;
195 virtual void enableRXOnly(bool enable);
196
198 virtual bool skipScan() const;
200 virtual void enableSkipScan(bool enable);
202 virtual bool skipZoneScan() const;
204 virtual void enableSkipZoneScan(bool enable);
205
207 virtual bool vox() const;
209 virtual void enableVOX(bool enable);
210
212 virtual SquelchMode squelchMode() const;
214 virtual unsigned int squelchLevel() const;
216 virtual void setSquelch(SquelchMode mode, unsigned int level);
217
219 virtual Channel *decode(Context &ctx, const ErrorStack &err=ErrorStack()) const;
221 virtual bool link(Channel *c, Context &ctx, const ErrorStack &err=ErrorStack()) const;
223 virtual bool encode(const Channel *c, Context &ctx, const ErrorStack &err=ErrorStack());
224
225 public:
227 struct Limit {
229 static constexpr unsigned int nameLength() { return 16; }
230 };
231
232 protected:
234 struct Offset: public Element::Offset {
236 static constexpr unsigned int name() { return 0x0000; }
237 static constexpr unsigned int rxFrequency() { return 0x0010; }
238 static constexpr unsigned int txFrequency() { return 0x0014; }
239 static constexpr unsigned int mode() { return 0x0018; }
240 static constexpr unsigned int power() { return 0x0019; }
241 static constexpr unsigned int latitude0() { return 0x001a; }
242 static constexpr unsigned int latitude1() { return 0x001c; }
243 static constexpr unsigned int latitude2() { return 0x001d; }
244 static constexpr unsigned int longitude0() { return 0x001e; }
245 static constexpr unsigned int longitude1() { return 0x001f; }
246 static constexpr unsigned int rxTone() { return 0x0020; }
247 static constexpr unsigned int txTone() { return 0x0022; }
248 static constexpr unsigned int longitude2() { return 0x0024; }
249 static constexpr Bit simplex() { return {0x0026, 2}; }
250 static constexpr Bit useFixedLocation() { return {0x0026, 3}; }
251 static constexpr Bit disablePowerSave() { return {0x0026, 5}; }
252 static constexpr Bit disableBeep() { return {0x0026, 6}; }
253 static constexpr Bit overrideDMRID() { return {0x0026, 7}; }
254 static constexpr unsigned int dmrId() { return 0x0027; }
255 static constexpr unsigned int groupList() { return 0x002b; }
256 static constexpr unsigned int colorCode() { return 0x002c; }
257 static constexpr unsigned int aprsIndex() { return 0x002d; }
258 static constexpr unsigned int txContact() { return 0x002e; }
259 static constexpr Bit aliasTimeSlot2() { return { 0x030, 2}; }
260 static constexpr Bit aliasTimeSlot1() { return { 0x030, 0}; }
261 static constexpr Bit timeSlot() { return {0x0031, 6}; }
262 static constexpr Bit bandwidth() { return {0x0033, 1}; }
263 static constexpr Bit rxOnly() { return {0x0033, 2}; }
264 static constexpr Bit skipScan() { return {0x0033, 4}; }
265 static constexpr Bit skipZoneScan() { return {0x0033, 5}; }
266 static constexpr Bit vox() { return {0x0033, 6}; }
267 static constexpr unsigned int squelch() { return 0x0037; }
268 };
269 };
270
271
276 class ChannelBankElement: public Element
277 {
278 protected:
280 ChannelBankElement(uint8_t *ptr, unsigned size);
281
282 public:
284 explicit ChannelBankElement(uint8_t *ptr);
286 virtual ~ChannelBankElement();
287
289 static constexpr unsigned int size() { return 0x1c10; }
290
292 void clear();
293
295 virtual bool isEnabled(unsigned idx) const ;
297 virtual void enable(unsigned idx, bool enabled);
299 virtual uint8_t *get(unsigned idx) const;
301 ChannelElement channel(unsigned int n);
302
303 public:
305 struct Limit {
307 static constexpr unsigned int channelCount() { return 128; }
308 };
309
310 protected:
312 struct Offset {
314 static constexpr unsigned int bitmask() { return 0x0000; }
315 static constexpr unsigned int channels() { return 0x0010; }
317 };
318 };
319
320
325 class VFOChannelElement: public ChannelElement
326 {
327 public:
329 enum class OffsetMode {
330 Off = 0,
331 Positive = 1,
332 Negative = 2
333 };
334
336 enum class StepSize {
337 SS2_5kHz = 0,
338 SS5kHz = 1,
339 SS6_25kHz = 2,
340 SS10kHz = 3,
341 SS12_5kHz = 4,
342 SS20kHz = 5,
343 SS30kHz = 6,
344 SS50kHz = 7
345 };
346
347 protected:
349 VFOChannelElement(uint8_t *ptr, unsigned size);
350
351 public:
353 explicit VFOChannelElement(uint8_t *ptr);
354
355 void clear();
356
358 QString name() const;
360 void setName(const QString &name);
361
363 virtual double stepSize() const;
365 virtual void setStepSize(double kHz);
366
368 virtual OffsetMode offsetMode() const;
370 virtual double txOffset() const;
372 virtual void setTXOffset(double f);
374 virtual void setOffsetMode(OffsetMode mode);
375
376 protected:
378 struct Offset: public ChannelElement::Offset {
379 static constexpr Bit stepSize() { return {0x0036, 4} ; }
380 static constexpr Bit offsetMode() { return {0x0036, 2} ; }
381 static constexpr unsigned int txOffset() { return 0x0034; }
382 };
384 };
385
386
388 class GeneralSettingsElement: public Element
389 {
390 protected:
392 GeneralSettingsElement(uint8_t *ptr, size_t size);
393
394 public:
396 GeneralSettingsElement(uint8_t *ptr);
397
399 static constexpr unsigned int size() { return 0x0090; }
400
401 void clear();
402
404 virtual Frequency uhfMinFrequency() const;
406 virtual void setUHFMinFrequency(const Frequency &f);
408 virtual Frequency uhfMaxFrequency() const;
410 virtual void setUHFMaxFrequency(const Frequency &f);
411
413 virtual Frequency vhfMinFrequency() const;
415 virtual void setVHFMinFrequency(const Frequency &f);
417 virtual Frequency vhfMaxFrequency() const;
419 virtual void setVHFMaxFrequency(const Frequency &f);
420
422 virtual QString call() const;
424 virtual void setCall(const QString &call);
425
427 virtual unsigned int radioId() const;
429 virtual void setRadioId(unsigned int id);
430
432 virtual bool encode(const Context &ctx, const ErrorStack &err = ErrorStack());
434 virtual bool decode(const Context &ctx, const ErrorStack &err = ErrorStack());
435
436 public:
438 struct Limit: public Element::Limit {
440 static constexpr unsigned int callLength() { return 8; }
441 };
442
443 protected:
445 struct Offset: public Element::Offset {
447 static constexpr unsigned int uhfMinFrequency() { return 0x0000; }
448 static constexpr unsigned int uhfMaxFrequency() { return 0x0002; }
449 static constexpr unsigned int vhfMinFrequency() { return 0x0004; }
450 static constexpr unsigned int vhfMaxFrequency() { return 0x0006; }
451 static constexpr unsigned int call() { return 0x0060; }
452 static constexpr unsigned int dmrId() { return 0x0068; }
454 };
455 };
456
457
459 class APRSSettingsElement: public Element
460 {
461 public:
462 enum class BaudRate {
463 Baud300 = 1, Baud1200 = 0
464 };
465
466 enum class PositionPrecision {
467 Max = 0,
468 Mask1_8sec = 1,
469 Mask3_6sec = 2,
470 Mask18sec = 3,
471 Mask36sec = 4,
472 Mask3min = 5,
473 Mask6min = 6,
474 Mask30min = 7
475 };
476
477 public:
479 explicit APRSSettingsElement(uint8_t *ptr);
480
481 protected:
483 APRSSettingsElement(uint8_t *ptr, size_t size);
484
485 public:
487 static constexpr unsigned int size() { return 0x40; }
488
490 void clear();
491
493 virtual bool isValid() const;
494
496 virtual QString name() const;
498 virtual void setName(const QString &name);
499
501 virtual unsigned int sourceSSID() const;
503 virtual void setSourceSSID(unsigned int ssid);
504
506 virtual bool hasFixedPosition() const;
508 virtual QGeoCoordinate fixedPosition() const;
510 virtual void setFixedPosition(const QGeoCoordinate &coor);
512 virtual void clearFixedPosition();
513
515 virtual PositionPrecision positionPrecision() const;
517 virtual void setPositionPrecision(PositionPrecision prec);
518
520 virtual bool hasVia1() const;
522 virtual QString via1Call() const;
524 virtual unsigned int via1SSID() const;
526 virtual void setVia1(const QString &call, unsigned int ssid);
528 virtual void clearVia1();
529
531 virtual bool hasVia2() const;
533 virtual QString via2Call() const;
535 virtual unsigned int via2SSID() const;
537 virtual void setVia2(const QString &call, unsigned int ssid);
539 virtual void clearVia2();
540
542 virtual APRSSystem::Icon icon() const;
544 virtual void setIcon(APRSSystem::Icon icon);
545
547 virtual QString comment() const;
549 virtual void setComment(const QString &text);
550
552 virtual BaudRate baudRate() const;
554 virtual void setBaudRate(BaudRate rate);
555
557 virtual bool encode(const APRSSystem *system, const Context &ctx, const ErrorStack &err=ErrorStack());
559 virtual APRSSystem *decode(const Context &ctx, const ErrorStack &err=ErrorStack()) const;
561 virtual bool link(APRSSystem *system, const Context &ctx, const ErrorStack &err=ErrorStack());
562
563 public:
565 struct Limit: public Element::Limit {
566 static constexpr unsigned int nameLength() { return 8; }
567 static constexpr unsigned int commentLength() { return 23; }
568 };
569
570 protected:
572 struct Offset: public Element::Offset
573 {
574 static constexpr unsigned int name() { return 0x0000; }
575 static constexpr unsigned int sourceSSID() { return 0x0008; }
576 static constexpr unsigned int latitude() { return 0x0009; }
577 static constexpr unsigned int longitude() { return 0x000c; }
578 static constexpr unsigned int via1Call() { return 0x000f; }
579 static constexpr unsigned int via1SSID() { return 0x0015; }
580 static constexpr unsigned int via2Call() { return 0x0016; }
581 static constexpr unsigned int via2SSID() { return 0x001c; }
582 static constexpr unsigned int iconTable() { return 0x001d; }
583 static constexpr unsigned int iconIndex() { return 0x001e; }
584 static constexpr unsigned int comment() { return 0x001f; }
585 static constexpr Bit positionPrecision() { return { 0x003d, 4}; }
586 static constexpr Bit useFixedPosition() { return { 0x003d, 1}; }
587 static constexpr Bit baudRate() { return { 0x003d, 0}; }
588 };
590 };
591
592
594 class APRSSettingsBankElement: public Element
595 {
596 public:
598 explicit APRSSettingsBankElement(uint8_t *ptr);
599
600 protected:
602 APRSSettingsBankElement(uint8_t *ptr, size_t size);
603
604 public:
606 static constexpr unsigned int size() { return 0x40; }
607
609 void clear();
610
612 APRSSettingsElement system(unsigned int idx) const;
613
615 virtual bool encode(Context &ctx, const ErrorStack &err=ErrorStack());
617 virtual bool decode(Context &ctx, const ErrorStack &err=ErrorStack());
618
619 public:
621 struct Limit: public Element::Limit {
623 static constexpr unsigned int systems() { return 8; }
624 };
625
626 public:
628 struct Offset: public Element::Offset {
629 static constexpr unsigned int systems() { return 0x0000; }
630 static constexpr unsigned int betweenSystems() { return APRSSettingsElement::size(); }
631 };
633 };
634
635
638 class DTMFContactElement: public Element
639 {
640 protected:
642 DTMFContactElement(uint8_t *ptr, size_t size);
643
644 public:
646 explicit DTMFContactElement(uint8_t *ptr);
647
649 static constexpr unsigned int size() { return 0x0020; }
650
651 void clear();
652 bool isValid() const;
653
655 virtual QString name() const;
657 virtual void setName(const QString &name);
658
660 virtual QString number() const;
662 virtual void setNumber(const QString &number);
663
665 virtual bool encode(const DTMFContact *contact, const Context &ctx, const ErrorStack &err=ErrorStack());
667 virtual DTMFContact *decode(const Context &ctx, const ErrorStack &err=ErrorStack());
668
669 public:
671 struct Limit: public Element::Limit {
673 static constexpr unsigned int nameLength() { return 16; }
675 static constexpr unsigned int numberLength() { return 16; }
676 };
677
678 protected:
680 struct Offset: public Element::Offset {
681 static constexpr unsigned int name() { return 0x0000; }
682 static constexpr unsigned int number() { return 0x0010; }
683 };
685 };
686
687
689 class DTMFContactBankElement: public Element
690 {
691 protected:
693 DTMFContactBankElement(uint8_t *ptr, size_t size);
694
695 public:
697 DTMFContactBankElement(uint8_t *ptr);
698
700 static constexpr unsigned int size() { return Limit::contacts()*DTMFContactElement::size(); }
701
702 void clear();
703
705 DTMFContactElement contact(unsigned int n) const;
706
708 virtual bool encode(Context &ctx, const ErrorStack &err=ErrorStack());
710 virtual bool decode(Context &ctx, const ErrorStack &err=ErrorStack());
711
712 public:
714 struct Limit: public Element::Limit {
716 static constexpr unsigned int contacts() { return 64; }
717 };
718
719 public:
721 struct Offset: public Element::Offset {
722 static constexpr unsigned int contacts() { return 0x0000; }
723 static constexpr unsigned int betweenContacts() { return DTMFContactElement::size(); }
724 };
726 };
727
728
730 class BootSettingsElement: public Element
731 {
732 protected:
734 BootSettingsElement(uint8_t *ptr, unsigned size);
735
736 public:
738 explicit BootSettingsElement(uint8_t *ptr);
740 virtual ~BootSettingsElement();
741
743 void clear();
744
746 virtual bool bootText() const;
748 virtual void enableBootText(bool enable);
749
751 virtual bool bootPasswordEnabled() const;
753 virtual unsigned bootPassword() const;
755 virtual void setBootPassword(unsigned passwd);
757 virtual void clearBootPassword();
758
760 virtual QString line1() const;
762 virtual void setLine1(const QString &text);
764 virtual QString line2() const;
766 virtual void setLine2(const QString &text);
767
769 virtual bool encode(const Context &ctx, const ErrorStack &err = ErrorStack());
771 virtual bool decode(Context &ctx, const ErrorStack &err = ErrorStack());
772
773 public:
775 struct Limit: public Element::Limit {
777 static constexpr unsigned int lineLength() { return 16; }
778 };
779
780 public:
782 struct Offset: public Element::Offset {
783 static constexpr unsigned int bootText() { return 0x0000; }
784 static constexpr unsigned int bootPasswdEnable() { return 0x0001; }
785 static constexpr unsigned int bootPasswd() { return 0x000c; }
786 static constexpr unsigned int line1() { return 0x0028; }
787 static constexpr unsigned int line2() { return 0x0038; }
788 };
790 };
791
792
794 class ZoneElement: public Element
795 {
796 protected:
798 ZoneElement(uint8_t *ptr, unsigned size);
799
800 public:
802 explicit ZoneElement(uint8_t *ptr);
803 virtual ~ZoneElement();
804
806 static constexpr unsigned int size() { return 0x00b0; }
807
809 void clear();
811 bool isValid() const;
812
814 virtual QString name() const;
816 virtual void setName(const QString &name);
817
819 virtual bool hasMember(unsigned n) const;
821 virtual unsigned member(unsigned n) const;
823 virtual void setMember(unsigned n, unsigned idx);
825 virtual void clearMember(unsigned n);
826
828 virtual bool encode(const Zone *zone, Context &ctx, const ErrorStack &err=ErrorStack());
830 virtual Zone *decode(const Context &ctx, const ErrorStack &err=ErrorStack()) const;
833 virtual bool link(Zone *zone, Context &ctx, const ErrorStack &err=ErrorStack()) const;
834
835 public:
837 struct Limit: public Element::Limit {
839 static constexpr unsigned int nameLength() { return 16; }
841 static constexpr unsigned int memberCount() { return 80; }
842 };
843
844 protected:
846 struct Offset: public Element::Offset {
848 static constexpr unsigned int name() { return 0x0000; }
849 static constexpr unsigned int channels() { return 0x0010; }
850 static constexpr unsigned int betweenChannels() { return 0x0002; }
852 };
853 };
854
855
857 class ZoneBankElement: public Element
858 {
859 protected:
861 ZoneBankElement(uint8_t *ptr, unsigned size);
862
863 public:
865 explicit ZoneBankElement(uint8_t *ptr);
867 ~ZoneBankElement();
868
870 static constexpr unsigned int size() {
871 return 0x0020 + Limit::zoneCount()*ZoneElement::size();
872 }
873
875 void clear();
876
878 virtual bool isEnabled(unsigned idx) const ;
880 virtual void enable(unsigned idx, bool enabled);
881
883 ZoneElement zone(unsigned int n);
884
886 virtual bool encode(Context &ctx, const ErrorStack &err=ErrorStack());
888 virtual bool decode(Context &ctx, const ErrorStack &err=ErrorStack());
890 virtual bool link(Context &ctx, const ErrorStack &err=ErrorStack());
891
892 public:
894 struct Limit: public Element::Limit {
896 static constexpr unsigned int zoneCount() { return 68; }
897 };
898
899 protected:
901 struct Offset: public Element::Offset {
903 static constexpr unsigned int bitmap() { return 0x0000; }
904 static constexpr unsigned int zones() { return 0x0020; }
905 static constexpr unsigned int betweenZones() { return ZoneElement::size(); }
907 };
908 };
909
910
911 class OrbitalElement: public Element
912 {
913 protected:
915 OrbitalElement(uint8_t *ptr, size_t size);
916
917 public:
919 OrbitalElement(uint8_t *ptr);
920
922 static constexpr unsigned int size() { return 0x0064; }
923
924 void clear();
925
927 virtual void setName(const QString &name);
928
930 virtual void setEpoch(const ::OrbitalElement::Epoch &epoch);
932 virtual void setMeanMotion(double mm);
934 virtual void setMeanMotionDerivative(double dmm);
936 virtual void setInclination(double incl);
938 virtual void setAscension(double asc);
940 virtual void setEccentricity(double ecc);
942 virtual void setPerigee(double arg);
944 virtual void setMeanAnomaly(double ma);
946 virtual void setRevolutionNumber(unsigned int num);
947
949 void setFMDownlink(const Frequency &f);
951 void setFMUplink(const Frequency &f);
953 void setCTCSS(const SelectiveCall &call);
955 void setAPRSDownlink(const Frequency &f);
957 void setAPRSUplink(const Frequency &f);
958
960 void setBeacon(const Frequency &f);
961
963 void setAPRSPath(const QString &path);
964
966 virtual bool encode(const Satellite &sat, const ErrorStack &err = ErrorStack());
967
968 protected:
977 void writeFixedPoint(const Offset::Bit &offset, double value, bool sign, unsigned int dec, unsigned int frac);
985 void writeFractional(const Offset::Bit &offset, double value, bool sign, unsigned int frac);
987 void writeInteger(const Offset::Bit &offset, int value, bool sign, unsigned dec);
989 void writeDigit(const Offset::Bit &offset, uint8_t digit);
990
991 public:
993 struct Limit: public Element::Limit {
995 static constexpr unsigned int nameLength() { return 8; }
997 static constexpr unsigned int pathLength() { return 24; }
998 };
999
1000 protected:
1002 struct Offset: public Element::Offset {
1004 static constexpr unsigned int name() { return 0x0000; }
1005 static constexpr Bit epochYear() { return {0x0008, 4}; }
1006 static constexpr Bit epochJulienDay() { return {0x0009, 4}; }
1007 static constexpr Bit meanMotionDerivative() { return {0x000f, 4}; }
1008 static constexpr Bit inclination() { return {0x0014, 4}; }
1009 static constexpr Bit ascension() { return {0x0018, 4}; }
1010 static constexpr Bit eccentricity() { return {0x001c, 4}; }
1011 static constexpr Bit perigee() { return {0x001f, 0}; }
1012 static constexpr Bit meanAnomaly() { return {0x0023, 0}; }
1013 static constexpr Bit meanMotion() { return {0x0027, 0}; }
1014 static constexpr Bit revolutionNumber() { return {0x002d, 4}; }
1015 static constexpr unsigned int fmDownlink() { return 0x0030; }
1016 static constexpr unsigned int fmUplink() { return 0x0034; }
1017 static constexpr unsigned int ctcss() { return 0x0038; }
1018 static constexpr unsigned int aprsDownlink() { return 0x003c; }
1019 static constexpr unsigned int aprsUplink() { return 0x0040; }
1020 static constexpr unsigned int beacon() { return 0x0044; }
1021 static constexpr unsigned int aprsPath() { return 0x004c; }
1023 };
1024 };
1025
1026
1028 class OrbitalBankElement: public Element
1029 {
1030 protected:
1032 OrbitalBankElement(uint8_t *ptr, size_t size);
1033
1034 public:
1036 OrbitalBankElement(uint8_t *ptr);
1037
1039 static constexpr unsigned int size() { return 0x09cc; }
1040
1042 OrbitalElement element(unsigned int i) const;
1043
1045 virtual bool encode(Context &ctx, const ErrorStack &err = ErrorStack());
1046
1047 public:
1049 struct Limit: public Element::Limit {
1051 static constexpr unsigned int elements() { return 25; }
1052 };
1053
1054 protected:
1056 struct Offset: public Element::Offset
1057 {
1059 static constexpr unsigned int elements() { return 0x0008; }
1060 static constexpr unsigned int betweenElements() { return OrbitalElement::size(); }
1062 };
1063 };
1064
1065
1067 class ContactElement: public Element
1068 {
1069 public:
1070 enum class TimeSlotOverride {
1071 None, TS1, TS2
1072 };
1073
1074 protected:
1076 ContactElement(uint8_t *ptr, unsigned size);
1077
1078 public:
1080 explicit ContactElement(uint8_t *ptr);
1082 virtual ~ContactElement();
1083
1085 static constexpr unsigned int size() { return 0x0018; }
1086
1088 void clear();
1089
1091 bool isValid() const;
1092
1094 virtual QString name() const;
1096 virtual void setName(const QString name);
1097
1099 virtual unsigned number() const;
1101 virtual void setNumber(unsigned id);
1102
1104 virtual DMRContact::Type type() const;
1106 virtual void setType(DMRContact::Type type);
1107
1109 virtual TimeSlotOverride timeSlotOverride() const;
1111 virtual void setTimeSlotOverride(TimeSlotOverride ts);
1112
1114 virtual DMRContact *decode(Context &ctx, const ErrorStack &err=ErrorStack()) const;
1116 virtual bool encode(const DMRContact *obj, Context &ctx, const ErrorStack &err=ErrorStack());
1117
1118 public:
1120 struct Limit {
1122 static constexpr unsigned int nameLength() { return 16; }
1123 };
1124
1125 protected:
1127 struct Offset {
1129 static constexpr unsigned int name() { return 0x0000; }
1130 static constexpr unsigned int number() { return 0x0010; }
1131 static constexpr unsigned int type() { return 0x0014; }
1132 static constexpr unsigned int timeSlotOverride() { return 0x0017; }
1134 };
1135 };
1136
1137
1139 class ContactBankElement: public Element
1140 {
1141 protected:
1143 ContactBankElement(uint8_t *ptr, size_t size);
1144
1145 public:
1147 ContactBankElement(uint8_t *ptr);
1148
1150 static constexpr unsigned int size() {
1151 return Limit::contactCount() * ContactElement::size();
1152 }
1153
1155 void clear();
1156
1158 ContactElement contact(unsigned int idx) const;
1159
1161 virtual bool encode(Context &ctx, const ErrorStack &err = ErrorStack());
1163 virtual bool decode(Context &ctx, const ErrorStack &err = ErrorStack());
1164
1165 public:
1167 struct Limit {
1169 static constexpr unsigned int contactCount() { return 1024; }
1170 };
1171
1172 protected:
1174 struct Offset {
1176 static constexpr unsigned int contacts() { return 0x0000; }
1177 static constexpr unsigned int betweenContacts() { return ContactElement::size(); }
1178 // @endcond
1179 };
1180 };
1181
1182
1184 class GroupListElement: public Element
1185 {
1186 protected:
1188 GroupListElement(uint8_t *ptr, size_t size);
1189
1190 public:
1192 GroupListElement(uint8_t *ptr);
1193
1195 static constexpr unsigned int size() { return 0x0050; }
1196
1198 void clear();
1199
1201 virtual QString name() const;
1203 virtual void setName(const QString &name);
1204
1206 virtual bool hasContactIndex(unsigned int i) const;
1208 virtual unsigned int contactIndex(unsigned int i) const;
1210 virtual void setContactIndex(unsigned int i, unsigned int contactIdx);
1212 virtual void clearContactIndex(unsigned int i);
1213
1215 virtual bool encode(RXGroupList *lst, Context &ctx, const ErrorStack &err=ErrorStack());
1217 virtual RXGroupList *decode(Context &ctx, const ErrorStack &err=ErrorStack()) const;
1219 virtual bool link(RXGroupList *lst, Context &ctx, const ErrorStack &err=ErrorStack()) const;
1220
1221 public:
1223 struct Limit {
1225 static constexpr unsigned int nameLength() { return 15; }
1227 static constexpr unsigned int contactCount() { return 32; }
1228 };
1229
1230 protected:
1232 struct Offset {
1234 static constexpr unsigned int name() { return 0x0000; }
1235 static constexpr unsigned int contacts() { return 0x0010; }
1236 static constexpr unsigned int betweenContacts() { return 0x0002; }
1237 // @endcond
1238 };
1239 };
1240
1241
1243 class GroupListBankElement: public Element
1244 {
1245 protected:
1247 GroupListBankElement(uint8_t *ptr, size_t size);
1248
1249 public:
1251 GroupListBankElement(uint8_t *ptr);
1252
1254 static constexpr unsigned int size() { return 0x1840; }
1255
1257 void clear();
1258
1260 virtual bool hasGroupList(unsigned int i) const;
1262 virtual unsigned int groupListContactCount(unsigned int i) const;
1264 virtual void setGroupListContactCount(unsigned int i, unsigned int count);
1266 virtual GroupListElement groupList(unsigned int i) const;
1268 virtual void clearGroupList(unsigned int i);
1269
1271 virtual bool encode(Context &ctx, const ErrorStack &err = ErrorStack());
1273 virtual bool decode(Context &ctx, const ErrorStack &err = ErrorStack());
1275 virtual bool link(Context &ctx, const ErrorStack &err = ErrorStack());
1276
1277 public:
1279 struct Limit {
1281 static constexpr unsigned int groupListCount() { return 76; }
1282 };
1283
1284 protected:
1286 struct Offset {
1288 static constexpr unsigned int length() { return 0x0000; }
1289 static constexpr unsigned int groupLists() { return 0x0080; }
1290 static constexpr unsigned int betweenGroupLists() { return GroupListElement::size(); }
1291 // @endcond
1292 };
1293 };
1294
1295
1296public:
1297 explicit OpenGD77BaseCodeplug(QObject *parent = nullptr);
1298
1300 virtual void clear();
1301
1302 bool index(Config *config, Context &ctx, const ErrorStack &err=ErrorStack()) const;
1303
1304 bool decode(Config *config, const ErrorStack &err=ErrorStack());
1305 bool postprocess(Config *config, const ErrorStack &err=ErrorStack()) const;
1306
1307 Config *preprocess(Config *config, const ErrorStack &err=ErrorStack()) const;
1308 bool encode(Config *config, const Flags &flags = Flags(), const ErrorStack &err=ErrorStack());
1309
1310public:
1313 virtual bool decodeElements(Context &ctx, const ErrorStack &err=ErrorStack());
1315 virtual bool encodeElements(const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack());
1316
1318 virtual void clearGeneralSettings() = 0;
1320 virtual bool encodeGeneralSettings(const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack()) = 0;
1322 virtual bool decodeGeneralSettings(Context &ctx, const ErrorStack &err=ErrorStack()) = 0;
1323
1325 virtual void clearDTMFSettings() = 0;
1327 virtual bool encodeDTMFSettings(const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack()) = 0;
1329 virtual bool decodeDTMFSettings(Context &ctx, const ErrorStack &err=ErrorStack()) = 0;
1330
1332 virtual void clearAPRSSettings() = 0;
1334 virtual bool encodeAPRSSettings(const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack()) = 0;
1336 virtual bool decodeAPRSSettings(Context &ctx, const ErrorStack &err=ErrorStack()) = 0;
1337
1339 virtual void clearDTMFContacts() = 0;
1341 virtual bool encodeDTMFContacts(const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack()) = 0;
1343 virtual bool createDTMFContacts(Context &ctx, const ErrorStack &err=ErrorStack()) = 0;
1344
1346 virtual void clearChannels() = 0;
1348 virtual bool encodeChannels(const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack()) = 0;
1350 virtual bool createChannels(Context &ctx, const ErrorStack &err=ErrorStack()) = 0;
1352 virtual bool linkChannels(Context &ctx, const ErrorStack &err=ErrorStack()) = 0;
1353
1355 virtual void clearBootSettings() = 0;
1357 virtual bool encodeBootSettings(const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack()) = 0;
1359 virtual bool decodeBootSettings(Context &ctx, const ErrorStack &err=ErrorStack()) = 0;
1360
1362 virtual void clearVFOSettings() = 0;
1363
1365 virtual void clearZones() = 0;
1367 virtual bool encodeZones(const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack()) = 0;
1369 virtual bool createZones(Context &ctx, const ErrorStack &err=ErrorStack()) = 0;
1371 virtual bool linkZones(Context &ctx, const ErrorStack &err=ErrorStack()) = 0;
1372
1374 virtual void clearContacts() = 0;
1376 virtual bool encodeContacts(const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack()) = 0;
1378 virtual bool createContacts(Context &ctx, const ErrorStack &err=ErrorStack()) = 0;
1379
1381 virtual void clearGroupLists() = 0;
1383 virtual bool encodeGroupLists(const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack()) = 0;
1385 virtual bool createGroupLists(Context &ctx, const ErrorStack &err=ErrorStack()) = 0;
1387 virtual bool linkGroupLists(Context &ctx, const ErrorStack &err=ErrorStack()) = 0;
1388};
1389
1390#endif // OPENGD77BASE_CODEPLUG_HH
Represents an APRS system within the generic config.
Definition gpssystem.hh:132
Icon
All implemented APRS icons.
Definition gpssystem.hh:162
The base class of all channels (analog and digital) of a codeplug configuration.
Definition channel.hh:34
Power
Specifies the prefix for every ID assigned to every channel during serialization.
Definition channel.hh:61
Represents the abstract base class of all codeplug elements.
Definition codeplug.hh:52
This class defines the interface all device-specific code-plugs must implement.
Definition codeplug.hh:20
The config class, representing the codeplug configuration.
Definition config.hh:70
TimeSlot
Possible timeslots for digital channels.
Definition channel.hh:389
Represents a digital contact, that is a DMR number.
Definition contact.hh:141
Type
Possible call types for a contact.
Definition contact.hh:155
Represents an analog contact, that is a DTMF number.
Definition contact.hh:89
Implements a stack of error messages to provide a pretty formatted error traceback.
Definition errorstack.hh:41
Bandwidth
Possible bandwidth of an analog channel.
Definition channel.hh:240
Definition orbitalelementsdatabase.hh:9
Generic representation of a RX group list.
Definition rxgrouplist.hh:14
Definition satellitedatabase.hh:13
Represents a zone within the generic configuration.
Definition zone.hh:15
Helper type to encode frequencies without any rounding error.
Definition frequency.hh:11
Encodes a selective call.
Definition signaling.hh:13