mirror of
https://github.com/portapack-mayhem/mayhem-firmware.git
synced 2025-03-01 09:07:20 +00:00
Change M4 loader to use image tags.
Also finish moving HackRF binary to tagged image region.
This commit is contained in:
parent
0e62876578
commit
97ba19af24
@ -36,7 +36,7 @@ add_subdirectory(bootstrap)
|
|||||||
|
|
||||||
add_custom_target(
|
add_custom_target(
|
||||||
${PROJECT_NAME}.bin
|
${PROJECT_NAME}.bin
|
||||||
COMMAND ${MAKE_SPI_IMAGE} ${bootstrap_BINARY_DIR}/bootstrap.bin ${HACKRF_FIRMWARE_IMAGE} ${baseband_BINARY_DIR}/baseband.img ${application_BINARY_DIR}/application.bin ${PROJECT_NAME}.bin
|
COMMAND ${MAKE_SPI_IMAGE} ${bootstrap_BINARY_DIR}/bootstrap.bin ${baseband_BINARY_DIR}/baseband.img ${application_BINARY_DIR}/application.bin ${PROJECT_NAME}.bin
|
||||||
DEPENDS bootstrap.bin baseband.img application.bin
|
DEPENDS bootstrap.bin baseband.img application.bin
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -286,7 +286,7 @@ void AISRecentEntryDetailView::set_entry(const AISRecentEntry& entry) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
AISAppView::AISAppView(NavigationView&) {
|
AISAppView::AISAppView(NavigationView&) {
|
||||||
baseband::run_image(portapack::spi_flash::baseband);
|
baseband::run_image(portapack::spi_flash::image_tag_ais);
|
||||||
|
|
||||||
add_children({ {
|
add_children({ {
|
||||||
&label_channel,
|
&label_channel,
|
||||||
|
@ -79,8 +79,6 @@ NBFMOptionsView::NBFMOptionsView(
|
|||||||
AnalogAudioView::AnalogAudioView(
|
AnalogAudioView::AnalogAudioView(
|
||||||
NavigationView& nav
|
NavigationView& nav
|
||||||
) {
|
) {
|
||||||
baseband::run_image(portapack::spi_flash::baseband);
|
|
||||||
|
|
||||||
add_children({ {
|
add_children({ {
|
||||||
&rssi,
|
&rssi,
|
||||||
&channel,
|
&channel,
|
||||||
@ -273,6 +271,18 @@ void AnalogAudioView::update_modulation(const ReceiverModel::Mode modulation) {
|
|||||||
audio::output::mute();
|
audio::output::mute();
|
||||||
record_view.stop();
|
record_view.stop();
|
||||||
|
|
||||||
|
portapack::spi_flash::image_tag_t image_tag;
|
||||||
|
switch(modulation) {
|
||||||
|
case ReceiverModel::Mode::AMAudio: image_tag = portapack::spi_flash::image_tag_am_audio; break;
|
||||||
|
case ReceiverModel::Mode::NarrowbandFMAudio: image_tag = portapack::spi_flash::image_tag_nfm_audio; break;
|
||||||
|
case ReceiverModel::Mode::WidebandFMAudio: image_tag = portapack::spi_flash::image_tag_wfm_audio; break;
|
||||||
|
case ReceiverModel::Mode::SpectrumAnalysis: image_tag = portapack::spi_flash::image_tag_wideband_spectrum; break;
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
baseband::run_image(image_tag);
|
||||||
|
|
||||||
const auto is_wideband_spectrum_mode = (modulation == ReceiverModel::Mode::SpectrumAnalysis);
|
const auto is_wideband_spectrum_mode = (modulation == ReceiverModel::Mode::SpectrumAnalysis);
|
||||||
receiver_model.set_baseband_configuration({
|
receiver_model.set_baseband_configuration({
|
||||||
.mode = toUType(modulation),
|
.mode = toUType(modulation),
|
||||||
|
@ -90,8 +90,8 @@ void stop() {
|
|||||||
send_message(&message);
|
send_message(&message);
|
||||||
}
|
}
|
||||||
|
|
||||||
void run_image(const portapack::spi_flash::region_t image_region) {
|
void run_image(const portapack::spi_flash::image_tag_t image_tag) {
|
||||||
m4_init(image_region, portapack::memory::map::m4_code);
|
m4_init(image_tag, portapack::memory::map::m4_code);
|
||||||
|
|
||||||
creg::m4txevent::enable();
|
creg::m4txevent::enable();
|
||||||
}
|
}
|
||||||
|
@ -55,7 +55,7 @@ struct WFMConfig {
|
|||||||
void start(BasebandConfiguration configuration);
|
void start(BasebandConfiguration configuration);
|
||||||
void stop();
|
void stop();
|
||||||
|
|
||||||
void run_image(const portapack::spi_flash::region_t image_region);
|
void run_image(const portapack::spi_flash::image_tag_t image_tag);
|
||||||
void shutdown();
|
void shutdown();
|
||||||
|
|
||||||
void spectrum_streaming_start();
|
void spectrum_streaming_start();
|
||||||
|
@ -32,7 +32,7 @@ using namespace portapack;
|
|||||||
namespace ui {
|
namespace ui {
|
||||||
|
|
||||||
CaptureAppView::CaptureAppView(NavigationView& nav) {
|
CaptureAppView::CaptureAppView(NavigationView& nav) {
|
||||||
baseband::run_image(portapack::spi_flash::baseband);
|
baseband::run_image(portapack::spi_flash::image_tag_capture);
|
||||||
|
|
||||||
add_children({ {
|
add_children({ {
|
||||||
&rssi,
|
&rssi,
|
||||||
|
@ -38,9 +38,12 @@ using namespace lpc43xx;
|
|||||||
* I suppose I could force M4MEMMAP to an invalid memory reason which would
|
* I suppose I could force M4MEMMAP to an invalid memory reason which would
|
||||||
* cause an exception and effectively halt the M4. But that feels gross.
|
* cause an exception and effectively halt the M4. But that feels gross.
|
||||||
*/
|
*/
|
||||||
void m4_init(const portapack::spi_flash::region_t from, const portapack::memory::region_t to) {
|
void m4_init(const portapack::spi_flash::image_tag_t image_tag, const portapack::memory::region_t to) {
|
||||||
|
const portapack::spi_flash::chunk_t* chunk = reinterpret_cast<const portapack::spi_flash::chunk_t*>(portapack::spi_flash::images.base());
|
||||||
|
while(chunk->tag) {
|
||||||
|
if( chunk->tag == image_tag ) {
|
||||||
/* Initialize M4 code RAM */
|
/* Initialize M4 code RAM */
|
||||||
std::memcpy(reinterpret_cast<void*>(to.base()), from.base(), from.size);
|
std::memcpy(reinterpret_cast<void*>(to.base()), &chunk->data[0], chunk->length);
|
||||||
|
|
||||||
/* M4 core is assumed to be sleeping with interrupts off, so we can mess
|
/* M4 core is assumed to be sleeping with interrupts off, so we can mess
|
||||||
* with its address space and RAM without concern.
|
* with its address space and RAM without concern.
|
||||||
@ -49,6 +52,13 @@ void m4_init(const portapack::spi_flash::region_t from, const portapack::memory:
|
|||||||
|
|
||||||
/* Reset M4 core */
|
/* Reset M4 core */
|
||||||
LPC_RGU->RESET_CTRL[0] = (1 << 13);
|
LPC_RGU->RESET_CTRL[0] = (1 << 13);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
chunk = chunk->next();
|
||||||
|
}
|
||||||
|
|
||||||
|
chDbgPanic("NoImg");
|
||||||
}
|
}
|
||||||
|
|
||||||
void m4_request_shutdown() {
|
void m4_request_shutdown() {
|
||||||
|
@ -27,7 +27,7 @@
|
|||||||
#include "memory_map.hpp"
|
#include "memory_map.hpp"
|
||||||
#include "spi_image.hpp"
|
#include "spi_image.hpp"
|
||||||
|
|
||||||
void m4_init(const portapack::spi_flash::region_t from, const portapack::memory::region_t to);
|
void m4_init(const portapack::spi_flash::image_tag_t image_tag, const portapack::memory::region_t to);
|
||||||
void m4_request_shutdown();
|
void m4_request_shutdown();
|
||||||
|
|
||||||
void m0_halt();
|
void m0_halt();
|
||||||
|
@ -121,7 +121,7 @@ void RecentEntriesView<ERTRecentEntries>::draw(
|
|||||||
}
|
}
|
||||||
|
|
||||||
ERTAppView::ERTAppView(NavigationView&) {
|
ERTAppView::ERTAppView(NavigationView&) {
|
||||||
baseband::run_image(portapack::spi_flash::baseband);
|
baseband::run_image(portapack::spi_flash::image_tag_ert);
|
||||||
|
|
||||||
add_children({ {
|
add_children({ {
|
||||||
&recent_entries_view,
|
&recent_entries_view,
|
||||||
|
@ -91,7 +91,7 @@ int main(void) {
|
|||||||
sdcStop(&SDCD1);
|
sdcStop(&SDCD1);
|
||||||
|
|
||||||
portapack::shutdown();
|
portapack::shutdown();
|
||||||
m4_init(portapack::spi_flash::hackrf, portapack::memory::map::m4_code_hackrf);
|
m4_init(portapack::spi_flash::image_tag_hackrf, portapack::memory::map::m4_code_hackrf);
|
||||||
m0_halt();
|
m0_halt();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -164,7 +164,7 @@ void RecentEntriesView<TPMSRecentEntries>::draw(
|
|||||||
}
|
}
|
||||||
|
|
||||||
TPMSAppView::TPMSAppView(NavigationView&) {
|
TPMSAppView::TPMSAppView(NavigationView&) {
|
||||||
baseband::run_image(portapack::spi_flash::baseband);
|
baseband::run_image(portapack::spi_flash::image_tag_tpms);
|
||||||
|
|
||||||
add_children({ {
|
add_children({ {
|
||||||
&rssi,
|
&rssi,
|
||||||
|
@ -96,14 +96,9 @@ constexpr region_t bootstrap {
|
|||||||
.size = 0x10000,
|
.size = 0x10000,
|
||||||
};
|
};
|
||||||
|
|
||||||
constexpr region_t hackrf {
|
constexpr region_t images {
|
||||||
.offset = 0x10000,
|
.offset = 0x10000,
|
||||||
.size = 0x8000,
|
.size = 0x30000,
|
||||||
};
|
|
||||||
|
|
||||||
constexpr region_t baseband {
|
|
||||||
.offset = 0x20000,
|
|
||||||
.size = 0x8000,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
constexpr region_t application {
|
constexpr region_t application {
|
||||||
|
@ -26,7 +26,7 @@ import sys
|
|||||||
usage_message = """
|
usage_message = """
|
||||||
PortaPack SPI flash image generator
|
PortaPack SPI flash image generator
|
||||||
|
|
||||||
Usage: <command> <bootstrap_path> <hackrf_path> <baseband_path> <application_path> <output_path>
|
Usage: <command> <bootstrap_path> <baseband_path> <application_path> <output_path>
|
||||||
Where paths refer to the .bin files for each component project.
|
Where paths refer to the .bin files for each component project.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@ -36,25 +36,19 @@ def read_image(path):
|
|||||||
f.close()
|
f.close()
|
||||||
return data
|
return data
|
||||||
|
|
||||||
def read_image_from_dfu(path):
|
|
||||||
data = read_image(path)
|
|
||||||
# Strip DFU header from file to get binary image.
|
|
||||||
return data[16:]
|
|
||||||
|
|
||||||
def write_image(data, path):
|
def write_image(data, path):
|
||||||
f = open(path, 'wb')
|
f = open(path, 'wb')
|
||||||
f.write(data)
|
f.write(data)
|
||||||
f.close()
|
f.close()
|
||||||
|
|
||||||
if len(sys.argv) != 6:
|
if len(sys.argv) != 5:
|
||||||
print(usage_message)
|
print(usage_message)
|
||||||
sys.exit(-1)
|
sys.exit(-1)
|
||||||
|
|
||||||
bootstrap_image = read_image(sys.argv[1])
|
bootstrap_image = read_image(sys.argv[1])
|
||||||
hackrf_image = read_image_from_dfu(sys.argv[2])
|
baseband_image = read_image(sys.argv[2])
|
||||||
baseband_image = read_image(sys.argv[3])
|
application_image = read_image(sys.argv[3])
|
||||||
application_image = read_image(sys.argv[4])
|
output_path = sys.argv[4]
|
||||||
output_path = sys.argv[5]
|
|
||||||
|
|
||||||
spi_size = 1048576
|
spi_size = 1048576
|
||||||
|
|
||||||
@ -64,15 +58,10 @@ images = (
|
|||||||
'data': bootstrap_image,
|
'data': bootstrap_image,
|
||||||
'size': 0x10000,
|
'size': 0x10000,
|
||||||
},
|
},
|
||||||
{
|
|
||||||
'name': 'hackrf',
|
|
||||||
'data': hackrf_image,
|
|
||||||
'size': 0x10000,
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
'name': 'baseband',
|
'name': 'baseband',
|
||||||
'data': baseband_image,
|
'data': baseband_image,
|
||||||
'size': 0x20000,
|
'size': 0x30000,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'name': 'application',
|
'name': 'application',
|
||||||
|
Loading…
x
Reference in New Issue
Block a user