- added channel contents and meta files to build the HBL channel (big thanks to cathor and Maschell for their work on the artwork, boot sound and boot video. Every part of it is created with open source software.)

- added Makefile target to build official HBL channel
- fixed issue when launching system menu from homebrew applications
- adapted README to include proper links for portlibs

NOTE:
To build the HBL channel it is necessary to encrypt the channel with the Wii U common key for the Wii U to be able to decrypt it. Therefore a full channel release can not be distributed and everyone has to build it from sources. The key has to be saved in a file with the name "encryptKeyWith" in string/ascii format (not binary) on the root of the HBL source path. Once that is done the command "make install_channel" can be used to build the channel files (java is required for that process). To install the output "install_channel" and run the HBL channel a signature check patched firmware is necessary such as iosuhax. Big thanks to the developer of NUSPacker at this point ;).

Some homebrews will not work properly as they depend on the launcher title ID to be Mii Maker (e.g. ddd). These homebrews need to be adapted by their developers to accept the HBL title id 00050000-13374842. Additionally HBL provides much more access rights than Mii Maker does. Therefore several applications such as wupinstaller can be simplified because a launch of other titles is not necessary anymore.
This commit is contained in:
dimok789 2016-11-16 00:44:58 +01:00
parent e5026ccb54
commit 9bf14c87ab
15 changed files with 293 additions and 7 deletions

6
.gitignore vendored
View File

