This page is building…
To Create Prime image for Akai force you can follow this procedure. It's working on release 2.1.2.
Go to Engine Prime Download and get firmware 2.1.2 :
https://enginedj.com/downloads
By using Thekikgen method you have to extract the rootfs image from firmware : https://github.com/TheKikGen/MPC-LiveXplore/wiki/How-to-extract-the-2.6-rootfs-img-from-the-update.img
With Hex Editor ,( i'am using HXD) , search for Hex Value : FD 37 7A 58 5A
It will give you something like this :
Then : Go to position 2B94 and remove everything upper the string :
Then save the file and quit Hex Editor. Next go to file folder where you saved the .img. With 7zip, click the file and choose Extract Here :
The will extract the Filesystem image which is approx 512 mb. You can copy this new file ( 512 mb ) on your SD card.
Then we are going to a create filesystem overlay which will contain our files. On you media card location ( eg : /media/02EB-7AEF/ ) use the following command to create a new filesystem file.
dd if=/dev/zero of=lower-fs.img bs=4096 count=204800
It will create a file which size is 800 mb. to give Ext4 FS type to our file, issue this comand :
mkfs -t ext4 lower-fs.img
Create a folder named overlay on your media card ( eg : /media/02EB-7AEF/overlay).
mkdir /media/02EB-7AEF/overlay
Mount the created filesystem file ( lower-fs.img) on overlay folder :
mount lower-fs.img overlay
Go to your overlay folder :
cd overlay
And create the following folder :
mkdir overlayupper mkdir overlaywork ls => lost+found overlayupper overlaywork
Then we have to populate our overlayupper folder with the content of the denon firmware. You can view the 512 Mb file from denon with 7zip, and extract / transfert files. Another way is to mount the 512Mb file in another folder, and to copy files from there. That's i will do.
I put the 512Mb file in a folder named SC5 on my media card :
02EB-7AEF is the name of my SD, it will be another on your side.
# pwd /media/02EB-7AEF/SC5 # ls -al 4 total 512256 drwxr-xr-x 2 root root 131072 Mar 24 14:45 . drwxr-xr-x 60 root root 131072 Mar 24 14:36 .. -rwxr-xr-x 1 root root 524288000 Mar 24 13:53 PRIMEGO-2.1.2-Update # mkdir /media/02EB-7AEF/PRIMEGOIMGFILE # mount PRIMEGO-2.1.2-Update /media/02EB-7AEF/PRIMEGOIMGFILE # cd /media/02EB-7AEF/PRIMEGOIMGFILE -- Here you see the content of the rootfs, mounted on /media/02EB-7AEF/PRIMEGOIMGFILE # ls bin dev home lib32 lost+found mnt proc run srv tmp var boot etc lib linuxrc media opt root sbin sys usr # cd usr # ls Engine bin lib libexec qt share SoundSwitch etc lib32 mkspecs sbin
copy files :
# cp -a Engine/ /media/02EB-7AEF/overlay/overlayupper/ # cp -a SoundSwitch/ /media/02EB-7AEF/overlay/overlayupper/ # cp -a qt /media/02EB-7AEF/overlay/overlayupper/
Some extra/new libs are required :
# cp -a lib/libboost* /media/02EB-7AEF/overlay/overlayupper/lib/ # cp -a lib/libicu* /media/02EB-7AEF/overlay/overlayupper/lib/
All this files are put in the lower-fs.img file.
Then we will use the magical trick of the overlay to map what we have in overlayupper on /usr : to do that i do :
mount -t overlay -o rw,relatime,lowerdir=/usr,upperdir=/media/02EB-7AEF/overlay/overlayupper,workdir=/med ia/02EB-7AEF/overlay/overlaywork overlay /usr
And when you go to /usr , Taddaaaa! you have your content :
# cd /usr # ls Engine SoundSwitch bin etc lib lib32 libexec qt sbin share
Once done, before running Engine you have to EXPORT some var :
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/qt/lib export AIR_SCREEN_ROTATION=-90
And to spoof product-code, you have to bind a file with new product code. to do this do a copy of the real file :
eg : copy "/sys/firmware/devicetree/base/inmusic,product-code" "/media/02EB-7AEF/inmusic,product-code"
Then edit the file :
vi "/media/02EB-7AEF/inmusic,product-code"
Change ADA2 or what you have by JP11 for the prime GO ( Shift + R on vi to replace ) Dont remove the ending ^@
Then mount the file like this :
mount -o bind "/media/02EB-7AEF/inmusic,product-code" "/sys/firmware/devicetree/base/inmusic,product-code"
And rename the file /usr/Engine/Content/KnownDevices.vfsb to anything else :
eg : mv /usr/Engine/Content/KnownDevices.vfsb /usr/Engine/Content/KnownDevices.bak
/!\ : before running prime , rename /usr/bin/dfu-util to dfu-utill. to do this :
mount remount / -o rw,remount mv /usr/bin/dfu-util /usr/bin/dfu-utill
Otherwise Prime may try to update STM32 firmware in dfu mode.
Now you can run prime, however like this , there is no mapping done to use it.
Some examples of assignments files are available in the folder : /usr/Engine/AssignmentFiles/PresetAssignmentFiles/
And then to run Prime Issue the command ( in /usr/Engine)
# ./Engine
In the starting log you'lle see :
in the log we see the model and assignment files : QCommandLineParser: option not defined: "configuration" DenonDJ "PRIME GO 2.1.2 eaf7ec4c8" starting up QCommandLineParser: option not defined: "cleanupQSettings" FORCING SWAP INTERVAL = 1 FORCING SWAP INTERVAL = 1 air.assignments.deviceadapter: Could not find file: "Akai_Pro_Force_Public_Assignments.qml" air.assignments.deviceadapter: Could not find file: "Akai_Pro_Force_Public_Device.qml" air.assignments.deviceadapter: Could not find file: "Akai_Pro_Force_MIDI_Port_Assignments.qml" air.assignments.deviceadapter: Could not find file: "Akai_Pro_Force_MIDI_Port_Device.qml" qml: Sending Initilization Message Akai Pro AMX qml: Sending initialization message for PRIME GO ... qml: Initialization phase ended qml: Query absolute position controls
So the Next step to use prime is to create/configure qml files used by Prime to map buttons and led. On Akai force you can make 4 qml in relation with audio interface. I was not able to verify if public qml file are working because on my first try i had these 4 files.
“Akai_Pro_Force_Public_Assignments.qml” “Akai_Pro_Force_Public_Device.qml” “Akai_Pro_Force_Private_Assignments.qml” “Akai_Pro_Force_Private_Device.qml”
Now i'm only using private files and it's working well.
Public files are used to map inputs,
Private files are used to map Led / Pad colors output