summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--firmware/drivers/audio/fiiolinux_codec.c9
-rwxr-xr-xtools/hiby_patcher.pl267
2 files changed, 165 insertions, 111 deletions
diff --git a/firmware/drivers/audio/fiiolinux_codec.c b/firmware/drivers/audio/fiiolinux_codec.c
index 894d16dae1..44ebdd092c 100644
--- a/firmware/drivers/audio/fiiolinux_codec.c
+++ b/firmware/drivers/audio/fiiolinux_codec.c
@@ -69,10 +69,11 @@ void audiohw_preinit(void)
{
alsa_controls_init();
hw_open();
- // set 19/'ADC Mux' 0
- // set 4/'Digital Capture Volume' 0
- // set 6/'Mic Volume' 0
- // set 11/'DACR Playback Volume' 0 (wtf?? vortex used 1, of used 0)
+ // NOTE:
+ // Of the exported controls, only these do anything:
+ // 10 DACL Playback Volume
+ // 11 DACR Playback Volume
+ // 12 Low Mode Switch (see table 25 in datasheet, not simple..)
}
void audiohw_postinit(void)
diff --git a/tools/hiby_patcher.pl b/tools/hiby_patcher.pl
index af98cfdafc..e8ade006b1 100755
--- a/tools/hiby_patcher.pl
+++ b/tools/hiby_patcher.pl
@@ -9,7 +9,7 @@
#
# Hiby patcher Copyright (C) 2020 Solomon Peachy <pizza@shaftnet.org>
#
-# Licensed under the GNU GPLv2 (or newer)
+# Licensed under the GNU GPLv2 (or later)
#
##################
@@ -29,6 +29,8 @@ my $rbbname = $ARGV[2];
my $prefix = "/tmp"; # XXX mktmp
my $debug = 0; # Set to 1 to prevent cleaning up work dirs
+my $hiby = 1; # 1 for hibyplayer-style updates, 0 for ingenic updates
+
#### Let's get to work
my @ubiopts;
@@ -42,6 +44,7 @@ if ($model eq 'rocker') {
@ubiopts = ("-e", "124KiB", "-c", "1024", "-m", "2048", "-j", "8192KiB", "-U");
} elsif ($model eq 'm3k') {
@ubiopts = ("-e", "124KiB", "-c", "2048", "-m", "2048", "-j", "8192KiB", "-U");
+ $hiby = 0;
} else {
die ("Unknown hiby model: $model\n");
}
@@ -52,69 +55,88 @@ my $isowork = "$prefix/iso.$uptname";
my $rootfsdir = "$prefix/rootfs.$uptname";
my $ubiname;
my $ubinamenew;
-
-
-my @sysargs;
-
-
-### Extract outer ISO9660 image
-system("rm -Rf $isowork");
-mkdir($isowork) || die ("Can't create '$isowork'");
-@sysargs = ("7z", "x", "-aoa", "-o$isowork", $inname);
-system(@sysargs);
-
-### figure out the rootfs image filenames
my $updatename;
-if ( -e "$isowork/UPDATE.TXT") {
- $updatename = "$isowork/UPDATE.TXT";
-} elsif ( -e "$isowork/update.txt") {
- $updatename = "$isowork/update.txt";
-}
my $versionname;
-if ( -e "$isowork/VERSION.TXT") {
- $versionname = "$isowork/VERSION.TXT";
-} elsif ( -e "$isowork/version.txt") {
- $versionname = "$isowork/version.txt";
-}
-open UPDATE, $updatename || die ("Can't open update.txt!");;
+my @sysargs;
+
+#### Extract OF image wrapper
+if ($hiby) {
+ system("rm -Rf $isowork");
+ mkdir($isowork) || die ("Can't create '$isowork'");
+ @sysargs = ("7z", "x", "-aoa", "-o$isowork", $inname);
+ system(@sysargs);
+
+ ### figure out the rootfs image filenames
+ if ( -e "$isowork/UPDATE.TXT") {
+ $updatename = "$isowork/UPDATE.TXT";
+ } elsif ( -e "$isowork/update.txt") {
+ $updatename = "$isowork/update.txt";
+ }
+ if ( -e "$isowork/VERSION.TXT") {
+ $versionname = "$isowork/VERSION.TXT";
+ } elsif ( -e "$isowork/version.txt") {
+ $versionname = "$isowork/version.txt";
+ }
-my $rootfs_found = 0;
-while (<UPDATE>) {
- chomp;
- if ($rootfs_found) {
- if (/file_path=(.*)/) {
- $ubiname = basename($1);
- last;
+ open UPDATE, $updatename || die ("Can't open update.txt!");;
+
+ my $rootfs_found = 0;
+ while (<UPDATE>) {
+ chomp;
+ if ($rootfs_found) {
+ if (/file_path=(.*)/) {
+ $ubiname = basename($1);
+ last;
+ }
+ } else {
+ if (/rootfs/) {
+ $rootfs_found = 1;
}
- } else {
- if (/rootfs/) {
- $rootfs_found = 1;
}
}
-}
-close UPDATE;
+ close UPDATE;
-if (! -e "$isowork/$ubiname") {
- $ubiname =~ tr/[a-z]/[A-Z]/;
- die("can't locate rootfs image ($ubiname)") if (! -e "$isowork/$ubiname");
-}
+ if (! -e "$isowork/$ubiname") {
+ $ubiname =~ tr/[a-z]/[A-Z]/;
+ die("can't locate rootfs image ($ubiname)") if (! -e "$isowork/$ubiname");
+ }
+
+ $ubiname = "$isowork/$ubiname";
+} else {
+ # Deconstruct original file
+ # TODO. Rough sequence:
+
+# unzip m3k.fw
+# for x in recovery-update/nand/update*zip ; do unzip -o $x ; done
+# rm -Rf *zip META-INF
+# parse update000/update.xml:
+# <name>system.ubi</name>
+# <type>ubifs</type>
+# <size>###</size> ## total size, bytes
+# <chunksize>##</chunksize> ## max for each one I guess [optional, 0 def]
+# <chunkcount>##</chunkcount> ## add up [optional, 1 def]
+#
+# * Track name, start block
+# * when we find the first ubifs block, record name, start block #, end block #
+#
+# alternatively, cat update*/$name* > combined.ubi
-$ubiname = "$isowork/$ubiname";
+ $ubiname = "$uptname";
+}
-### Extract RootFS
+#### Extract RootFS
system("rm -Rf $rootfsdir");
mkdir($rootfsdir) || die ("Can't create '$rootfsdir'");
@sysargs = ("ubireader_extract_files", "-k", "-o", $rootfsdir, $ubiname);
system(@sysargs);
-# exit(0);
-### Mangle RootFS
-
-# Generate rb_bootloader.sh
my $rbbasename = basename($rbbname);
-my $bootloader_sh =
+
+#### Mangle RootFS
+if ($hiby) {
+ my $bootloader_sh =
"#!/bin/sh
#mkdir -p /mnt/sd_0
@@ -135,21 +157,21 @@ killall -9 $rbbasename &>/dev/null
sleep 1
reboot
";
-open FILE, ">$rootfsdir/usr/bin/hiby_player.sh" || die ("can't write bootloader script!");
-print FILE $bootloader_sh;
-close FILE;
-chmod 0755, "$rootfsdir/usr/bin/hiby_player.sh";
-
-# Auto mount/unmount external USB drives and SD card
-open FILE, ">>$rootfsdir/etc/mdev.conf" || die ("can't access mdev conf!");
-print FILE "sd[a-z][0-9]+ 0:0 664 @ /etc/rb_inserting.sh\n";
-print FILE "mmcblk[0-9]p[0-9] 0:0 664 @ /etc/rb_inserting.sh\n";
-print FILE "mmcblk[0-9] 0:0 664 @ /etc/rb_inserting.sh\n";
-print FILE "sd[a-z] 0:0 664 \$ /etc/rb_removing.sh";
-print FILE "mmcblk[0-9] 0:0 664 \$ /etc/rb_removing.sh\n";
-close FILE;
-
-my $insert_sh = '
+ open FILE, ">$rootfsdir/usr/bin/hiby_player.sh" || die ("can't write bootloader script!");
+ print FILE $bootloader_sh;
+ close FILE;
+ chmod 0755, "$rootfsdir/usr/bin/hiby_player.sh";
+
+ # Auto mount/unmount external USB drives and SD card
+ open FILE, ">>$rootfsdir/etc/mdev.conf" || die ("can't access mdev conf!");
+ print FILE "sd[a-z][0-9]+ 0:0 664 @ /etc/rb_inserting.sh\n";
+ print FILE "mmcblk[0-9]p[0-9] 0:0 664 @ /etc/rb_inserting.sh\n";
+ print FILE "mmcblk[0-9] 0:0 664 @ /etc/rb_inserting.sh\n";
+ print FILE "sd[a-z] 0:0 664 \$ /etc/rb_removing.sh";
+ print FILE "mmcblk[0-9] 0:0 664 \$ /etc/rb_removing.sh\n";
+ close FILE;
+
+ my $insert_sh = '
#!/bin/sh
# $MDEV is the device
@@ -169,25 +191,51 @@ fi
mount $MDEV $MNT_POINT
';
-open FILE, ">$rootfsdir/etc/rb_inserting.sh" || die("can't write hotplug helpers!");
-print FILE $insert_sh;
-close FILE;
-chmod 0755, "$rootfsdir/etc/rb_inserting.sh";
+ open FILE, ">$rootfsdir/etc/rb_inserting.sh" || die("can't write hotplug helpers!");
+ print FILE $insert_sh;
+ close FILE;
+ chmod 0755, "$rootfsdir/etc/rb_inserting.sh";
-my $remove_sh = '
+ my $remove_sh = '
#!/bin/sh
# $MDEV is the device
sync;
unmount -f $MDEV;
';
-open FILE, ">$rootfsdir/etc/rb_removing.sh" || die("can't write hotplug helpers!");
-print FILE $remove_sh;
-close FILE;
-chmod 0755, "$rootfsdir/etc/rb_removing.sh";
+ open FILE, ">$rootfsdir/etc/rb_removing.sh" || die("can't write hotplug helpers!");
+ print FILE $remove_sh;
+ close FILE;
+ chmod 0755, "$rootfsdir/etc/rb_removing.sh";
-# Deal with a nasty race condition in automount scripts
-system("perl -pni -e 's/rm -rf/#rm -Rf/;' $rootfsdir/etc/init.d/S50sys_server");
+ # Deal with a nasty race condition in automount scripts
+ system("perl -pni -e 's/rm -rf/#rm -Rf/;' $rootfsdir/etc/init.d/S50sys_server");
+} else {
+ my $bootloader_sh =
+ "#!/bin/sh
+
+killall $rbbasename &>/dev/null
+killall -9 $rbbasename &>/dev/null
+
+source /etc/profile
+
+# Try to save the flash
+if ! [ -L /data/userfs/app.log ] ; then
+ rm -f /data/userfs/app.log
+ ln -s /dev/null /data/userfs/app.log
+fi
+
+# Rockbox launcher!
+/usr/bin/$rbbasename
+sleep 1
+reboot
+";
+ open FILE, ">$rootfsdir/usr/project/bin/play.sh" || die ("can't write bootloader script!");
+ print FILE $bootloader_sh;
+ close FILE;
+ chmod 0755, "$rootfsdir/usr/project/bin/play.sh";
+
+}
# Copy bootloader over
@sysargs=("cp", "$rbbname", "$rootfsdir/usr/bin/$rbbasename");
@@ -201,49 +249,54 @@ system(@sysargs);
system("rm -Rf $rootfsdir") if (!$debug);
-# md5sum
-my $md5 = `md5sum $ubinamenew | cut -d ' ' -f 1`;
+if ($hiby) {
+ # md5sum
+ my $md5 = `md5sum $ubinamenew | cut -d ' ' -f 1`;
-system("mv $ubinamenew $ubiname");
+ system("mv $ubinamenew $ubiname");
-### Generate new ISO9660 update image
+ ### Generate new ISO9660 update image
-# Correct md5sum for new rootfs image
-open UPDATE, "<$updatename" || die ("Can't open update.txt!");
-open UPDATEO, ">$updatename.new" || die ("Can't open update.txt!");
+ # Correct md5sum for new rootfs image
+ open UPDATE, "<$updatename" || die ("Can't open update.txt!");
+ open UPDATEO, ">$updatename.new" || die ("Can't open update.txt!");
-$rootfs_found = 0;
-while (<UPDATE>) {
- if ($rootfs_found) {
- if (s/md5=.*/md5=$md5/) {
- $rootfs_found=0;
- }
- } else {
- if (/rootfs/) {
- $rootfs_found = 1;
+ my $rootfs_found = 0;
+ while (<UPDATE>) {
+ if ($rootfs_found) {
+ if (s/md5=.*/md5=$md5/) {
+ $rootfs_found=0;
+ }
+ } else {
+ if (/rootfs/) {
+ $rootfs_found = 1;
+ }
}
+ print UPDATEO;
}
- print UPDATEO;
-}
-close UPDATE;
-close UPDATEO;
-system("mv $updatename.new $updatename");
+ close UPDATE;
+ close UPDATEO;
+ system("mv $updatename.new $updatename");
-# Fix up version text, if needed (AGPTek Rocker 1.31 beta)
+ # Fix up version text, if needed (AGPTek Rocker 1.31 beta)
-open UPDATE, "<$versionname" || die ("Can't open version.txt!");;
-open UPDATEO, ">$versionname.new" || die ("Can't open version.txt!");
+ open UPDATE, "<$versionname" || die ("Can't open version.txt!");;
+ open UPDATEO, ">$versionname.new" || die ("Can't open version.txt!");
-while (<UPDATE>) {
- s/ver=1\.0\.0\.0/ver=2018-10-07T00:00:00+08:00/;
- print UPDATEO;
-}
+ while (<UPDATE>) {
+ s/ver=1\.0\.0\.0/ver=2018-10-07T00:00:00+08:00/;
+ print UPDATEO;
+ }
-close UPDATE;
-close UPDATEO;
-system("mv $versionname.new $versionname");
+ close UPDATE;
+ close UPDATEO;
+ system("mv $versionname.new $versionname");
-@sysargs = ("mkisofs", "-volid", "CDROM", "-o", $uptnamenew, $isowork);
-system(@sysargs);
+ @sysargs = ("mkisofs", "-volid", "CDROM", "-o", $uptnamenew, $isowork);
+ system(@sysargs);
-system("rm -Rf $isowork") if (!$debug);
+ system("rm -Rf $isowork") if (!$debug);
+} else {
+ # Reconstruct fiio/ingenic firmware update image
+ # very TODO
+}