@ -15,3 +15,9 @@
/*.rpx
/sd_loader/sd_loader.h
/sd_loader/*.bin
/tmp
/install_channel
/output
/encryptKeyWith
/NUSPacker.jar
/fst.bin

View File

@ -150,11 +150,26 @@ $(BUILD):
@$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile
#---------------------------------------------------------------------------------
clean:
clean: clean_channel
@echo clean ...
@rm -fr $(BUILD) $(OUTPUT).elf $(OUTPUT).bin $(BUILD_DBG).elf $(OUTPUT).rpx
@$(MAKE) -C sd_loader clean
#---------------------------------------------------------------------------------
install_channel: $(BUILD) NUSPacker.jar encryptKeyWith
@cp $(OUTPUT).rpx channel/code/
java -jar NUSPacker.jar -in "channel" -out "install_channel"
NUSPacker.jar:
wget https://bitbucket.org/timogus/nuspacker/downloads/NUSPacker.jar
encryptKeyWith:
@echo "Missing common key file \"encryptKeyWith\"! Insert the common key as string into \"encryptKeyWith\" file in the HBL Makefile path!"
@exit 1
clean_channel:
@rm -fr install_channel NUSPacker.jar fst.bin output tmp
#---------------------------------------------------------------------------------
else

View File

@ -30,7 +30,7 @@ The apps that will be listed are should be in the following path /wiiu/apps/home
#### Building the Homebrew Launcher
To build the main application devkitPPC is required as well as some additionally libraries. If not yet done export the path of devkitPPC and devkitPro to the evironment variables DEVKITPRO and DEVKITPPC. Additionally you will need to include the [libogc](https://github.com/dimok789/homebrew_launcher/releases/download/v1.0/libogc.7z) and [portlibs](https://github.com/dimok789/homebrew_launcher/releases/download/v1.0/portlibs.7z) packages in your devkitPro path.
To build the main application devkitPPC is required as well as some additionally libraries. If not yet done export the path of devkitPPC and devkitPro to the evironment variables DEVKITPRO and DEVKITPPC. Additionally you will need to include the [portlibs](https://github.com/dimok789/homebrew_launcher/releases/download/v1.3/portlibs.zip) packages in your devkitPro path.
All remaining is to enter the main application path and enter "make". You should get a homebrew_launcher.elf and a homebrew__launcher_dbg.elf in the main path.
@ -59,3 +59,15 @@ Here is a XML example:
#### Icon PNG
The icon.png has to be of the resolution 256 x 96 and can be placed in the same path as the homebrew ELF file. This file is optional and shows an icon for the homebrew inside the homebrew launcher.
### Credits
* Dimok
* many contributors with their pull requests
##### WUT RPX toolchain which is used to build RPX version of HBL
* exjam
* shinyquagsire23
* several more contributors
##### HBL channel artwork / boot sound and video
* cathor
* Maschell

11
channel/code/app.xml Normal file
View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<app type="complex" access="777">
<version type="unsignedInt" length="4">1</version>
<os_version type="hexBinary" length="8">000500101000400A</os_version>
<title_id type="hexBinary" length="8">0005000013374842</title_id>
<title_version type="hexBinary" length="2">0000</title_version>
<sdk_version type="unsignedInt" length="4">20811</sdk_version>
<app_type type="hexBinary" length="4">80000000</app_type>
<group_id type="hexBinary" length="4">000003748</group_id>
<os_mask type="hexBinary" length="32">0000000000000000000000000000000000000000000000000000000000000000</os_mask>
</app>

97
channel/code/cos.xml Normal file
View File

@ -0,0 +1,97 @@
<?xml version="1.0" encoding="utf-8"?>
<app type="complex" access="777">
<version type="unsignedInt" length="4">1</version>
<cmdFlags type="unsignedInt" length="4">0</cmdFlags>
<argstr type="string" length="4096">homebrew_launcher.rpx</argstr>
<avail_size type="hexBinary" length="4">00000000</avail_size>
<codegen_size type="hexBinary" length="4">00000000</codegen_size>
<codegen_core type="hexBinary" length="4">00000001</codegen_core>
<max_size type="hexBinary" length="4">40000000</max_size>
<max_codesize type="hexBinary" length="4">01000000</max_codesize>
<permissions type="complex">
<p0 type="complex">
<group type="unsignedInt" length="4">1</group>
<mask type="hexBinary" length="8">FFFFFFFFFFFFFFFF</mask>
</p0>
<!--BSP-->
<p1 type="complex">
<group type="unsignedInt" length="4">3</group>
<mask type="hexBinary" length="8">FFFFFFFFFFFFFFFF</mask>
</p1>
<!--DK -->
<p2 type="complex">
<group type="unsignedInt" length="4">9</group>
<mask type="hexBinary" length="8">FFFFFFFFFFFFFFFF</mask>
</p2>
<!--USB CLS DRV-->
<p3 type="complex">
<group type="unsignedInt" length="4">12</group>
<mask type="hexBinary" length="8">FFFFFFFFFFFFFFFF</mask>
</p3>
<!--UHS-->
<p4 type="complex">
<group type="unsignedInt" length="4">11</group>
<mask type="hexBinary" length="8">FFFFFFFFFFFFFFFF</mask>
</p4>
<!--FS -->
<p5 type="complex">
<group type="unsignedInt" length="4">13</group>
<mask type="hexBinary" length="8">FFFFFFFFFFFFFFFF</mask>
</p5>
<!--MCP-->
<p6 type="complex">
<group type="unsignedInt" length="4">14</group>
<mask type="hexBinary" length="8">FFFFFFFFFFFFFFFF</mask>
</p6>
<!--NIM-->
<p7 type="complex">
<group type="unsignedInt" length="4">15</group>
<mask type="hexBinary" length="8">FFFFFFFFFFFFFFFF</mask>
</p7>
<!--ACT (account)-->
<p8 type="complex">
<group type="unsignedInt" length="4">16</group>
<mask type="hexBinary" length="8">FFFFFFFFFFFFFFFF</mask>
</p8>
<!--FPD-->
<p9 type="complex">
<group type="unsignedInt" length="4">17</group>
<mask type="hexBinary" length="8">FFFFFFFFFFFFFFFF</mask>
</p9>
<!--BOSS-->
<p10 type="complex">
<group type="unsignedInt" length="4">18</group>
<mask type="hexBinary" length="8">FFFFFFFFFFFFFFFF</mask>
</p10>
<!--ACP-->
<p11 type="complex">
<group type="unsignedInt" length="4">19</group>
<mask type="hexBinary" length="8">FFFFFFFFFFFFFFFF</mask>
</p11>
<!--PDM-->
<p12 type="complex">
<group type="unsignedInt" length="4">20</group>
<mask type="hexBinary" length="8">FFFFFFFFFFFFFFFF</mask>
</p12>
<!--AC-->
<p13 type="complex">
<group type="unsignedInt" length="4">21</group>
<mask type="hexBinary" length="8">FFFFFFFFFFFFFFFF</mask>
</p13>
<!--NDM-->
<p14 type="complex">
<group type="unsignedInt" length="4">22</group>
<mask type="hexBinary" length="8">FFFFFFFFFFFFFFFF</mask>
</p14>
<!--NSEC-->
</permissions>
<default_stack0_size type="hexBinary" length="4">00000000</default_stack0_size>
<default_stack1_size type="hexBinary" length="4">00000000</default_stack1_size>
<default_stack2_size type="hexBinary" length="4">00000000</default_stack2_size>
<default_redzone0_size type="hexBinary" length="4">00000000</default_redzone0_size>
<default_redzone1_size type="hexBinary" length="4">00000000</default_redzone1_size>
<default_redzone2_size type="hexBinary" length="4">00000000</default_redzone2_size>
<exception_stack0_size type="hexBinary" length="4">00001000</exception_stack0_size>
<exception_stack1_size type="hexBinary" length="4">00001000</exception_stack1_size>
<exception_stack2_size type="hexBinary" length="4">00001000</exception_stack2_size>
</app>

Binary file not shown.

1
channel/content/dummy Normal file
View File

@ -0,0 +1 @@
s

BIN
channel/meta/bootDrcTex.tga Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

BIN
channel/meta/bootMovie.h264 Normal file

Binary file not shown.

Binary file not shown.

BIN
channel/meta/bootTvTex.tga Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 MiB

BIN
channel/meta/iconTex.tga Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

140
channel/meta/meta.xml Normal file
View File

@ -0,0 +1,140 @@
<?xml version="1.0" encoding="utf-8"?>
<menu type="complex" access="777">
<version type="unsignedInt" length="4">1</version>
<product_code type="string" length="32">WUP-P-HBLD</product_code>
<content_platform type="string" length="32">WUP</content_platform>
<company_code type="string" length="8">0001</company_code>
<mastering_date type="string" length="32"></mastering_date>
<logo_type type="unsignedInt" length="4">0</logo_type>
<app_launch_type type="hexBinary" length="4">00000000</app_launch_type>
<invisible_flag type="hexBinary" length="4">00000000</invisible_flag>
<no_managed_flag type="hexBinary" length="4">00000000</no_managed_flag>
<no_event_log type="hexBinary" length="4">00000000</no_event_log>
<no_icon_database type="hexBinary" length="4">00000000</no_icon_database>
<launching_flag type="hexBinary" length="4">00000004</launching_flag>
<install_flag type="hexBinary" length="4">00000000</install_flag>
<closing_msg type="unsignedInt" length="4">1</closing_msg>
<title_version type="unsignedInt" length="4">0</title_version>
<title_id type="hexBinary" length="8">0005000013374842</title_id>
<group_id type="hexBinary" length="4">00003748</group_id>
<boss_id type="hexBinary" length="8">0000000000000000</boss_id>
<os_version type="hexBinary" length="8">000500101000400A</os_version>
<app_size type="hexBinary" length="8">0000000000000000</app_size>
<common_save_size type="hexBinary" length="8">0000000001790000</common_save_size>
<account_save_size type="hexBinary" length="8">0000000000000000</account_save_size>
<common_boss_size type="hexBinary" length="8">0000000000000000</common_boss_size>
<account_boss_size type="hexBinary" length="8">0000000000000000</account_boss_size>
<save_no_rollback type="unsignedInt" length="4">0</save_no_rollback>
<join_game_id type="hexBinary" length="4">00000000</join_game_id>
<join_game_mode_mask type="hexBinary" length="8">0000000000000000</join_game_mode_mask>
<bg_daemon_enable type="unsignedInt" length="4">1</bg_daemon_enable>
<olv_accesskey type="unsignedInt" length="4">0</olv_accesskey>
<wood_tin type="unsignedInt" length="4">0</wood_tin>
<e_manual type="unsignedInt" length="4">0</e_manual>
<e_manual_version type="unsignedInt" length="4">0</e_manual_version>
<region type="hexBinary" length="4">FFFFFFFF</region>
<pc_cero type="unsignedInt" length="4">128</pc_cero>
<pc_esrb type="unsignedInt" length="4">128</pc_esrb>
<pc_bbfc type="unsignedInt" length="4">192</pc_bbfc>
<pc_usk type="unsignedInt" length="4">128</pc_usk>
<pc_pegi_gen type="unsignedInt" length="4">128</pc_pegi_gen>
<pc_pegi_fin type="unsignedInt" length="4">192</pc_pegi_fin>
<pc_pegi_prt type="unsignedInt" length="4">128</pc_pegi_prt>
<pc_pegi_bbfc type="unsignedInt" length="4">128</pc_pegi_bbfc>
<pc_cob type="unsignedInt" length="4">128</pc_cob>
<pc_grb type="unsignedInt" length="4">128</pc_grb>
<pc_cgsrr type="unsignedInt" length="4">128</pc_cgsrr>
<pc_oflc type="unsignedInt" length="4">128</pc_oflc>
<pc_reserved0 type="unsignedInt" length="4">192</pc_reserved0>
<pc_reserved1 type="unsignedInt" length="4">192</pc_reserved1>
<pc_reserved2 type="unsignedInt" length="4">192</pc_reserved2>
<pc_reserved3 type="unsignedInt" length="4">192</pc_reserved3>
<ext_dev_nunchaku type="unsignedInt" length="4">1</ext_dev_nunchaku>
<ext_dev_classic type="unsignedInt" length="4">0</ext_dev_classic>
<ext_dev_urcc type="unsignedInt" length="4">1</ext_dev_urcc>
<ext_dev_board type="unsignedInt" length="4">0</ext_dev_board>
<ext_dev_usb_keyboard type="unsignedInt" length="4">1</ext_dev_usb_keyboard>
<ext_dev_etc type="unsignedInt" length="4">0</ext_dev_etc>
<ext_dev_etc_name type="string" length="512"></ext_dev_etc_name>
<eula_version type="unsignedInt" length="4">0</eula_version>
<drc_use type="unsignedInt" length="4">1</drc_use>
<network_use type="unsignedInt" length="4">1</network_use>
<online_account_use type="unsignedInt" length="4">0</online_account_use>
<direct_boot type="unsignedInt" length="4">0</direct_boot>
<reserved_flag0 type="hexBinary" length="4">00010001</reserved_flag0>
<reserved_flag1 type="hexBinary" length="4">00000000</reserved_flag1>
<reserved_flag2 type="hexBinary" length="4">00000000</reserved_flag2>
<reserved_flag3 type="hexBinary" length="4">00000000</reserved_flag3>
<reserved_flag4 type="hexBinary" length="4">00000000</reserved_flag4>
<reserved_flag5 type="hexBinary" length="4">00000000</reserved_flag5>
<reserved_flag6 type="hexBinary" length="4">00000003</reserved_flag6>
<reserved_flag7 type="hexBinary" length="4">00000000</reserved_flag7>
<longname_ja type="string" length="512">Homebrew Launcher</longname_ja>
<longname_en type="string" length="512">Homebrew Launcher</longname_en>
<longname_fr type="string" length="512">Homebrew Launcher</longname_fr>
<longname_de type="string" length="512">Homebrew Launcher</longname_de>
<longname_it type="string" length="512">Homebrew Launcher</longname_it>
<longname_es type="string" length="512">Homebrew Launcher</longname_es>
<longname_zhs type="string" length="512">Homebrew Launcher</longname_zhs>
<longname_ko type="string" length="512">Homebrew Launcher</longname_ko>
<longname_nl type="string" length="512">Homebrew Launcher</longname_nl>
<longname_pt type="string" length="512">Homebrew Launcher</longname_pt>
<longname_ru type="string" length="512">Homebrew Launcher</longname_ru>
<longname_zht type="string" length="512">Homebrew Launcher</longname_zht>
<shortname_ja type="string" length="256">Homebrew Launcher</shortname_ja>
<shortname_en type="string" length="256">Homebrew Launcher</shortname_en>
<shortname_fr type="string" length="256">Homebrew Launcher</shortname_fr>
<shortname_de type="string" length="256">Homebrew Launcher</shortname_de>
<shortname_it type="string" length="256">Homebrew Launcher</shortname_it>
<shortname_es type="string" length="256">Homebrew Launcher</shortname_es>
<shortname_zhs type="string" length="256">Homebrew Launcher</shortname_zhs>
<shortname_ko type="string" length="256">Homebrew Launcher</shortname_ko>
<shortname_nl type="string" length="256">Homebrew Launcher</shortname_nl>
<shortname_pt type="string" length="256">Homebrew Launcher</shortname_pt>
<shortname_ru type="string" length="256">Homebrew Launcher</shortname_ru>
<shortname_zht type="string" length="256">Homebrew Launcher</shortname_zht>
<publisher_ja type="string" length="256">dimok</publisher_ja>
<publisher_en type="string" length="256">dimok</publisher_en>
<publisher_fr type="string" length="256">dimok</publisher_fr>
<publisher_de type="string" length="256">dimok</publisher_de>
<publisher_it type="string" length="256">dimok</publisher_it>
<publisher_es type="string" length="256">dimok</publisher_es>
<publisher_zhs type="string" length="256">dimok</publisher_zhs>
<publisher_ko type="string" length="256">dimok</publisher_ko>
<publisher_nl type="string" length="256">dimok</publisher_nl>
<publisher_pt type="string" length="256">dimok</publisher_pt>
<publisher_ru type="string" length="256">dimok</publisher_ru>
<publisher_zht type="string" length="256">dimok</publisher_zht>
<add_on_unique_id0 type="hexBinary" length="4">00000000</add_on_unique_id0>
<add_on_unique_id1 type="hexBinary" length="4">00000000</add_on_unique_id1>
<add_on_unique_id2 type="hexBinary" length="4">00000000</add_on_unique_id2>
<add_on_unique_id3 type="hexBinary" length="4">00000000</add_on_unique_id3>
<add_on_unique_id4 type="hexBinary" length="4">00000000</add_on_unique_id4>
<add_on_unique_id5 type="hexBinary" length="4">00000000</add_on_unique_id5>
<add_on_unique_id6 type="hexBinary" length="4">00000000</add_on_unique_id6>
<add_on_unique_id7 type="hexBinary" length="4">00000000</add_on_unique_id7>
<add_on_unique_id8 type="hexBinary" length="4">00000000</add_on_unique_id8>
<add_on_unique_id9 type="hexBinary" length="4">00000000</add_on_unique_id9>
<add_on_unique_id10 type="hexBinary" length="4">00000000</add_on_unique_id10>
<add_on_unique_id11 type="hexBinary" length="4">00000000</add_on_unique_id11>
<add_on_unique_id12 type="hexBinary" length="4">00000000</add_on_unique_id12>
<add_on_unique_id13 type="hexBinary" length="4">00000000</add_on_unique_id13>
<add_on_unique_id14 type="hexBinary" length="4">00000000</add_on_unique_id14>
<add_on_unique_id15 type="hexBinary" length="4">00000000</add_on_unique_id15>
<add_on_unique_id16 type="hexBinary" length="4">00000000</add_on_unique_id16>
<add_on_unique_id17 type="hexBinary" length="4">00000000</add_on_unique_id17>
<add_on_unique_id18 type="hexBinary" length="4">00000000</add_on_unique_id18>
<add_on_unique_id19 type="hexBinary" length="4">00000000</add_on_unique_id19>
<add_on_unique_id20 type="hexBinary" length="4">00000000</add_on_unique_id20>
<add_on_unique_id21 type="hexBinary" length="4">00000000</add_on_unique_id21>
<add_on_unique_id22 type="hexBinary" length="4">00000000</add_on_unique_id22>
<add_on_unique_id23 type="hexBinary" length="4">00000000</add_on_unique_id23>
<add_on_unique_id24 type="hexBinary" length="4">00000000</add_on_unique_id24>
<add_on_unique_id25 type="hexBinary" length="4">00000000</add_on_unique_id25>
<add_on_unique_id26 type="hexBinary" length="4">00000000</add_on_unique_id26>
<add_on_unique_id27 type="hexBinary" length="4">00000000</add_on_unique_id27>
<add_on_unique_id28 type="hexBinary" length="4">00000000</add_on_unique_id28>
<add_on_unique_id29 type="hexBinary" length="4">00000000</add_on_unique_id29>
<add_on_unique_id30 type="hexBinary" length="4">00000000</add_on_unique_id30>
<add_on_unique_id31 type="hexBinary" length="4">00000000</add_on_unique_id31>
</menu>

View File

@ -161,17 +161,19 @@ bool Application::procUI(void)
{
case PROCUI_STATUS_EXITING:
{
log_printf("PROCUI_STATUS_EXITING\n");
exitCode = EXIT_SUCCESS;
exitApplication = true;
break;
}
case PROCUI_STATUS_RELEASE_FOREGROUND:
{
log_printf("PROCUI_STATUS_RELEASE_FOREGROUND\n");
if(video != NULL)
{
// we can turn of the screen but we don't need to and it will display the last image
//video->tvEnable(false);
//video->drcEnable(false);
video->tvEnable(true);
video->drcEnable(true);
log_printf("delete fontSystem\n");
delete fontSystem;
@ -185,6 +187,10 @@ bool Application::procUI(void)
memoryRelease();
ProcUIDrawDoneRelease();
}
else
{
ProcUIDrawDoneRelease();
}
break;
}
case PROCUI_STATUS_IN_FOREGROUND:
@ -193,6 +199,7 @@ bool Application::procUI(void)
{
if(video == NULL)
{
log_printf("PROCUI_STATUS_IN_FOREGROUND\n");
log_printf("initialze memory\n");
memoryInitialize();
@ -241,9 +248,6 @@ void Application::executeThread(void)
if(controller[i]->update(video->getTvWidth(), video->getTvHeight()) == false)
continue;
if(controller[i]->data.buttons_d & VPAD_BUTTON_HOME)
exitApplication = true;
//! update controller states
mainWindow->update(controller[i]);
}