1097 Commits

Author SHA1 Message Date
schneider
d8d3dc039d m0: reset M0 before starting it
The rad1o was not starting the M0 when powered up by inserting a USB
cable. Interestingly the M0 does start when toggling the power switch.

Resetting the M0 before starting it in `main()` solves this issue.
2022-10-26 20:03:39 +02:00
Michael Ossmann
5acd0cb99e set version to 2022.09.1+ 2022-10-24 15:14:00 -04:00
Michael Ossmann
b6acd66cfe set version to 2022.09.1
Starting with this release we will no longer use "unknown" as the
default software version string used in cases where the version cannot
be determined from context. Instead we commit the release version string
to git so that any software built from the tagged commit will have the
appropriate release version string. After the release we will commit a
post-release version string as the new default.

We will continue to use the commit hash as version string when the
software is built inside a git repository.
2022-09-29 05:20:39 -04:00
Michael Ossmann
7243db7d68 Merge pull request #1181 from greatscottgadgets/cleanup
pre-release clean-up and platform detection improvement
2022-09-27 13:19:52 -04:00
Martin Ling
1db39c0e61 Flush queues on control endpoint when a new SETUP is received.
On macOS 12.6 running libusb 1.0.26, the host was seen to sometimes
make an incomplete ClearFeature(ENDPOINT_HALT) request when
ClearPipeStallBothEnds was called from libusb_cancel_transfer.

The host would send the SETUP packet, and the firmware would
call usb_transfer_schedule_ack to acknowledge the upcoming IN
token. However, the host would then not send the IN token,
proceeding directly to the next SETUP.

Since an empty transfer was queued to schedule the ACK, the
firmware would leak one transfer from the free_transfers list.

After a few iterations of this, the firmware would run out of
free transfers and the next request would hang waiting for one.

Fix this by flushing the transfer queues for the control endpoint
when a new SETUP is received, since that token implicitly cancels
any previously ongoing request.
2022-09-27 09:45:43 +01:00
Michael Ossmann
1f9f597ea8 firmware: use python3 interpreter, not python 2022-09-26 16:46:04 -04:00
Michael Ossmann
f3d10dcc62 firmware: improve platform detection
Slow down the detection of pull-up and pull-down resistors to make
detection more reliable.
2022-09-26 16:44:38 -04:00
Michael Ossmann
b026c07000 firmware: fix duration of delay_us_at_mhz() 2022-09-26 16:43:43 -04:00
Michael Ossmann
04614c616a blinky: support platform detection 2022-09-23 15:08:22 -04:00
Michael Ossmann
06b9d7bee0 Clean up source code copyright notices. 2022-09-23 14:46:52 -04:00
Michael Ossmann
92b15f226e Merge pull request #1172 from martinling/amp-startup
Fix initial state of RF path GPIOs.
2022-09-21 15:19:04 -04:00
Martin Ling
3dd2e51d71 Initialise rf_path->switchctrl to SWITCHCTRL_SAFE.
This was previously never being initialised.
2022-09-21 12:22:58 +01:00
Martin Ling
cf34beebb0 Remove extra call to switchctrl_set and global switchctrl variable.
This call is not required since the GPIOs are already configured in
rf_path_pin_setup(). The global switchctrl is not used anywhere else.
2022-09-21 12:17:18 +01:00
Martin Ling
eec6963759 Initialise RF path GPIOs to safe settings.
Previously these calls were leaving the amplifiers on, since the
control settings passed were missing SWITCHCTRL_NO_TX_AMP_PWR and
SWITCHCTRL_NO_RX_AMP_PWR. Use the predefined SWITCHCTRL_SAFE here.

Also move these calls before setting the GPIO pins to output mode,
to avoid driving them to the wrong states briefly first.
2022-09-21 12:05:17 +01:00
Martin Ling
767db9f06c Don't start baseband streaming until TX buffer is first filled. 2022-09-20 11:13:25 +01:00
Michael Ossmann
e623c7aed7 Merge pull request #1103 from dizcza/master
fixed firmware manual build docs
2022-09-19 21:30:22 -04:00
Martin Ling
44511c6c3b Move RFFC5072 setup before enabling RF power. 2022-09-19 13:02:29 +01:00
Martin Ling
5d78302d97 Change default RFFC5072 register settings to disable antenna bias. 2022-09-19 13:02:01 +01:00
Martin Ling
6d57709000 Move delay after enabling RF power to rad1o-specific code. 2022-09-19 10:46:01 +01:00
Danylo Ulianych
a2c30a8896 Update firmware/README
Co-authored-by: Martin Ling <martin-github@earth.li>
2022-09-15 07:39:48 +03:00
Michael Ossmann
75e3137d55 Merge pull request #1155 from greatscottgadgets/platform-detect
Detect hardware platform at run-time.
2022-09-14 17:45:58 -04:00
Michael Ossmann
9329c5e44e Detect hardware platform at run-time.
Firmware now detects the hardware it is running on at startup and
refuses to run if it is compiled for the wrong platform. The board ID
returned by firmware to the host is now derived from run-time detection
rather than a compile-time value. A separate method to retrieve
compile-time supported platform is added.

