mirror of
https://github.com/portapack-mayhem/mayhem-firmware.git
synced 2026-09-11 09:09:29 +00:00
Better hackrf board detection for the serial info command (#2967)
This commit is contained in:
@@ -118,11 +118,16 @@ set(CSRC
|
|||||||
usb_serial_endpoints.c
|
usb_serial_endpoints.c
|
||||||
usb_serial_device_to_host.c
|
usb_serial_device_to_host.c
|
||||||
i2c_device_to_host.c
|
i2c_device_to_host.c
|
||||||
|
hackrf_core_mini.c
|
||||||
|
${HACKRF_PATH}/firmware/common/adc.c
|
||||||
${HACKRF_PATH}/firmware/common/usb.c
|
${HACKRF_PATH}/firmware/common/usb.c
|
||||||
${HACKRF_PATH}/firmware/common/usb_queue.c
|
${HACKRF_PATH}/firmware/common/usb_queue.c
|
||||||
${HACKRF_PATH}/firmware/hackrf_usb/usb_device.c
|
${HACKRF_PATH}/firmware/hackrf_usb/usb_device.c
|
||||||
${HACKRF_PATH}/firmware/common/usb_request.c
|
${HACKRF_PATH}/firmware/common/usb_request.c
|
||||||
${HACKRF_PATH}/firmware/common/usb_standard_request.c
|
${HACKRF_PATH}/firmware/common/usb_standard_request.c
|
||||||
|
${HACKRF_PATH}/firmware/libopencm3/lib/lpc43xx/scu.c
|
||||||
|
${HACKRF_PATH}/firmware/common/gpio_lpc.c
|
||||||
|
${HACKRF_PATH}/firmware/common/platform_detect.c
|
||||||
${CHIBIOS}/os/various/chprintf.c
|
${CHIBIOS}/os/various/chprintf.c
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,56 @@
|
|||||||
|
#include "gpio_lpc.h"
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
LED1 = 0,
|
||||||
|
LED2 = 1,
|
||||||
|
LED3 = 2,
|
||||||
|
LED4 = 3,
|
||||||
|
} led_t;
|
||||||
|
|
||||||
|
/* GPIO Output PinMux */
|
||||||
|
static struct gpio_t gpio_led[] = {
|
||||||
|
GPIO(2, 1),
|
||||||
|
GPIO(2, 2),
|
||||||
|
GPIO(2, 8),
|
||||||
|
#ifdef RAD1O
|
||||||
|
GPIO(5, 26),
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
void delay(uint32_t duration) {
|
||||||
|
while (duration--) {
|
||||||
|
/* cannot be optimized out */
|
||||||
|
__asm__ volatile("nop");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void delay_us_at_mhz(uint32_t us, uint32_t mhz) {
|
||||||
|
/* overflow-safe multiply */
|
||||||
|
uint64_t cycles64 = (uint64_t)us * (uint64_t)mhz;
|
||||||
|
if (cycles64 > UINT32_MAX) {
|
||||||
|
cycles64 = UINT32_MAX;
|
||||||
|
}
|
||||||
|
delay((uint32_t)cycles64);
|
||||||
|
}
|
||||||
|
|
||||||
|
void led_on(const led_t led) {
|
||||||
|
gpio_set(&gpio_led[led]);
|
||||||
|
}
|
||||||
|
|
||||||
|
void led_off(const led_t led) {
|
||||||
|
gpio_clear(&gpio_led[led]);
|
||||||
|
}
|
||||||
|
|
||||||
|
void halt_and_flash(const uint32_t duration) {
|
||||||
|
/* blink LED1, LED2, and LED3 */
|
||||||
|
while (1) {
|
||||||
|
led_on(LED1);
|
||||||
|
led_on(LED2);
|
||||||
|
led_on(LED3);
|
||||||
|
delay(duration);
|
||||||
|
led_off(LED1);
|
||||||
|
led_off(LED2);
|
||||||
|
led_off(LED3);
|
||||||
|
delay(duration);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -32,6 +32,10 @@
|
|||||||
#include "chprintf.h"
|
#include "chprintf.h"
|
||||||
#include "portapack.hpp"
|
#include "portapack.hpp"
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
#include "platform_detect.h"
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Shell termination event source.
|
* @brief Shell termination event source.
|
||||||
*/
|
*/
|
||||||
@@ -65,8 +69,42 @@ static void list_commands(BaseSequentialStream* chp, const ShellCommand* scp) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const char* get_board_revision_string(board_rev_t rev) {
|
||||||
|
switch (rev) {
|
||||||
|
case BOARD_REV_HACKRF1_OLD:
|
||||||
|
return "HackRF R1-R5";
|
||||||
|
case BOARD_REV_HACKRF1_R6:
|
||||||
|
return "HackRF R6";
|
||||||
|
case BOARD_REV_HACKRF1_R7:
|
||||||
|
return "HackRF R7";
|
||||||
|
case BOARD_REV_HACKRF1_R8:
|
||||||
|
return "HackRF R8";
|
||||||
|
case BOARD_REV_HACKRF1_R9:
|
||||||
|
return "HackRF R9";
|
||||||
|
case BOARD_REV_HACKRF1_R10:
|
||||||
|
return "HackRF R10";
|
||||||
|
case BOARD_REV_GSG_HACKRF1_R6:
|
||||||
|
return "GSG HackRF R6";
|
||||||
|
case BOARD_REV_GSG_HACKRF1_R7:
|
||||||
|
return "GSG HackRF R7";
|
||||||
|
case BOARD_REV_GSG_HACKRF1_R8:
|
||||||
|
return "GSG HackRF R8";
|
||||||
|
case BOARD_REV_GSG_HACKRF1_R9:
|
||||||
|
return "GSG HackRF R9";
|
||||||
|
case BOARD_REV_GSG_HACKRF1_R10:
|
||||||
|
return "GSG HackRF R10";
|
||||||
|
case BOARD_REV_UNRECOGNIZED:
|
||||||
|
return "Unrecognized";
|
||||||
|
case BOARD_REV_UNDETECTED:
|
||||||
|
return "Undetected";
|
||||||
|
default:
|
||||||
|
return "Unknown";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void cmd_info(BaseSequentialStream* chp, int argc, char* argv[]) {
|
static void cmd_info(BaseSequentialStream* chp, int argc, char* argv[]) {
|
||||||
(void)argv;
|
(void)argv;
|
||||||
|
|
||||||
if (argc > 0) {
|
if (argc > 0) {
|
||||||
usage(chp, const_cast<char*>("info"));
|
usage(chp, const_cast<char*>("info"));
|
||||||
return;
|
return;
|
||||||
@@ -92,7 +130,11 @@ static void cmd_info(BaseSequentialStream* chp, int argc, char* argv[]) {
|
|||||||
#ifdef VERSION_STRING
|
#ifdef VERSION_STRING
|
||||||
chprintf(chp, "Mayhem Version: %s\r\n", VERSION_STRING);
|
chprintf(chp, "Mayhem Version: %s\r\n", VERSION_STRING);
|
||||||
#endif
|
#endif
|
||||||
chprintf(chp, "HackRF Board Rev: %s\r\n", hackrf_r9 ? "R9" : "R1-R8");
|
|
||||||
|
detect_hardware_platform();
|
||||||
|
board_rev_t revision = detected_revision();
|
||||||
|
const char* revision_string = get_board_revision_string(revision);
|
||||||
|
chprintf(chp, "HackRF Board Rev: %s\r\n", revision_string);
|
||||||
chprintf(chp, "Reference Source: %s\r\n", portapack::clock_manager.get_source().c_str());
|
chprintf(chp, "Reference Source: %s\r\n", portapack::clock_manager.get_source().c_str());
|
||||||
chprintf(chp, "Reference Freq: %s\r\n", portapack::clock_manager.get_freq().c_str());
|
chprintf(chp, "Reference Freq: %s\r\n", portapack::clock_manager.get_freq().c_str());
|
||||||
#ifdef __DATE__
|
#ifdef __DATE__
|
||||||
|
|||||||
Reference in New Issue
Block a user