@@ -1064,6 +1064,34 @@ message Config {
10641064 NOT_PRESENT = 2 ;
10651065 }
10661066
1067+ enum DynamicCodingRateMode {
1068+ /*
1069+ * Track received/transmitted coding rate statistics but do not alter TX coding rate.
1070+ * This is the rollout default: measure first, then enable DCR_AUTO explicitly.
1071+ */
1072+ DCR_OBSERVE = 0 ;
1073+
1074+ /*
1075+ * Keep using the configured static coding rate.
1076+ */
1077+ DCR_OFF = 1 ;
1078+
1079+ /*
1080+ * Select LoRa coding rate per packet using local airtime policy.
1081+ */
1082+ DCR_AUTO = 2 ;
1083+
1084+ /*
1085+ * Only bias coding rate for priority/control/urgent packets; leave background traffic static.
1086+ */
1087+ DCR_PRIORITY_ONLY = 3 ;
1088+
1089+ /*
1090+ * Enable experimental policy branches as they are added.
1091+ */
1092+ DCR_EXPERIMENTAL = 4 ;
1093+ }
1094+
10671095 /*
10681096 * When enabled, the `modem_preset` fields will be adhered to, else the `bandwidth`/`spread_factor`/`coding_rate`
10691097 * will be taked from their respective manually defined fields
@@ -1188,6 +1216,58 @@ message Config {
11881216 * Set where LORA FEM is enabled, disabled, or not present
11891217 */
11901218 FEM_LNA_Mode fem_lna_mode = 106 ;
1219+
1220+ /*
1221+ * Dynamic Coding Rate policy mode. DCR_OBSERVE is the rollout default so nodes first measure CR behavior
1222+ * without changing TX coding rate.
1223+ */
1224+ DynamicCodingRateMode dcr_mode = 107 ;
1225+
1226+ /*
1227+ * Minimum CR denominator DCR may choose. 0 means firmware default, currently 5 (CR 4/5).
1228+ */
1229+ uint32 dcr_min_cr = 108 ;
1230+
1231+ /*
1232+ * Maximum CR denominator DCR may choose. 0 means firmware default, currently 8 (CR 4/8).
1233+ */
1234+ uint32 dcr_max_cr = 109 ;
1235+
1236+ /*
1237+ * Max percentage of local TX airtime in the rolling DCR window that may be CR 4/8 for non-urgent packets.
1238+ * 0 means firmware default, currently 10 percent.
1239+ */
1240+ uint32 dcr_robust_airtime_pct = 110 ;
1241+
1242+ /*
1243+ * Disable local per-neighbor coding-rate tracking. Tracking is enabled by default and is local-only.
1244+ */
1245+ bool dcr_disable_neighbor_tracking = 111 ;
1246+
1247+ /*
1248+ * Advertise DCR capability when a future telemetry surface consumes it. Not used by the initial scheduler.
1249+ */
1250+ bool dcr_advertise_capability = 112 ;
1251+
1252+ /*
1253+ * Include DCR debug telemetry when a future telemetry surface consumes it. Disabled by default.
1254+ */
1255+ bool dcr_debug_telemetry = 113 ;
1256+
1257+ /*
1258+ * Maximum CR denominator for routine telemetry/position/nodeinfo traffic. 0 means firmware default, currently 6.
1259+ */
1260+ uint32 dcr_telemetry_max_cr = 114 ;
1261+
1262+ /*
1263+ * Minimum CR denominator for normal user-value packets such as text. 0 means firmware default, currently 6.
1264+ */
1265+ uint32 dcr_user_min_cr = 115 ;
1266+
1267+ /*
1268+ * Minimum CR denominator for alert/urgent packets. 0 means firmware default, currently 7.
1269+ */
1270+ uint32 dcr_alert_min_cr = 116 ;
11911271 }
11921272
11931273 message BluetoothConfig {
0 commit comments