On HackRF One, pin straps are checked to determine hardware revision.
This is informational to aid troubleshooting and does not affect any
function.
2022-09-14 07:08:47 -04:00
Michael Ossmann
2104291594 firmware: use consistent clock source
CLKOUT now switches to the active clock source whenever the internal
clocks change source. It previously did so only when (re)enabled.
2022-09-10 06:54:51 -04:00
grvvy
5d7b203058 operacake: disable the usage of time mode when a portapack is installed 2022-09-01 14:03:18 -06:00
Martin Ling
ba148ee047 Add a simpler way to check CLKIN status. 2022-08-05 09:37:38 +01:00
Martin Ling
c0d13de598 Add braces to all control statements without them. 2022-08-03 23:46:46 +01:00
Martin Ling
55bea828ea Add missing stdbool.h include to rom_iap.h.
Fixes a clang-tidy error.
2022-08-03 23:46:46 +01:00
Martin Ling
c3fdf402d7 Reformat all code to new clang-format standard. 2022-08-03 23:46:44 +01:00
Martin Ling
ebb9e43fde Move some trailing comments on long lines. 2022-08-03 23:42:55 +01:00
Martin Ling
b50aeb4082 fixup clang-format off 2022-08-03 23:34:28 +01:00
Martin Ling
dbcc46d221 Mark code sections to be left alone by clang-format. 2022-08-03 23:03:15 +01:00
Martin Ling
b4c828915a Use an empty block for empty while loops. 2022-08-03 23:03:15 +01:00
Martin Ling
6cd9ca9483 sgpio: Clean up comments. 2022-08-03 23:03:15 +01:00
Martin Ling
51b76d33a6 sgpio: Remove a redundant variable. 2022-08-03 23:03:15 +01:00
Martin Ling
efd5603c80 Reformat sct.h to avoid long lines. 2022-08-03 23:03:15 +01:00
Martin Ling
445253be1e usb_descriptor: Realign descriptor comments. 2022-08-03 23:03:15 +01:00
Martin Ling
a66492b8b7 rom_iap: Clean up comments and realign with spaces. 2022-08-03 23:03:15 +01:00
Martin Ling
1acc71bebf rf_path: Realign scu_pinmux calls. 2022-08-03 23:03:15 +01:00
Martin Ling
6b5193198b Realign GPIO assignments with spaces rather than tabs. 2022-08-03 23:03:15 +01:00
Martin Ling
3418f6e249 Use a #define for USB transfer size. 2022-07-25 10:54:07 +01:00
Martin Ling
a943610cd4 Simpify TX loop in the same way as RX loop. 2022-07-25 10:44:15 +01:00
Martin Ling
0175c2e84e Simplify rx_mode loop and prevent it stalling.
On rad1o, the UI update could block this loop from running for long
enough that it could stall in a state where neither of the conditions
was met.

Fix this by removing the 'phase' variable, in favour of a counter
tracking the number of bytes that have been scheduled for USB transfer.
Whenever there are enough bytes to schedule the next transfer, do so.

Meanwhile, the M0 count is prevented from wrapping around and clobbering
data not yet sent, because the M0 code monitors the m4_count variable
which is updated as each transfer completes.
2022-07-25 10:35:05 +01:00
Martin Ling
bc0fbc3184 Merge pull request #1072 from martinling/fix-stack-variables
Fix USB requests that were responding with data from the stack.
2022-06-13 23:03:20 +01:00
Martin Ling
405515d5b4 Implement NXP's recommended setup sequence for the PLL and M4 clock.
This follows the sequence described in:

UM10503 Rev 2.4 (Aug 2018), section 13.2.1.1, page 167
2022-06-13 16:49:45 +01:00
Martin Ling
273e6a1217 Add an accurate delay loop.
The existing 'delay' function is not calibrated to any specific measure
of time. Add a new function using a loop with a known cycle count, to
produce delays of a given duration at a given CPU clock speed.
2022-06-13 16:32:55 +01:00
dizcza
fc79b0ffb1 fixed firmware manual build docs 2022-06-05 11:18:48 +03:00
Veloman Yunkan
3157111d08 Bugfix in retuning rate
In sweep mode, frequency switching (retuning) must occur only
AFTER the requested number of samples has been received.
2022-04-13 18:36:12 +04:00
Martin Ling
077095451a Schedule ACK after CLEAR_FEATURE / ENDPOINT_HALT request. 2022-03-30 00:34:32 +01:00
Martin Ling
2fba08cf42 Reset endpoint specified in request, not the one it arrived on. 2022-03-29 23:40:08 +01:00
Martin Ling
84898a0bcb Implement USB CLEAR_FEATURE request for ENDPOINT_HALT.
From USB 2.0, section 9.4.5:

"For endpoints using data toggle, regardless of whether an endpoint has
the Halt feature set, a ClearFeature(ENDPOINT_HALT) request always
results in the data toggle being reinitialized to DATA0."
2022-03-29 14:11:00 +01:00