
我的思路是这样的,既然我开发的应用是仿造replay的,我只要在前面找到的几个代码的地方复制出一个副本,稍加修改(改名),然后把加出来的代码文件加入对应CMakeLists里就行。
我分了几步。
第一步,在portapack主界面上先增加了一个按钮,这个按钮暂时还是连到replay上。
第二步,对这个按钮就行修改,改图标(改图标还需要上网找图片,然后生成数据)。
第三步,开始改动界面上新增按钮背后对应的app界面,但是这个app还对应于原来的那个后台处理程序。
第四步,增加对应的后台处理程序,使得界面上的新增按钮的app有了完全独立的后台处理程序。
第一步:
打开ui_navigation.cpp,找到如下部分,按照注释更改。
SystemMenuView::SystemMenuView(NavigationView& nav) {
add_items({
{ "Play dead", ui::Color::red(), &bitmap_icon_playdead, [&nav](){ nav.push<PlayDeadView>(); } },
{ "Receivers", ui::Color::dark_cyan(), &bitmap_icon_receivers, [&nav](){ nav.push<ReceiversMenuView>(); } },
{ "Transmit", ui::Color::green(), &bitmap_icon_transmit, [&nav](){ nav.push<TransmittersMenuView>(); } },
{ "Capture", ui::Color::blue(), &bitmap_icon_capture, [&nav](){ nav.push<CaptureAppView>(); } },
{ "Replay", ui::Color::purple(), &bitmap_icon_replay, [&nav](){ nav.push<ReplayAppView>(); } },
{ "GPS Sim", ui::Color::white(), &bitmap_icon_replay, [&nav]() { nav.push<ReplayAppView>(); } },
//这一行是我们自己增加的,只改了名字和颜色
{ "Calls", ui::Color::yellow(), &bitmap_icon_closecall, [&nav](){ nav.push<SearchView>(); } },
{ "Scanner", ui::Color::orange(), &bitmap_icon_scanner, [&nav](){ nav.push<ScannerView>(); } },
{ "Utilities", ui::Color::light_grey(), &bitmap_icon_utilities, [&nav](){ nav.push<UtilitiesMenuView>(); } },
{ "Settings", ui::Color::cyan(), &bitmap_icon_setup, [&nav](){ nav.push<SettingsMenuView>(); } },
//{ "Debug", ui::Color::cyan(), nullptr, [&nav](){ nav.push<DebugMenuView>(); } },
{ "HackRF", ui::Color::cyan(), &bitmap_icon_hackrf, [this, &nav](){ hackrf_mode(nav); } },
{ "About", ui::Color::cyan(), nullptr, [&nav](){ nav.push<AboutView>(); } }
});
set_highlighted(1); // Startup selection is "Receivers"
}
原来的主界面:

改完了以后可以看到主界面是这样的:

第二步:
还是打开ui_navigation.cpp,根据注释找到对应位置更改。
SystemMenuView::SystemMenuView(NavigationView& nav) {
add_items({
{ "Play dead", ui::Color::red(), &bitmap_icon_playdead, [&nav](){ nav.push<PlayDeadView>(); } },
{ "Receivers", ui::Color::dark_cyan(), &bitmap_icon_receivers, [&nav](){ nav.push<ReceiversMenuView>(); } },
{ "Transmit", ui::Color::green(), &bitmap_icon_transmit, [&nav](){ nav.push<TransmittersMenuView>(); } },
{ "Capture", ui::Color::blue(), &bitmap_icon_capture, [&nav](){ nav.push<CaptureAppView>(); } },
{ "Replay", ui::Color::purple(), &bitmap_icon_replay, [&nav](){ nav.push<ReplayAppView>(); } },
{ "GPS Sim", ui::Color::white(), &bitmap_gps_sim, [&nav]()
{ nav.push< ReplayAppView >(); } },
//我们现在把图标从bitmap_icon_replay改为bitmap_gps_sim
{ "Calls", ui::Color::yellow(), &bitmap_icon_closecall, [&nav](){ nav.push<SearchView>(); } },
{ "Scanner", ui::Color::orange(), &bitmap_icon_scanner, [&nav](){ nav.push<ScannerView>(); } },
{ "Utilities", ui::Color::light_grey(), &bitmap_icon_utilities, [&nav](){ nav.push<UtilitiesMenuView>(); } },
{ "Settings", ui::Color::cyan(), &bitmap_icon_setup, [&nav](){ nav.push<SettingsMenuView>(); } },
//{ "Debug", ui::Color::cyan(), nullptr, [&nav](){ nav.push<DebugMenuView>(); } },
{ "HackRF", ui::Color::cyan(), &bitmap_icon_hackrf, [this, &nav](){ hackrf_mode(nav); } },
{ "About", ui::Color::cyan(), nullptr, [&nav](){ nav.push<AboutView>(); } }
});
set_highlighted(1); // Startup selection is "Receivers"
}
但是现在bitmap_gps_sim是没有的,我们如果现在编译会报错。我搜索了一下,被它替换的bitmap_icon_replay在bitmap.hpp中出现过,片段如下:
static constexpr uint8_t bitmap_icon_replay_data[] = {
0x00, 0x00,
0xC0, 0x07,
0xF0, 0x1F,
0x79, 0x3C,
0x1D, 0x70,
0x0F, 0x60,
0x07, 0xE0,
0x1F, 0xC0,
0x00, 0xC0,
0x00, 0xE0,
0x00, 0x60,
0x00, 0x70,
0x30, 0x3C,
0xE0, 0x0F,

最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



