Closed rpratt20 closed 10 months ago
I have fixed this and all works well. A couple minor fixes and a note for config.h file.
In file ax25.h the definition of ax25_packet_header can have a minor change to make char source_ssid a type uint8_t. The change aligns this definition with the definition of destination_ssid and also will then match the declaration of the uint16-t ax25_encode_packet_aprs function in file ax25.c. This does not change operation but cleans up the code.
Second change, in file ax25.c Line 92, change the handling of destination_ssid to read like the line in source_ssid. it should read: header->destination_ssid = (destination_ssid>= 'A' ? destination_ssid - 7 : destination_ssid);;
Finally, add a note in config.h to the APRS_RELAYS. //There can not be a blank space in the APRS_RELAYS. Only comma field seperation.
@rpratt20 Thanks for the bug report and fixes. To speed up applying the fix, could you create a pull request with the actual code changes?
Also, could you attach your full config.h file in a comment here (there is a way to attach downloadable files to these comments)?
That way I could see what causes the memory corruption.
I will try a pull request tonight. I’ve never done that. I think the major issue that brought the problem to light was a space in my config path. The coding code does not handle a space between the two path entries. Not a problem if entered correctly. Otherwise, I believe the one byte ssid field was running over memory. I think my change sets destination ssid to a single byte. I had a hard time getting it working because the fields not only were wrong but they changed order. Some attempts to fix also broke transmitter operation. I ran all night last night and have received on a couple of systems today transmitting on 144.39 with a dfm17 on power set to 30. I get about 3/8 mile in town with the dfm on my dash while driving. RandySent from my iPhoneOn Nov 29, 2023, at 14:01, Mikael Nousiainen @.***> wrote: @rpratt20 Thanks for the bug report and fixes. To speed up applying the fix, could you create a pull request with the actual code changes? Also, could you attach your full config.h file in a comment here (there is a way to attach downloadable files to these comments)? That way I could see what causes the memory corruption.
—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you were mentioned.Message ID: @.***>
Seems i can not connect a code file into this discussion. I have had to paste the contents of my config.h. Callsign was deleted. Yes the frequencies do work with both APRS and Horus V-4 alternating.
// Experimental support for Graw DFM-17 radiosondes added! Please test and report any issues! // WARNING: Using a DFM-17 as a primary flight tracker is NOT recommended yet! // NOTE: DFM-17 radiosondes require a GPS lock (and clear visibility to the sky) to calibrate its internal oscillator. // DFM-17 transmissions, especially APRS, may not decode correctly because of incorrect timing before the internal oscillator has been calibrated.
// Define radiosonde type. Remove the "//" comment to select either RS41 or DFM17. //#define RS41
// Enable semihosting to receive debug logs during development // See the README for details on how to set up debugging and debug logs with GDB // NOTE: Semihosting has to be disabled when the radiosonde is not connected to an STM32 programmer dongle, otherwise the firmware will not run. //#define SEMIHOSTING_ENABLE //#define LOGGING_ENABLE
/**
// Set the tracker amateur radio call sign here
// Disabling LEDs will save power // Red LED: Lit during initialization and transmit. // Green LED: Blinking fast when there is no GPS fix. Blinking slowly when the GPS has a fix.
// Disable LEDs above the specified altitude (in meters) to save power. Set to zero to disable this behavior.
// Allow powering off the sonde by pressing the button for over a second (when the sonde is not transmitting)
// Number of character pairs to include in locator
// Delay after transmission for modes that do not use time synchronization. Zero delay allows continuous transmit mode for Horus V1 and V2.
// Threshold for time-synchronized modes regarding how far from scheduled transmission time the transmission is still allowed
// Number of leap seconds to add to the raw GPS time reported by the GPS chip (see https://timetoolsltd.com/gps/what-is-gps-time/ for more info) // This value is used by default, but if the received GPS data contains indication about leap seconds, that one is used instead.
// Enable this setting to require 3D fix (altitude required, enable for airborne use), otherwise 2D fix is enough
// Enable power-saving features of the GPS chip to save power. // This option should be safe to enable, as it enters a selective power saving mode. // If the GPS chip loses fix, it will enter a higher power state automatically. // Note that power saving mode is only enabled after the GPS chip has acquired good GPS fix for the first time. // It is not necessary to use power saving on short flights (e.g. less than 6 hours). // Based on measurements Mark VK5QI, enabling this reduces power consumption by about 30-40 mA (~50%) to around 30-50 mA, // where the consumption is 70-90 mA when power saving is not enabled and any radio transmitters are idle. // See the README for details about power consumption.
// Enable NMEA output from GPS via external serial port. This disables use of I²C bus (Si5351 and sensors) because the pins are shared.
/**
// Define the I²C bus clock speed in Hz. // The default of 100000 (= 100 kHz) should be used with the Si5351 clock generator to allow fast frequency changes. // Note that some BMP280 sensors may require decreasing the clock speed to 10000 (= 10 kHz)
// Enable use of an externally connected I²C BMP280/BME280 atmospheric sensor // NOTE: Only BME280 sensors will report humidity. For BMP280 humidity readings will be zero.
// BMP280/BME280 I²C device address is usually 0x76 or 0x77.
// Enable use of an externally connected I²C RadSens radiation sensor
// Expected RadSens chip ID to verify initialization of the sensor, default is 0x7D.
// RadSens I²C device address, default is 0x66.
// Uncomment to set RadSens sensor sensitivity (imp/MKR). The default value is 105 imp/MKR. // The value is stored in the non-volatile memory of the microcontroller.
// Enable use of an externally connected I²C Si5351 clock generator chip for HF radio transmissions
// Enable pulse counter via expansion header pin for use with devices like Geiger counters. // This disables the external I²C bus and the serial port as the expansion header pin 2 (I2C2_SDA (PB11) / UART3 RX) is used for pulse input. // Also changes the Horus 4FSK V2 data format and adds a custom data field for pulse count. // The pulse count will wrap to zero at 65535 as it is stored as a 16-bit unsigned integer value.
// Pulse counter pin modes
// Enable the internal pull-up or pull-down resistor on expansion header pin 2 (I2C2_SDA (PB11) / UART3 RX) // This is necessary if the pulse counter needs to count pulses where the pin is pulled low (ground) or high (VCC) during the pulse. // Set to "floating" if the circuit that generates the pulses already has a pull-up or a pull-down resistor.
// Pulse counter interrupt edges
// Set the edge of the pulse where the interrupt is triggered: falling or rising.
/**
// Si4032 transmit power: 0..7 // 0 = -1dBm, 1 = 2dBm, 2 = 5dBm (~3 mW), 3 = 8dBm (~6 mW), 4 = 11dBm (~12 mW), 5 = 14dBm (25 mW), 6 = 17dBm (50 mW), 7 = 20dBm (100 mW) // This defaults to 5 (14 dBm, 25 mW), which is a good setting for Horus 4FSK transmissions and it saves power. // For APRS usage, you might want to use maximum power setting of 7 (20 dBm, 100 mW). Note that this setting reduces battery life. // See the README for details about power consumption.
// Which modes to transmit using the built-in Si4032 transmitter chip // The COUNT settings define the number of times that each type of transmission is repeated
// Continuous transmit mode can be enabled for either Horus V1 or V2, but not both. This disables all other transmission modes. // The continuous mode transmits Horus 4FSK preamble between transmissions // to allow Horus receivers to keep frequency synchronization at all times, which improves reception.
// Transmit frequencies for the Si4063 transmitter modes
// Use a frequency offset to place FSK tones slightly above the defined frequency for SSB reception
/**
// Si4063 transmit power: 0..127 // TODO: Document Si4063 transmit power levels
// Which modes to transmit using the built-in Si4063 transmitter chip // The COUNT settings define the number of times that each type of transmission is repeated
// Continuous transmit mode can be enabled for either Horus V1 or V2, but not both. This disables all other transmission modes. // The continuous mode transmits Horus 4FSK preamble between transmissions // to allow Horus receivers to keep frequency synchronization at all times, which improves reception.
// Transmit frequencies for the Si4063 transmitter modes
// Use a frequency offset to place FSK tones slightly above the defined frequency for SSB reception
/**
// Si5351 transmit power: 0..3 // Si5351 drive strength: 0 = 2mA, 1 = 4mA, 2 = 6mA, 3 = 8mA
// Which modes to transmit using an externally connected Si5351 chip in the I²C bus // The COUNT settings define the number of times that each type of transmission is repeated
// Transmit frequencies for the Si5351 transmitter modes
/**
// See APRS symbol table documentation in: http://www.aprs.org/symbols/symbolsX.txt
//#define APRS_DESTINATION "APRS??"
// Generate an APRS weather report instead of a position report. This will override the APRS symbol with the weather station symbol.
// Schedule transmission every N seconds, counting from beginning of an hour (based on GPS time). Set to zero to disable time sync. // See the README file for more detailed documentation about time sync and its offset setting
// Delay transmission for an N second offset, counting from the scheduled time set with TIME_SYNC_SECONDS.
/**
//#define HORUS_FREQUENCY_OFFSET_SI4063 115
/**
// NOTE: Horus 4FSK V1 mode is deprecated in favor of Horus 4FSK V2 mode. All new Horus 4FSK payload IDs are allocated for V2 mode. // NOTE: Payload ID 0 (4FSKTEST) is for testing purposes only, and should not be used on an actual flight. // Please request a new payload ID in GitHub according to the instructions at: https://github.com/projecthorus/horusdemodlib/wiki#how-do-i-transmit-it
// Schedule transmission every N seconds, counting from beginning of an hour (based on GPS time). Set to zero to disable time sync. // See the README file for more detailed documentation about time sync and its offset setting
// Delay transmission for an N second offset, counting from the scheduled time set with TIME_SYNC_SECONDS.
/**
// NOTE: Payload ID 256 (4FSKTEST-V2) is for testing purposes only, and should not be used on an actual flight. // Please request a new payload ID in GitHub according to the instructions at: https://github.com/projecthorus/horusdemodlib/wiki#how-do-i-transmit-it
// Schedule transmission every N seconds, counting from beginning of an hour (based on GPS time). Set to zero to disable time sync. // See the README file for more detailed documentation about time sync and its offset setting
// Delay transmission for an N second offset, counting from the scheduled time set with TIME_SYNC_SECONDS.
/**
// CW speed in WPM, range 5 - 40
// Schedule transmission every N seconds, counting from beginning of an hour (based on GPS time). Set to zero to disable time sync. // See the README file for more detailed documentation about time sync and its offset setting
// Delay transmission for an N second offset, counting from the scheduled time set with TIME_SYNC_SECONDS.
/**
// Pip speed is defined as CW WPM, range 5 - 40
// Schedule transmission every N seconds, counting from beginning of an hour (based on GPS time). Set to zero to disable time sync. // See the README file for more detailed documentation about time sync and its offset setting
// Delay transmission for an N second offset, counting from the scheduled time set with TIME_SYNC_SECONDS.
/**
// Schedule transmission every N seconds, counting from beginning of an hour (based on GPS time). Set to zero to disable time sync. // See the README file for more detailed documentation about time sync and its offset setting
// Delay transmission for an N second offset, counting from the scheduled time set with TIME_SYNC_SECONDS.
/**
// Schedule transmission every N seconds, counting from beginning of an hour (based on GPS time). Set to zero to disable time sync. // See the README file for more detailed documentation about time sync and its offset setting
// Delay transmission for an N second offset, counting from the scheduled time set with TIME_SYNC_SECONDS.
/**
// Schedule transmission every 15 seconds, counting from beginning of an hour (based on GPS time). Set to zero to disable time sync.
// Delay transmission for 1 second after the scheduled time.
// Schedule transmission every N seconds, counting from beginning of an hour (based on GPS time). Set to zero to disable time sync. // See the README file for more detailed documentation about time sync and its offset setting
// Delay transmission for an N second offset, counting from the scheduled time set with TIME_SYNC_SECONDS.
// Schedule transmission every N seconds, counting from beginning of an hour (based on GPS time). Set to zero to disable time sync. // See the README file for more detailed documentation about time sync and its offset setting
// Delay transmission for an N second offset, counting from the scheduled time set with TIME_SYNC_SECONDS.
// Schedule transmission every N seconds, counting from beginning of an hour (based on GPS time). Set to zero to disable time sync. // See the README file for more detailed documentation about time sync and its offset setting
// Delay transmission for an N second offset, counting from the scheduled time set with TIME_SYNC_SECONDS.
@rpratt20 I believe this was fixed by your code changes in #77, closing. Thanks!
The address fields and the routing fields in the packet header are transmitted in a mixed order. Expect: [sender callsign]>[to callsign],[WIDE1-1],[WIDE2-2],:
TRANSMITTED ORDER: [WIDE2]>[WIDE1-1],1:
Looks as sender callsign is replaced with part of second route. To callsign replaced with first route. Both sender and destination data are missing but the routing fields are missing from the packet. I don't see routing declared in ax25 header file so memory pointers likely address incorrect area.