Skip to content

Commit a60b706

Browse files
committed
added rx bw in factory file, updated filesystem
1 parent a7c3065 commit a60b706

File tree

3 files changed

+83
-67
lines changed

3 files changed

+83
-67
lines changed

stack/framework/inc/d7ap_fs.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
#define D7A_FILE_FIRMWARE_VERSION_SIZE (2 + D7A_FILE_FIRMWARE_VERSION_APP_NAME_SIZE + D7A_FILE_FIRMWARE_VERSION_GIT_SHA1_SIZE)
4646

4747
#define D7A_FILE_FACTORY_SETTINGS_FILE_ID 0x01
48-
#define D7A_FILE_FACTORY_SETTINGS_SIZE 1
48+
#define D7A_FILE_FACTORY_SETTINGS_SIZE 13
4949

5050
#define D7A_FILE_ENGINEERING_MODE_FILE_ID 0x05
5151
#define D7A_FILE_ENGINEERING_MODE_SIZE 9

stack/modules/d7ap/d7ap_fs_data.c

Lines changed: 52 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -182,61 +182,61 @@ __attribute__((used)) uint16_t files_offset[] = {
182182
output_system_file_offsets()
183183
]]]*/
184184
0x4, // UID - 0 (length 8))
185-
0x18, // FACTORY_SETTINGS - 1 (length 4))
186-
0x28, // FIRMWARE_VERSION - 2 (length 15))
187-
0x43, // DEVICE_CAPACITY - 3 (length 19))
188-
0x62, // DEVICE_STATUS - 4 (length 9))
189-
0x77, // ENGINEERING_MODE - 5 (length 9))
190-
0x8c, // VID - 6 (length 3))
191-
0x9b, // RFU_07 - 7 (length 0))
192-
0xa7, // PHY_CONFIG - 8 (length 9))
193-
0xbc, // PHY_STATUS - 9 (length 24))
194-
0xe0, // DLL_CONFIG - 10 (length 7))
195-
0xf3, // DLL_STATUS - 11 (length 12))
196-
0x10b, // NWL_ROUTING - 12 (length 1))
197-
0x118, // NWL_SECURITY - 13 (length 5))
198-
0x129, // NWL_SECURITY_KEY - 14 (length 16))
199-
0x145, // NWL_SSR - 15 (length 4))
200-
0x155, // NWL_STATUS - 16 (length 20))
201-
0x175, // TRL_STATUS - 17 (length 1))
202-
0x182, // SEL_CONFIG - 18 (length 6))
203-
0x194, // FOF_STATUS - 19 (length 10))
204-
0x1aa, // RFU_14 - 20 (length 0))
205-
0x1b6, // RFU_15 - 21 (length 0))
206-
0x1c2, // RFU_16 - 22 (length 0))
207-
0x1ce, // LOCATION_DATA - 23 (length 1))
208-
0x1db, // D7AALP_RFU_18 - 24 (length 0))
209-
0x1e7, // D7AALP_RFU_19 - 25 (length 0))
210-
0x1f3, // D7AALP_RFU_1A - 26 (length 0))
211-
0x1ff, // D7AALP_RFU_1B - 27 (length 0))
212-
0x20b, // D7AALP_RFU_1C - 28 (length 0))
213-
0x217, // D7AALP_RFU_1D - 29 (length 0))
214-
0x223, // D7AALP_RFU_1E - 30 (length 0))
215-
0x22f, // D7AALP_RFU_1F - 31 (length 0))
216-
0x23b, // ACCESS_PROFILE_0 - 32 (length 65))
217-
0x288, // ACCESS_PROFILE_1 - 33 (length 65))
218-
0x2d5, // ACCESS_PROFILE_2 - 34 (length 65))
219-
0x322, // ACCESS_PROFILE_3 - 35 (length 65))
220-
0x36f, // ACCESS_PROFILE_4 - 36 (length 65))
221-
0x3bc, // ACCESS_PROFILE_5 - 37 (length 65))
222-
0x409, // ACCESS_PROFILE_6 - 38 (length 65))
223-
0x456, // ACCESS_PROFILE_7 - 39 (length 65))
224-
0x4a3, // ACCESS_PROFILE_8 - 40 (length 65))
225-
0x4f0, // ACCESS_PROFILE_9 - 41 (length 65))
226-
0x53d, // ACCESS_PROFILE_10 - 42 (length 65))
227-
0x58a, // ACCESS_PROFILE_11 - 43 (length 65))
228-
0x5d7, // ACCESS_PROFILE_12 - 44 (length 65))
229-
0x624, // ACCESS_PROFILE_13 - 45 (length 65))
230-
0x671, // ACCESS_PROFILE_14 - 46 (length 65))
231-
//[[[end]]] (checksum: 798913e0a6af67a14112df377fbc85a3)
185+
0x18, // FACTORY_SETTINGS - 1 (length 13))
186+
0x31, // FIRMWARE_VERSION - 2 (length 15))
187+
0x4c, // DEVICE_CAPACITY - 3 (length 19))
188+
0x6b, // DEVICE_STATUS - 4 (length 9))
189+
0x80, // ENGINEERING_MODE - 5 (length 9))
190+
0x95, // VID - 6 (length 3))
191+
0xa4, // RFU_07 - 7 (length 0))
192+
0xb0, // PHY_CONFIG - 8 (length 9))
193+
0xc5, // PHY_STATUS - 9 (length 24))
194+
0xe9, // DLL_CONFIG - 10 (length 7))
195+
0xfc, // DLL_STATUS - 11 (length 12))
196+
0x114, // NWL_ROUTING - 12 (length 1))
197+
0x121, // NWL_SECURITY - 13 (length 5))
198+
0x132, // NWL_SECURITY_KEY - 14 (length 16))
199+
0x14e, // NWL_SSR - 15 (length 4))
200+
0x15e, // NWL_STATUS - 16 (length 20))
201+
0x17e, // TRL_STATUS - 17 (length 1))
202+
0x18b, // SEL_CONFIG - 18 (length 6))
203+
0x19d, // FOF_STATUS - 19 (length 10))
204+
0x1b3, // RFU_14 - 20 (length 0))
205+
0x1bf, // RFU_15 - 21 (length 0))
206+
0x1cb, // RFU_16 - 22 (length 0))
207+
0x1d7, // LOCATION_DATA - 23 (length 1))
208+
0x1e4, // D7AALP_RFU_18 - 24 (length 0))
209+
0x1f0, // D7AALP_RFU_19 - 25 (length 0))
210+
0x1fc, // D7AALP_RFU_1A - 26 (length 0))
211+
0x208, // D7AALP_RFU_1B - 27 (length 0))
212+
0x214, // D7AALP_RFU_1C - 28 (length 0))
213+
0x220, // D7AALP_RFU_1D - 29 (length 0))
214+
0x22c, // D7AALP_RFU_1E - 30 (length 0))
215+
0x238, // D7AALP_RFU_1F - 31 (length 0))
216+
0x244, // ACCESS_PROFILE_0 - 32 (length 65))
217+
0x291, // ACCESS_PROFILE_1 - 33 (length 65))
218+
0x2de, // ACCESS_PROFILE_2 - 34 (length 65))
219+
0x32b, // ACCESS_PROFILE_3 - 35 (length 65))
220+
0x378, // ACCESS_PROFILE_4 - 36 (length 65))
221+
0x3c5, // ACCESS_PROFILE_5 - 37 (length 65))
222+
0x412, // ACCESS_PROFILE_6 - 38 (length 65))
223+
0x45f, // ACCESS_PROFILE_7 - 39 (length 65))
224+
0x4ac, // ACCESS_PROFILE_8 - 40 (length 65))
225+
0x4f9, // ACCESS_PROFILE_9 - 41 (length 65))
226+
0x546, // ACCESS_PROFILE_10 - 42 (length 65))
227+
0x593, // ACCESS_PROFILE_11 - 43 (length 65))
228+
0x5e0, // ACCESS_PROFILE_12 - 44 (length 65))
229+
0x62d, // ACCESS_PROFILE_13 - 45 (length 65))
230+
0x67a, // ACCESS_PROFILE_14 - 46 (length 65))
231+
//[[[end]]] (checksum: 042b6478cc347b741c10b6de3153b1d9)
232232
};
233233

