libdrmconf 0.12.1
A library to program DMR radios.
Loading...
Searching...
No Matches
radioddity_codeplug.hh
1#ifndef RADIODDITYCODEPLUG_HH
2#define RADIODDITYCODEPLUG_HH
3
4#include "codeplug.hh"
5#include "signaling.hh"
6#include "channel.hh"
7#include "contact.hh"
8#include "radioddity_extensions.hh"
9#include "ranges.hh"
10
11
12class DMRContact;
13class Zone;
14class RXGroupList;
15class ScanList;
16
23class RadioddityCodeplug : public Codeplug
24{
25 Q_OBJECT
26
27public:
32 class ChannelElement: public Codeplug::Element
33 {
34 public:
36 enum Mode {
37 MODE_ANALOG = 0,
38 MODE_DIGITAL = 1
39 };
40
42 enum Admit {
43 ADMIT_ALWAYS = 0,
44 ADMIT_CH_FREE = 1,
45 ADMIT_COLOR = 2
46 };
47
49 enum PrivacyGroup {
50 PRIVGR_NONE = 0,
51 PRIVGR_53474C39 = 1
52 };
53
54 protected:
56 ChannelElement(uint8_t *ptr, size_t size);
57
58 public:
60 explicit ChannelElement(uint8_t *ptr);
62 virtual ~ChannelElement();
63
65 static constexpr unsigned int size() { return 0x0038; }
66
68 virtual void clear();
69
71 virtual QString name() const;
73 virtual void setName(const QString &n);
74
76 virtual uint32_t rxFrequency() const;
78 virtual void setRXFrequency(uint32_t freq);
80 virtual uint32_t txFrequency() const;
82 virtual void setTXFrequency(uint32_t freq);
83
85 virtual Mode mode() const;
87 virtual void setMode(Mode mode);
88
90 virtual unsigned txTimeOut() const;
92 virtual void setTXTimeOut(unsigned tot);
94 virtual unsigned txTimeOutRekeyDelay() const;
96 virtual void setTXTimeOutRekeyDelay(unsigned delay);
97
99 virtual Admit admitCriterion() const;
101 virtual void setAdmitCriterion(Admit admit);
102
104 virtual bool hasScanList() const;
106 virtual unsigned scanListIndex() const;
108 virtual void setScanListIndex(unsigned index);
109
111 virtual SelectiveCall rxTone() const;
113 virtual void setRXTone(const SelectiveCall &code);
115 virtual SelectiveCall txTone() const;
117 virtual void setTXTone(const SelectiveCall &code);
118
120 virtual unsigned txSignalingIndex() const;
122 virtual void setTXSignalingIndex(unsigned index);
124 virtual unsigned rxSignalingIndex() const;
126 virtual void setRXSignalingIndex(unsigned index);
127
129 virtual PrivacyGroup privacyGroup() const;
131 virtual void setPrivacyGroup(PrivacyGroup grp);
132
134 virtual unsigned txColorCode() const;
136 virtual void setTXColorCode(unsigned cc);
137
139 virtual bool hasGroupList() const;
141 virtual unsigned groupListIndex() const;
143 virtual void setGroupListIndex(unsigned index);
144
146 virtual unsigned rxColorCode() const;
148 virtual void setRXColorCode(unsigned cc);
149
151 virtual bool hasEmergencySystem() const;
153 virtual unsigned emergencySystemIndex() const;
155 virtual void setEmergencySystemIndex(unsigned index);
156
158 virtual bool hasContact() const;
160 virtual unsigned contactIndex() const;
162 virtual void setContactIndex(unsigned index);
163
165 virtual bool dataCallConfirm() const;
167 virtual void enableDataCallConfirm(bool enable);
169 virtual bool emergencyAlarmACK() const;
171 virtual void enableEmergencyAlarmACK(bool enable);
173 virtual bool privateCallConfirm() const;
175 virtual void enablePrivateCallConfirm(bool enable);
177 virtual bool privacyEnabled() const;
179 virtual void enablePrivacy(bool enable);
180
182 virtual DMRChannel::TimeSlot timeSlot() const;
184 virtual void setTimeSlot(DMRChannel::TimeSlot ts);
185
187 virtual bool dualCapacityDirectMode() const;
189 virtual void enableDualCapacityDirectMode(bool enable);
191 virtual bool nonSTEFrequency() const;
193 virtual void enableNonSTEFrequency(bool enable);
194
196 virtual FMChannel::Bandwidth bandwidth() const;
198 virtual void setBandwidth(FMChannel::Bandwidth bw);
199
201 virtual bool rxOnly() const;
203 virtual void enableRXOnly(bool enable);
205 virtual bool talkaround() const;
207 virtual void enableTalkaround(bool enable);
209 virtual bool vox() const;
211 virtual void enableVOX(bool enable);
212
214 virtual Channel::Power power() const;
216 virtual void setPower(Channel::Power pwr);
217
219 virtual Channel *toChannelObj(Context &ctx, const ErrorStack &err=ErrorStack()) const;
221 virtual bool linkChannelObj(Channel *c, Context &ctx, const ErrorStack &err=ErrorStack()) const;
223 virtual bool fromChannelObj(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 txTimeout() { return 0x001b; }
241 static constexpr unsigned int txTimeoutRekeyDelay() { return 0x001c; }
242 static constexpr unsigned int admitCriterion() { return 0x001d; }
243 static constexpr unsigned int scanList() { return 0x001f; }
244 static constexpr unsigned int rxTone() { return 0x0020; }
245 static constexpr unsigned int txTone() { return 0x0022; }
246 static constexpr unsigned int txSignaling() { return 0x0025; }
247 static constexpr unsigned int rxSignaling() { return 0x0027; }
248 static constexpr unsigned int privacyGroup() { return 0x0029; }
249 static constexpr unsigned int txColorCode() { return 0x002a; }
250 static constexpr unsigned int groupList() { return 0x002b; }
251 static constexpr unsigned int rxColorCode() { return 0x002c; }
252 static constexpr unsigned int emergencySystem() { return 0x002d; }
253 static constexpr unsigned int transmitContact() { return 0x002e; }
254 static constexpr Bit dataCallConfirm() { return {0x0030, 7}; }
255 static constexpr Bit emergencyAlarmACK() { return {0x0030, 6}; }
256 static constexpr Bit privateCallConfirm() { return {0x0031, 0}; }
257 static constexpr Bit privacyEnabled() { return {0x0031, 4}; }
258 static constexpr Bit timeSlot() { return {0x0031, 6}; }
259 static constexpr Bit dualCapacityDirectMode() { return {0x0032, 0}; }
260 static constexpr Bit nonSTEFrequency() { return {0x0032, 5}; }
261 static constexpr Bit bandwidth() { return {0x0033, 1}; }
262 static constexpr Bit rxOnly() { return {0x0033, 2}; }
263 static constexpr Bit talkaround() { return {0x0033, 3}; }
264 static constexpr Bit vox() { return {0x0033, 6}; }
265 static constexpr Bit power() { return {0x0033, 7}; }
266 };
267 };
268
273 class ChannelBankElement: public Element
274 {
275 protected:
277 ChannelBankElement(uint8_t *ptr, unsigned size);
278
279 public:
281 explicit ChannelBankElement(uint8_t *ptr);
283 virtual ~ChannelBankElement();
284
286 static constexpr unsigned int size() { return 0x1c10; }
287
289 void clear();
290
292 virtual bool isEnabled(unsigned idx) const ;
294 virtual void enable(unsigned idx, bool enabled);
296 virtual uint8_t *get(unsigned idx) const;
298 ChannelElement channel(unsigned int n);
299
300 public:
302 struct Limit {
304 static constexpr unsigned int channelCount() { return 128; }
305 };
306
307 protected:
309 struct Offset {
311 static constexpr unsigned int bitmask() { return 0x0000; }
312 static constexpr unsigned int channels() { return 0x0010; }
314 };
315 };
316
321 class VFOChannelElement: public ChannelElement
322 {
323 public:
325 enum class OffsetMode {
326 Off = 0,
327 Positive = 1,
328 Negative = 2
329 };
330
332 enum class StepSize {
333 SS2_5kHz = 0,
334 SS5kHz = 1,
335 SS6_25kHz = 2,
336 SS10kHz = 3,
337 SS12_5kHz = 4,
338 SS20kHz = 5,
339 SS30kHz = 6,
340 SS50kHz = 7
341 };
342
343 protected:
345 VFOChannelElement(uint8_t *ptr, unsigned size);
346
347 public:
349 explicit VFOChannelElement(uint8_t *ptr);
350
351 void clear();
352
354 QString name() const;
356 void setName(const QString &name);
357
359 virtual double stepSize() const;
361 virtual void setStepSize(double kHz);
362
364 virtual OffsetMode offsetMode() const;
366 virtual double txOffset() const;
368 virtual void setTXOffset(double f);
370 virtual void setOffsetMode(OffsetMode mode);
371
372 protected:
374 struct Offset: public ChannelElement::Offset {
375 static constexpr Bit stepSize() { return {0x0036, 4} ; }
376 static constexpr Bit offsetMode() { return {0x0036, 2} ; }
377 static constexpr unsigned int txOffset() { return 0x0034; }
378 };
380 };
381
382
387 class ContactElement: public Element
388 {
389 protected:
391 ContactElement(uint8_t *ptr, unsigned size);
392
393 public:
395 explicit ContactElement(uint8_t *ptr);
397 virtual ~ContactElement();
398
400 static constexpr unsigned int size() { return 0x0018; }
401
403 void clear();
405 bool isValid() const;
406
408 virtual QString name() const;
410 virtual void setName(const QString name);
411
413 virtual unsigned number() const;
415 virtual void setNumber(unsigned id);
416
418 virtual DMRContact::Type type() const;
420 virtual void setType(DMRContact::Type type);
421
423 virtual bool ring() const;
425 virtual void enableRing(bool enable);
426
428 virtual unsigned ringStyle() const;
430 virtual void setRingStyle(unsigned style);
431
433 virtual DMRContact *toContactObj(Context &ctx, const ErrorStack &err=ErrorStack()) const;
435 virtual bool fromContactObj(const DMRContact *obj, Context &ctx, const ErrorStack &err=ErrorStack());
436
437 public:
439 struct Limit {
441 static constexpr unsigned int nameLength() { return 16; }
443 static constexpr unsigned int ringStyle() { return 10; }
444 };
445
446 protected:
448 struct Offset {
450 static constexpr unsigned int name() { return 0x0000; }
451 static constexpr unsigned int number() { return 0x0010; }
452 static constexpr unsigned int type() { return 0x0014; }
453 static constexpr unsigned int ring() { return 0x0015; }
454 static constexpr unsigned int ringStyle() { return 0x0016; }
456 };
457 };
458
459
465 class DTMFContactElement: public Element
466 {
467 protected:
469 DTMFContactElement(uint8_t *ptr, unsigned size);
470
471 public:
473 explicit DTMFContactElement(uint8_t *ptr);
475 virtual ~DTMFContactElement();
476
478 static constexpr unsigned int size() { return 0x0020; }
479
481 void clear();
483 bool isValid() const;
484
486 virtual QString name() const;
488 virtual void setName(const QString &name);
489
491 virtual QString number() const;
493 virtual void setNumber(const QString &number);
494
496 virtual DTMFContact *toContactObj(Context &ctx, const ErrorStack &err=ErrorStack()) const;
498 virtual bool fromContactObj(const DTMFContact *obj, Context &ctx, const ErrorStack &err=ErrorStack());
499
500 public:
502 struct Limit {
504 static constexpr unsigned int nameLength() { return 16; }
506 static constexpr unsigned int numberLength() { return 16; }
507 };
508
509 protected:
511 struct Offset {
513 static constexpr unsigned int name() { return 0x0000; }
514 static constexpr unsigned int number() { return 0x0010; }
516 };
517 };
518
524 class ZoneElement: public Element
525 {
526 protected:
528 ZoneElement(uint8_t *ptr, unsigned size);
529
530 public:
532 explicit ZoneElement(uint8_t *ptr);
533 virtual ~ZoneElement();
534
536 static constexpr unsigned int size() { return 0x0030; }
537
539 void clear();
541 bool isValid() const;
542
544 virtual QString name() const;
546 virtual void setName(const QString &name);
547
550 virtual bool hasMember(unsigned n) const;
552 virtual unsigned member(unsigned n) const;
554 virtual void setMember(unsigned n, unsigned idx);
556 virtual void clearMember(unsigned n);
557
559 virtual Zone *toZoneObj(Context &ctx, const ErrorStack &err=ErrorStack()) const;
562 virtual bool linkZoneObj(Zone *zone, Context &ctx, const ErrorStack &err=ErrorStack()) const;
564 virtual bool fromZoneObjA(const Zone *zone, Context &ctx, const ErrorStack &err=ErrorStack());
566 virtual bool fromZoneObjB(const Zone *zone, Context &ctx, const ErrorStack &err=ErrorStack());
567
568 public:
570 struct Limit {
572 static constexpr unsigned int nameLength() { return 16; }
574 static constexpr unsigned int memberCount() { return 16; }
575 };
576
577 protected:
579 struct Offset {
581 static constexpr unsigned int name() { return 0x0000; }
582 static constexpr unsigned int channels() { return 0x0010; }
583 static constexpr unsigned int betweenChannels() { return 0x0002; }
585 };
586
587 };
588
594 class ZoneBankElement: public Element
595 {
596 protected:
598 ZoneBankElement(uint8_t *ptr, unsigned size);
599
600 public:
602 explicit ZoneBankElement(uint8_t *ptr);
604 ~ZoneBankElement();
605
607 static constexpr unsigned int size() { return 0x2f00; }
608
610 void clear();
611
613 virtual bool isEnabled(unsigned idx) const ;
615 virtual void enable(unsigned idx, bool enabled);
616
618 virtual uint8_t *get(unsigned idx) const;
620 ZoneElement zone(unsigned int n);
621
622 public:
624 struct Limit {
626 static constexpr unsigned int zoneCount() { return 250; }
627 };
628
629 protected:
631 struct Offset {
633 static constexpr unsigned int bitmap() { return 0x0000; }
634 static constexpr unsigned int zones() { return 0x0020; }
636 };
637 };
638
644 class GroupListElement: public Element
645 {
646 protected:
648 GroupListElement(uint8_t *ptr, unsigned size);
649
650 public:
652 explicit GroupListElement(uint8_t *ptr);
654 virtual ~GroupListElement();
655
657 static constexpr unsigned int size() { return 0x0030; }
658
660 void clear();
661
663 virtual QString name() const;
665 virtual void setName(const QString &name);
666
669 virtual bool hasMember(unsigned n) const;
671 virtual unsigned member(unsigned n) const;
673 virtual void setMember(unsigned n, unsigned idx);
675 virtual void clearMember(unsigned n);
676
678 virtual RXGroupList *toRXGroupListObj(Context &ctx, const ErrorStack &err = ErrorStack());
680 virtual bool linkRXGroupListObj(unsigned int ncnt, RXGroupList *lst, Context &ctx, const ErrorStack &err = ErrorStack()) const;
682 virtual bool fromRXGroupListObj(const RXGroupList *lst, Context &ctx, const ErrorStack &err = ErrorStack());
683
684 public:
686 struct Limit {
687 static constexpr unsigned int nameLength() { return 16; }
688 static constexpr unsigned int memberCount() { return 16; }
689 };
690
691 protected:
693 struct Offset {
695 static constexpr unsigned int name() { return 0x0000; }
696 static constexpr unsigned int members() { return 0x0010; }
697 static constexpr unsigned int betweenMembers() { return 0x0002; }
699 };
700 };
701
707 class GroupListBankElement: public Element
708 {
709 protected:
711 GroupListBankElement(uint8_t *ptr, unsigned size);
712
713 public:
715 explicit GroupListBankElement(uint8_t *ptr);
717 virtual ~GroupListBankElement();
718
720 static constexpr unsigned int size() { return 0x0c80; }
721
723 void clear();
724
726 virtual bool isEnabled(unsigned n) const;
728 virtual unsigned contactCount(unsigned n) const;
731 virtual void setContactCount(unsigned n, unsigned size);
733 virtual void disable(unsigned n);
734
736 virtual uint8_t *get(unsigned n) const;
737
738 public:
740 struct Limit {
741 static constexpr unsigned int groupListCount() { return 64; }
742 };
743
744 protected:
746 struct Offset {
748 static constexpr unsigned int contactCounts() { return 0x0000; }
749 static constexpr unsigned int groupLists() { return 0x0080; }
751 };
752 };
753
759 class ScanListElement: public Element
760 {
761 public:
763 enum Mode {
764 PL_NONPRI = 0,
765 PL_DISABLE = 1,
766 PL_PRI = 2,
767 PL_PRI_NONPRI = 3
768 };
769
770 protected:
772 ScanListElement(uint8_t *ptr, unsigned size);
773
774 public:
776 explicit ScanListElement(uint8_t *ptr);
778 virtual ~ScanListElement();
779
781 static constexpr unsigned int size() { return 0x0058; }
782
784 void clear();
785
787 virtual QString name() const;
789 virtual void setName(const QString &name);
790
792 virtual bool channelMark() const;
794 virtual void enableChannelMark(bool enable);
795
797 virtual Mode mode() const;
799 virtual void setMode(Mode mode);
800
802 virtual bool talkback() const;
804 virtual void enableTalkback(bool enable);
805
807 virtual bool hasMember(unsigned n) const;
809 virtual bool isSelected(unsigned n) const;
811 virtual unsigned member(unsigned n) const;
813 virtual void setMember(unsigned n, unsigned idx);
815 virtual void setSelected(unsigned n);
817 virtual void clearMember(unsigned n);
818
820 virtual bool hasPrimary() const;
822 virtual bool primaryIsSelected() const;
824 virtual unsigned primary() const;
826 virtual void setPrimary(unsigned idx);
828 virtual void setPrimarySelected();
830 virtual void clearPrimary();
831
833 virtual bool hasSecondary() const;
835 virtual bool secondaryIsSelected() const;
837 virtual unsigned secondary() const;
839 virtual void setSecondary(unsigned idx);
841 virtual void setSecondarySelected();
843 virtual void clearSecondary();
844
847 virtual bool hasRevert() const;
849 virtual bool revertIsSelected() const;
851 virtual unsigned revert() const;
853 virtual void setRevert(unsigned idx);
855 virtual void setRevertSelected();
857 virtual void clearRevert();
858
860 virtual unsigned holdTime() const;
862 virtual void setHoldTime(unsigned ms);
863
865 virtual unsigned prioritySampleTime() const;
867 virtual void setPrioritySampleTime(unsigned ms);
868
870 virtual ScanList *toScanListObj(Context &ctx, const ErrorStack &err=ErrorStack()) const;
872 virtual bool linkScanListObj(ScanList *lst, Context &ctx, const ErrorStack &err=ErrorStack()) const;
874 virtual bool fromScanListObj(const ScanList *lst, Context &ctx, const ErrorStack &err=ErrorStack());
875
876 public:
878 struct Limit: public Element::Limit {
880 static constexpr unsigned int name() { return 15; }
882 static constexpr unsigned int members() { return 32; }
883 };
884
885 protected:
887 struct Offset: public Element::Offset {
888 static constexpr unsigned int name() { return 0x0000; }
889 static constexpr Bit channelMark() { return {0x000f, 4}; }
890 static constexpr Bit mode() { return {0x000f, 6}; }
891 static constexpr Bit talkback() { return {0x000f, 7}; }
892 static constexpr unsigned int members() { return 0x0010; }
893 static constexpr unsigned int betweenMembers() { return 0x0002; }
894 static constexpr unsigned int primary() { return 0x0050; }
895 static constexpr unsigned int secondary() { return 0x0052; }
896 static constexpr unsigned int revert() { return 0x0054; }
897 static constexpr unsigned int holdTime() { return 0x0056; }
898 static constexpr unsigned int primaryHoldTime() { return 0x0057; }
899 };
901 };
902
908 class ScanListBankElement: public Element
909 {
910 protected:
912 ScanListBankElement(uint8_t *ptr, unsigned size);
913
914 public:
916 explicit ScanListBankElement(uint8_t *ptr);
918 virtual ~ScanListBankElement();
919
921 static constexpr unsigned int size() { return 0x56f0; }
922
924 void clear();
925
927 virtual bool isEnabled(unsigned n) const;
929 virtual void enable(unsigned n, bool enabled);
931 virtual uint8_t *get(unsigned n) const;
932
933 public:
935 struct Limit {
936 static constexpr unsigned int scanListCount() { return 250; }
937 };
938
939 protected:
941 struct Offset {
943 static constexpr unsigned int bytemap() { return 0x0000; }
944 static constexpr unsigned int scanLists() { return 0x0040; }
946 };
947 };
948
949
955 class GeneralSettingsElement: public Element
956 {
957 public:
964
965 protected:
967 GeneralSettingsElement(uint8_t *ptr, unsigned size);
968
969 public:
971 explicit GeneralSettingsElement(uint8_t *ptr);
973 virtual ~GeneralSettingsElement();
974
976 static constexpr unsigned int size() { return 0x0028; }
977
979 void clear();
980
982 virtual QString name() const;
984 virtual void setName(const QString &name);
985
987 virtual unsigned radioID() const;
989 virtual void setRadioID(unsigned id);
990
992 virtual unsigned preambleDuration() const;
994 virtual void setPreambleDuration(unsigned ms);
995
997 virtual MonitorType monitorType() const;
999 virtual void setMonitorType(MonitorType type);
1000
1002 virtual unsigned voxSensitivity() const;
1004 virtual void setVOXSensitivity(unsigned value);
1005
1007 virtual unsigned lowBatteryWarnInterval() const;
1009 virtual void setLowBatteryWarnInterval(unsigned sec);
1010
1012 virtual unsigned callAlertDuration() const;
1014 virtual void setCallAlertDuration(unsigned sec);
1015
1017 virtual unsigned loneWorkerResponsePeriod() const;
1019 virtual void setLoneWorkerResponsePeriod(unsigned min);
1021 virtual unsigned loneWorkerReminderPeriod() const;
1023 virtual void setLoneWorkerReminderPeriod(unsigned sec);
1024
1026 virtual unsigned groupCallHangTime() const;
1028 virtual void setGroupCallHangTime(unsigned ms);
1030 virtual unsigned privateCallHangTime() const;
1032 virtual void setPrivateCallHangTime(unsigned ms);
1033
1035 virtual bool downChannelModeVFO() const;
1037 virtual void enableDownChannelModeVFO(bool enable);
1039 virtual bool upChannelModeVFO() const;
1041 virtual void enableUpChannelModeVFO(bool enable);
1043 virtual bool resetTone() const;
1045 virtual void enableResetTone(bool enable);
1047 virtual bool unknownNumberTone() const;
1049 virtual void enableUnknownNumberTone(bool enable);
1051 virtual ARTSTone artsToneMode() const;
1053 virtual void setARTSToneMode(ARTSTone mode);
1054
1056 virtual bool digitalTalkPermitTone() const;
1058 virtual void enableDigitalTalkPermitTone(bool enable);
1060 virtual bool analogTalkPermitTone() const;
1062 virtual void enableAnalogTalkPermitTone(bool enable);
1064 virtual bool selftestTone() const;
1066 virtual void enableSelftestTone(bool enable);
1068 virtual bool channelFreeIndicationTone() const;
1070 virtual void enableChannelFreeIndicationTone(bool enable);
1072 virtual bool allTonesDisabled() const;
1074 virtual void disableAllTones(bool disable);
1076 virtual bool batsaveRX() const;
1078 virtual void enableBatsaveRX(bool enable);
1080 virtual bool batsavePreamble() const;
1082 virtual void enableBatsavePreamble(bool enable);
1083
1085 virtual bool allLEDsDisabled() const;
1087 virtual void disableAllLEDs(bool disable);
1089 virtual bool quickKeyOverrideInhibited() const;
1091 virtual void inhibitQuickKeyOverride(bool inhibit);
1092
1094 virtual bool txExitTone() const;
1096 virtual void enableTXExitTone(bool enable);
1098 virtual bool txOnActiveChannel() const;
1100 virtual void enableTXOnActiveChannel(bool enable);
1102 virtual bool animation() const;
1104 virtual void enableAnimation(bool enable);
1106 virtual ScanMode scanMode() const;
1108 virtual void setScanMode(ScanMode mode);
1109
1111 virtual unsigned repeaterEndDelay() const;
1113 virtual void setRepeaterEndDelay(unsigned delay);
1115 virtual unsigned repeaterSTE() const;
1117 virtual void setRepeaterSTE(unsigned ste);
1118
1120 virtual bool hasProgPassword() const;
1122 virtual QString progPassword() const;
1124 virtual void setProgPassword(const QString &pwd);
1126 virtual void clearProgPassword();
1127
1129 virtual bool fromConfig(Context &ctx, const ErrorStack &err=ErrorStack());
1131 virtual bool updateConfig(Context &ctx, const ErrorStack &err=ErrorStack());
1132 };
1133
1138 class ButtonSettingsElement: public Element
1139 {
1140 public:
1142 struct KeyFunction {
1143 public:
1145 static uint8_t encode(RadioddityButtonSettingsExtension::Function func);
1147 static RadioddityButtonSettingsExtension::Function decode(uint8_t action);
1148
1149 protected:
1151 enum Action {
1152 None = 0x00,
1153 ToggleAllAlertTones = 0x01,
1154 EmergencyOn = 0x02,
1155 EmergencyOff = 0x03,
1156 ToggleMonitor = 0x05,
1157 NuiaceDelete = 0x06,
1158 OneTouch1 = 0x07,
1159 OneTouch2 = 0x08,
1160 OneTouch3 = 0x09,
1161 OneTouch4 = 0x0a,
1162 OneTouch5 = 0x0b,
1163 OneTouch6 = 0x0c,
1164 ToggleRepeatTalkaround = 0x0d,
1165 ToggleScan = 0x0e,
1166 TogglePrivacy = 0x10,
1167 ToggleVox = 0x11,
1168 ZoneSelect = 0x12,
1169 BatteryIndicator = 0x13,
1170 ToggleLoneWorker = 0x14,
1171 PhoneExit = 0x16,
1172 ToggleFlashLight = 0x1a,
1173 ToggleFMRadio = 0x1b
1174 };
1175 };
1176
1178 enum class OneTouchAction {
1179 None = 0x00,
1180 DigitalCall = 0x10,
1181 DigitalMessage = 0x11,
1182 AnalogCall = 0x20
1183 };
1184
1185 protected:
1187 ButtonSettingsElement(uint8_t *ptr, unsigned size);
1188
1189 public:
1191 explicit ButtonSettingsElement(uint8_t *ptr);
1193 virtual ~ButtonSettingsElement();
1194
1196 void clear();
1197
1199 virtual Interval longPressDuration() const;
1201 virtual void setLongPressDuration(Interval ms);
1202
1204 virtual RadioddityButtonSettingsExtension::Function sk1ShortPress() const;
1206 virtual void setSK1ShortPress(RadioddityButtonSettingsExtension::Function action);
1208 virtual RadioddityButtonSettingsExtension::Function sk1LongPress() const;
1210 virtual void setSK1LongPress(RadioddityButtonSettingsExtension::Function action);
1211
1213 virtual RadioddityButtonSettingsExtension::Function sk2ShortPress() const;
1215 virtual void setSK2ShortPress(RadioddityButtonSettingsExtension::Function action);
1217 virtual RadioddityButtonSettingsExtension::Function sk2LongPress() const;
1219 virtual void setSK2LongPress(RadioddityButtonSettingsExtension::Function action);
1220
1222 virtual RadioddityButtonSettingsExtension::Function tkShortPress() const;
1224 virtual void setTKShortPress(RadioddityButtonSettingsExtension::Function action);
1226 virtual RadioddityButtonSettingsExtension::Function tkLongPress() const;
1228 virtual void setTKLongPress(RadioddityButtonSettingsExtension::Function action);
1229
1231 virtual OneTouchAction oneTouchAction(unsigned n) const;
1233 virtual unsigned oneTouchContact(unsigned n) const;
1235 virtual unsigned oneTouchMessage(unsigned n) const;
1237 virtual void disableOneTouch(unsigned n);
1239 virtual void setOneTouchDigitalCall(unsigned n, unsigned index);
1241 virtual void setOneTouchDigitalMessage(unsigned n, unsigned index);
1243 virtual void setOneTouchAnalogCall(unsigned n);
1244
1246 bool encode(Context &ctx, const ErrorStack &err=ErrorStack());
1248 bool decode(Context &ctx, const ErrorStack &err=ErrorStack());
1249
1250 public:
1252 struct Limits {
1254 static constexpr TimeRange longPressDuration() {
1256 }
1258 static constexpr unsigned int oneTouchActions() { return 6; }
1259 };
1260
1261 protected:
1263 struct Offset {
1265 static constexpr unsigned int longPressDuration() { return 0x0001; }
1266 static constexpr unsigned int sk1ShortPress() { return 0x0002; }
1267 static constexpr unsigned int sk1LongPress() { return 0x0003; }
1268 static constexpr unsigned int sk2ShortPress() { return 0x0004; }
1269 static constexpr unsigned int sk2LongPress() { return 0x0005; }
1270 static constexpr unsigned int tkShortPress() { return 0x0006; }
1271 static constexpr unsigned int tkLongPress() { return 0x0007; }
1272 static constexpr unsigned int oneTouchActions() { return 0x0008; }
1273 static constexpr unsigned int betweenOneTouchActions() { return 0x0004; }
1275 };
1276 };
1277
1282 class MenuSettingsElement: public Element
1283 {
1284 public:
1286 enum class ChannelDisplayMode {
1287 Number = 0,
1288 Name = 1,
1289 Frequency = 2
1290 };
1291
1293 enum class DualWatchMode {
1294 DualDual = 1,
1295 DualSingle = 2
1296 };
1297
1298 protected:
1300 MenuSettingsElement(uint8_t *ptr, unsigned size);
1301
1302 public:
1304 explicit MenuSettingsElement(uint8_t *ptr);
1306 virtual ~MenuSettingsElement();
1307
1309 void clear();
1310
1312 virtual unsigned menuHangTime() const;
1314 virtual void setMenuHangTime(unsigned sec);
1315
1317 virtual bool message() const;
1319 virtual void enableMessage(bool enable);
1321 virtual bool scanStart() const;
1323 virtual void enableScanStart(bool enable);
1325 virtual bool editScanList() const;
1327 virtual void enableEditScanList(bool enable);
1329 virtual bool callAlert() const;
1331 virtual void enableCallAlert(bool enable);
1333 virtual bool editContact() const;
1335 virtual void enableEditContact(bool enable);
1337 virtual bool manualDial() const;
1339 virtual void enableManualDial(bool enable);
1341 virtual bool radioCheck() const;
1343 virtual void enableRadioCheck(bool enable);
1345 virtual bool remoteMonitor() const;
1347 virtual void enableRemoteMonitor(bool enable);
1348
1350 virtual bool radioEnable() const;
1352 virtual void enableRadioEnable(bool enable);
1354 virtual bool radioDisable() const;
1356 virtual void enableRadioDisable(bool enable);
1358 virtual bool progPassword() const;
1360 virtual void enableProgPassword(bool enable);
1362 virtual bool talkaround() const;
1364 virtual void enableTalkaround(bool enable);
1366 virtual bool tone() const;
1368 virtual void enableTone(bool enable);
1370 virtual bool power() const;
1372 virtual void enablePower(bool enable);
1374 virtual bool backlight() const;
1376 virtual void enableBacklight(bool enable);
1378 virtual bool introScreen() const;
1380 virtual void enableIntroScreen(bool enable);
1381
1383 virtual bool keypadLock() const;
1385 virtual void enableKeypadLock(bool enable);
1387 virtual bool ledIndicator() const;
1389 virtual void enableLEDIndicator(bool enable);
1391 virtual bool squelch() const;
1393 virtual void enableSquelch(bool enable);
1395 virtual bool privacy() const;
1397 virtual void enablePrivacy(bool enable);
1399 virtual bool vox() const;
1401 virtual void enableVOX(bool enable);
1403 virtual bool passwordLock() const;
1405 virtual void enablePasswordLock(bool enable);
1407 virtual bool missedCalls() const;
1409 virtual void enableMissedCalls(bool enable);
1411 virtual bool answeredCalls() const;
1413 virtual void enableAnsweredCalls(bool enable);
1414
1416 virtual bool outgoingCalls() const;
1418 virtual void enableOutgoingCalls(bool enable);
1420 virtual bool channelDisplay() const;
1422 virtual void enableChannelDisplay(bool enable);
1424 virtual bool dualWatch() const;
1426 virtual void enableDualWatch(bool enable);
1427
1429 virtual unsigned keypadLockTime() const;
1431 virtual void setKeypadLockTime(unsigned sec);
1432
1434 virtual unsigned backlightTime() const;
1436 virtual void setBacklightTime(unsigned sec);
1437
1439 virtual ChannelDisplayMode channelDisplayMode() const;
1441 virtual void setChannelDisplayMode(ChannelDisplayMode mode);
1442
1444 virtual bool keyTone() const;
1446 virtual void enableKeyTone(bool enable);
1447
1449 virtual DualWatchMode dualWatchMode() const;
1451 virtual void setDualWatchMode(DualWatchMode mode);
1452 };
1453
1458 class BootSettingsElement: public Element
1459 {
1460 protected:
1462 BootSettingsElement(uint8_t *ptr, unsigned size);
1463
1464 public:
1466 explicit BootSettingsElement(uint8_t *ptr);
1468 virtual ~BootSettingsElement();
1469
1471 void clear();
1472
1474 virtual bool bootText() const;
1476 virtual void enableBootText(bool enable);
1477
1479 virtual bool bootPasswordEnabled() const;
1481 virtual void enableBootPassword(bool enable);
1483 virtual unsigned bootPassword() const;
1485 virtual void setBootPassword(unsigned passwd);
1486 };
1487
1492 class BootTextElement: public Element
1493 {
1494 protected:
1496 BootTextElement(uint8_t *ptr, unsigned size);
1497
1498 public:
1500 explicit BootTextElement(uint8_t *ptr);
1502 virtual ~BootTextElement();
1503
1505 static constexpr unsigned int size() { return 0x0020; }
1506
1508 void clear();
1509
1511 virtual QString line1() const;
1513 virtual void setLine1(const QString &text);
1515 virtual QString line2() const;
1517 virtual void setLine2(const QString &text);
1518
1520 virtual bool fromConfig(Context &ctx, const ErrorStack &err = ErrorStack());
1522 virtual bool updateConfig(Context &ctx, const ErrorStack &err = ErrorStack());
1523
1524 public:
1526 struct Limit {
1527 static constexpr unsigned int lineLength() { return 16; }
1528 };
1529
1530 protected:
1532 struct Offset {
1534 static constexpr unsigned int line1() { return 0x0000;}
1535 static constexpr unsigned int line2() { return 0x0010;}
1537 };
1538 };
1539
1544 class MessageBankElement: public Element
1545 {
1546 protected:
1548 MessageBankElement(uint8_t *ptr, unsigned size);
1549
1550 public:
1552 explicit MessageBankElement(uint8_t *ptr);
1554 virtual ~MessageBankElement();
1555
1557 static constexpr unsigned int size() { return 0x1248; }
1559 void clear();
1560
1562 virtual unsigned numMessages() const;
1564 virtual QString message(unsigned n) const;
1566 virtual void appendMessage(const QString msg);
1567
1569 virtual bool encode(Context &ctx, const Flags &flags, const ErrorStack &err=ErrorStack());
1571 virtual bool decode(Context &ctx, const ErrorStack &err=ErrorStack());
1572
1573 public:
1575 struct Limit {
1576 static constexpr unsigned int messages() { return 32; }
1577 static constexpr unsigned int messageLength() { return 144; }
1578 };
1579
1580 protected:
1582 struct Offset {
1584 static constexpr unsigned int messageConut() { return 0x0000; }
1585 static constexpr unsigned int messageLengths() { return 0x0008; }
1586 static constexpr unsigned int messages() { return 0x0048; }
1587 static constexpr unsigned int betweenMessages() { return Limit::messageLength(); }
1589 };
1590 };
1591
1596 class EncryptionElement: public Codeplug::Element
1597 {
1598 public:
1601 enum class PrivacyType {
1602 None,
1603 Basic
1604 };
1605
1606 protected:
1608 EncryptionElement(uint8_t *ptr, size_t size);
1609
1610 public:
1612 explicit EncryptionElement(uint8_t *ptr);
1614 virtual ~EncryptionElement();
1615
1617 static constexpr unsigned int size() { return 0x0088; }
1618
1619 void clear();
1620
1622 virtual PrivacyType privacyType() const;
1624 virtual void setPrivacyType(PrivacyType type);
1625
1628 virtual bool isBasicKeySet(unsigned n) const;
1630 virtual QByteArray basicKey(unsigned n) const;
1632 virtual void setBasicKey(unsigned n, const QByteArray &key);
1634 virtual void clearBasicKey(unsigned n);
1635
1637 virtual bool fromCommercialExt(CommercialExtension *ext, Context &ctx, const ErrorStack &err=ErrorStack());
1639 virtual bool updateCommercialExt(Context &ctx, const ErrorStack &err=ErrorStack());
1641 virtual bool linkCommercialExt(CommercialExtension *ext, Context &ctx, const ErrorStack &err=ErrorStack());
1642
1643 public:
1645 struct Limit {
1647 static constexpr unsigned int keyCount() { return 16; }
1649 static constexpr unsigned int keySize() { return 4; }
1650 };
1651
1652 protected:
1654 struct Offset {
1656 static constexpr unsigned int privacyType() { return 0x0000; }
1657 static constexpr unsigned int bitmap() { return 0x0002; }
1658 static constexpr unsigned int keys() { return 0x0008; }
1659 static constexpr unsigned int key() { return 0x0008;}
1661 };
1662 };
1663
1664protected:
1666 explicit RadioddityCodeplug(QObject *parent=nullptr);
1667
1668public:
1670 virtual ~RadioddityCodeplug();
1671
1673 virtual void clear();
1674
1675 bool index(Config *config, Context &ctx, const ErrorStack &err=ErrorStack()) const;
1676
1677 bool decode(Config *config, const ErrorStack &err=ErrorStack());
1678 bool postprocess(Config *config, const ErrorStack &err) const;
1679
1680 Config *preprocess(Config *config, const ErrorStack &err) const;
1681 bool encode(Config *config, const Flags &flags = Flags(), const ErrorStack &err=ErrorStack());
1682
1683public:
1686 virtual bool decodeElements(Context &ctx, const ErrorStack &err=ErrorStack());
1688 virtual bool encodeElements(const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack());
1689
1691 virtual void clearGeneralSettings() = 0;
1693 virtual bool encodeGeneralSettings(const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack()) = 0;
1695 virtual bool decodeGeneralSettings(Context &ctx, const ErrorStack &err=ErrorStack()) = 0;
1696
1698 virtual void clearButtonSettings() = 0;
1700 virtual bool encodeButtonSettings(Context &ctx, const Flags &flags, const ErrorStack &err=ErrorStack()) = 0;
1702 virtual bool decodeButtonSettings(Context &ctx, const ErrorStack &err=ErrorStack()) = 0;
1703
1705 virtual void clearMessages() = 0;
1707 virtual bool encodeMessages(Context &ctx, const Flags &flags, const ErrorStack &err=ErrorStack()) = 0;
1709 virtual bool decodeMessages(Context &ctx, const ErrorStack &err=ErrorStack()) = 0;
1710
1712 virtual void clearContacts() = 0;
1714 virtual bool encodeContacts(const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack()) = 0;
1716 virtual bool createContacts(Context &ctx, const ErrorStack &err=ErrorStack()) = 0;
1717
1719 virtual void clearDTMFContacts() = 0;
1721 virtual bool encodeDTMFContacts(const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack()) = 0;
1723 virtual bool createDTMFContacts(Context &ctx, const ErrorStack &err=ErrorStack()) = 0;
1724
1726 virtual void clearChannels() = 0;
1728 virtual bool encodeChannels(const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack()) = 0;
1730 virtual bool createChannels(Context &ctx, const ErrorStack &err=ErrorStack()) = 0;
1732 virtual bool linkChannels(Context &ctx, const ErrorStack &err=ErrorStack()) = 0;
1733
1735 virtual void clearBootSettings() = 0;
1736
1738 virtual void clearMenuSettings() = 0;
1739
1741 virtual void clearBootText() = 0;
1743 virtual bool encodeBootText(const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack()) = 0;
1745 virtual bool decodeBootText(Context &ctx, const ErrorStack &err=ErrorStack()) = 0;
1746
1748 virtual void clearVFOSettings() = 0;
1749
1751 virtual void clearZones() = 0;
1753 virtual bool encodeZones(const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack()) = 0;
1755 virtual bool createZones(Context &ctx, const ErrorStack &err=ErrorStack()) = 0;
1757 virtual bool linkZones(Context &ctx, const ErrorStack &err=ErrorStack()) = 0;
1758
1760 virtual void clearScanLists() = 0;
1762 virtual bool encodeScanLists(const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack()) = 0;
1764 virtual bool createScanLists(Context &ctx, const ErrorStack &err=ErrorStack()) = 0;
1766 virtual bool linkScanLists(Context &ctx, const ErrorStack &err=ErrorStack()) = 0;
1767
1769 virtual void clearGroupLists() = 0;
1771 virtual bool encodeGroupLists(const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack()) = 0;
1773 virtual bool createGroupLists(Context &ctx, const ErrorStack &err=ErrorStack()) = 0;
1775 virtual bool linkGroupLists(Context &ctx, const ErrorStack &err=ErrorStack()) = 0;
1776
1778 virtual void clearEncryption() = 0;
1780 virtual bool encodeEncryption(const Flags &flags, Context &ctx, const ErrorStack &err=ErrorStack()) = 0;
1782 virtual bool createEncryption(Context &ctx, const ErrorStack &err=ErrorStack()) = 0;
1784 virtual bool linkEncryption(Context &ctx, const ErrorStack &err=ErrorStack()) = 0;
1785};
1786
1787#endif // RADIODDITYCODEPLUG_HH
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
Implements the generic extension for the codeplug to represent some commercial features of DMR.
Definition commercial_extension.hh:11
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
Represents a time interval.
Definition interval.hh:11
static constexpr Interval fromMilliseconds(unsigned long long ms)
Definition interval.hh:57
Generic representation of a RX group list.
Definition rxgrouplist.hh:14
Function
Possible function key actions.
Definition radioddity_extensions.hh:31
MonitorType
Possible monitor types.
Definition radioddity_extensions.hh:372
ScanMode
Possible scan modes.
Definition radioddity_extensions.hh:379
ARTSTone
Possible ARTS tone settings.
Definition radioddity_extensions.hh:135
Simple range class representing some range in some data type.
Definition ranges.hh:14
Generic representation of a scan list.
Definition scanlist.hh:15
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