234234
__attribute__((used)) uint8_t files_length[] = {
235235
/*[[[cog
236236
output_system_file_length()
237237
]]]*/
238238
0x14, // UID - 0)
239-
0x10, // FACTORY_SETTINGS - 1)
239+
0x19, // FACTORY_SETTINGS - 1)
240240
0x1b, // FIRMWARE_VERSION - 2)
241241
0x1f, // DEVICE_CAPACITY - 3)
242242
0x15, // DEVICE_STATUS - 4)
@@ -282,7 +282,7 @@ __attribute__((used)) uint8_t files_length[] = {
282282
0x4d, // ACCESS_PROFILE_12 - 44)
283283
0x4d, // ACCESS_PROFILE_13 - 45)
284284
0x4d, // ACCESS_PROFILE_14 - 46)
285-
//[[[end]]] (checksum: e84fba5d8d3ec166279358e4bea2f101)
285+
//[[[end]]] (checksum: bbc326f0152e2a522cb0548e2e8b11ad)
286286
};
287287

288288
__attribute__((used)) uint8_t d7ap_permanent_files_data[FRAMEWORK_FS_PERMANENT_STORAGE_SIZE] LINKER_SECTION_FS_SYSTEM_FILE = {
@@ -297,8 +297,8 @@ __attribute__((used)) uint8_t d7ap_permanent_files_data[FRAMEWORK_FS_PERMANENT_S
297297
0x24, 0x23, 0xff, 0xff, 0x0, 0x0, 0x0, 0x8, 0x0, 0x0, 0x0, 0x8,
298298
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
299299
// FACTORY_SETTINGS - 1
300-
0x24, 0x23, 0xff, 0xff, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x4,
301-
0x0, 0x14, 0x11, 0x1,
300+
0x24, 0x23, 0xff, 0xff, 0x0, 0x0, 0x0, 0xd, 0x0, 0x0, 0x0, 0xd,
301+
0x0, 0x0, 0x0, 0x28, 0xe4, 0x0, 0x1, 0x33, 0x36, 0x0, 0x1, 0xeb, 0xac,
302302
// FIRMWARE_VERSION - 2
303303
0x24, 0x23, 0xff, 0xff, 0x0, 0x0, 0x0, 0xf, 0x0, 0x0, 0x0, 0xf,
304304
0x0, 0x0, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
@@ -434,7 +434,7 @@ __attribute__((used)) uint8_t d7ap_permanent_files_data[FRAMEWORK_FS_PERMANENT_S
434434
// ACCESS_PROFILE_14 - 46
435435
0x24, 0x23, 0xff, 0xff, 0x0, 0x0, 0x0, 0x41, 0x0, 0x0, 0x0, 0x41,
436436
0x32, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe, 0x56, 0xff, 0x0, 0x0, 0x0, 0x0, 0xe, 0x56, 0xff, 0x0, 0x0, 0x0, 0x0, 0xe, 0x56, 0xff, 0x0, 0x0, 0x0, 0x0, 0xe, 0x56, 0xff, 0x0, 0x0, 0x0, 0x0, 0xe, 0x56, 0xff, 0x0, 0x0, 0x0, 0x0, 0xe, 0x56, 0xff, 0x0, 0x0, 0x0, 0x0, 0xe, 0x56, 0xff, 0x0, 0x0, 0x0, 0x0, 0xe, 0x56, 0xff,
437-
//[[[end]]] (checksum: 149f22e1928490f8553b2faf3cdef27a)
437+
//[[[end]]] (checksum: 3a946023cebf0bf007480483faf54484)
438438
};
439439

440440

stack/modules/d7ap/phy.c

Lines changed: 30 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -70,25 +70,28 @@
7070
#define BITRATE_L 9600 // bps
7171
#define FDEV_L 4800 // Hz
7272
// Carson's rule: 2 x fm + 2 x fd = 9.600 + 2 x 4.800 = 19.2 kHz
73-
// assuming 10 ppm crystals gives max error of: 2 * 10 ppm * 868 = 17.36 kHz
74-
// => BW > 19.2 + 17.36 kHz => > 36.5 kHZ.
75-
#define RXBW_L 36500 //Hz
73+
// assuming 1 ppm crystals gives max error of: 2 * 1 ppm * 868 = 1.736 kHz
74+
// => BW > 19.2 + 1.736 kHz => > 20.936 kHZ.
75+
// This results in 10.468 kHz on a single sideband.
76+
// #define RXBW_L 10468 //Hz
7677

7778
// normal rate
7879
#define BITRATE_N 55555 // bps
7980
#define FDEV_N 50000 // Hz
8081
// Carson's rule: 2 x fm + 2 x fd = 55.555 + 2 x 50 = 155.555 kHz
81-
// assuming 10 ppm crystals gives max error of: 2 * 10 ppm * 868 = 17.36 kHz
82-
// => BW > 155.555 + 17.36 => 172.91 KHz
83-
#define RXBW_N 172910 //Hz
82+
// assuming 1 ppm crystals gives max error of: 2 * 1 ppm * 868 = 1.736 kHz
83+
// => BW > 155.555 + 1.736 => 157.291 kHz.
84+
// This results in 78.646 kHz on a single sideband.
85+
// #define RXBW_N 78646 //Hz
8486

8587
// high rate
8688
#define BITRATE_H 166667 // bps
8789
#define FDEV_H 41667 // Hz
8890
// Carson's rule: 2 x fm + 2 x fd = 166.667 + 2 x 41.667 = 250 kHz
89-
// assuming 10 ppm crystals gives max error of: 2 * 10 ppm * 868 = 17.36 kHz
90-
// => BW > 250 + 17.36 kHz => > 267.36 kHZ.
91-
#define RXBW_H 267360 //Hz
91+
// assuming 1 ppm crystals gives max error of: 2 * 1 ppm * 868 = 1.736 kHz
92+
// => BW > 250 + 1.736 kHz => 251.736 kHz.
93+
// This results in 125.868 kHz on a single sideband.
94+
// #define RXBW_H 125868 //Hz
9295

9396
#define LORA_T_SYMBOL_SF9_MS 4.096 // based on SF9 and 125k BW
9497
#define LORA_T_PREAMBE_SF9_MS (8 + 4.25) * LORA_T_SYMBOL_SF9_MS // assuming 8 symbols for now
@@ -125,6 +128,11 @@ static channel_id_t default_channel_id = {
125128

126129
static channel_id_t current_channel_id = EMPTY_CHANNEL_ID;
127130

131+
static uint32_t rx_bw_lo_rate;
132+
static uint32_t rx_bw_normal_rate;
133+
static uint32_t rx_bw_hi_rate;
134+
static bool rx_bw_changed = false;
135+
128136
static uint8_t gain_offset = 0;
129137

130138
/*
@@ -370,10 +378,12 @@ static void configure_eirp(eirp_t eirp)
370378
}
371379

372380
static void configure_channel(const channel_id_t* channel) {
373-
if(phy_radio_channel_ids_equal(&current_channel_id, channel)) {
381+
if(phy_radio_channel_ids_equal(&current_channel_id, channel) && !rx_bw_changed) {
374382
return;
375383
}
376384

385+
rx_bw_changed = false;
386+
377387
// configure modulation settings
378388
if(channel->channel_header.ch_class == PHY_CLASS_LO_RATE)
379389
{
@@ -382,7 +392,7 @@ static void configure_channel(const channel_id_t* channel) {
382392
hw_radio_set_tx_fdev(FDEV_L);
383393
else
384394
hw_radio_set_tx_fdev(0);
385-
hw_radio_set_rx_bw_hz(RXBW_L);
395+
hw_radio_set_rx_bw_hz(rx_bw_lo_rate);
386396
hw_radio_set_preamble_size(PREAMBLE_LOW_RATE_CLASS * 8);
387397
}
388398
else if(channel->channel_header.ch_class == PHY_CLASS_NORMAL_RATE)
@@ -392,7 +402,7 @@ static void configure_channel(const channel_id_t* channel) {
392402
hw_radio_set_tx_fdev(FDEV_N);
393403
else
394404
hw_radio_set_tx_fdev(0);
395-
hw_radio_set_rx_bw_hz(RXBW_N);
405+
hw_radio_set_rx_bw_hz(rx_bw_normal_rate);
396406
hw_radio_set_preamble_size(PREAMBLE_NORMAL_RATE_CLASS * 8);
397407
}
398408
else if(channel->channel_header.ch_class == PHY_CLASS_HI_RATE)
@@ -402,7 +412,7 @@ static void configure_channel(const channel_id_t* channel) {
402412
hw_radio_set_tx_fdev(FDEV_H);
403413
else
404414
hw_radio_set_tx_fdev(0);
405-
hw_radio_set_rx_bw_hz(RXBW_H);
415+
hw_radio_set_rx_bw_hz(rx_bw_hi_rate);
406416
hw_radio_set_preamble_size(PREAMBLE_HI_RATE_CLASS * 8);
407417
}
408418

@@ -449,8 +459,14 @@ void fact_settings_file_change_callback()
449459
d7ap_fs_read_file(D7A_FILE_FACTORY_SETTINGS_FILE_ID, 0, fact_settings, D7A_FILE_FACTORY_SETTINGS_SIZE);
450460

451461
gain_offset = (int8_t)fact_settings[0];
462+
rx_bw_lo_rate = __builtin_bswap32(*((uint32_t*)(fact_settings+1)));
463+
rx_bw_normal_rate = __builtin_bswap32(*((uint32_t*)(fact_settings+5)));
464+
rx_bw_hi_rate = __builtin_bswap32(*((uint32_t*)(fact_settings+9)));
465+
466+
DPRINT("rx bw low rate is %i, normal rate is %i, high rate is %i\n", rx_bw_lo_rate, rx_bw_normal_rate, rx_bw_hi_rate);
467+
DPRINT("gain offset set to %i\n", gain_offset);
452468

453-
DPRINT("gain set to %i\n", gain_offset);
469+
rx_bw_changed = true;
454470
}
455471

456472

0 commit comments

Comments
 (0)