===== 404.html ===== {% include head_global.html %} 404 Page not found Go Home ===== _includes/footer.html ===== GitHub Donate! ===== _includes/head_global.html ===== (No textual content) ===== _includes/nav_item.html ===== {% if include.page.has_children != true %} {{include.page.title}} {% else %} {{include.page.title}} {% assign pages = site.pages | sort: "nav_order" %} {% for page in pages %} {% if page.parent == include.page.title and include.page.title != nil %} {% include nav_item.html page=page current=include.current %} {% endif %} {% endfor %} {% endif %} ===== _includes/navbar.html ===== Kindle Modding Wiki {% assign pages = site.pages | sort: "nav_order" %} {% for item in pages %} {% if item.parent == nil and item.title != nil %} {% include nav_item.html page=item current=page %} {% endif %} {% endfor %} ===== _layouts/default.html ===== {% include head_global.html %} {{ page.title }} {% include navbar.html %} {{ content }} {% if page.landing != true %} {% include footer.html %} {% endif %} ===== ads.txt ===== google.com, pub-4468899728405672, DIRECT, f08c47fec0942fa0 ===== assets/fonts/OFL.txt ===== Copyright 2012 The Libre Baskerville Project Authors (https://github.com/impallari/Libre-Baskerville) with Reserved Font Name Libre Baskerville. This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is copied below, and is also available with a FAQ at: https://openfontlicense.org ----------------------------------------------------------- SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ----------------------------------------------------------- PREAMBLE The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others. The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives. DEFINITIONS "Font Software" refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation. "Reserved Font Name" refers to any names specified as such after the copyright statement(s). "Original Version" refers to the collection of Font Software components as distributed by the Copyright Holder(s). "Modified Version" refers to any derivative made by adding to, deleting, or substituting -- in part or in whole -- any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment. "Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software. PERMISSION & CONDITIONS Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions: 1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself. 2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user. 3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users. 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission. 5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software. TERMINATION This license becomes null and void if any of the above conditions are not met. DISCLAIMER THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. ===== firmware-and-flashing/downgrading/index.md ===== Downgrading Your Kindle A jailbroken Kindle is required - You cannot downgrade a Kindle on stock firmware Before You Start - You do this at your own risk - You obviously cannot downgrade to a lower firmware than the one your Kindle originally had. You also cannot downgrade with updates marked for other devices different than yours - Backup any important data from your Kindle as this process will wipe everything in the device - Restore OTA updates (../../jailbreaking/post-jailbreak/disable-ota) (Click on Restore) - Disable USBNetwork (USBMS mode) if you have the USBNetwork extension installed Prerequisites - A PC - A jailbroken Kindle (using the Universal Hotfix (../../jailbreaking/post-jailbreak/setting-up-a-hotfix)) - Appropriate Update Firmware .bin you want to downgrade (../downloading-updates). Downgrading 1. Turn on Airplane Mode, disable USBNetwork and enable OTA updates. 2. Download the Allow Downgrade scriplet (./AllowDowngrade.sh) created by Marek (https://www.mobileread.com/forums/member.php?u=340787). 3. Plug your Kindle into your PC and copy the scriplet into the documents folder. 4. Eject and unplug your Kindle. 5. Navigate your library and click on the "Allow Downgrade" booklet. 6. Your Kindle will print text on screen for a couple of seconds and will return to the library menu. Downgrading should be enabled now. 7. Copy the updatekindle*.bin file to your Kindle root directory. Do not unplug your Kindle, hold the power button until your device reboots. 8. Your Kindle will now install the firmware you copied to it. Post-Downgrading Congratulations! Your Kindle has been downgraded. Devices using the Universal Hotfix will need to re-install it and re-run the booklet. Large jumps in firmware versions might cause your Kindle to display a white screen after downgrading. This can be easily fixed by plugging your Kindle back into your PC, sideload an empty file named DOFACTORYRESTORE (without extension) into the root directory and force a reboot by holding the power button for 20 or 30 seconds. Keep in mind that not every extension out there was not made for hard float firmware (>=5.16.3) or soft float firmware (<=5.16.2.1.1), if you make a jump between those two updates, make sure you're installing the correct packages and extensions. Some devices may let you skip the initial device set-up by simply restarting the device. But if your device keeps prompting the set-up, do it quickly (skipping Wi-Fi), and then delete the partial OTA download located in your Kindle root directory. After downgrading, you will need to re-do the post-jailbreak instructions: Setting Up A Hotfix (../../jailbreaking/post-jailbreak/setting-up-a-hotfix/) Credits - Written by Bundlerocks, adapted from Neon (https://kindlemodding.gitbook.io/kindlemodding/miscellaneous/downgrading-your-kindle-firmware) ===== firmware-and-flashing/downloading-updates.md ===== Manually Downloading Firmware Update Files At the time of writing, Amazon does not delete Kindle Firmware Update files from their servers, meaning that it is possible to download any firmware version, simply by changing the link. Installing Updates You can easily install downloaded Kindle Updates 1. Place your Kindle in Airplane Mode 2. Plug your Kindle into your PC 3. Copy the downloaded update file to the root of your Kindle (the same location as the documents folder) 4. Eject and unplug your Kindle 5. On your Kindle open settings, then from the top-right menu, select Update Your Kindle Update Links Note that K1, K2, DX and K3 are not included in the table as they require different firmwares based on serial numbers, please see the Amazon page (https://www.amazon.com/gp/help/customer/display.html?nodeId=GKMQC26VQQMM8XSW) for those models This table contains the last jailbreakable firmware for each Kindle as a link. Note that Kindles which cannot be jailbroken (>PW5) or particularly old devices ( 5. Boot into DIAGS mode by running the command: ~~~bash uboot > bootm 0xE41000 ~~~ 6. Once you are in DIAGS mode, run the following command to export the userspace partition: ~~~bash usb export ~~~ 7. COPY the rootfs.img file to the Kindle DO NOT FLASH THE IMAGE ONTO THE KINDLE. Simply copy it to the device via your preffered file manager. 8. Eject the Kindle from the PC BUT DO NOT UNPLUG IT 9. Exit USB Export mode by entering x at the prompt 10. Exit DIAGS mode and enter a shell by running: ~~~bash exit login ~~~ 11. Run the following command to begin flashing your Kindle: ~~~bash dd if=/mnt/us/rootfs.img of=/dev/mmcblk0p1 bs=4096 ~~~ 12. Reboot your Kindle via the following command: ~~~bash reboot ~~~ If everything works, the Kindle should boot to whichever firmware you flashed. If your Kindle does not boot, try flashing it again Credits - Original guide written by Neon (https://www.mobileread.com/forums/member.php?u=329187) - Info taken from the Original Thread (https://www.mobileread.com/forums/showthread.php?t=343385) - Thanks to katadelos (https://www.mobileread.com/forums/member.php?u=308426) for figuring this out! ===== index.html ===== Kindle Modding Wiki Welcome to the Kindle Modding Wiki Your one-stop shop for all things related to hacking Kindles Get Started Get Started Get started with jailbreaking your Kindle Developer Documentation Documentation for homebrew developers Hacker Corner Documentation regarding Kindle internals Discord Join our Discord ===== jailbreaking/5.18/index.html ===== 5.18.1 Jailbreak Countdown × CONGRATULATIONS! You are the 1,000,000th visitor! Click here to claim your FREE Kindle Jailbreak! Downloading jailbreak... 0% 9 9 DAYS : 9 9 HOURS : 0 0 MINUTES 5.18.1 jailbreak is coming in 99 days, 99 hours, 00 minutes CELEBRATE NOW! SUMMON CAT DOWNLOAD NOW What to Expect NEW!!! - Brick your kindle for FREE! - Hackerdude extending deadline by 518 quadrillion googolplexes - Penguins184 porting twerk run 3d and bundling it with GorkBreak - Your kindle will finally make phone calls (to scammers only) - Special firmware that makes your screen smell like burnt toast - SUPER SECRET HACK: Shake your Kindle vigorously for 10 minutes to unlock developer mode Features Untethered jailbreak. It will follow you around wherever you go. RUN AWAY NOW Support for all devices including the latest models if they're running 5.18.7 ONLY Simple 34-click process (one more than languagebreak) download 64gb ram ultimate doom gaming machine Makes your Kindle smell like fresh bread when it overheats Turns your Kindle into a TV remote (works only on brands that don't exist) Secret mode that turns text into hieroglyphics Uses AI-powered blockchain cloud computing to hack the mainframe Comes with free digital pet that eats your battery and poops in your collections Requirements - you have a kindle on a nonexistent firmware version - your kindle must have been purchased on a Tuesday during a solar eclipse - you must perform the jailbreak while standing on one foot - you need to have exactly 33.7% battery remaining - your kindle must have been blessed by a tech priest - must have sacrificed at least 3 USB cables to the Kindle gods - your Kindle serial number must contain the digits 5, 1, and 8 in that order - you must recite the entire Amazon Terms of Service backwards while jailbreaking Advice STAY ON AIRPLANE MODE DO NOT BLINK WHILE JAILBREAKING SACRIFICE A USB CABLE TO THE KINDLE GODS IF YOUR KINDLE STARTS SPEAKING IN TONGUES, THAT'S NORMAL APPLY THERMAL PASTE TO YOUR FOREHEAD BEFORE ATTEMPTING MAKE SURE YOUR KINDLE IS NOT LISTENING - THEY ARE ALWAYS LISTENING IF JEFF BEZOS APPEARS IN YOUR MIRROR AT MIDNIGHT, DO NOT MAKE EYE CONTACT TESTIMONIALS "I tried this jailbreak and now my Kindle is running Windows 95" - KindleFan518 "My Kindle gained sentience and filed for divorce" - JailbreakVictim "10/10 would brick again" - AmazonEmployee "Help I'm trapped in a Kindle factory" - NotJeffBezos You fell in love with Kindle Jailbreaks? You must be lonely. Image source: httwsn on X Visitors anxiously waiting for jailbreak: 1337 Official Jailbreak Support Cats These elite felines are critical to the jailbreak development process. They contribute by walking across keyboards and spilling coffee on development Kindles. BREAKING NEWS: Kindle jailbreak delayed by another 518 days because someone asked "when jailbreak" in the Discord again • Amazon CEO announces new anti-jailbreak technology: "just don't buy kindles" • Local developer discovers way to run Crysis on Kindle by using a magnifying glass to set it on fire • Kindle users report strange phenomenon where their devices whisper "help me" at 3:18 AM • Cat appointed as new lead jailbreak developer, progress consists of knocking things off tables • Amazon employees found moonlighting as jailbreak developers • Special firmware update now requires blood sacrifice to update • ===== jailbreaking/AdBreak/index.md ===== AdBreak If I cannot do great things, I can do small things in a great way. \- Martin Luther King, Jr. AdBreak is a jailbreak released on 24/09/2025 by hhhhhhhhh. It is based on CVE-2012-3748 (https://scarybeastsecurity.blogspot.com/2017/05/ode-to-use-after-free-one-vulnerable.html). Scribe devices must be using a French account to enable ads Special thanks to Chris Evans (@scarybeasts) for a lot of the exploit code, hackerdude for the modified JB script. Prerequisites - You will need a PC, cable - Non-blacklisted, registered, ad-enabled Kindle - Firmware 5.18.1 and above (possibly patched after 5.18.5.0.1) If you face any issues, please check the troubleshooting (#troubleshooting) section. It also includes details on how you could possibly re-enable ads on a kindle which does not have them at present. Installation Guide Previous Step Next Step Download the latest AdBreak release: Download If your Kindle is is not yet registered, make sure to follow these steps to prevent your Kindle from automatically updating before registering your device with Amazon. This will help you avoid an automatic firmware update during the registration process. Please use WinterBreak on firmware 5.18.0.2 and below. Download Ads Leave your kindle for a while, connected to the internet, so it can download advertisements. If you press the lock button, an advertisement should be displayed. If advertisements aren't being downloaded after a while, a factory reset may help. Aeroplane Mode Once you have verified ads are displayed on the lockscreen, enable airplane mode. View all ads Click on the top right menu and select "View all ads", which should display multiple "special offers". Copy .assets Plug in the Kindle, open the system folder and copy the ".assets" folder to your computer. Unzip AdBreak Unzip the previously downloaded AdBreak, and place the extracted contents within the ".assets" folder located on your computer. Run The Replace Script Windows: Double-click on "replace.bat" to run it. MacOS/Linux: Run find . -name 'details.html' -exec cp adbreak.html {} \; using a terminal. Replace Kindle .assets Delete the original kindle .assets and replace it with your on-PC modified copy. Jailbreak! Unplug, click on an ad and go through the popups, once you click Close on "Bang!", the jailbreak script should run. You can safely ignore any "application error" popups, they are irrelevant. Previous Step Next Step new Guide("guide", "../post-jailbreak/setting-up-a-hotfix", "Setting Up A Hotfix"); .version-block { background-color: #1e1e1e; border-radius: 8px; padding: 12px; margin-bottom: 12px; width: 100%; } .version-label { font-weight: bold; border-bottom: 1px solid #369d36; padding-bottom: 5px; margin-bottom: 10px; color: #369d36; } Troubleshooting FAQ - The JB does NOT automatically remove advertisements, see Marek's scriptlet. - It will never work on the CS/Colorsoft! Ads can NOT be re-enabled there! - No, this is not "UJ"/"Unnamed Jailbreak". That is separate. - "Is there a way to make my device ad supported?" (see below) Common Issues - Can't find the system folder: - On mass storage kindles, if you cannot see the system folder, you will have to navigate to the path manually, or follow this (https://kb.blackbaud.com/knowledgebase/Article/41890) guide to see protected system folders. - "Bang!" shows but the jailbreak doesn't run: - Check the .assets folder on the Kindle. "jb.sh" and "patchedUks.sqsh" must be in there. Enabling Ads (needed for jailbreak, safe to remove later) - Switch account region - Go to Manage Your Content and Devices → Preferences → Country/Region Settings → Change. - Select one of: US, UK, DE, FR, IT, ES, JP, CN - Use valid details (address, phone, email). - Add payment method - Set a default credit card and billing address matching the chosen region. - No charge should occur. - Enable special offers - In your Amazon account, turn on Special Offers for your Kindle. - Sync kindle - Connect to Wi-Fi, eventually ads will appear on lockscreen. Notes: - If your kindle originally had no ads, re-disabling later is free. - If your kindle is an ads model, disabling normally costs a one-time fee, but can be removed post-jb with a script. Special Thanks - Penguins184: This guide - Ceoz: Enable-ad findings ===== jailbreaking/Legacy/KindleBreak/index.md ===== KindleBreak KindleBreak (https://www.mobileread.com/forums/showthread.php?t=338268) is jailbreak utilising the KindleDrip (https://medium.com/realmodelabs/kindledrip-from-your-kindles-email-address-to-using-your-credit-card-bb93dbfb2a08) webkit exploit. Prerequisites - Please check that your Kindle is compatible (../getting-started.html) with KindleBreak - You will also need a PC KindleBreak will NOT work on firmware 5.12.2.2 Jailbreaking Your Kindle 1. On your Kindle, enable Airplane Mode if it isn't already on 2. Download jb-kindlebreak.zip (https://storage.gra.cloud.ovh.net/v1/AUTH2ac4bfee353948ec8ea7fd1710574097/mr-public/Touch/jb-kindlebreak.zip) MD5: 0215C36CC1E3AD8136A67DAEBE369452 3. Plug your Kindle into your computer 4. Extract the jb-kindlebreak.zip file to the root of your Kindle as so: jb, jb.sh and other files next to the documents folder [Image: KindleBreak-Files.png "Like This"] 5. Download file0.localstorage (./file0.localstorage) 6. Place it in the following folder in your Kindle: /.activecontent_sandbox/browser/resource/LocalStorage/ (create the folders if they aren't already there, replace the existing file) 7. Eject and unplug your Kindle 8. Open the Experimental Browser of the Kindle 9. The browser should freeze, crash and then after some time (up to 5 minutes) the Kindle will reboot. After this, it should show an error popup with the message Application Error or Collecting Debug Info 10. The device is now in a jailbroken state You are now ready to check the Post Jailbreak section for what to do now. Post Jailbreak (../../post-jailbreak/) Credits - Original guide written by Neon (https://www.mobileread.com/forums/member.php?u=329187) - KindleBreak (https://www.mobileread.com/forums/showthread.php?t=338268) created by tryol (https://www.mobileread.com/forums/member.php?u=317940) ===== jailbreaking/Legacy/LanguageBreak.md ===== LanguageBreak LanguageBreak (https://www.mobileread.com/forums/showthread.php?t=356872) is jailbreak utilising a novel langpicker-nativebridge (https://www.mobileread.com/forums/showthread.php?t=356766) exploit. Prerequisites - Please check that your Kindle is compatible (../getting-started.html) with LanguageBreak - You will also need a PC LanguageBreak will NOT work on firmwares newer than 5.16.2.1.1 Jailbreaking Your Kindle Downloading prerequisites 1. Download LanguageBreak from here (https://github.com/notmarek/LanguageBreak/releases/latest) 2. Extract the tar.gz file to somewhere safe on your computer Entering demo mode Initial setup 1. Factory reset your Kindle 2. On the language selection screen, select any language 3. Skip Wi-Fi registration by selecting any network and then backing out 4. Type ;enterdemo into the Kindle's searchbar an click enter 5. Reboot the Kindle by holding down the button and selecting the reboot option when it appears 6. The device should now boot into demo mode, if it doesn't, check the Troubleshooting (#troubleshooting) section 7. Skip WiFi setup and enter fake information when prompted 8. Skip searching for a demo payload 9. Select the standard demo type 10. Press Done at the "sideload content" prompt 11. Once that is done, you can byass the misconfiguration error using the following gesture: gesture [Image: ./WatchThis/WatchThis-Gesture.png] (tap with two fingers, then swipe left) 12. In the searchbar, type ;demo and click enter 13. Select the "sideload content" option Sideloading the content 1. Connect the Kindle to your PC 2. Copy the contents of the LanguageBreak folder to the Kindle - merging and replacing all files 3. Eject and Unplug your kindle and go back to the demo menu 4. Select the "Resell Device" option 5. Choose Yes/Resell 6. Now wait for the press power button message to show 7. As soon as it appears plug your kindle back to your computer and copy the contents of the LanguageBreak folder into it once again, overwrite files then safely eject 8. Hold the power button as instructed on screen 9. You should be in a language selection menu in a few seconds 10. Choose Chinese (The second-last one on the right list, above p s e u d o t) 11. Your kindle should reboot and you should see some log message on the screen 12. The device is now in a jailbroken state Install LanguageBreak-Specific Hotfix LanguageBreak is unique in the sense that its own Hotfix must be installed before proceeding with other Post Jailbreak items 1. Type ;uzb into the search bar of your Kindle and click enter 2. Connect the Kindle to your PC 3. Copy the updatehotfixlanguagebreak.bin from the LanguageBreak tar.gz you extracted during setup to the root of your Kindle 4. Eject and unplug the Kindle 5. Enter ;dsts into the search bar of the Kindle and click enter 6. Select Update Your Kindle You are now ready to check the Post Jailbreak section for what to do now. Post Jailbreak (../post-jailbreak/) Troubleshooting If you had any issue with the above steps... Alternative Demo Mode entry method 1. Plug the Kindle into your PC 2. Create an empty file named DONTCHECKBATTERY at the root of your Kindle 3. Activate demo mode by typing ;demo into the search bar and clicking enter 4. Continue from step 5 of Initial setup Resetting whilst in Demo Mode If you need to reset your device whilst in demo mode 1. Enter ;uzb in the search bar and click enter 2. Plug the Kindle into your PC 3. Create an empty file at the root of the Kindle called DOFACTORYRESTORE 4. Reboot the Kindle Secret Gesture Video this video (https://www.youtube.com/watch?v=JzuIGbGPpig) shows how to perform the misconfiguration bypass gesture Credits - LanguageBreak (https://www.mobileread.com/forums/showthread.php?t=356872) created by Marek (https://www.mobileread.com/forums/member.php?u=340787) - Original langpicker-nativebridge (https://www.mobileread.com/forums/showthread.php?t=356766) exploit discovered by GeorgeYellow (https://www.mobileread.com/forums/member.php?u=288138) and bulltricks (https://www.mobileread.com/forums/member.php?u=335985) ===== jailbreaking/Legacy/Popcorn/KT2.md ===== KT2 Popcorn is quite a sophisticated jailbreak method and requires prior electronics experience. It is not recommended to use Popcorn unless you have prior electronics experience especially if a software jailbreak such as WatchThis is available for it. Make sure you have followed the initial Popcorn instructions (./) Performing the Jailbreak 1. Tear down the KT2 up to step 5 as described here (https://www.ifixit.com/Guide/Kindle+7th+Generation+Motherboard+Replacement/37917) 2. Connect a wire between test pads TP1706 and TM401 as shown in this picture: Jumpers [Image: ./KT2.png] 3. Whilst those points are connected, hard reboot the Kindle by holding down the power button for 15 seconds 4. Plug the Kindle into your PC If everything went well, the device is now in SDP Mode and ready to be flashed Windows On Windows, simply locate the folder you extracted earlier, double click on MFGTool.exe to run it and then click on Start and wait for it to complete. You are now ready to check the Post Jailbreak section for what to do now. Post Jailbreak (../../post-jailbreak/) Linux On Linux, open a new terminal and navigate to the folder which contains the folder named imxusbloader If you run ls it should show the imxusbloader folder, run the following command: ~~~bash sudo imxusb -c imxusb_loader/wario ~~~ And wait for it to complete. You are now ready to check the Post Jailbreak section for what to do now. Post Jailbreak (../../post-jailbreak/) Credits - Original guide written by Neon (https://www.mobileread.com/forums/member.php?u=329187) - Popcorn (https://www.mobileread.com/forums/showthread.php?t=345655) created by katadelos (https://www.mobileread.com/forums/member.php?u=308426) - Original Test Point Image (https://www.mobileread.com/forums/showthread.php?t=340387) source ===== jailbreaking/Legacy/Popcorn/KT3.md ===== KT3 Popcorn is quite a sophisticated jailbreak method and requires prior electronics experience. It is not recommended to use Popcorn unless you have prior electronics experience especially if a software jailbreak such as WatchThis is available for it. Make sure you have followed the initial Popcorn instructions (./) Performing the Jailbreak 1. Tear down the KT3 up to 4:48 as shown here (https://youtu.be/LVt2hyPBrnA) 2. Connect a wire between test pads TP1706 and TM401 as shown in this picture: Jumpers [Image: ./KT3.webp] 3. Whilst those points are connected, hard reboot the Kindle by holding down the power button for 15 seconds 4. Plug the Kindle into your PC If everything went well, the device is now in SDP Mode and ready to be flashed Windows The KT3 uses a different set of jailbreak files for Windows than other models. Make sure you have downloaded the correct files. On Windows, simply locate the folder you extracted earlier, double click on MFGTool.exe to run it and then click on Start and wait for it to complete. You are now ready to check the Post Jailbreak section for what to do now. Post Jailbreak (../../post-jailbreak/) Linux On Linux, open a new terminal and navigate to the folder which contains the folder named imxusbloader If you run ls it should show the imxusbloader folder, run the following command: ~~~bash sudo imxusb -c imxusb_loader/heisenberg ~~~ And wait for it to complete. You are now ready to check the Post Jailbreak section for what to do now. Post Jailbreak (../../post-jailbreak/) Credits - Original guide written by Neon (https://www.mobileread.com/forums/member.php?u=329187) - Popcorn (https://www.mobileread.com/forums/showthread.php?t=345655) created by katadelos (https://www.mobileread.com/forums/member.php?u=308426) - Original Test Point Image (https://www.mobileread.com/forums/showthread.php?t=327055) source ===== jailbreaking/Legacy/Popcorn/KV.md ===== KV Popcorn is quite a sophisticated jailbreak method and requires prior electronics experience. It is not recommended to use Popcorn unless you have prior electronics experience especially if a software jailbreak such as WatchThis is available for it. Make sure you have followed the initial Popcorn instructions (./) The Kindle Voyage (KV) supports WatchThis on its latest firmware. It is not recommented that you use Popcorn instead of WatchThis Performing the Jailbreak 1. Tear down the KV up to step 5 as described here (https://www.ifixit.com/Guide/Kindle+Voyage+Screen+Replacement/37464) 2. Remove the motherboard by unscrewing it from the chassis and gently disconnecting all the cables and the battery 3. Connect a wire between test pads TM501 and TM500 as shown in this picture: Jumpers [Image: ./KV.png] 4. Whilst those points are connected, hard reboot the Kindle by holding down the power button for 15 seconds 5. Plug the Kindle into your PC If everything went well, the device is now in SDP Mode and ready to be flashed Windows On Windows, simply locate the folder you extracted earlier, double click on MFGTool.exe to run it and then click on Start and wait for it to complete. You are now ready to check the Post Jailbreak section for what to do now. Post Jailbreak (../../post-jailbreak/) Linux On Linux, open a new terminal and navigate to the folder which contains the folder named imxusbloader If you run ls it should show the imxusbloader folder, run the following command: ~~~bash sudo imxusb -c imxusb_loader/wario ~~~ And wait for it to complete. You are now ready to check the Post Jailbreak section for what to do now. Post Jailbreak (../../post-jailbreak/) Credits - Original guide written by Neon (https://www.mobileread.com/forums/member.php?u=329187) - Popcorn (https://www.mobileread.com/forums/showthread.php?t=345655) created by katadelos (https://www.mobileread.com/forums/member.php?u=308426) - Original Test Point Image source - Neon (https://www.mobileread.com/forums/member.php?u=329187)? ===== jailbreaking/Legacy/Popcorn/PW2.md ===== PW2 Popcorn is quite a sophisticated jailbreak method and requires prior electronics experience. It is not recommended to use Popcorn unless you have prior electronics experience especially if a software jailbreak such as WatchThis is available for it. Make sure you have followed the initial Popcorn instructions (./) Performing the Jailbreak 1. Tear down the PW2 up to step 4 as described here (https://www.ifixit.com/Guide/Kindle+Paperwhite+2nd+Generation+Motherboard+Replacement/71196) (DO NOT remove the battery) 2. Connect a wire between right pad of the CR501 to TP508 as shown in this picture (ignore the additional wires): Jumpers [Image: ./PW2-PW3.png] 3. Whilst those points are connected, hard reboot the Kindle by holding down the power button for 15 seconds 4. Plug the Kindle into your PC If everything went well, the device is now in SDP Mode and ready to be flashed Windows On Windows, simply locate the folder you extracted earlier, double click on MFGTool.exe to run it and then click on Start and wait for it to complete. You are now ready to check the Post Jailbreak section for what to do now. Post Jailbreak (../../post-jailbreak/) Linux On Linux, open a new terminal and navigate to the folder which contains the folder named imxusbloader If you run ls it should show the imxusbloader folder, run the following command: ~~~bash sudo imxusb -c imxusb_loader/wario ~~~ And wait for it to complete. You are now ready to check the Post Jailbreak section for what to do now. Post Jailbreak (../../post-jailbreak/) Credits - Original guide written by Neon (https://www.mobileread.com/forums/member.php?u=329187) - Popcorn (https://www.mobileread.com/forums/showthread.php?t=345655) created by katadelos (https://www.mobileread.com/forums/member.php?u=308426) - Original Test Point Image source - Neon (https://www.mobileread.com/forums/member.php?u=329187)? ===== jailbreaking/Legacy/Popcorn/PW3.md ===== PW3 Popcorn is quite a sophisticated jailbreak method and requires prior electronics experience. It is not recommended to use Popcorn unless you have prior electronics experience especially if a software jailbreak such as WatchThis is available for it. Make sure you have followed the initial Popcorn instructions (./) Performing the Jailbreak 1. Tear down the PW3 up to step 4 as described here (https://www.ifixit.com/Guide/Kindle+Paperwhite+3rd+Generation+Motherboard+Replacement/61696) (DO NOT remove the battery) 2. Connect a wire between right pad of the CR501 to TP508 as shown in this picture (ignore the additional wires): Jumpers [Image: ./PW2-PW3.png] 3. Whilst those points are connected, hard reboot the Kindle by holding down the power button for 15 seconds 4. Plug the Kindle into your PC If everything went well, the device is now in SDP Mode and ready to be flashed Windows On Windows, simply locate the folder you extracted earlier, double click on MFGTool.exe to run it and then click on Start and wait for it to complete. You are now ready to check the Post Jailbreak section for what to do now. Post Jailbreak (../../post-jailbreak/) Linux On Linux, open a new terminal and navigate to the folder which contains the folder named imxusbloader If you run ls it should show the imxusbloader folder, run the following command: ~~~bash sudo imxusb -c imxusb_loader/wario ~~~ And wait for it to complete. You are now ready to check the Post Jailbreak section for what to do now. Post Jailbreak (../../post-jailbreak/) Credits - Original guide written by Neon (https://www.mobileread.com/forums/member.php?u=329187) - Popcorn (https://www.mobileread.com/forums/showthread.php?t=345655) created by katadelos (https://www.mobileread.com/forums/member.php?u=308426) - Original Test Point Image source - Neon (https://www.mobileread.com/forums/member.php?u=329187)? ===== jailbreaking/Legacy/Popcorn/index.md ===== Popcorn Popcorn is a hardware jailbreak which works on any firmware on supported hardware. Popcorn only works on the following models: - PW3 - KV - KT2 - PW2 - KT3 The Kindle Voyage (KV) is compatible with WatchThis on every firmware released for it. It is not recommended to use Popcorn when possible. Popcorn is quite a sophisticated jailbreak method and requires prior electronics experience. It is not recommended to use Popcorn unless you have prior electronics experience especially if a software jailbreak such as WatchThis is available for it. Prerequisites - A PC running Linux or Windows (MacOS is not currently supported) - A jumper cable - A soldering iron (recommended) - Steady hands Getting Started (Windows) 1. Install 7-Zip (https://www.7-zip.org/) 2. For the PW2, PW3, KT2 or KV download these files: https://www.mobileread.com/forums/showpost.php?p=4217167&postcount=17 (https://www.mobileread.com/forums/showpost.php?p=4217167&postcount=17) For the KT3, download these files: https://www.mobileread.com/forums/showpost.php?p=4288479&postcount=60 (https://www.mobileread.com/forums/showpost.php?p=4288479&postcount=60) 3. Extract the files to a safe location Getting Started (Linux) 1. Install imxusbloader (via your distro's package manager) 2. Download the Popcorn Files (https://www.mobileread.com/forums/attachment.php?attachmentid=198921&d=1673376193) and extract them to a safe location Next Steps Simply select your model and follow the instructions on the page PW2 (./PW2.html) PW3 (./PW3.html) KT2 (./KT2.html) KT3 (./KT3.html) KV (./KV.html) Credits - Original guide written by Neon (https://www.mobileread.com/forums/member.php?u=329187) - Popcorn (https://www.mobileread.com/forums/showthread.php?t=345655) created by katadelos (https://www.mobileread.com/forums/member.php?u=308426) ===== jailbreaking/Legacy/WatchThis/index.md ===== WatchThis WatchThis (https://www.mobileread.com/forums/showthread.php?t=346037) is a jailbreak utilising a demo payload exploit. Prerequisites - Please check that your Kindle is compatible (../getting-started.html) with WatchThis - You will also need a PC WatchThis will erase all the data on your Kindle, so be sure to back up any local files you wish to keep Jailbreaking Your Kindle Initial setup 1. Factory reset your Kindle 2. On the language selection screen, select enGB or English (United Kingdom). 3. Skip Wi-Fi registration by selecting any network and then backing out 4. Type ;enterdemo into the Kindle's searchbar an click enter 5. Reboot the Kindle by holding down the button and selecting the reboot option when it appears 6. The device should now boot into demo mode, if it doesn't, check the Troubleshooting (#troubleshooting) section 7. Skip WiFi setup and enter fake information when prompted 8. Skip searching for a demo payload 9. Select the standard demo type 10. Press Done at the "sideload content" prompt 11. Once that is done, you can byass the misconfiguration error using the following gesture: gesture [Image: ./WatchThis-Gesture.png] (tap with two fingers, then swipe left) 12. In the searchbar, type ;demo and click enter 13. Select the "sideload content" option Sideloading the content 1. Connect the Kindle to your PC 2. On the Kindle, create a .demo directory at the root of the device 3. Download watchthis-jailbreak-r03.zip (https://mega.nz/file/2ahlQKZS#jXyYLEp9rvRQCOzv7LNYBF-9fOfPhpigaLZMHZkN7fg) 4. Extract this zip onto your computer (NOT the Kindle) 5. Locate the appropriate [YOURDEVICE]-[YOURFIRMWARE].zip file, and copy it to .demo/ (DO NOT EXTRACT IT) 6. Copy the demo.json file to .demo/ 7. Create a folder called goodreads in .demo, leave it empty 8. Now eject and unplug your Kindle, and then select Done at the prompt to install the jailbreak If an application error occurs, hold down the power button for 15 seconds or longer to hard-reboot the device, and then enter demo mode again and select sideload content, do not copy the files again. 9. Exit demo mode 10. ONLY if you are jailbreaking a KT2 or PW2 press the store button. For all other models, enter ;dsts into the search bar 11. Select Help & User Guides and then select Get Started 12. The device will now reboot into a jailbroken state WatchThis-Specific Hotfix WatchThis is unique in the sense that its own Hotfix must be installed before proceeding with other Post Jailbreak items 1. Type ;uzb into the search bar of your Kindle and click enter 2. Connect the Kindle to your PC 3. Copy the updatehotfixwatchthiscustom.bin from the WatchThis zip you extracted during setupto the root of your Kindle 4. Eject and unplug the Kindle 5. Enter ;dsts into the search bar of the Kindle and click enter 6. Select Update Your Kindle You are now ready to check the Post Jailbreak section for what to do now. Post Jailbreak (../../post-jailbreak/) Troubleshooting If you had any issue with the above steps... Alternative Demo Mode entry method 1. Plug the Kindle into your PC 2. Create an empty file named DONTCHECKBATTERY at the root of your Kindle 3. Activate demo mode by typing ;demo into the search bar and clicking enter 4. Continue from step 7 of Initial setup Resetting whilst in Demo Mode If you need to reset your device whilst in demo mode 1. Enter ;uzb in the search bar and click enter 2. Plug the Kindle into your PC 3. Create an empty file at the root of the Kindle called DOFACTORY_RESTORE 4. Reboot the Kindle Secret Gesture Video this video (https://www.youtube.com/watch?v=JzuIGbGPpig) shows how to perform the misconfiguration bypass gesture Credits - Original guide written by Neon (https://www.mobileread.com/forums/member.php?u=329187) - WatchThis (https://www.mobileread.com/forums/showthread.php?t=346037) created by katadelos (https://www.mobileread.com/forums/member.php?u=308426) ===== jailbreaking/Legacy/backing-up/backing-up.md ===== Backing Up Your Kindle This guide will briefly go over how to back-up your Kindle's partitions, allowing you to recover it if it becomes bricked. This only works on Kindle's which are 8th generation or OLDER, such as: - PW2 - PW3 - KT2 - KT3 - KV - KOA This is because newer devices such as the KT4/PW4 have different partition layouts as well as secure boot, making it impossible to resture backed up partitions. Prerequisites - A computer - A Jailbroken Kindle with KUAL installed - kterm (https://github.com/bfabiszewski/kterm) installed on your Kindle - knc1's Kindle Backup Script (https://www.mobileread.com/forums/showthread.php?t=289690) Backing up your Kindle 1. Plug your Kindle into your computer 2. Download the latest (https://github.com/bfabiszewski/kterm/releases/latest) kterm zip file 3. Extract the kterm folder into the extensions folder on your Kindle 4. Extract the backup-0.3.tar.gz file (knc1's backup script) somewhere on your computer 5. Copy the esys and unjail folders to the root of your Kindle when plugged in (same place as documents folder) 6. Eject and unplug your Kindle 7. Go to KUAL > kterm 8. Type the following commands: ~~~bash cd /mnt/us/unjail ./mkbackup.sh exit ~~~ The ./mkbackup.sh step may take a few minutes as it backs up your Kindle 9. Plug the Kindle back into your computer 10. There should be a backups folder, this contains your Kindle's system images, make sure you copy it to a safe location! If you ever want to back up your Kindle again, you can start from step 7, assuming you didn't remove kterm or the backup script Credits - Original guide written by Neon (https://www.mobileread.com/forums/member.php?u=329187) ===== jailbreaking/Legacy/backing-up/index.md ===== Backing Up 8th Generation and older jailbroken Kindles can have their partitions backed up and restored in case of catastrophic failures. This only works on Kindle's which are 8th generation or OLDER, such as: - PW2 - PW3 - KT2 - KT3 - KV - KOA This is because newer devices such as the KT4/PW4 have different partition layouts as well as secure boot, making it impossible to resture backed up partitions. Credits - Original guide written by Neon (https://www.mobileread.com/forums/member.php?u=329187) ===== jailbreaking/Legacy/backing-up/restoring.md ===== Restoring Your Kindle If your Kindle becomes bricked and you have a backup (./backing-up.html), then you can restore it as so: This only works on Kindle's which are 8th generation or OLDER, such as: - PW2 - PW3 - KT2 - KT3 - KV - KOA This is because newer devices such as the KT4/PW4 have different partition layouts as well as secure boot, making it impossible to resture backed up partitions. Prerequisites - A computer - Soldering and Electronics Expertise - A 1.8v Serial to USB Adapter connected to a Kindle - Software which can access the serial port installed, such as PuTTY (https://www.putty.org/) Restoring up your Kindle 1. Make sure that PuTTY is installed 2. Open a serial connection to your Kindle, the baud rate is usually 115200bps 3. Boot the Kindle and interrupt the boot process by rapidly hitting enter until you see uboot > 4. Once you see uboot >, boot into DIAGS by entering the command: boom 0xE41000 5. Once you are in DIAGS, export the userpace partition by running the usb export command 6. Then, copy your RootFS image file to the Kindle. Make sure you name it rootfs.img DO NOT FLASH THE KINDLE OR WRITE THE IMAGE TO IT DIRECTLY. Simply copy the image file to the Kindle 8. Eject BUT DO NOT UNPLUG your Kindle 9. Exit DIAGS mode by entering x at the prompt and enter a shell using the following command: exit login 10. Now we will flash your RootFS image on the Kindle, simply run the following command: dd if=/mnt/us/rootfs.img of=/dev/mmcblk0p1 bs=4096 11. Once it is finished, simply reboot the device via the reboot command With any luck, your Kindle should reboot good as new! Credits - Original guide written by Neon (https://www.mobileread.com/forums/member.php?u=329187) ===== jailbreaking/Legacy/index.md ===== Legacy These legacy jailbreak methods are no-longer recommended in favour for simpler methods such as WinterBreak (../WinterBreak) which support more models and firmware versions. These are kept here for historical purposes. The majority of this information was taken from Neon (https://www.mobileread.com/forums/member.php?u=329187)'s original wiki (https://kindlemodding.gitbook.io/kindlemodding) ===== jailbreaking/WinterBreak/index.md ===== WinterBreak After all, all devices have their dangers. The discovery of speech introduced communication – and lies. \- Isaac Asimov WinterBreak is a jailbreak which was released on New Year's Day 2025 by HackerDude (https://www.mobileread.com/forums/member.php?u=330416) It is based on Mesquito (../../mesquito/) Special thanks to Marek, NiLuJe, Katadelos and all the beta-testers during the development of this jailbreak. RIP bricked Kindles during beta-testing RIP the original deadlines Prerequisites - You will need a PC - Your Kindle must be registered - Your Kindle must have a valid, internet-connected WiFi network saved to it that it can connect to during steps 8 to 10 (inclusive) - File archiver software to unzip files (7-zip (https://www.7-zip.org/) or WinRar (https://www.win-rar.com/start.html?&L=0) for Windows) If you face any issues, please check the troubleshooting (#troubleshooting) section Installation Guide Previous Step Next Step Download the latest WinterBreak release: Download If your Kindle is is not yet registered, make sure to follow these steps to prevent your Kindle from automatically updating before registering your device with Amazon. This will help you avoid an automatic firmware update during the registration process Winterbreak/Mesquito does NOT work on firmware 5.18.1 and beyond Please use AdBreak 5.18.1+ Airplane Mode Turn on Airplane mode on your Kindle Rebooting Reboot your Kindle Extracting WinterBreak Once it has booted, plug the Kindle into your computer and extract the contents of the WinterBreak.tar.gz file to a safe place on your computer Then copy the files to your Kindle (do not extract direcly to the Kindle as this may fail). Replace any files if you are prompted to For Linux/MacOS users, ENSURE the hidden folder .activecontentsandbox has been copied to your Kindle Entering Mesquito Eject the Kindle from your computer Open the Kindle Store on your Kindle by clicking on the cart icon on the home screen When prompted, click Yes to turn off Airplane mode Running WinterBreak Once Mesquito has loaded, click on the WinterBreak icon Done Wait around 30 seconds, and your Kindle will say something along the lines of "Now you are ready to install the hotfix" If no funky text appears, retry the guide again. Once it does, turn Airplane mode back on and continue to the post-jailbreak stage If present, delete the update.bin.tmp.partial file from your device to prevent an automatic update Previous Step Next Step new Guide("guide", "../post-jailbreak/setting-up-a-hotfix", "Setting Up A Hotfix"); Troubleshooting If an “Unexpected error” occurs when you try to log in to the Kindle Store or only the Kindle Store home page is displayed, try the following solutions: LocalStorage Replacement 1. After successfully registered, plug your Kindle into your PC and delete the .activecontentsandbox folder, make sure to also delete any files with a name similar to update.bin.tmp.partial from your Kindle to prevent an automatic update 2. Reboot your Kindle 3. Disable Airplane mode and connect to a WiFi connection 4. Browse the regular Kindle Store for a couple of minutes to generate the files needed for Winterbreak to work, browse the book categories and download a free sample of any book 5. After a couple of minutes, enable Airplane mode and plug your Kindle into your PC again 6. Delete the cache directory in the path .activecontentsandbox/store/resource/LocalStorage. If this folder has not yet been generated, browse the Kindle Store for another couple of minutes until it is generated. Make sure to always delete the previously mentioned update.bin.tmp.partial file, especially before any rebooting 7. Once deleted, copy the Winterbreak files to your Kindle and reboot 8. Open the Kindle Store on your Kindle, when prompted, click Yes to turn off Airplane mode Factory Reset Faced this error and found a solution DiabloSat (https://github.com/progzone122) & Rexathion1 (https://github.com/Rexathion1) 1. Factory Reset your Kindle 2. Before registering - plug your Kindle into your PC, move the WinterBreak files to the root of your storage space 3. Login to your account, and enable Airplane mode as soon as possible 4. Connect your Kindle into your PC and delete the cache directory at the path .activecontentsandbox/store/resource/LocalStorage (skip this step if the LocalStorage directory does not exist) 5. Reboot your Kindle 6. Open the Kindle Store on your Kindle 7. When prompted, click Yes to turn off Airplane mode Special Thanks To Our Courageous Beta Testers - Crystals (Bricked their PW4 testing) - mergen3107 (Came up with the "WinterBreak" name) - Bomberfish - BionicGecko - Juliet - Rie - Robotic - scrad - shamanNS - akane - BlackNinja - Gimzie - Elaine Roberts - Lux - Marek - terra ===== jailbreaking/getting-started.md ===== Getting Started In order to jailbreak your Kindle, you will need to know which Kindle you have and then pick a method to jailbreak it. What Kindle Do You Have? Unlike Amazon, the Kindle Modding community, such as this Wiki and MobileRead reffers to Kindle models by their nicknames, ie: the PW4 referring to the Kindle Paperwhite (10th Generation) This is important to note due to the fact that many Kindle jailbreaks only work on specific models. Kindle Models (./kindle-models) Questions about Jailbreaking? Before attempting to jailbreak your Kindle, we strongly recommend reading the Kindle Jailbreak F.A.Q as it provides answers to common questions and issues. Jailbreaking F.A.Q (./jailbreak-faq) Credits - Thanks to marek (https://www.mobileread.com/forums/member.php?u=340787) for creating LanguageBreak - Thanks to katadelos (https://www.mobileread.com/forums/member.php?u=308426) for creating WatchThis - Thanks to tryol (https://www.mobileread.com/forums/member.php?u=317940) for creating KindleBreak ===== jailbreaking/index.md ===== Jailbreaking Your Kindle Jailbreaking a Kindle: - Allows devs to create system modifications or extensions to extend the functionality of the device further. - Also allows for the development of custom homebrew to run on the Kindle - Why not? What can I do? As a user, this gives you access to: - Custom screensavers - Custom fonts on firmwares that do not support it - Homebrew such as apps, games and more - Downgrading your firmware (../firmware-and-flashing/downgrading) Please be aware of the risks of jailbreaking before you jailbreak your Kindle including, but not limited to: - Potentially voiding the Kindle's waranty - Bricking (permanently breaking) the device - Security Risks Always jailbreak at your own risk. If you don't know what you are doing or are unsure, don't do it. Getting Started (./getting-started.html) Credits Parts of this page were adapted from Reddit (https://www.reddit.com/r/kindle/comments/1hrwytr/comment/m516ft5/) ===== jailbreaking/jailbreak-faq.md ===== Frequently Asked Questions We recommend reading this article before or after jailbreaking your Kindle device and share it with other people. Most of these instructions are subjected to changes due to newer jailbreaks, patches, extensions, firmware versions, etc. (Last updated: May 24th, 2025) General/Account --- Can I jailbreak my Kindle with Winterbreak if my device is unregistered/blacklisted? Winterbreak needs your Kindle to be registered, it also needs a valid, internet-connected WiFi network saved. It's still possible to jailbreak an unregistered/blacklisted device, but currently, the only jailbreaking methods for those devices work on or below firmware 5.16.2.1.1. You can find these jailbreaking methods in Legacy Jailbreaks (https://kindlemodding.org/jailbreaking/Legacy/). My Kindle updated to a firmware version that doesn't have any jailbreak method! Can I still jailbreak it? No. You'll have to wait for a new jailbreak method (or patch) to be released. This may take weeks or even months. To protect your Kindle from automatic updates, forget all saved internet connections, enable Airplane mode, and wait. If you still want to use the internet on your Kindle while avoiding automatic updates, you might find this guide helpful (https://kindlemodding.org/jailbreaking/prevent-auto-update.html). Can I downgrade my Kindle so I can jailbreak it? No. Your Kindle must be jailbroken first in order to downgrade. This is because Amazon has never provided a way to downgrade on stock firmware. Can I remove my account after jailbreaking? Yes, but you will have to log in again if you want to jailbreak from scratch. The jailbreak will still work whether you log back in or log out. After unregistering, the Kindle will delete all files located in the documents folder, including the KUAL Launcher booklet and any other scripts that have been transferred. Be sure to back up these files first. Can I un-jailbreak my Kindle? Yes, perform a factory reset on the device and then install the same firmware update (or higher). Don't forget to re-enable automatic updates first (Restore option in renametobin) to avoid an update block. Will this get my Amazon account banned? No reports of Amazon accounts being banned after jailbreaking have been reported so far. However, please refrain from telling support that you have modified your device. Will this void the warranty on my Kindle device? Probably. How do I get the Amazon store back again? Read and follow this guide (https://kindlemodding.org/jailbreaking/post-jailbreak/re-enabling-the-store/). What does soft-float and hard-float firmware means? Starting with version 5.16.3, Kindles started using hard-float architecture (on-chip floating point unit) for most processing tasks, compared to the soft-float architecture, which emulated in software. While the underlying system appears mostly the same, many internal changes have made a lot of jailbreaking tools and extensions unusable in modern firmware versions. This ultimately means that most extensions found on MobileRead/Discord servers won't work on hard-float firmware or viceversa unless explicitly stated (i.e NiLuJe's Screensaverhack). Apps and eBooks --- Can I still use the default reader after jailbreaking? Yes. Can I still sideload books after jailbreaking? Yes. Will my books and highlights be deleted after jailbreaking? No. if your device has been in Airplane mode for a long period of time, there is a possibility that Amazon will delete all sideloaded books (https://www.mobileread.com/forums/showpost.php?p=4419300&postcount=409) from your device after reconnecting to WiFi due to an internal book tag. This can happen regardless of whether your device is jailbroken or not. Will Libby/Readwise/GoodReads/Kindle Unlimited/Send To Kindle still work after jailbreaking? Yes. Jailbreaking doesn’t interfere with any of these services. Can I use those applications within KOReader? Unless there's a plugin for it, no. Can I install Android apps on my jailbroken Kindle (Libby, Nook, Webtoon)? Unless there's a extension/port for any of them, no. How do I read my Amazon ebooks within KOReader? KOReader currently doesn’t (and likely never will) support the proprietary formats that Amazon converts all ebooks into (KFX, AZW3, and very limited support for MOBI). It is recommended to get all your books as EPUB and store them in a separate folder for easy access. How do I read my Libby books? You cannot use the Libby service within KOReader. You can get the EPUB file from Libby by following this guide (https://help.libbyapp.com/en-us/6059.htm). Where can I download free e-books? You can Google this. KOReader --- What is the difference between the three KOReader launch options? - "Start KOReader": The designed way to start KOReader. - "Start KOReader (no framework)": Temporarily "kills" the Kindle UI to allocate more resources to KOReader. - "Start KOReader (ASAP)": Skips a couple of checks and starts KOReader as soon as possible. I can't no longer transfer files through USB while I am on KOReader! KOReader currently does not support USBMS mode (USB transfer) and will only charge the device, if you want to transfer files you must exit KOReader to do so. Do I have to launch KOReader through KUAL? Not necessarily. You can launch it with simple scriptlets (https://kindlemodding.org/kindle-dev/scriptlets.html), specifically, Marek's launcher that is available here (https://scriptlets.notmarek.com/). A KUAL booklet launcher (made by yparitcher) (https://github.com/yparitcher/KUALBooklet/releases/) extension is also available to install. You can further customize both the KUAL booklet and the KOR launcher with the coversetter extension made by Stanner (https://www.mobileread.com/forums/showpost.php?p=4222466&postcount=15). Technical --- What is the "root directory"? It's the first directory you see when you plug the device into your computer. If you have SSH access to the device, this directory can be found at /mnt/us/. Can I update/factory reset/downgrade my Kindle after jailbreaking? Yes, but you must first enable Airplane mode and enable automatic updates again (Restore option in renametobin) to avoid any potential self-blocks or unwanted automatic updates. When updating, ensure that the newer version supports a jailbreak. After updating/factory reset/downgrading, re-install the hotfix from scratch. KUAL and some others extensions may need to be re-installed too. How do I downgrade my Kindle? Read and follow this guide (https://kindlemodding.org/firmware-and-flashing/downgrading/#downgrading-your-kindle). Where can I download firmware update files? Read and follow this guide (https://kindlemodding.org/firmware-and-flashing/downloading-updates.html). Find your exact model, find the download link and re-type the numbers to get the firmware version you want. How do I use Scriptlets (.sh)? As explained in the Scriptlets section (https://kindlemodding.org/kindle-dev/scriptlets.html#siptlets), copy the scriptlet file into the documents folder (/documents). Once you're in the library view mode on Kindle, simply click on it. How can I check that the automatic updates have been disabled after using renametobin? Download the "Check OTA Status" scriptlet from here (https://scriptlets.notmarek.com/) Is it possible to change screensavers in the native Kindle UI? Although there are currently no extensions to change the screensavers in hard-float firmware, it is still possible to change them, but it is not recommended as it is very easy to brick the device. If you still want to change the screensavers, check the details of your default Kindle screensavers inside the /usr/share/blanket/screensavers folder, get root writing permissions, and set the custom ones with the same name prefix and settings (bit-depth and resolution). You can either replace them all or add them to the slideshow queue. Please note that even after following these precautions, it is not guaranteed your device won’t brick, especially if you're using GIMP to export the images. If you are, however, running soft-float firmware prior to or on 5.16.2.1.1 you can install NiLuJe's screensaver hack (https://www.mobileread.com/forums/showthread.php?t=195474). Please do not make the mistake of installing this extension on hard-float firmware. You can easily change screensavers with KOReader (https://koreader.rocks/userguide/) (search for the "screensavers" feature). Jailbreaking --- How can I check if my device is jailbroken? Type ;log into the search bar, if a message pop ups, you're jailbroken. KUAL stopped working!/I can't no longer launch any of my extensions! Verify if your device is still jailbroken by typing log; into the search bar. - If it prompted any text, re-install the hotfix and KUAL (https://kindlemodding.org/jailbreaking/post-jailbreak/setting-up-a-hotfix/) from scratch. - If not re-jailbreak (https://kindlemodding.org/jailbreaking/getting-started.html) your device. - If everything else failed, factory reset your device and start the jailbreak from scratch. I can't no longer update my Kindle after a factory reset/update! If you reset your Kindle in a jailbroken state with renametobin enabled, then your Kindle may be in a broken state, to fix this, read this guide (https://kindlemodding.org/jailbreaking/recovering-from-a-reset.html). I get a message saying "Failed to remount rootfs RO, waiting"! This is expected, you can safely reboot your device manually (holding the power button until you get the Restart option) My device hasn't rebooted after the jailbreaking pop-up! Unless the Kindle displays in small text the message: “You are now ready to install the hotfix”, you can safely reboot and continue with the post-jailbreak instructions. If not, something wrong happened in the jailbreak process. Remember to delete any automatic update file that might have appeared. I kept getting random "KPPMainAppV2" books added to my Kindle library, what should I do!? Kindles usually generate those books after detecting any kind of error (mostly common after exiting KOReader frameworkless), you can safely delete them. You can also disable the generation of these books by creating an empty file named DISABLECOREDUMP to the visible USB storage root of your device. This is also the case for the "Collecting Debug Info" message. I have successfully jailbroken my device, what now? You can do one of the following: - Install KOReader (https://kindlemodding.org/jailbreaking/post-jailbreak/koreader.html) - Downgrade your Kindle (https://kindlemodding.org/firmware-and-flashing/downgrading/) - Download some scriptlets (https://scriptlets.notmarek.com/) - Develop more extensions (https://kindlemodding.org/kindle-dev/) - Browse MobileRead (https://www.mobileread.com/forums/forumdisplay.php?f=150) or the Kindle Modding Community Discord Server for more scriplets and extensions. - Install Alpine Linux - Support Winterbreak & the Wiki ❤️ (https://ko-fi.com/hackerdude) What does the KFT option in the settings menu do? ¯\(ツ)/¯ Credits - Written by Bundlerocks ===== jailbreaking/kindle-models.md ===== Kindle Models You can find your serial number by going to Settings > Device Options > Device Info Which will show a window in which you will be able to see your Kindle's serial number You only need to enter the first 8 characters of your serial number, not all 16 characters #searchResult { display: flex; flex-direction: column; align-items: center; justify-content: center; } input[type=text] { width: 90%; height: 100%; padding: 0.5em; font-size: 16px; border: 3px solid #EEE; text-align: center; } Enter your Kindle's serial number here Find Model All Kindle Models ===== jailbreaking/post-jailbreak/disable-ota.md ===== Disabling OTA Updates Kindles automatically update when connected to WiFi, which despite a hotfix, can often cause instabilities on jailbroken systems or outright remove the jailbreak. Previous Step Next Step Determine your firmware version Before proceeding, check your Kindle's firmware version by going to: Home → Menu → Settings → Menu → Device Info Follow the appropriate instructions for your firmware version in each step below Preparation Firmware No preparation needed Firmware >=5.11.x: Download the renameotabin extension from MobileRead forums Connect to computer Firmware Plug your Kindle into your PC via USB cable Wait for your computer to recognize the device Firmware >=5.11.x: Plug your Kindle into your PC via USB cable Wait for your computer to recognize the device Disable OTA updates Firmware Navigate to the root directory of your Kindle Create a folder called update.bin.tmp.partial Firmware >=5.11.x: Unzip and copy the renameotabin folder to the extensions folder on your Kindle Delete any file with a name similar to update.bin.tmp.partial or ending in .bin from your Kindle to prevent an automatic update Disconnect Firmware Safely eject your Kindle from your computer Unplug the USB cable from your Kindle No further action is needed - OTA updates are now disabled Firmware >=5.11.x: Safely eject your Kindle from your computer Unplug the USB cable from your Kindle Final steps Firmware No additional steps needed Firmware >=5.11.x: Open KUAL (Kindle Unified Application Launcher) Select Rename OTA Binaries from the menu Select Rename Your Kindle will now reboot automatically Done Your Kindle is now jailbroken with OTA updates disabled! Firmware To restore OTA updates, simply delete the update.bin.tmp.partial folder Firmware >=5.11.x: If you want to factory reset, downgrade or update your Kindle, you will need to restore the update binaries by opening KUAL, selecting Rename OTA Binaries and then selecting Restore instead of rename You can now safely turn off Airplane Mode and re-enable WiFi. Your Kindle will connect to the internet but will not download or install OTA updates. Previous Step Next Step .version-block { background-color: #1e1e1e; border-radius: 8px; padding: 12px; margin-bottom: 12px; width: 100%; } .version-label { font-weight: bold; border-bottom: 1px solid #369d36; padding-bottom: 5px; margin-bottom: 10px; color: #369d36; } new Guide("guide", "re-enabling-the-store", "Re-enable Store"); Credits - Original guide written by Neon (https://www.mobileread.com/forums/member.php?u=329187) ===== jailbreaking/post-jailbreak/index.md ===== Post Jailbreak Once you have jailbroken your Kindle, there are still some extremely important steps you will need to perform described in this section of the Wiki Turn on Airplane mode now so your Kindle doesn't automatically update to latest firmware before applying OTArenamer! Setup a hotfix (./setting-up-a-hotfix) ===== jailbreaking/post-jailbreak/installing-kual-mrpi/index.md ===== Installing KUAL and MRPI You will need to install KUAL (Kindle Unified Application Launcher) and MRPI (MobileRead Package Installer) to run homebrew on your Kindle. Previous Step Next Step Download MRPI MRPI This version of MRPI is provided by Marek Download the correct KUAL version Kual (Coplate) - For Kindles newer than the K5 (any kindle released after 2012) The above version of KUAL is provided by HackerDude KUAL - For legacy devices Extracting MRPI Extract the contents of the MRPI tar file you downloaded, and copy the extensions and mrpackages folders to your Kindle Extracting/Copying KUAL If you downloaded KUAL for legacy devices, extract the .tar.xz file you downloaded to get the UpdateKUALBooklet_install.bin file The above step does not apply if you downloaded KUAL (Coplate) Now, find the UpdateKUALBooklet_install.bin file and copy it to your Kindle's mrpackages folder Eject and unplug your Kindle Running MRPI On your Kindle, type ;log mrpi into the search bar and hit enter Done Now wait whilst KUAL is installed, your Kindle screen turns white and shows some icons, after a while you will be returned to your library and see a KUAL book appear in it. If you see a "Application Error" dialog, you can close it without worry - this is normal behaviour on some modern Kindles Previous Step Next Step new Guide("guide", "../disable-ota", "Disabling OTA Updates"); Troubleshooting - The installation of UpdateKUALBooklethotfix_install.bin may fail if there is not enough free space on your Kindle. If you are using the "fill storage" method to block updates, make sure to free up some space before proceeding with these steps. - Verify the location of all the folders and files on the Kindle - Try copying the UpdateKUALBooklethotfix_install.bin file to the root of your Kindle when connected to your PC, and then go to Settings > Update Your Kindle, then resume from step 5 ===== jailbreaking/post-jailbreak/koreader.md ===== Installing KOReader KOReader is a document viewer for E Ink devices. Supported formats include EPUB, PDF, DjVu, XPS, CBT, CBZ, FB2, PDB, TXT, HTML, RTF, CHM, DOC, MOBI and ZIP files. Your Kindle must be jailbroken and have MRPI and KUAL installed to be able to run KOReader. Previous Step Next Step Determine your firmware version Before proceeding, check your Kindle's firmware version by going to: Home → Menu → Settings → Menu → Device Info Different firmware versions require different KOReader packages Download KOReader Download KOReader from the official release page Choose the correct package for your Kindle: KOReader Packages: kindle-legacy: K2, DX, K3 (and all variants) kindle: K4, K5, PW1 kindlepw2: PW2 and newer models running firmware = kindlehf: Any Kindle device running firmware >=5.16.3 Alternative Download Method Firmware >=5.16.3: Marek's KOReader Installer (nightly) Download and copy this scriptlet into the /documents folder on your Kindle, run it from your Library and it will automatically download and install KOReader This alternative method might not work for everyone Connect your Kindle to your computer Plug your Kindle into your PC via USB cable Wait for your computer to recognize the device Make sure your Kindle appears as a storage device on your computer Install KOReader Unzip the downloaded file Copy the extensions and koreader folders to the root directory of your Kindle When prompted, confirm to merge or replace existing files Disconnect and Launch Safely eject and unplug your Kindle Open KUAL (Kindle Unified Application Launcher) Search for the KOReader menu entry and click on it KOReader Launch Options When launching KOReader, you may see three options: Start KOReader: The designed way to start KOReader Start KOReader (no framework): Temporarily "kills" the Kindle UI to allocate more resources to KOReader Start KOReader (ASAP): Skips a couple of checks and starts KOReader as soon as possible Done KOReader is now installed on your Kindle! We recommend reading the extensive but very helpful guide for KOReader KOReader currently does not support USBMS mode (USB transfer) and will only charge the device, if you want to transfer files you must exit KOReader to do so If KOReader appears in KUAL but doesn't work when clicked, delete both koreader folders, re-download koreader and make sure you're downloading the right package for your Kindle Previous Step Next Step .version-block { background-color: #1e1e1e; border-radius: 8px; padding: 12px; margin-bottom: 12px; width: 100%; } .version-label { font-weight: bold; border-bottom: 1px solid #369d36; padding-bottom: 5px; margin-bottom: 10px; color: #369d36; } new Guide("guide", "../jailbreak-faq", "Jailbreak FAQ"); Credits - Written by Bundlerocks, re-designed to Fluent Style with ntindle and adapted from the official KOReader Github installation page (https://github.com/koreader/koreader/wiki/Installation-on-Kindle-devices#err-there-are-four-kindle-packages-to-choose-from-which-do-i-pick) ===== jailbreaking/post-jailbreak/re-enabling-the-store/index.md ===== Re-enabling the Store Ensure you've disabled OTA Updates (../disable-ota) before re-enabling the store.This is WinterBreak-Only, and it does not apply to AdBreak. Previous Step Next Step Connect your Kindle to your computer Plug your Kindle into your computer via USB cable Make sure your Kindle has the OTA updates disabled via the renameotabin tool Delete the .activecontentsandbox folder Navigate to the root directory of your Kindle Find and delete the .activecontentsandbox folder This folder may be hidden. Make sure to enable viewing of hidden files in your file explorer Eject and unplug your Kindle Safely eject your Kindle from your computer Unplug the USB cable from your Kindle Reboot your Kindle Hold the power button for about 20 seconds until your Kindle reboots Wait for the device to fully restart The reboot process may take a couple of minutes Done The Kindle store functionality should now be re-enabled on your device If you still experience issues accessing the store, try the troubleshooting tips below Previous Step Next Step new Guide("guide", "../koreader", "Install KOReader"); Troubleshooting - If you cannot locate the hidden .activecontentsandbox folder, try using the command line or enabling hidden files in your file explorer - If the store still doesn't work after rebooting, try a second reboot - Make sure airplane mode is turned off when trying to access the store - Ensure your Kindle is registered to your Amazon account - Verify that OTA updates remain disabled after this process ===== jailbreaking/post-jailbreak/setting-up-a-hotfix/index.md ===== Setting Up A Hotfix A hotfix allows your Kindle's jailbreak to persist after updating. There are two different hotfixes and which one you need to install depends on which method you used to jailbreak your Kindle. If you installed OTARenamer, make sure to uninstall it beforehand or the hotfix will not be detected by the Kindle Previous Step Next Step Download The Hotfix Download Download (Compatibility) If scriptlets don't work, please redo these steps using the compatibility hotfix! Copy The Hotfix Plug your Kindle into your PC and copy the Updatehotfixuniversal.bin file to it If you see any other files on your Kindle ending in .bin, or have a similar name to update.bin.tmp.partial, you must delete them for the hotfix to work. Remember to enable Airplane mode to prevent any automatic updates from downloading Install The Hotfix Eject the Kindle and unplug it, then open settings, click on the three dots, and select Update Your Kindle Confirming Hotfix Install If asked, select Update. You can expect this to install the hotfix, as an update. Running the hotfix Once the hotfix has installed, you'll need to run it. Run the hotfix by selecting the Run Hotfix booklet in your library. Once the hotfix is done running, you can install KUAL and MRPI You will need to run the hotfix booklet after every OTA update Previous Step Next Step new Guide("guide", "../installing-kual-mrpi", "Installing KUAL & MRPI"); Troubleshooting Hotfix Won't Install There is a good chance that after installing an older version of Hotfix you disabled OTA updates, meaning the Hotfix update file will be ignored! Follow these steps to update the Hotfix: 1. Activate airplane mode 2. Enable OTA update (KUAL -> Rename OTA binaries -> Restore) 3. Follow the Hotfix installation instructions above 4. Disable OTA update (KUAL -> Rename OTA binaries -> Rename) ===== jailbreaking/prevent-auto-update.md ===== Preventing Automatic Updates by Filling Kindle Storage Why Fill the Kindle's Storage? Kindle devices can automatically download and install firmware updates when they have enough free storage space. These updates can block jailbreaking methods. Automatic updates may occur when: - You open the Kindle Store. - You register your Kindle to an Amazon account. - The device is connected to Wi-Fi, even briefly. - The Kindle is rebooted while connected to the internet. Filling the Kindle's storage (leaving only 50-200 MB free) prevents the device from downloading and installing updates, as the update process requires more free space. How to Fill the Kindle's Storage Delete update-whatever.bin OR update.partial.bin, and turn on Airplane Mode! You can use a simple script to fill your Kindle's storage with dummy files, leaving only a small amount of free space. This script is available in the Kindle-Filler-Disk GitHub repository (https://github.com/bastianmarin/Kindle-Filler-Disk/) along with other useful scripts for Windows, macOS, and Linux. The script will not work on 11th gen Kindles and newer because these devices use MTP to connect to computers If this is your situation, you have two options: 1. Delete any stray files ending in .bin, or have a similar name to update.bin.tmp.partial manually at every step of the Jailbreak guide 2. Manually fill your Kindle. Download the Filler files (https://github.com/bastianmarin/Kindle-Filler-Disk/tree/main/MTP/) that match your Kindle's storage from the link below. Extract the files, then move them to the root of your Kindle (you can also save them on a separate folder). After doing so, make sure to leave only 50–200 MB of free space Previous Step Next Step 1. Put Your Kindle in Airplane Mode Turn on Airplane mode on your Kindle 2. Connect Your Kindle to Your Computer via USB Use a USB cable to connect your Kindle to your computer. Wait for the Kindle to appear as a USB drive. 3. Download the Disk Filler Script Go to the Kindle-Filler-Disk GitHub repository. Download the appropriate script for your operating system: Windows: Filler.ps1 macOS/Linux: Filler.sh 4. Move the Script to Your Kindle Copy the downloaded script file to the root directory of your Kindle (the main folder you see when you open the Kindle as a USB drive). Windows: Filler.ps1 macOS/Linux: Filler.sh 5. Run the Script Windows: Open File Explorer and navigate to your Kindle drive. Right-click Filler.ps1 and select Run with PowerShell. If you see an execution policy error, open PowerShell in the Kindle drive and run: powershell -ExecutionPolicy Bypass -File .\Filler.ps1 macOS/Linux: Open a terminal in the Kindle drive where Filler.sh is located. Make it executable if needed: chmod +x Filler.sh Run the script: ./Filler.sh 6. Safely Disconnect and Verify Storage Eject your Kindle from your computer. On your Kindle, go to Settings > Device Options > Device Info (or similar). Check that the available storage is 20 MB or less. 7. Register Your Kindle With storage nearly full, connect to Wi-Fi and register your Kindle to your Amazon account. The device will not be able to download updates due to lack of space. 8. Enable Airplane Mode Again Immediately after registration, enable Airplane Mode to prevent any update attempts. Proceed with the next jailbreak steps (such as WinterBreak). Important Note: After filling your Kindle's storage, check its contents in the main folder (root directory) and delete any files ending with .bin or named update.bin.tmp.partial. These files are automatic update attempts by the Kindle and should be removed to prevent the device from trying to install an update when you free up space. Previous Step Next Step .version-block { background-color: #1e1e1e; border-radius: 8px; padding: 12px; margin-bottom: 12px; width: 100%; } .version-label { font-weight: bold; border-bottom: 1px solid #369d36; padding-bottom: 5px; margin-bottom: 10px; color: #369d36; } new Guide("guide", "./getting-started", "Jailbreak"); --- After Jailbreak: Freeing Up Space Once you have completed the jailbreak process, you can safely delete the filldisk folder to recover storage space. You may also remove only some of the files if you want to keep the disk nearly full for a while longer. - Windows: Open File Explorer and navigate to the folder containing filldisk. Delete the filldisk folder, or remove individual files inside it. - Linux / macOS: Open a terminal in the folder containing filldisk and run: ``sh rm -rf filldisk `` Or remove individual files as needed. This will restore your available disk space. --- For more scripts and detailed guides, visit the Kindle-Filler-Disk GitHub repository (https://github.com/bastianmarin/Kindle-Filler-Disk/). ===== jailbreaking/recovering-from-a-reset.md ===== Recovering From A Reset If you factory reset your Kindle to a jailbroken state without first disabling renametobin (the Restore option), then your Kindle may be in a broken state, to fix this, perform the following steps: 1. Follow the MRPI installation instructions (./post-jailbreak/installing-kual-mrpi/) 2. Follow the Disable OTA instructions (./post-jailbreak/disable-ota.html) 3. Instead of choosing the Rename option, use the Restore option If you come from an un-jailbreak attempt, you can also force an update by copying the firmware update file to your Kindle and, while still plugged in, hold down the power button until it restarts. ===== kindle-apps-and-services/AssetOwnership.DeviceSharingUpdated.md ===== AssetOwnership.DeviceSharingUpdated LIPC Properties | ID | Type | R/W/RW | Value | Description | |:----------------:|:----:|:------:|:-----:|:-----------:| | s2dmmessage | Str | w | | TODO | | admmessage | Str | w | | TODO | | adm_registration | Str | w | | TODO | ===== kindle-apps-and-services/AssetOwnership.SMD.Poll.md ===== AssetOwnership.SMD.Poll LIPC Properties | ID | Type | R/W/RW | Value | Description | |:----------------------------:|:----:|:------:|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------:| | s2dmmessage | Str | w | | TODO | | transferProgressNotification | Has | rw | [NOT SHOWN] | TODO | | logMask | Str | rw | [0x0fff0000] | TODO | | refreshCache | Str | w | | TODO | | handleToDoItem | Str | w | | TODO | | logLevel | Str | rw | [Current log level=info(Possible transient levels: all, perf, debug[9-0], info, warn, error,crit, none)(Possible persistent levels: pall, pperf, pdebug[0-9], pinfo, pwarn,perror, pcrit, p_none)] | TODO | ===== kindle-apps-and-services/CampaignSync.Invalidate.md ===== CampaignSync.Invalidate LIPC Properties APP/SERVICE DOES NOT USE LIPC ===== kindle-apps-and-services/CampaignSync.Update.md ===== CampaignSync.Update LIPC Properties | ID | Type | R/W/RW | Value | Description | |:----------------:|:----:|:------:|:-----:|:-----------:| | s2dmmessage | Str | w | | TODO | | admmessage | Str | w | | TODO | | adm_registration | Str | w | | TODO | ===== kindle-apps-and-services/DPCService.SettingChanged.md ===== DPCService.SettingChanged LIPC Properties | ID | Type | R/W/RW | Value | Description | |:----------------:|:----:|:------:|:-----:|:-----------:| | s2dmmessage | Str | w | | TODO | | admmessage | Str | w | | TODO | | adm_registration | Str | w | | TODO | ===== kindle-apps-and-services/DeviceMessaging.LanguageLayer.MessageResponse.md ===== DeviceMessaging.LanguageLayer.MessageResponse LIPC Properties | ID | Type | R/W/RW | Value | Description | |:----------------:|:----:|:------:|:-----:|:-----------:| | s2dmmessage | Str | w | | TODO | | admmessage | Str | w | | TODO | | adm_registration | Str | w | | TODO | ===== kindle-apps-and-services/HouseholdMessage.Updates.md ===== HouseholdMessage.Updates LIPC Properties | ID | Type | R/W/RW | Value | Description | |:----------------:|:----:|:------:|:-----:|:-----------:| | s2dmmessage | Str | w | | TODO | | admmessage | Str | w | | TODO | | adm_registration | Str | w | | TODO | ===== kindle-apps-and-services/_lipc.txt ===== com.lab126.todo w Str scheduleToDoItems r Int driveAvailInternally [1] w Int disableToDo w Str wifiPopupDone w Str wirelessOn w Int enableToDo w Str captivePortalResponse w Str isToDoAvailable rw Str logLevel [Current log level=none (Possible transient levels: all, perf, debug[9-0], info, warn, error, crit, none) (Possible persistent levels: p_all, p_perf, p_debug[0-9], p_info, p_warn, p_error, p_crit, p_none)] rw Str logMask [0x00000000] w Int scheduleToDo w Int disableToDoForProfileSwitch w Str reportStatus w Str demoWifiNotAvailableAlertResponse com.lab126.amazonRegistrationService r Str primaryUserId [amzn1.account.xxxxxxxxxxxxxxxxxxxxxxxxxxxx] w Str registerWithToken r Int isRegistered [1] w Str registerWithPreAuthorizedCode w Int deregister rw Has registerSecondaryUser [*NOT SHOWN*] rw Has registerPrimaryUser [*NOT SHOWN*] CampaignSync.Invalidate com.lab126.wishlist w Str refreshCache com.lab126.kindleStatusService w Str logToFile w Str recordConfigMetrics w Str log com.lab126.winmgr.ligl w Str logMask com.lab126.bev com.lab126.booklet w Str run w Str kill com.lab126.powerd w Int touchScreenSaverTimeout w Int deferSuspend w Int wakeUp r Int flRawIntensity [3280] w Int rtcWakeup r Str state [active] w Int suspendGrace r Str battStateInfo [{"battInfo":[{"type":"PRIMARY","cap":51,"charging":false}],"state":"STANDALONE","aggr_batt":51,"usb":false}] w Int deferRestart w Str shutdownAlertResponse r Int battTemperature [73] w Int addSuspendLevels rw Str logLevel [Current log level=none (Possible transient levels: all, perf, debug[9-0], info, warn, error, crit, none) (Possible persistent levels: p_all, p_perf, p_debug[0-9], p_info, p_warn, p_error, p_crit, p_none)] r Int battLevel [51] rw Int preventScreenSaver [0] rw Str logMask [0x00000000] w Int sendPendingResume rw Int flAuto [0] rw Int flIntensity [24] r Int flMaxIntensity [25] w Str rtcWakeup2 w Int abortSuspend r Int flTurboBrightnessIntensity [1] w Int powerButton w Int flStartup r Str status [Powerd state: Active Remaining time in this state: 588.597023 defer_suspend:0 suspend_grace:0 prevent_screen_saver:0 drive_mode_state:1 PRIMARY BATTERY Battery Level: 51% Last batt event at: 51% Charging: No Battery logging: On ] r Int isLowTempState [0] r Int isCharging [0] com.lab126.kaf w Str dumpHeap r Str timezoneId [America/Los_Angeles] w Str callInspector w Str callCVM w Int allocHeap r Int heapUsed [20185] rw Str logLevel [info] w Str dumpHeapWithoutGC rw Int delayFrameworkStart [0] r Int frameworkStarted [1] rw Str logMask [crit | error | warn | info (0x7800000)] r Str dumpHeapUsage [{"totalMemory":"34865152","maxMemory":"34865152","freeMemory":"14167392"}] w Str dumpNativeHeapStats com.lab126.winmgr w Str refreshOnTurn r Str accelerometer [U] w Int eatTapMode w Str liglDebugParams w Str defineWipeCurve w Str visibleWindows rw Str setAccOrientation [0] rw Int passwordDialogEnabled [0] w Str liglFlash rw Int liglPause [0] rw Str pageTurnkeyConfig [Normal] w Str setPreference w Str getAllWindows r Str getActiveAppTitle [L:A_N:application_ID:com.lab126.booklet.home_M:false_PC:TS_RC:true_WT:true_ASR:true_O:U_WTNB:true_WTPB:false] rw Str logLevel [Current log level=info (Possible transient levels: all, perf, debug[9-0], info, warn, error, crit, none) (Possible persistent levels: p_all, p_perf, p_debug[0-9], p_info, p_warn, p_error, p_crit, p_none)] r Int winmgrReady [1] w Str fakeTap rw Str epdcMode [Y8] rw Str debugInfo [] rw Str logMask [0x0fff0000] rw Int grip_enabled [1] r Int isScreenSaverLayerWindowActive [0] w Int extendDamageTimeout rw Int chromeState [0] w Str focusChrome rw Int ASRMode [0] r Str orientation [U] w Str fakeKeyEvent rw Int enableDispalyEvents [0] rw Str orientationLock [U] com.lab126.deviced rw Int usbaudioConnected [0] w Int usbaudioSendEvent w Int enable_touch com.lab126.grokservice w Str searchRequest r Str isLinked [linked] w Str flushCache com.amazon.ebook.util.net.certmanutilities com.lab126.booklet.home w Str pause w Str validateMerch w Str load WARNING: Failed to get value of getDisplayOptions <0x1> r Str getDisplayOptions w Str setSortOrder w Str setViewMode w Str setFilterForGroup w Int setFilterId w Str go w Str unload w Str startresult w Str deleteOOBE com.lab126.imageViewer com.lab126.odot w Str queueMessage AssetOwnership.SMD.Poll w Str s2dm_message rw Has transferProgressNotification [*NOT SHOWN*] rw Str logMask [0x0fff0000] w Str refreshCache w Str handleToDoItem rw Str logLevel [Current log level=info (Possible transient levels: all, perf, debug[9-0], info, warn, error, crit, none) (Possible persistent levels: p_all, p_perf, p_debug[0-9], p_info, p_warn, p_error, p_crit, p_none)] com.lab126.freetime w Str updateChildrenSubscriptionStatus w Str rejectSubscriptionOffer r Int subscriptionStatus [0] w Str refreshCache com.lab126.transferService rw Has transferProgressNotification [*NOT SHOWN*] com.lab126.JournalingService r Int isEnabled [1] com.lab126.adManager w Str adImpression rw Str forceVisibleAdId [{"adId":"null"}] w Str restart w Str ingestAdFile w Str buttonClicked w Str adViewerMessage r Int isAdUnitDevice [1] com.lab126.LocalizationServices w Str kllDictionary w Int updateContentPack w Str refreshCache w Str newItemLanguage com.lab126.reader.languagelayer.pinyin w Str reset com.lab126.pmond w Str mem_warn w Str kill r Str system_memory_status [systemMemoryNormal] w Str restart w Str stop rw Str logLevel [Current log level=info (Possible transient levels: all, perf, debug[9-0], info, warn, error, crit, none) (Possible persistent levels: p_all, p_perf, p_debug[0-9], p_info, p_warn, p_error, p_crit, p_none)] r Str summary [------------------------------------------------------------------ System: Total [502 MB] Available [270 MB] ------------------------------------------------------------------ name[pid] - state - mem_limit(MB) - mem_curr(MB) ------------------------------------------------------------------ appmgrd[ 1964] - started - 5.00 - 3.18 asr[ 0] - stopped - 29.30 - 0.00 browser[ 0] - stopped - 121.00 - 0.00 contentpackd[ 2679] - started - 4.00 - 2.68 demd[ 1929] - started - 4.88 - 1.88 dmld[ 3996] - started - 7.00 - 3.33 dynconfig[ 2044] - started - 5.00 - 1.75 ivonattsd[ 0] - stopped - 43.95 - 0.00 kfxreader[ 4003] - started - 200.00 - 9.57 locationd[ 0] - stopped - 3.91 - 0.00 mysn[ 0] - stopped - 121.00 - 0.00 otaupd[ 0] - stopped - 10.00 - 0.00 perfd[ 1931] - started - 3.00 - 1.35 rcm[ 1944] - started - 5.00 - 3.25 stackdumpd[ 1951] - started - 3.00 - 0.63 syslog[ 895] - started - 4.88 - 1.14 todo[ 1943] - started - 15.00 - 5.59 wand[ 0] - stopped - 5.00 - 0.00 wifid[ 2043] - started - 5.86 - 3.84 webreader[ 3013] - started - 200.00 - 17.13 volumd[ 2100] - started - 4.88 - 2.41 tmd[ 1981] - started - 20.00 - 6.15 store[ 4187] - started - 174.00 - 15.02 scanner[ 4083] - started - 31.25 - 3.38 powerd[ 1957] - started - 4.88 - 3.63 phd[ 2074] - started - 8.00 - 3.38 pdfreader[ 0] - stopped - 120.00 - 0.00 odac[ 0] - stopped - 121.00 - 0.00 mcsd[ 0] - stopped - 5.00 - 0.00 kfxview[ 4008] - started - 30.00 - 6.82 kb[ 2678] - started - 40.00 - 6.81 fastmetrics[ 4086] - started - 10.00 - 5.88 dpmd[ 1960] - started - 5.00 - 3.05 deviced[ 1982] - started - 3.00 - 2.33 cvm[ 3356] - started - 160.00 - 100.71 cmd[ 1932] - started - 5.00 - 3.32 blanket[ 2538] - started - 50.00 - 6.04 archive[ 1941] - started - 10.00 - 3.87 ] rw Str logMask [0x0fff0000] w Int start_monitoring w Int stop_monitoring w Str heartbeat_start w Str start w Str mem_limit w Str heartbeat_stop com.lab126.DeviceAuthenticationService w Int fetchAuthCookies r Str cookies [/var/local/java/prefs/cookies/auth.cookiesamzn1.account.xxxxxxxxxxxxxxxxxxxxxxxxxxxx] w Int installCredentials r Str authcookies [session-id=135-5025856-4810245; expires="23 Feb 2043 23:57:55 GMT"; domain=.amazon.com; path=/; secure ubid-main=xxx-xxxxxxx-xxxxxxx; expires="23 Feb 2043 23:57:55 GMT"; domain=.amazon.com; path=/; secure x-main="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@"; expires="23 Feb 2043 23:57:55 GMT"; domain=.amazon.com; path=/; secure at-main="Atza|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; expires="1 Mar 2023 23:57:55 GMT"; domain=.amazon.com; path=/; secure sess-at-main="xxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; expires="1 Mar 2023 23:57:55 GMT"; domain=.amazon.com; path=/; secure] w Int fetchAuthCookiesForRegionalStack com.lab126.yjlipclistener w Str disableYJIndexer com.lab126.fastMetrics w Str captivePortalResponse w Str wifiPopupDone rw Str logMask [0x0fff0000] w Str demoWifiNotAvailableAlertResponse w Str wirelessOn rw Str logLevel [Current log level=info (Possible transient levels: all, perf, debug[9-0], info, warn, error, crit, none) (Possible persistent levels: p_all, p_perf, p_debug[0-9], p_info, p_warn, p_error, p_crit, p_none)] com.lab126.reader.readingtimer r Str getReadingProgressTypes [["location","page","training","timeLeftInBook","timeLeftInSection","timeLeftInGoal","hidden"]] rw Str readingProgressType [location] com.lab126.blanket rw Str unload [] rw Str logMask [0x0fff0000] rw Str load [langpicker blankwindow ad_screensaver usb] w Str uiQuery rw Str logLevel [Current log level=info (Possible transient levels: all, perf, debug[9-0], info, warn, error, crit, none) (Possible persistent levels: p_all, p_perf, p_debug[0-9], p_info, p_warn, p_error, p_crit, p_none)] com.lab126.btService r Int isAudibleContentAvailable [0] r Int isPfmAudibleSupported [0] r Int isAudibleAvailable [0] com.lab126.archive w Str s2dm_message rw Has transferProgressNotification [*NOT SHOWN*] rw Str logMask [0x0fff0000] w Str refreshCache w Str handleToDoItem rw Str logLevel [Current log level=info (Possible transient levels: all, perf, debug[9-0], info, warn, error, crit, none) (Possible persistent levels: p_all, p_perf, p_debug[0-9], p_info, p_warn, p_error, p_crit, p_none)] com.lab126.quickactions w Str toggleAirplaneMode w Str syncAndCheck com.lab126.system w Str executeDebugCommand r Str displayTemperature [23 ] r Str guid [xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx] w Str enableTimeAutoUpdate r Str monoTime [] w Str sendEvent w Str disableTimeAutoUpdate w Str deleteWaveform r Str version [System Software Version: 025-juno_1202_muscat_wario-356962 Wed Sep 25 01:55:27 UTC 2019 com.lab126.eink.muscat.os] r Str isTimeAutoUpdateEnabled [true] r Str panelCode [R060_ED060KD1C1] r Str waveformversion [320_R060_AE6C01_ED060KD1C1_TC] w Str btDeviceReconfirmed w Str updateWaveform w Str disableASR r Str monoTimeSaved [] w Str openFeedbackApp w Str stopVoiceView r Str panelWaveformversion [320_R060_AE6C01_ED060KD1C1_TC] w Str date r Str usid [xxxxxxxxxxxxxxxx] w Str startVoiceView r Str orientation [] w Str deviceLocaleSelected r Str boardid [xxxxxxxxxxxxxxxx] w Str takeScreenShot com.lab126.readnow w Str openBook com.amazon.kindle.inputMethod w Str keyboardSetPreeditString w Str keyboardReplace w Str keyboardGetSurround w Str keyboardCommit w Str keyboardDelete com.lab126.dsus w Str reportVersion com.lab126.indexer r Int numberOfItemsToBeIndexed [0] w Int dumpIndexerState w Int updateIndexerState r Str pauseIndexerTillTimeMilliseconds [-1] w Int pauseIndexerMilliseconds rw Int debugTextDumpCount [0] w Str indexAndSearchContent w Str pauseIndexerSourceMilliseconds com.lab126.extractor.java w Str logExtractors w Str delete w Str add w Str update com.lab126.scanner w Int triggerUpdate w Int doFullScan rw Str logMask [0x0fff0000] r Int fullScanStatus [0] rw Str logLevel [Current log level=info (Possible transient levels: all, perf, debug[9-0], info, warn, error, crit, none) (Possible persistent levels: p_all, p_perf, p_debug[0-9], p_info, p_warn, p_error, p_crit, p_none)] w Str reScanFile com.lab126.transfer rw Has obliterate [*NOT SHOWN*] rw Has modify [*NOT SHOWN*] w Str wifiPopupDone w Str wirelessOn rw Has dequeue [*NOT SHOWN*] w Str captivePortalResponse rw Has send_status [*NOT SHOWN*] rw Has dump_queues [*NOT SHOWN*] rw Str logLevel [Current log level=info (Possible transient levels: all, perf, debug[9-0], info, warn, error, crit, none) (Possible persistent levels: p_all, p_perf, p_debug[0-9], p_info, p_warn, p_error, p_crit, p_none)] rw Has request_upload [*NOT SHOWN*] rw Has get_info [*NOT SHOWN*] rw Str logMask [0x0fff0000] rw Has request_download [*NOT SHOWN*] w Str demoWifiNotAvailableAlertResponse AssetOwnership.DeviceSharingUpdated w Str s2dm_message w Str adm_message w Str adm_registration com.lab126.dynconfig rw Has transferProgressNotification [*NOT SHOWN*] rw Str logMask [0x0fff0000] w Str handleToDoItem rw Str logLevel [Current log level=info (Possible transient levels: all, perf, debug[9-0], info, warn, error, crit, none) (Possible persistent levels: p_all, p_perf, p_debug[0-9], p_info, p_warn, p_error, p_crit, p_none)] com.lab126.cmd w Str ensureConnection r Str activeInterface [wifi] rw Str logLevel [Current log level=none (Possible transient levels: all, perf, debug[9-0], info, warn, error, crit, none) (Possible persistent levels: p_all, p_perf, p_debug[0-9], p_info, p_warn, p_error, p_crit, p_none)] rw Str logMask [0x00000000] rw Has interfaceProperties [*NOT SHOWN*] rw Has disableInterfaces [*NOT SHOWN*] rw Int wirelessEnable [1] rw Has availableInterfaces [*NOT SHOWN*] rw Int smsRecvRequired [0] com.lab126.todo.kaf w Str handleToDoItem com.lab126.refreshCache w Str refreshCacheReady w Int refreshCacheRun w Str refreshCacheFailure rw Has updateRefreshTime [*NOT SHOWN*] w Str refreshCacheSuccess w Str wifiPopupDone w Str wirelessOn w Str captivePortalResponse rw Str logLevel [Current log level=info (Possible transient levels: all, perf, debug[9-0], info, warn, error, crit, none) (Possible persistent levels: p_all, p_perf, p_debug[0-9], p_info, p_warn, p_error, p_crit, p_none)] rw Str logMask [0x0fff0000] w Int refreshCachePrintClients w Str demoWifiNotAvailableAlertResponse com.lab126.keyboard r Int lang [0] r Int height [497] rw Int dumpWidget [0] r Int id [0] r Str preedit [] rw Has uiQueryHash [*NOT SHOWN*] r Int web [0] r Int flags [0] r Str rescan [/var/local/system/keyboard.conf] rw Str language [en_US] r Str appID [] rw Str languages [en_US] rw Str logLevel [Current log level=info (Possible transient levels: all, perf, debug[9-0], info, warn, error, crit, none) (Possible persistent levels: p_all, p_perf, p_debug[0-9], p_info, p_warn, p_error, p_crit, p_none)] w Str setSurround r Str bounds [0:951:1072:497] rw Str logMask [0x0fff0000] w Str open r Int show [0] w Str close r Int diacriticalId [0] r Str keyboard_language [en-US] rw Str largeFont [] com.amazon.java.messagingservice w Str s2dm_message w Str adm_message w Str adm_registration com.lab126.readingstreams rw Has performAction [*NOT SHOWN*] rw Has hideContext [*NOT SHOWN*] rw Has recordSetting [*NOT SHOWN*] rw Has showContext [*NOT SHOWN*] rw Has openContext [*NOT SHOWN*] com.lab126.linux.arm.metrics com.lab126.tutorialService w Str clearAllTutorialStatus com.lab126.IdentityService w Str invalidateAccessToken w Str refreshCache rw Has accessToken [*NOT SHOWN*] com.lab126.stored w Str processRestart w Str refreshCache w Str kill rw Str logLevel [Current log level=info (Possible transient levels: all, perf, debug[9-0], info, warn, error, crit, none) (Possible persistent levels: p_all, p_perf, p_debug[0-9], p_info, p_warn, p_error, p_crit, p_none)] w Str run rw Str logMask [0x0fff0000] rw Has transferProgressNotification [*NOT SHOWN*] r Str ready [1] com.lab126.pillow w Str disableEnablePillow w Str dismissChrome w Str customDialog w Str applicationWindow rw Str logLevel [Current log level=info (Possible transient levels: all, perf, debug[9-0], info, warn, error, crit, none) (Possible persistent levels: p_all, p_perf, p_debug[0-9], p_info, p_warn, p_error, p_crit, p_none)] w Str activityIndicator w Str debugInfo rw Str logMask [0x0fff0000] w Str displayChrome w Str interrogatePillow rw Has interrogatePillowHash [*NOT SHOWN*] w Str pillowAlert com.lab126.legalComplianceService r Int gdprValue [1] com.lab126.demoservice com.lab126.dpm.apps w Int disableAnnotationsBackup w Int disablePublicNotes w Int disablePopularHighlights com.lab126.wifid rw Has certificateData [*NOT SHOWN*] w Str deleteCertificate rw Has cmIntfInfo [*NOT SHOWN*] r Str signalStrength [5/5 ] rw Int enable [1] w Int hotSpotDBDownloadStatus r Str 711 [********* 2- Connection ********* 2.1 MAC: 74:C2:46:FC:4D:66 2.2 Wireless: On(1) 2.3 AP: xxxxxxxxx (xx:xx:xx:xx:xx:xx) 2.3.1 Signal: 5/5 2.3.2 Captive: No(0) 2.3.3 Security: WPA2-PSK 2.3.4 Channel: 4 2.6 Country: US ********* 3- Networks ********* 3.1 xxxxxxxxx 0 [WPA2-PSK] C: [CCMP] G: [CCMP] (9) EAP: [, , ] ********* 4- Interface ********* 4.1 IP : 192.168.1.14 4.2 Netmask : 255.255.255.0 4.3 Broadcast : 4.4 Gateway : 192.168.1.1 4.5 Config : DHCP 4.6 DNS : 192.168.1.1, 4.7 Sponsored : No(0) ********* 5- DHCP ********* adding dns 192.168.1.1 ] r Str macSecret [xxxxxxxxxxxxxxxxxxxx] w Str cmConnect w Str cmCheckConnection r Int cmIntfInUse [1] r Str manufacturerCode [xxxxxxxxxxxxxxxxxxxx] rw Has installCertificate [*NOT SHOWN*] r Str macAddress [xx:xx:xx:xx:xx:xx] rw Has profileData [*NOT SHOWN*] rw Has netConfig [*NOT SHOWN*] w Str cmDisconnect rw Str logMask [0x0fff0000] rw Str logLevel [Current log level=info (Possible transient levels: all, perf, debug[9-0], info, warn, error, crit, none) (Possible persistent levels: p_all, p_perf, p_debug[0-9], p_info, p_warn, p_error, p_crit, p_none)] r Int scanListCount [2] rw Has cmNWProperties [*NOT SHOWN*] rw Has createProfile [*NOT SHOWN*] r Str scanState [idle] w Str cmConnMode r Str feelingLuckyProfile [HOME_021850_2G] w Str deleteProfile rw Has currentEssid [*NOT SHOWN*] r Str cmState [CONNECTED] rw Has createNetConfig [*NOT SHOWN*] w Str scan rw Has scanList [*NOT SHOWN*] r Int profileCount [1] w Int resetSavePasswordPreference com.lab126.lxinit com.lab126.appmgrd w Str loghistory w Str backgroundAppUnLoaded w Str load w Str goresult w Str loadresult w Str savecontext w Int startdefault w Str runresult w Str stop rw Str logLevel [Current log level=info (Possible transient levels: all, perf, debug[9-0], info, warn, error, crit, none) (Possible persistent levels: p_all, p_perf, p_debug[0-9], p_info, p_warn, p_error, p_crit, p_none)] w Int forward w Str unloadresult rw Str logMask [0x0fff0000] w Int clearAllContext w Str defer w Str pauseresult w Str start r Int activeAppPid [3356] w Str logallapps w Str backgroundAppLoaded r Str activeApp [com.lab126.booklet.home] w Int backward com.lab126.devicemetrics w Str refreshCache w Int pushAllMetrics w Int pushClickstreamMetrics w Str wifiPopupDone w Str wirelessOn w Str captivePortalResponse w Str pushMetricsByClass rw Str logLevel [Current log level=info (Possible transient levels: all, perf, debug[9-0], info, warn, error, crit, none) (Possible persistent levels: p_all, p_perf, p_debug[0-9], p_info, p_warn, p_error, p_crit, p_none)] rw Has transferProgressHandler [*NOT SHOWN*] rw Str logMask [0x0fff0000] w Int pushHighPriorityMetrics w Str handleToDoItem w Str demoWifiNotAvailableAlertResponse DPCService.SettingChanged w Str s2dm_message w Str adm_message w Str adm_registration com.lab126.phd rw Str logMask [0x0fff0000] w Str newSPHSchedule rw Str logLevel [Current log level=info (Possible transient levels: all, perf, debug[9-0], info, warn, error, crit, none) (Possible persistent levels: p_all, p_perf, p_debug[0-9], p_info, p_warn, p_error, p_crit, p_none)] com.lab126.kwis.weblabTreatments rw Has experiments [*NOT SHOWN*] com.lab126.adRotationManager r Str currentAd [{"adID":"xxxxxxxxxxxxxxxxxx_xx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx","unlock_text_color":15,"screensvr_rect":null,"buttons":[{"img-src":"\/mnt\/us\/system\/.assets\/xxxxxxxxxxxxxxxxxx_xx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\/screensvr.png","state":"default","id":0,"creative":"screensvr.png","enabled":true,"img-location":{"x":0,"width":1072,"y":0,"height":1448},"img-hotspot":{"x":0,"width":0,"y":0,"height":0}},{"int-uri":"details.html","accessibility":"Up to 80% off Select top reads on Kindle","hint-dismiss":true,"slotId":140,"img-src":"\/mnt\/us\/system\/.assets\/xxxxxxxxxxxxxxxxxx_xx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\/screensvr_active.png","id":1,"creative":"screensvr_active.png","enabled":true,"img-location":{"x":404,"width":268,"y":683,"height":74},"img-hotspot":{"x":354,"width":368,"y":633,"height":174}}],"filepath":"\/mnt\/us\/system\/.assets\/xxxxxxxxxxxxxxxxxx_xx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\/screensvr.png","active_filepath":"\/mnt\/us\/system\/.assets\/xxxxxxxxxxxxxxxxxx_xx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\/screensvr_active.png"}] w Str restart r Str nextAd [{"adID":"xxxxxxxxxxxxxxxxxx_xx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx","unlock_text_color":15,"screensvr_rect":null,"buttons":[{"img-src":"\/mnt\/us\/system\/.assets\/xxxxxxxxxxxxxxxxxx_xx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\/screensvr.png","state":"default","id":0,"creative":"screensvr.png","enabled":true,"img-location":{"x":0,"width":1072,"y":0,"height":1448},"img-hotspot":{"x":0,"width":0,"y":0,"height":0}},{"int-uri":"details.html","accessibility":"Kindle Daily Deals Top eBooks for $4.99 or less","hint-dismiss":true,"slotId":140,"img-src":"\/mnt\/us\/system\/.assets\/xxxxxxxxxxxxxxxxxx_xx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\/screensvr_active.png","id":1,"creative":"screensvr_active.png","enabled":true,"img-location":{"x":403,"width":267,"y":657,"height":74},"img-hotspot":{"x":353,"width":367,"y":607,"height":174}}],"filepath":"\/mnt\/us\/system\/.assets\/xxxxxxxxxxxxxxxxxx_xx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\/screensvr.png","active_filepath":"\/mnt\/us\/system\/.assets\/xxxxxxxxxxxxxxxxxx_xx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\/screensvr_active.png"}] r Str startRotationController [] r Str peekNextAd [{"adID":"xxxxxxxxxxxxxxxxxx_xx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx","unlock_text_color":15,"screensvr_rect":null,"buttons":[{"img-src":"\/mnt\/us\/system\/.assets\/xxxxxxxxxxxxxxxxxx_xx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\/screensvr.png","state":"default","id":0,"creative":"screensvr.png","enabled":true,"img-location":{"x":0,"width":1072,"y":0,"height":1448},"img-hotspot":{"x":0,"width":0,"y":0,"height":0}},{"int-uri":"details.html","accessibility":"Kindle Daily Deals Top eBooks for $4.99 or less","hint-dismiss":true,"slotId":140,"img-src":"\/mnt\/us\/system\/.assets\/xxxxxxxxxxxxxxxxxx_xx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\/screensvr_active.png","id":1,"creative":"screensvr_active.png","enabled":true,"img-location":{"x":403,"width":267,"y":657,"height":74},"img-hotspot":{"x":353,"width":367,"y":607,"height":174}}],"filepath":"\/mnt\/us\/system\/.assets\/xxxxxxxxxxxxxxxxxx_xx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\/screensvr.png","active_filepath":"\/mnt\/us\/system\/.assets\/xxxxxxxxxxxxxxxxxx_xx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\/screensvr_active.png"}] DeviceMessaging.LanguageLayer.MessageResponse w Str s2dm_message w Str adm_message w Str adm_registration com.lab126.volumd r Int userstoreIsAvailable [1] r Int userstoreTotalSpace [1042168] w Int userstoreDeferUnmountRequest rw Str logLevel [Current log level=info (Possible transient levels: all, perf, debug[9-0], info, warn, error, crit, none) (Possible persistent levels: p_all, p_perf, p_debug[0-9], p_info, p_warn, p_error, p_crit, p_none)] rw Str logMask [0x0fff0000] w Str recreateUserstoreResponse w Int userstoreReadyToUnMount rw Int useUsbForNetwork [1] r Int driveModeState [0] r Int userstoreFreeSpace [646248] com.lab126.sph com.lab126.KIWIBridge rw Has uiQueryHash [*NOT SHOWN*] w Str uiQuery com.lab126.bookcacher rw Has cacheBook [*NOT SHOWN*] com.lab126.demd rw Int demAppMetricsEmissionStatus [2] rw Has logDemAppMetric [*NOT SHOWN*] rw Int demOsMetricsEmissionStatus [2] rw Str logMask [0x0fff0000] rw Has logDemOsMetric [*NOT SHOWN*] rw Str logLevel [Current log level=info (Possible transient levels: all, perf, debug[9-0], info, warn, error, crit, none) (Possible persistent levels: p_all, p_perf, p_debug[0-9], p_info, p_warn, p_error, p_crit, p_none)] com.lab126.blanket.ad_screensaver r Int screensaver_showing [0] WARNING: Failed to get value of activeButtonCoordinate <0x102> r Str activeButtonCoordinate com.lab126.tphv3 r Int debugTphv3StillHereCount [6] r Int debugTphv3UdpTphCount [0] r Int debugTphv3State [2] r Int debugTphv3SessionCount [1] r Int debugTphv3Supported [1] r Int debugTphv3SilentPeriod [27] r Int debugTphv3SessionTimeout [28] com.lab126.instantSearch w Str handleSearchItem w Str searchRequest w Int initializeSearch w Str storeSuggestionsRequest com.lab126.coverArtService rw Has downloadCoverArt [*NOT SHOWN*] w Int refreshCoverArt rw Has getCoverDimensions [*NOT SHOWN*] rw Has downloadCoverArtBatch [*NOT SHOWN*] com.lab126.kwis w Str daemon com.lab126.ccat rw Str logMask [0x0fff0000] rw Str logLevel [Current log level=info (Possible transient levels: all, perf, debug[9-0], info, warn, error, crit, none) (Possible persistent levels: p_all, p_perf, p_debug[0-9], p_info, p_warn, p_error, p_crit, p_none)] w Str setActiveProfile CampaignSync.Update w Str s2dm_message w Str adm_message w Str adm_registration com.lab126.contentpackd w Str rebootDevice w Str scanFont w Str fontUpdateCallback rw Str logMask [0x0fff0000] w Str installKeyboard r Int fontsMountedState [1] rw Str logLevel [Current log level=info (Possible transient levels: all, perf, debug[9-0], info, warn, error, crit, none) (Possible persistent levels: p_all, p_perf, p_debug[0-9], p_info, p_warn, p_error, p_crit, p_none)] com.lab126.yjff com.lab126.linux.arm.connectionutilities w Str wifiPopupDone w Str demoWifiNotAvailableAlertResponse w Str captivePortalResponse w Str wirelessOn com.lab126.reader.languagelayer w Str reset com.lab126.household r Str activeProfileRole [ADULT] r Str activeProfile [amzn1.account.xxxxxxxxxxxxxxxxxxxxxxxxxxxx] r Str activeAdultProfile [amzn1.account.xxxxxxxxxxxxxxxxxxxxxxxxxxxx] w Str linkSecondaryAdultToHousehold com.lab126.dpmManager r Int isPopularHighlightsDisabled [0] rw Str parentalControlsHint [] r Int isSettingsMenuDisabled [0] r Int isParentalPasswordSet [0] r Int isActiveContentDisabled [0] r Int isExperimentalMenuDisabled [0] rw Int isDiscoveryDisabled [0] rw Str logMask [0x0fff0000] r Int isChangeLanguageDisabled [0] r Int isToggleWirelessDisabled [0] r Int wipeAfterMaxPasscodeAttempts [0] r Int isChangeDictionaryDisabled [0] r Int isFactoryResetDisabled [0] rw Str logLevel [Current log level=info (Possible transient levels: all, perf, debug[9-0], info, warn, error, crit, none) (Possible persistent levels: p_all, p_perf, p_debug[0-9], p_info, p_warn, p_error, p_crit, p_none)] r Str secondaryProxyHost [] r Int isTurnOnPasscodeDisabled [0] rw Has setParentalControlsPassword [*NOT SHOWN*] r Int getControlStatus [0] r Int minPasscodeLength [1] r Str devicePolicyId [] rw Int isArchivedItemsDisabled [0] r Int isSocialNetworksDisabled [0] r Int isToggleAnnotationsBackupDisabled [0] rw Int isKindleStoreDisabled [0] r Int isTurnOffPasscodeDisabled [0] rw Has showAppLockedAlert [*NOT SHOWN*] r Int isMp3PlayerDisabled [0] rw Int isWikipediaLookupDisabled [0] r Int isAnnotationsBackupDisabled [0] r Int isPublicNotesDisabled [0] r Int isMinPasscodeLengthEnabled [0] r Str contactInfo [Your System Administrator] rw Int isBrowserDisabled [0] r Int isManageWifiSettingsDisabled [0] r Str secondaryProxyExcludedHosts [] r Int isTogglePopularHighlightsDisabled [0] r Int maxPasscodeAttempts [-1] r Int isEditPersonalInfoDisabled [0] w Str notifyDeviceControlsStateChange r Int isDeregisterDisabled [0] r Int isEditDeviceNameDisabled [0] r Int isEditPasscodeDisabled [0] r Str secondaryProxyPort [] r Int isTogglePublicNotesDisabled [0] rw Has validateParentalControlsPassword [*NOT SHOWN*] com.lab126.KindleIdentity r Str deviceType [A21RY355YUXQAF] r Str GUID [xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx] HouseholdMessage.Updates w Str s2dm_message w Str adm_message w Str adm_registration com.lab126.sharing r Int isSharingEnabled [0] w Str shareBookEvent w Str shareBookText w Str shareMessageAboutBook com.lab126.reader.qa r Str getFontStyles [["amazon ember","condensed","amazon ember bold","futura","baskerville","helvetica neue lt","bookerly","opendyslexic","caecilia regular","palatino"]] rw Int lineSpacing [1] rw Int fontSize [3] rw Int fontBoldness [0] rw Str fontStyle [bookerly] com.lab126.cvm rw Str logMask [0x0fff0000] rw Str logLevel [Current log level=info (Possible transient levels: all, perf, debug[9-0], info, warn, error, crit, none) (Possible persistent levels: p_all, p_perf, p_debug[0-9], p_info, p_warn, p_error, p_crit, p_none)] com.lab126.merchant w Str remove rw Str shuffle [true] w Str removeAll com.lab126.chromebar w Str activityIndicator w Str searchResults w Str configureChrome ===== kindle-apps-and-services/_template.md ===== LIPC Properties ===== kindle-apps-and-services/com.amazon.ebook.util.net.certmanutilities.md ===== com.amazon.ebook.util.net.certmanutilities LIPC Properties APP/SERVICE DOES NOT USE LIPC ===== kindle-apps-and-services/com.amazon.java.messagingservice.md ===== com.amazon.java.messagingservice LIPC Properties | ID | Type | R/W/RW | Value | Description | |:----------------:|:----:|:------:|:-----:|:-----------:| | s2dmmessage | Str | w | | TODO | | admmessage | Str | w | | TODO | | adm_registration | Str | w | | TODO | ===== kindle-apps-and-services/com.amazon.kindle.inputMethod.md ===== com.amazon.kindle.inputMethod LIPC Properties | ID | Type | R/W/RW | Value | Description | |:------------------------:|:----:|:------:|:-----:|:-----------:| | keyboardSetPreeditString | Str | w | | TODO | | keyboardReplace | Str | w | | TODO | | keyboardGetSurround | Str | w | | TODO | | keyboardCommit | Str | w | | TODO | | keyboardDelete | Str | w | | TODO | ===== kindle-apps-and-services/com.lab126.DeviceAuthenticationService.md ===== com.lab126.DeviceAuthenticationService LIPC Properties | ID | Type | R/W/RW | Value | Description | |:--------------------------------:|:----:|:------:|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------:| | fetchAuthCookies | Int | w | | TODO | | cookies | Str | r | | TODO | | installCredentials | Int | w | | TODO | | authcookies | Str | r | [session-id=135-5025856-4810245;expires="23 Feb 2043 23:57:55 GMT"; domain=.amazon.com; path=/; secureubid-main=xxx-xxxxxxx-xxxxxxx; expires="23 Feb 2043 23:57:55 GMT";domain=.amazon.com; path=/; securex-main="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@"; expires="23 Feb 2043 23:57:55GMT"; domain=.amazon.com; path=/; secureat-main="Atza|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";expires="1 Mar 2023 23:57:55 GMT"; domain=.amazon.com; path=/; securesess-at-main="xxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; expires="1Mar 2023 23:57:55 GMT"; domain=.amazon.com; path=/; secure] | TODO | | fetchAuthCookiesForRegionalStack | Int | w | | TODO | ===== kindle-apps-and-services/com.lab126.IdentityService.md ===== com.lab126.IdentityService LIPC Properties | ID | Type | R/W/RW | Value | Description | |:---------------------:|:----:|:------:|:-------------:|:-----------:| | invalidateAccessToken | Str | w | | TODO | | refreshCache | Str | w | | TODO | | accessToken | Has | rw | [NOT SHOWN] | TODO | ===== kindle-apps-and-services/com.lab126.JournalingService.md ===== com.lab126.JournalingService LIPC Properties | ID | Type | R/W/RW | Value | Description | |:---------:|:----:|:------:|:-----:|:-----------:| | isEnabled | Int | r | [1] | TODO | ===== kindle-apps-and-services/com.lab126.KIWIBridge.md ===== com.lab126.KIWIBridge LIPC Properties | ID | Type | R/W/RW | Value | Description | |:-----------:|:----:|:------:|:-------------:|:-----------:| | uiQueryHash | Has | rw | [NOT SHOWN] | TODO | | uiQuery | Str | w | | TODO | ===== kindle-apps-and-services/com.lab126.KindleIdentity.md ===== com.lab126.KindleIdentity LIPC Properties | ID | Type | R/W/RW | Value | Description | |:----------:|:----:|:------:|:----------------------------------:|:-----------:| | deviceType | Str | r | [A21RY355YUXQAF] | TODO | | GUID | Str | r | [xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx] | TODO | ===== kindle-apps-and-services/com.lab126.LocalizationServices.md ===== com.lab126.LocalizationServices LIPC Properties | ID | Type | R/W/RW | Value | Description | |:-----------------:|:----:|:------:|:-----:|:-----------:| | kllDictionary | Str | w | | TODO | | updateContentPack | Int | w | | TODO | | refreshCache | Str | w | | TODO | | newItemLanguage | Str | w | | TODO | ===== kindle-apps-and-services/com.lab126.adManager.md ===== com.lab126.adManager LIPC Properties | ID | Type | R/W/RW | Value | Description | |:----------------:|:----:|:------:|:-----------------:|:-----------:| | adImpression | Str | w | | TODO | | forceVisibleAdId | Str | rw | [{"adId":"null"}] | TODO | | restart | Str | w | | TODO | | ingestAdFile | Str | w | | TODO | | buttonClicked | Str | w | | TODO | | adViewerMessage | Str | w | | TODO | | isAdUnitDevice | Int | r | [1] | TODO | ===== kindle-apps-and-services/com.lab126.adRotationManager.md ===== com.lab126.adRotationManager LIPC Properties | ID | Type | R/W/RW | Value | Description | |:-----------------------:|:----:|:------:|:-----:|:-----------:| | currentAd | Str | r | | TODO | | restart | Str | w | | TODO | | nextAd | Str | r | | TODO | | startRotationController | Str | r | [] | TODO | | peekNextAd | Str | r | | TODO | ===== kindle-apps-and-services/com.lab126.amazonRegistrationService.md ===== com.lab126.amazonRegistrationService LIPC Properties | ID | Type | R/W/RW | Value | Description | |:-----------------------------:|:----:|:------:|:-------------:|:-----------:| | primaryUserId | Str | r | | TODO | | registerWithToken | Str | w | | TODO | | isRegistered | Int | r | [1] | TODO | | registerWithPreAuthorizedCode | Str | w | | TODO | | deregister | Int | w | | TODO | | registerSecondaryUser | Has | rw | [NOT SHOWN] | TODO | | registerPrimaryUser | Has | rw | [NOT SHOWN] | TODO | ===== kindle-apps-and-services/com.lab126.appmgrd.md ===== com.lab126.appmgrd LIPC Properties | ID | Type | R/W/RW | Value | Description | |:---------------------:|:----:|:------:|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------:| | loghistory | Str | w | | TODO | | backgroundAppUnLoaded | Str | w | | TODO | | load | Str | w | | TODO | | goresult | Str | w | | TODO | | loadresult | Str | w | | TODO | | savecontext | Str | w | | TODO | | startdefault | Int | w | | TODO | | runresult | Str | w | | TODO | | stop | Str | w | | TODO | | logLevel | Str | rw | [Current log level=info(Possible transient levels: all, perf, debug[9-0], info, warn, error,crit, none)(Possible persistent levels: pall, pperf, pdebug[0-9], pinfo, pwarn,perror, pcrit, pnone)] | TODO | | forward | Int | w | | TODO | | unloadresult | Str | w | | TODO | | logMask | Str | rw | [0x0fff0000] | TODO | | clearAllContext | Int | w | | TODO | | defer | Str | w | | TODO | | pauseresult | Str | w | | TODO | | start | Str | w | | TODO | | activeAppPid | Int | r | [3356] | TODO | | logallapps | Str | w | | TODO | | backgroundAppLoaded | Str | w | | TODO | | activeApp | Str | r | [com.lab126.booklet.home] | TODO | | backward | Int | w | | TODO | ===== kindle-apps-and-services/com.lab126.archive.md ===== com.lab126.archive LIPC Properties | ID | Type | R/W/RW | Value | Description | |:----------------------------:|:----:|:------:|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------:| | s2dmmessage | Str | w | | TODO | | transferProgressNotification | Has | rw | [NOT SHOWN] | TODO | | logMask | Str | rw | [0x0fff0000] | TODO | | refreshCache | Str | w | | TODO | | handleToDoItem | Str | w | | TODO | | logLevel | Str | rw | [Current log level=info(Possible transient levels: all, perf, debug[9-0], info, warn, error,crit, none)(Possible persistent levels: pall, pperf, pdebug[0-9], pinfo, pwarn,perror, pcrit, p_none)] | TODO | ===== kindle-apps-and-services/com.lab126.bev.md ===== com.lab126.bev LIPC Properties APP/SERVICE DOES NOT USE LIPC ===== kindle-apps-and-services/com.lab126.blanket.ad_screensaver.md ===== com.lab126.blanket.adscreensaver LIPC Properties | ID | Type | R/W/RW | Value | Description | |:----------------------:|:----:|:------:|:-----:|:-----------:| | screensavershowing | Int | r | [0] | TODO | | activeButtonCoordinate | Str | r | | TODO | ===== kindle-apps-and-services/com.lab126.blanket.md ===== com.lab126.blanket LIPC Properties | ID | Type | R/W/RW | Value | Description | |:--------:|:----:|:------:|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------:| | unload | Str | rw | [] | TODO | | logMask | Str | rw | [0x0fff0000] | TODO | | load | Str | rw | [langpicker blankwindow adscreensaverusb] | TODO | | uiQuery | Str | w | | TODO | | logLevel | Str | rw | [Current log level=info(Possible transient levels: all, perf, debug[9-0], info, warn, error,crit, none)(Possible persistent levels: pall, pperf, pdebug[0-9], pinfo, pwarn,perror, pcrit, p_none)] | TODO | ===== kindle-apps-and-services/com.lab126.bookcacher.md ===== com.lab126.bookcacher LIPC Properties | ID | Type | R/W/RW | Value | Description | |:---------:|:----:|:------:|:-------------:|:-----------:| | cacheBook | Has | rw | [NOT SHOWN] | TODO | ===== kindle-apps-and-services/com.lab126.booklet.home.md ===== com.lab126.booklet.home LIPC Properties | ID | Type | R/W/RW | Value | Description | |:-----------------:|:----:|:------:|:-----:|:-----------:| | pause | Str | w | | TODO | | validateMerch | Str | w | | TODO | | load | Str | w | | TODO | | getDisplayOptions | Str | r | | TODO | | setSortOrder | Str | w | | TODO | | setViewMode | Str | w | | TODO | | setFilterForGroup | Str | w | | TODO | | setFilterId | Int | w | | TODO | | go | Str | w | | TODO | | unload | Str | w | | TODO | | startresult | Str | w | | TODO | | deleteOOBE | Str | w | | TODO | ===== kindle-apps-and-services/com.lab126.booklet.md ===== com.lab126.booklet LIPC Properties | ID | Type | R/W/RW | Value | Description | |:----:|:----:|:------:|:-----:|:-----------:| | run | Str | w | | TODO | | kill | Str | w | | TODO | ===== kindle-apps-and-services/com.lab126.btService.md ===== com.lab126.btService LIPC Properties | ID | Type | R/W/RW | Value | Description | |:-------------------------:|:----:|:------:|:-----:|:-----------:| | isAudibleContentAvailable | Int | r | [0] | TODO | | isPfmAudibleSupported | Int | r | [0] | TODO | | isAudibleAvailable | Int | r | [0] | TODO | ===== kindle-apps-and-services/com.lab126.ccat.md ===== com.lab126.ccat LIPC Properties | ID | Type | R/W/RW | Value | Description | |:----------------:|:----:|:------:|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------:| | logMask | Str | rw | [0x0fff0000] | TODO | | logLevel | Str | rw | [Current log level=info(Possible transient levels: all, perf, debug[9-0], info, warn, error,crit, none)(Possible persistent levels: pall, pperf, pdebug[0-9], pinfo, pwarn,perror, pcrit, pnone)] | TODO | | setActiveProfile | Str | w | | TODO | ===== kindle-apps-and-services/com.lab126.chromebar.md ===== com.lab126.chromebar LIPC Properties | ID | Type | R/W/RW | Value | Description | |:-----------------:|:----:|:------:|:-----:|:-----------:| | activityIndicator | Str | w | | TODO | | searchResults | Str | w | | TODO | | configureChrome | Str | w | | TODO | ===== kindle-apps-and-services/com.lab126.cmd.md ===== com.lab126.cmd LIPC Properties | ID | Type | R/W/RW | Value | Description | |:-------------------:|:----:|:------:|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------:| | ensureConnection | Str | w | | TODO | | activeInterface | Str | r | [wifi] | TODO | | logLevel | Str | rw | [Current log level=none(Possible transient levels: all, perf, debug[9-0], info, warn, error,crit, none)(Possible persistent levels: pall, pperf, pdebug[0-9], pinfo, pwarn,perror, pcrit, pnone)] | TODO | | logMask | Str | rw | [0x00000000] | TODO | | interfaceProperties | Has | rw | [NOT SHOWN] | TODO | | disableInterfaces | Has | rw | [NOT SHOWN] | TODO | | wirelessEnable | Int | rw | [1] | TODO | | availableInterfaces | Has | rw | [NOT SHOWN] | TODO | | smsRecvRequired | Int | rw | [0] | TODO | ===== kindle-apps-and-services/com.lab126.contentpackd.md ===== com.lab126.contentpackd LIPC Properties | ID | Type | R/W/RW | Value | Description | |:------------------:|:----:|:------:|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------:| | rebootDevice | Str | w | | TODO | | scanFont | Str | w | | TODO | | fontUpdateCallback | Str | w | | TODO | | logMask | Str | rw | [0x0fff0000] | TODO | | installKeyboard | Str | w | | TODO | | fontsMountedState | Int | r | [1] | TODO | | logLevel | Str | rw | [Current log level=info(Possible transient levels: all, perf, debug[9-0], info, warn, error,crit, none)(Possible persistent levels: pall, pperf, pdebug[0-9], pinfo, pwarn,perror, pcrit, pnone)] | TODO | ===== kindle-apps-and-services/com.lab126.coverArtService.md ===== com.lab126.coverArtService LIPC Properties | ID | Type | R/W/RW | Value | Description | |:---------------------:|:----:|:------:|:-------------:|:-----------:| | downloadCoverArt | Has | rw | [NOT SHOWN] | TODO | | refreshCoverArt | Int | w | | TODO | | getCoverDimensions | Has | rw | [NOT SHOWN] | TODO | | downloadCoverArtBatch | Has | rw | [NOT SHOWN] | TODO | ===== kindle-apps-and-services/com.lab126.cvm.md ===== com.lab126.cvm LIPC Properties | ID | Type | R/W/RW | Value | Description | |:--------:|:----:|:------:|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------:| | logMask | Str | rw | [0x0fff0000] | TODO | | logLevel | Str | rw | [Current log level=info(Possible transient levels: all, perf, debug[9-0], info, warn, error,crit, none)(Possible persistent levels: pall, pperf, pdebug[0-9], pinfo, pwarn,perror, pcrit, pnone)] | TODO | ===== kindle-apps-and-services/com.lab126.demd.md ===== com.lab126.demd LIPC Properties | ID | Type | R/W/RW | Value | Description | |:---------------------------:|:----:|:------:|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------:| | demAppMetricsEmissionStatus | Int | rw | [2] | TODO | | logDemAppMetric | Has | rw | [NOT SHOWN] | TODO | | demOsMetricsEmissionStatus | Int | rw | [2] | TODO | | logMask | Str | rw | [0x0fff0000] | TODO | | logDemOsMetric | Has | rw | [NOT SHOWN] | TODO | | logLevel | Str | rw | [Current log level=info(Possible transient levels: all, perf, debug[9-0], info, warn, error,crit, none)(Possible persistent levels: pall, pperf, pdebug[0-9], pinfo, pwarn,perror, pcrit, pnone)] | TODO | ===== kindle-apps-and-services/com.lab126.demoservice.md ===== com.lab126.demoservice LIPC Properties APP/SERVICE DOES NOT USE LIPC ===== kindle-apps-and-services/com.lab126.deviced.md ===== com.lab126.deviced LIPC Properties | ID | Type | R/W/RW | Value | Description | |:-----------------:|:----:|:------:|:-----:|:-----------:| | usbaudioConnected | Int | rw | [0] | TODO | | usbaudioSendEvent | Int | w | | TODO | | enable_touch | Int | w | | TODO | ===== kindle-apps-and-services/com.lab126.devicemetrics.md ===== com.lab126.devicemetrics LIPC Properties | ID | Type | R/W/RW | Value | Description | |:---------------------------------:|:----:|:------:|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------:| | refreshCache | Str | w | | TODO | | pushAllMetrics | Int | w | | TODO | | pushClickstreamMetrics | Int | w | | TODO | | wifiPopupDone | Str | w | | TODO | | wirelessOn | Str | w | | TODO | | captivePortalResponse | Str | w | | TODO | | pushMetricsByClass | Str | w | | TODO | | logLevel | Str | rw | [Current log level=info(Possible transient levels: all, perf, debug[9-0], info, warn, error,crit, none)(Possible persistent levels: pall, pperf, pdebug[0-9], pinfo, pwarn,perror, pcrit, pnone)] | TODO | | transferProgressHandler | Has | rw | [NOT SHOWN] | TODO | | logMask | Str | rw | [0x0fff0000] | TODO | | pushHighPriorityMetrics | Int | w | | TODO | | handleToDoItem | Str | w | | TODO | | demoWifiNotAvailableAlertResponse | Str | w | | TODO | ===== kindle-apps-and-services/com.lab126.dpm.apps.md ===== com.lab126.dpm.apps LIPC Properties | ID | Type | R/W/RW | Value | Description | |:------------------------:|:----:|:------:|:-----:|:-----------:| | disableAnnotationsBackup | Int | w | | TODO | | disablePublicNotes | Int | w | | TODO | | disablePopularHighlights | Int | w | | TODO | ===== kindle-apps-and-services/com.lab126.dpmManager.md ===== com.lab126.dpmManager LIPC Properties | ID | Type | R/W/RW | Value | Description | |:---------------------------------:|:----:|:------:|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------:| | isPopularHighlightsDisabled | Int | r | [0] | TODO | | parentalControlsHint | Str | rw | [] | TODO | | isSettingsMenuDisabled | Int | r | [0] | TODO | | isParentalPasswordSet | Int | r | [0] | TODO | | isActiveContentDisabled | Int | r | [0] | TODO | | isExperimentalMenuDisabled | Int | r | [0] | TODO | | isDiscoveryDisabled | Int | rw | [0] | TODO | | logMask | Str | rw | [0x0fff0000] | TODO | | isChangeLanguageDisabled | Int | r | [0] | TODO | | isToggleWirelessDisabled | Int | r | [0] | TODO | | wipeAfterMaxPasscodeAttempts | Int | r | [0] | TODO | | isChangeDictionaryDisabled | Int | r | [0] | TODO | | isFactoryResetDisabled | Int | r | [0] | TODO | | logLevel | Str | rw | [Current log level=info(Possible transient levels: all, perf, debug[9-0], info, warn, error,crit, none)(Possible persistent levels: pall, pperf, pdebug[0-9], pinfo, pwarn,perror, pcrit, pnone)] | TODO | | secondaryProxyHost | Str | r | [] | TODO | | isTurnOnPasscodeDisabled | Int | r | [0] | TODO | | setParentalControlsPassword | Has | rw | [NOT SHOWN] | TODO | | getControlStatus | Int | r | [0] | TODO | | minPasscodeLength | Int | r | [1] | TODO | | devicePolicyId | Str | r | [] | TODO | | isArchivedItemsDisabled | Int | rw | [0] | TODO | | isSocialNetworksDisabled | Int | r | [0] | TODO | | isToggleAnnotationsBackupDisabled | Int | r | [0] | TODO | | isKindleStoreDisabled | Int | rw | [0] | TODO | | isTurnOffPasscodeDisabled | Int | r | [0] | TODO | | showAppLockedAlert | Has | rw | [NOT SHOWN] | TODO | | isMp3PlayerDisabled | Int | r | [0] | TODO | | isWikipediaLookupDisabled | Int | rw | [0] | TODO | | isAnnotationsBackupDisabled | Int | r | [0] | TODO | | isPublicNotesDisabled | Int | r | [0] | TODO | | isMinPasscodeLengthEnabled | Int | r | [0] | TODO | | contactInfo | Str | r | [Your System Administrator] | TODO | | isBrowserDisabled | Int | rw | [0] | TODO | | isManageWifiSettingsDisabled | Int | r | [0] | TODO | | secondaryProxyExcludedHosts | Str | r | [] | TODO | | isTogglePopularHighlightsDisabled | Int | r | [0] | TODO | | maxPasscodeAttempts | Int | r | [-1] | TODO | | isEditPersonalInfoDisabled | Int | r | [0] | TODO | | notifyDeviceControlsStateChange | Str | w | | TODO | | isDeregisterDisabled | Int | r | [0] | TODO | | isEditDeviceNameDisabled | Int | r | [0] | TODO | | isEditPasscodeDisabled | Int | r | [0] | TODO | | secondaryProxyPort | Str | r | [] | TODO | | isTogglePublicNotesDisabled | Int | r | [0] | TODO | | validateParentalControlsPassword | Has | rw | [NOTSHOWN] | TODO | ===== kindle-apps-and-services/com.lab126.dsus.md ===== com.lab126.dsus LIPC Properties | ID | Type | R/W/RW | Value | Description | |:-------------:|:----:|:------:|:-----:|:-----------:| | reportVersion | Str | w | | TODO | ===== kindle-apps-and-services/com.lab126.dynconfig.md ===== com.lab126.dynconfig LIPC Properties | ID | Type | R/W/RW | Value | Description | |:----------------------------:|:----:|:------:|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------:| | transferProgressNotification | Has | rw | [NOT SHOWN] | TODO | | logMask | Str | rw | [0x0fff0000] | TODO | | handleToDoItem | Str | w | | TODO | | logLevel | Str | rw | [Current log level=info(Possible transient levels: all, perf, debug[9-0], info, warn, error,crit, none)(Possible persistent levels: pall, pperf, pdebug[0-9], pinfo, pwarn,perror, pcrit, pnone)] | TODO | ===== kindle-apps-and-services/com.lab126.extractor.java.md ===== com.lab126.extractor.java LIPC Properties | ID | Type | R/W/RW | Value | Description | |:-------------:|:----:|:------:|:-----:|:-----------:| | logExtractors | Str | w | | TODO | | delete | Str | w | | TODO | | add | Str | w | | TODO | | update | Str | w | | TODO | ===== kindle-apps-and-services/com.lab126.fastMetrics.md ===== com.lab126.fastMetrics LIPC Properties | ID | Type | R/W/RW | Value | Description | |:---------------------------------:|:----:|:------:|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------:| | captivePortalResponse | Str | w | | TODO | | wifiPopupDone | Str | w | | TODO | | logMask | Str | rw | [0x0fff0000] | TODO | | demoWifiNotAvailableAlertResponse | Str | w | | TODO | | wirelessOn | Str | w | | TODO | | logLevel | Str | rw | [Current log level=info(Possible transient levels: all, perf, debug[9-0], info, warn, error,crit, none)(Possible persistent levels: pall, pperf, pdebug[0-9], pinfo, pwarn,perror, pcrit, pnone)] | TODO | ===== kindle-apps-and-services/com.lab126.freetime.md ===== com.lab126.freetime LIPC Properties | ID | Type | R/W/RW | Value | Description | |:--------------------------------:|:----:|:------:|:-----:|:-----------:| | updateChildrenSubscriptionStatus | Str | w | | TODO | | rejectSubscriptionOffer | Str | w | | TODO | | subscriptionStatus | Int | r | [0] | TODO | | refreshCache | Str | w | | TODO | ===== kindle-apps-and-services/com.lab126.grokservice.md ===== com.lab126.grokservice LIPC Properties | ID | Type | R/W/RW | Value | Description | |:-------------:|:----:|:------:|:--------:|:-----------:| | searchRequest | Str | w | | TODO | | isLinked | Str | r | [linked] | TODO | | flushCache | Str | w | | TODO | ===== kindle-apps-and-services/com.lab126.household.md ===== com.lab126.household LIPC Properties | ID | Type | R/W/RW | Value | Description | |:-----------------------------:|:----:|:------:|:-------:|:-----------:| | activeProfileRole | Str | r | [ADULT] | TODO | | activeProfile | Str | r | | TODO | | activeAdultProfile | Str | r | | TODO | | linkSecondaryAdultToHousehold | Str | w | | TODO | ===== kindle-apps-and-services/com.lab126.imageViewer.md ===== com.lab126.imageViewer LIPC Properties APP/SERVICE DOES NOT USE LIPC ===== kindle-apps-and-services/com.lab126.indexer.md ===== com.lab126.indexer LIPC Properties | ID | Type | R/W/RW | Value | Description | |:--------------------------------:|:----:|:------:|:-----:|:-----------:| | numberOfItemsToBeIndexed | Int | r | [0] | TODO | | dumpIndexerState | Int | w | | TODO | | updateIndexerState | Int | w | | TODO | | pauseIndexerTillTimeMilliseconds | Str | r | [-1] | TODO | | pauseIndexerMilliseconds | Int | w | | TODO | | debugTextDumpCount | Int | rw | [0] | TODO | | indexAndSearchContent | Str | w | | TODO | | pauseIndexerSourceMilliseconds | Str | w | | TODO | ===== kindle-apps-and-services/com.lab126.instantSearch.md ===== com.lab126.instantSearch LIPC Properties | ID | Type | R/W/RW | Value | Description | |:-----------------------:|:----:|:------:|:-----:|:-----------:| | handleSearchItem | Str | w | | TODO | | searchRequest | Str | w | | TODO | | initializeSearch | Int | w | | TODO | | storeSuggestionsRequest | Str | w | | TODO | ===== kindle-apps-and-services/com.lab126.kaf.md ===== com.lab126.kaf LIPC Properties | ID | Type | R/W/RW | Value | Description | |:-------------------:|:----:|:------:|:----------------------------------------:|:-----------:| | dumpHeap | Str | w | | TODO | | timezoneId | Str | r | [America/Los_Angeles] | TODO | | callInspector | Str | w | | TODO | | callCVM | Str | w | | TODO | | allocHeap | Int | w | | TODO | | heapUsed | Int | r | [20185] | TODO | | logLevel | Str | rw | [info] | TODO | | dumpHeapWithoutGC | Str | w | | TODO | | delayFrameworkStart | Int | rw | [0] | TODO | | frameworkStarted | Int | r | [1] | TODO | | logMask | Str | rw | [crit | error | warn | info (0x7800000)] | TODO | | dumpHeapUsage | Str | r | | TODO | | dumpNativeHeapStats | Str | w | | TODO | ===== kindle-apps-and-services/com.lab126.keyboard.md ===== com.lab126.keyboard LIPC Properties | ID | Type | R/W/RW | Value | Description | |:-----------------:|:----:|:------:|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------:| | lang | Int | r | [0] | TODO | | height | Int | r | [497] | TODO | | dumpWidget | Int | rw | [0] | TODO | | id | Int | r | [0] | TODO | | preedit | Str | r | [] | TODO | | uiQueryHash | Has | rw | [NOT SHOWN] | TODO | | web | Int | r | [0] | TODO | | flags | Int | r | [0] | TODO | | rescan | Str | r | [/var/local/system/keyboard.conf] | TODO | | language | Str | rw | [enUS] | TODO | | appID | Str | r | [] | TODO | | languages | Str | rw | [enUS] | TODO | | logLevel | Str | rw | [Current log level=info(Possible transient levels: all, perf, debug[9-0], info, warn, error,crit, none)(Possible persistent levels: pall, pperf, pdebug[0-9], pinfo, pwarn,perror, pcrit, pnone)] | TODO | | setSurround | Str | w | | TODO | | bounds | Str | r | [0:951:1072:497] | TODO | | logMask | Str | rw | [0x0fff0000] | TODO | | open | Str | w | | TODO | | show | Int | r | [0] | TODO | | close | Str | w | | TODO | | diacriticalId | Int | r | [0] | TODO | | keyboard_language | Str | r | [en-US] | TODO | | largeFont | Str | rw | [] | TODO | ===== kindle-apps-and-services/com.lab126.kindleStatusService.md ===== com.lab126.kindleStatusService LIPC Properties | ID | Type | R/W/RW | Value | Description | |:-------------------:|:----:|:------:|:-----:|:-----------:| | logToFile | Str | w | | TODO | | recordConfigMetrics | Str | w | | TODO | | log | Str | w | | TODO | ===== kindle-apps-and-services/com.lab126.kwis.md ===== com.lab126.kwis LIPC Properties | ID | Type | R/W/RW | Value | Description | |:------:|:----:|:------:|:-----:|:-----------:| | daemon | Str | w | | TODO | ===== kindle-apps-and-services/com.lab126.kwis.weblabTreatments.md ===== com.lab126.kwis.weblabTreatments LIPC Properties | ID | Type | R/W/RW | Value | Description | |:-----------:|:----:|:------:|:-------------:|:-----------:| | experiments | Has | rw | [NOT SHOWN] | TODO | ===== kindle-apps-and-services/com.lab126.legalComplianceService.md ===== com.lab126.legalComplianceService LIPC Properties | ID | Type | R/W/RW | Value | Description | |:---------:|:----:|:------:|:-----:|:-----------:| | gdprValue | Int | r | [1] | TODO | ===== kindle-apps-and-services/com.lab126.linux.arm.connectionutilities.md ===== com.lab126.linux.arm.connectionutilities LIPC Properties | ID | Type | R/W/RW | Value | Description | |:---------------------------------:|:----:|:------:|:-----:|:-----------:| | wifiPopupDone | Str | w | | TODO | | demoWifiNotAvailableAlertResponse | Str | w | | TODO | | captivePortalResponse | Str | w | | TODO | | wirelessOn | Str | w | | TODO | ===== kindle-apps-and-services/com.lab126.linux.arm.metrics.md ===== com.lab126.linux.arm.metrics LIPC Properties APP/SERVICE DOES NOT USE LIPC ===== kindle-apps-and-services/com.lab126.lxinit.md ===== com.lab126.lxinit LIPC Properties APP/SERVICE DOES NOT USE LIPC ===== kindle-apps-and-services/com.lab126.merchant.md ===== com.lab126.merchant LIPC Properties | ID | Type | R/W/RW | Value | Description | |:---------:|:----:|:------:|:------:|:-----------:| | remove | Str | w | | TODO | | shuffle | Str | rw | [true] | TODO | | removeAll | Str | w | | TODO | ===== kindle-apps-and-services/com.lab126.odot.md ===== com.lab126.odot LIPC Properties | ID | Type | R/W/RW | Value | Description | |:------------:|:----:|:------:|:-----:|:-----------:| | queueMessage | Str | w | | TODO | ===== kindle-apps-and-services/com.lab126.phd.md ===== com.lab126.phd LIPC Properties | ID | Type | R/W/RW | Value | Description | |:--------------:|:----:|:------:|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------:| | logMask | Str | rw | [0x0fff0000] | TODO | | newSPHSchedule | Str | w | | TODO | | logLevel | Str | rw | [Current log level=info(Possible transient levels: all, perf, debug[9-0], info, warn, error,crit, none)(Possible persistent levels: pall, pperf, pdebug[0-9], pinfo, pwarn,perror, pcrit, pnone)] | TODO | ===== kindle-apps-and-services/com.lab126.pillow.md ===== com.lab126.pillow Pillow is commonly used to display alerts and dialogues to the user. Pillow can be invoked via Mesquite and Mesquito apps via the Mesuqito SDK which contains a wrapper for Pillow based on this code (https://github.com/PaulFreund/WebLaunch/blob/master/bin/pillowHelper.js) LIPC Properties | ID | Type | R/W/RW | Value | Description | |:---------------------:|:----:|:------:|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------:| | disableEnablePillow | Str | w | | TODO | | dismissChrome | Str | w | | TODO | | customDialog | Str | w | | TODO | | applicationWindow | Str | w | | TODO | | logLevel | Str | rw | [Current log level=info(Possible transient levels: all, perf, debug[9-0], info, warn, error,crit, none)(Possible persistent levels: pall, pperf, pdebug[0-9], pinfo, pwarn,perror, pcrit, pnone)] | TODO | | activityIndicator | Str | w | | TODO | | debugInfo | Str | w | | TODO | | logMask | Str | rw | [0x0fff0000] | TODO | | displayChrome | Str | w | | TODO | | interrogatePillow | Str | w | | TODO | | interrogatePillowHash | Has | rw | [NOT SHOWN] | TODO | | pillowAlert | Str | w | | TODO | ===== kindle-apps-and-services/com.lab126.pmond.md ===== com.lab126.pmond LIPC Properties | ID | Type | R/W/RW | Value | Description | |:--------------------:|:----:|:------:|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------:| | memwarn | Str | w | | TODO | | kill | Str | w | | TODO | | systemmemorystatus | Str | r | [systemMemoryNormal] | TODO | | restart | Str | w | | TODO | | stop | Str | w | | TODO | | logLevel | Str | rw | [Current log level=info(Possible transient levels: all, perf, debug[9-0], info, warn, error,crit, none)(Possible persistent levels: pall, pperf, pdebug[0-9], pinfo, pwarn,perror, pcrit, pnone)] | TODO | | summary | Str | r | | TODO | | logMask | Str | rw | [0x0fff0000] | TODO | | startmonitoring | Int | w | | TODO | | stopmonitoring | Int | w | | TODO | | heartbeatstart | Str | w | | TODO | | start | Str | w | | TODO | | memlimit | Str | w | | TODO | | heartbeatstop | Str | w | | TODO | ===== kindle-apps-and-services/com.lab126.powerd.md ===== com.lab126.powerd LIPC Properties | ID | Type | R/W/RW | Value | Description | |:--------------------------:|:----:|:------:|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------:| | touchScreenSaverTimeout | Int | w | | TODO | | deferSuspend | Int | w | | TODO | | wakeUp | Int | w | | TODO | | flRawIntensity | Int | r | [3280] | TODO | | rtcWakeup | Int | w | | TODO | | state | Str | r | [active] | TODO | | suspendGrace | Int | w | | TODO | | battStateInfo | Str | r | | TODO | | deferRestart | Int | w | | TODO | | shutdownAlertResponse | Str | w | | TODO | | battTemperature | Int | r | [73] | TODO | | addSuspendLevels | Int | w | | TODO | | logLevel | Str | rw | [Current log level=none(Possible transient levels: all, perf, debug[9-0], info, warn, error,crit, none)(Possible persistent levels: pall, pperf, pdebug[0-9], pinfo, pwarn,perror, pcrit, pnone)] | TODO | | battLevel | Int | r | [51] | TODO | | preventScreenSaver | Int | rw | [0] | TODO | | logMask | Str | rw | [0x00000000] | TODO | | sendPendingResume | Int | w | | TODO | | flAuto | Int | rw | [0] | TODO | | flIntensity | Int | rw | [24] | TODO | | flMaxIntensity | Int | r | [25] | TODO | | rtcWakeup2 | Str | w | | TODO | | abortSuspend | Int | w | | TODO | | flTurboBrightnessIntensity | Int | r | [1] | TODO | | powerButton | Int | w | | TODO | | flStartup | Int | w | | TODO | | status | Str | r | [Powerd state: ActiveRemaining time in this state: 588.597023defersuspend:0suspendgrace:0preventscreensaver:0drivemodestate:1PRIMARY BATTERYBattery Level: 51%Last batt event at: 51%Charging: NoBattery logging: On] | TODO | | isLowTempState | Int | r | [0] | TODO | | isCharging | Int | r | [0] | TODO | ===== kindle-apps-and-services/com.lab126.quickactions.md ===== com.lab126.quickactions LIPC Properties | ID | Type | R/W/RW | Value | Description | |:------------------:|:----:|:------:|:-----:|:-----------:| | toggleAirplaneMode | Str | w | | TODO | | syncAndCheck | Str | w | | TODO | ===== kindle-apps-and-services/com.lab126.reader.languagelayer.md ===== com.lab126.reader.languagelayer LIPC Properties | ID | Type | R/W/RW | Value | Description | |:-----:|:----:|:------:|:-----:|:-----------:| | reset | Str | w | | TODO | ===== kindle-apps-and-services/com.lab126.reader.languagelayer.pinyin.md ===== com.lab126.reader.languagelayer.pinyin LIPC Properties | ID | Type | R/W/RW | Value | Description | |:-----:|:----:|:------:|:-----:|:-----------:| | reset | Str | w | | TODO | ===== kindle-apps-and-services/com.lab126.reader.qa.md ===== com.lab126.reader.qa LIPC Properties | ID | Type | R/W/RW | Value | Description | |:-------------:|:----:|:------:|:---------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------:| | getFontStyles | Str | r | [["amazonember","condensed","amazon ember bold","futura","baskerville","helveticaneue lt","bookerly","opendyslexic","caecilia regular","palatino"]] | TODO | | lineSpacing | Int | rw | [1] | TODO | | fontSize | Int | rw | [3] | TODO | | fontBoldness | Int | rw | [0] | TODO | | fontStyle | Str | rw | [bookerly] | TODO | ===== kindle-apps-and-services/com.lab126.reader.readingtimer.md ===== com.lab126.reader.readingtimer LIPC Properties | ID | Type | R/W/RW | Value | Description | |:-----------------------:|:----:|:------:|:----------:|:-----------:| | getReadingProgressTypes | Str | r | | TODO | | readingProgressType | Str | rw | [location] | TODO | ===== kindle-apps-and-services/com.lab126.readingstreams.md ===== com.lab126.readingstreams LIPC Properties | ID | Type | R/W/RW | Value | Description | |:-------------:|:----:|:------:|:-------------:|:-----------:| | performAction | Has | rw | [NOT SHOWN] | TODO | | hideContext | Has | rw | [NOT SHOWN] | TODO | | recordSetting | Has | rw | [NOT SHOWN] | TODO | | showContext | Has | rw | [NOT SHOWN] | TODO | | openContext | Has | rw | [NOT SHOWN] | TODO | ===== kindle-apps-and-services/com.lab126.readnow.md ===== com.lab126.readnow LIPC Properties | ID | Type | R/W/RW | Value | Description | |:--------:|:----:|:------:|:-----:|:-----------:| | openBook | Str | w | | TODO | ===== kindle-apps-and-services/com.lab126.refreshCache.md ===== com.lab126.refreshCache LIPC Properties | ID | Type | R/W/RW | Value | Description | |:---------------------------------:|:----:|:------:|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------:| | refreshCacheReady | Str | w | | TODO | | refreshCacheRun | Int | w | | TODO | | refreshCacheFailure | Str | w | | TODO | | updateRefreshTime | Has | rw | [NOT SHOWN] | TODO | | refreshCacheSuccess | Str | w | | TODO | | wifiPopupDone | Str | w | | TODO | | wirelessOn | Str | w | | TODO | | captivePortalResponse | Str | w | | TODO | | logLevel | Str | rw | [Current log level=info(Possible transient levels: all, perf, debug[9-0], info, warn, error,crit, none)(Possible persistent levels: pall, pperf, pdebug[0-9], pinfo, pwarn,perror, pcrit, pnone)] | TODO | | logMask | Str | rw | [0x0fff0000] | TODO | | refreshCachePrintClients | Int | w | | TODO | | demoWifiNotAvailableAlertResponse | Str | w | | TODO | ===== kindle-apps-and-services/com.lab126.scanner.md ===== com.lab126.scanner LIPC Properties | ID | Type | R/W/RW | Value | Description | |:--------------:|:----:|:------:|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------:| | triggerUpdate | Int | w | | TODO | | doFullScan | Int | w | | TODO | | logMask | Str | rw | [0x0fff0000] | TODO | | fullScanStatus | Int | r | [0] | TODO | | logLevel | Str | rw | [Current log level=info(Possible transient levels: all, perf, debug[9-0], info, warn, error,crit, none)(Possible persistent levels: pall, pperf, pdebug[0-9], pinfo, pwarn,perror, pcrit, pnone)] | TODO | | reScanFile | Str | w | | TODO | ===== kindle-apps-and-services/com.lab126.sharing.md ===== com.lab126.sharing LIPC Properties | ID | Type | R/W/RW | Value | Description | |:---------------------:|:----:|:------:|:-----:|:-----------:| | isSharingEnabled | Int | r | [0] | TODO | | shareBookEvent | Str | w | | TODO | | shareBookText | Str | w | | TODO | | shareMessageAboutBook | Str | w | | TODO | ===== kindle-apps-and-services/com.lab126.sph.md ===== com.lab126.sph LIPC Properties APP/SERVICE DOES NOT USE LIPC ===== kindle-apps-and-services/com.lab126.stored.md ===== com.lab126.stored LIPC Properties | ID | Type | R/W/RW | Value | Description | |:----------------------------:|:----:|:------:|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------:| | processRestart | Str | w | | TODO | | refreshCache | Str | w | | TODO | | kill | Str | w | | TODO | | logLevel | Str | rw | [Current log level=info(Possible transient levels: all, perf, debug[9-0], info, warn, error,crit, none)(Possible persistent levels: pall, pperf, pdebug[0-9], pinfo, pwarn,perror, pcrit, pnone)] | TODO | | run | Str | w | | TODO | | logMask | Str | rw | [0x0fff0000] | TODO | | transferProgressNotification | Has | rw | [NOT SHOWN] | TODO | | ready | Str | r | [1] | TODO | ===== kindle-apps-and-services/com.lab126.system.md ===== com.lab126.system LIPC Properties | ID | Type | R/W/RW | Value | Description | |:-----------------------:|:----:|:------:|:-----------------------------------------------------------------------------------------------------------------:|:-----------:| | executeDebugCommand | Str | w | | TODO | | displayTemperature | Str | r | [23] | TODO | | guid | Str | r | [xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx] | TODO | | enableTimeAutoUpdate | Str | w | | TODO | | monoTime | Str | r | [] | TODO | | sendEvent | Str | w | | TODO | | disableTimeAutoUpdate | Str | w | | TODO | | deleteWaveform | Str | w | | TODO | | version | Str | r | [System Software Version:025-juno1202muscatwario-356962 Wed Sep 25 01:55:27 UTC 2019com.lab126.eink.muscat.os] | TODO | | isTimeAutoUpdateEnabled | Str | r | [true] | TODO | | panelCode | Str | r | [R060ED060KD1C1] | TODO | | waveformversion | Str | r | [320R060AE6C01ED060KD1C1TC] | TODO | | btDeviceReconfirmed | Str | w | | TODO | | updateWaveform | Str | w | | TODO | | disableASR | Str | w | | TODO | | monoTimeSaved | Str | r | [] | TODO | | openFeedbackApp | Str | w | | TODO | | stopVoiceView | Str | w | | TODO | | panelWaveformversion | Str | r | | TODO | | date | Str | w | | TODO | | usid | Str | r | [xxxxxxxxxxxxxxxx] | TODO | | startVoiceView | Str | w | | TODO | | orientation | Str | r | [] | TODO | | deviceLocaleSelected | Str | w | | TODO | | boardid | Str | r | [xxxxxxxxxxxxxxxx] | TODO | | takeScreenShot | Str | w | | TODO | ===== kindle-apps-and-services/com.lab126.todo.kaf.md ===== com.lab126.todo.kaf LIPC Properties | ID | Type | R/W/RW | Value | Description | |:--------------:|:----:|:------:|:-----:|:-----------:| | handleToDoItem | Str | w | | TODO | ===== kindle-apps-and-services/com.lab126.todo.md ===== com.lab126.todo LIPC Properties | ID | Type | R/W/RW | Value | Description | |:---------------------------------:|:----:|:------:|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------:| | scheduleToDoItems | Str | w | | TODO | | driveAvailInternally | Int | r | [1] | TODO | | disableToDo | Int | w | | TODO | | wifiPopupDone | Str | w | | TODO | | wirelessOn | Str | w | | TODO | | enableToDo | Int | w | | TODO | | captivePortalResponse | Str | w | | TODO | | isToDoAvailable | Str | w | | TODO | | logLevel | Str | rw | [Current log level=none(Possible transient levels: all, perf, debug[9-0], info, warn, error,crit, none)(Possible persistent levels: pall, pperf, pdebug[0-9], pinfo, pwarn,perror, pcrit, pnone)] | TODO | | logMask | Str | rw | [0x00000000] | TODO | | scheduleToDo | Int | w | | TODO | | disableToDoForProfileSwitch | Int | w | | TODO | | reportStatus | Str | w | | TODO | | demoWifiNotAvailableAlertResponse | Str | w | | TODO | ===== kindle-apps-and-services/com.lab126.tphv3.md ===== com.lab126.tphv3 LIPC Properties | ID | Type | R/W/RW | Value | Description | |:------------------------:|:----:|:------:|:-----:|:-----------:| | debugTphv3StillHereCount | Int | r | [6] | TODO | | debugTphv3UdpTphCount | Int | r | [0] | TODO | | debugTphv3State | Int | r | [2] | TODO | | debugTphv3SessionCount | Int | r | [1] | TODO | | debugTphv3Supported | Int | r | [1] | TODO | | debugTphv3SilentPeriod | Int | r | [27] | TODO | | debugTphv3SessionTimeout | Int | r | [28] | TODO | ===== kindle-apps-and-services/com.lab126.transfer.md ===== com.lab126.transfer LIPC Properties | ID | Type | R/W/RW | Value | Description | |:---------------------------------:|:----:|:------:|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------:| | obliterate | Has | rw | [NOT SHOWN] | TODO | | modify | Has | rw | [NOT SHOWN] | TODO | | wifiPopupDone | Str | w | | TODO | | wirelessOn | Str | w | | TODO | | dequeue | Has | rw | [NOT SHOWN] | TODO | | captivePortalResponse | Str | w | | TODO | | sendstatus | Has | rw | [NOT SHOWN] | TODO | | dumpqueues | Has | rw | [NOT SHOWN] | TODO | | logLevel | Str | rw | [Current log level=info(Possible transient levels: all, perf, debug[9-0], info, warn, error,crit, none)(Possible persistent levels: pall, pperf, pdebug[0-9], pinfo, pwarn,perror, pcrit, pnone)] | TODO | | requestupload | Has | rw | [NOT SHOWN] | TODO | | getinfo | Has | rw | [NOT SHOWN] | TODO | | logMask | Str | rw | [0x0fff0000] | TODO | | request_download | Has | rw | [NOT SHOWN] | TODO | | demoWifiNotAvailableAlertResponse | Str | w | | TODO | ===== kindle-apps-and-services/com.lab126.transferService.md ===== com.lab126.transferService LIPC Properties | ID | Type | R/W/RW | Value | Description | |:----------------------------:|:----:|:------:|:-------------:|:-----------:| | transferProgressNotification | Has | rw | [NOT SHOWN] | TODO | ===== kindle-apps-and-services/com.lab126.tutorialService.md ===== com.lab126.tutorialService LIPC Properties | ID | Type | R/W/RW | Value | Description | |:----------------------:|:----:|:------:|:-----:|:-----------:| | clearAllTutorialStatus | Str | w | | TODO | ===== kindle-apps-and-services/com.lab126.volumd.md ===== com.lab126.volumd LIPC Properties | ID | Type | R/W/RW | Value | Description | |:----------------------------:|:----:|:------:|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------:| | userstoreIsAvailable | Int | r | [1] | TODO | | userstoreTotalSpace | Int | r | [1042168] | TODO | | userstoreDeferUnmountRequest | Int | w | | TODO | | logLevel | Str | rw | [Current log level=info(Possible transient levels: all, perf, debug[9-0], info, warn, error,crit, none)(Possible persistent levels: pall, pperf, pdebug[0-9], pinfo, pwarn,perror, pcrit, pnone)] | TODO | | logMask | Str | rw | [0x0fff0000] | TODO | | recreateUserstoreResponse | Str | w | | TODO | | userstoreReadyToUnMount | Int | w | | TODO | | useUsbForNetwork | Int | rw | [1] | TODO | | driveModeState | Int | r | [0] | TODO | | userstoreFreeSpace | Int | r | [646248] | TODO | ===== kindle-apps-and-services/com.lab126.wifid.md ===== com.lab126.wifid LIPC Properties | ID | Type | R/W/RW | Value | Description | |:---------------------------:|:----:|:------:|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------:| | certificateData | Has | rw | [NOT SHOWN] | TODO | | deleteCertificate | Str | w | | TODO | | cmIntfInfo | Has | rw | [NOT SHOWN] | TODO | | signalStrength | Str | r | [5/5] | TODO | | enable | Int | rw | [1] | TODO | | hotSpotDBDownloadStatus | Int | w | | TODO | | 711 | Str | r | [****** 2- Connection ***2.1 MAC: 74:C2:46:FC:4D:662.2 Wireless: On(1)2.3 AP: xxxxxxxxx (xx:xx:xx:xx:xx:xx)2.3.1 Signal: 5/52.3.2 Captive: No(0)2.3.3 Security: WPA2-PSK2.3.4 Channel: 42.6 Country: US*** 3- Networks ***EAP: [, , ]*** 4- Interface ***4.1 IP : 192.168.1.144.2 Netmask : 255.255.255.04.3 Broadcast :4.4 Gateway : 192.168.1.14.5 Config : DHCP4.6 DNS : 192.168.1.1,4.7 Sponsored : No(0)*** 5- DHCP *****adding dns 192.168.1.1] | TODO | | macSecret | Str | r | [xxxxxxxxxxxxxxxxxxxx] | TODO | | cmConnect | Str | w | | TODO | | cmCheckConnection | Str | w | | TODO | | cmIntfInUse | Int | r | [1] | TODO | | manufacturerCode | Str | r | [xxxxxxxxxxxxxxxxxxxx] | TODO | | installCertificate | Has | rw | [NOT SHOWN] | TODO | | macAddress | Str | r | [xx:xx:xx:xx:xx:xx] | TODO | | profileData | Has | rw | [NOT SHOWN] | TODO | | netConfig | Has | rw | [NOT SHOWN] | TODO | | cmDisconnect | Str | w | | TODO | | logMask | Str | rw | [0x0fff0000] | TODO | | logLevel | Str | rw | [Current log level=info(Possible transient levels: all, perf, debug[9-0], info, warn, error,crit, none)(Possible persistent levels: pall, pperf, pdebug[0-9], pinfo, pwarn,perror, pcrit, pnone)] | TODO | | scanListCount | Int | r | [2] | TODO | | cmNWProperties | Has | rw | [NOT SHOWN] | TODO | | createProfile | Has | rw | [NOT SHOWN] | TODO | | scanState | Str | r | [idle] | TODO | | cmConnMode | Str | w | | TODO | | feelingLuckyProfile | Str | r | [HOME0218502G] | TODO | | deleteProfile | Str | w | | TODO | | currentEssid | Has | rw | [NOT SHOWN] | TODO | | cmState | Str | r | [CONNECTED] | TODO | | createNetConfig | Has | rw | [NOT SHOWN] | TODO | | scan | Str | w | | TODO | | scanList | Has | rw | [NOT SHOWN*] | TODO | | profileCount | Int | r | [1] | TODO | | resetSavePasswordPreference | Int | w | | TODO | ===== kindle-apps-and-services/com.lab126.winmgr.ligl.md ===== com.lab126.winmgr.ligl LIPC Properties | ID | Type | R/W/RW | Value | Description | |:-------:|:----:|:------:|:-----:|:-----------:| | logMask | Str | w | | TODO | ===== kindle-apps-and-services/com.lab126.winmgr.md ===== com.lab126.winmgr LIPC Properties | ID | Type | R/W/RW | Value | Description | |:------------------------------:|:----:|:------:|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------:| | refreshOnTurn | Str | w | | TODO | | accelerometer | Str | r | [U] | TODO | | eatTapMode | Int | w | | TODO | | liglDebugParams | Str | w | | TODO | | defineWipeCurve | Str | w | | TODO | | visibleWindows | Str | w | | TODO | | setAccOrientation | Str | rw | [0] | TODO | | passwordDialogEnabled | Int | rw | [0] | TODO | | liglFlash | Str | w | | TODO | | liglPause | Int | rw | [0] | TODO | | pageTurnkeyConfig | Str | rw | [Normal] | TODO | | setPreference | Str | w | | TODO | | getAllWindows | Str | w | | TODO | | getActiveAppTitle | Str | r | | TODO | | logLevel | Str | rw | [Current log level=info(Possible transient levels: all, perf, debug[9-0], info, warn, error,crit, none)(Possible persistent levels: pall, pperf, pdebug[0-9], pinfo, pwarn,perror, pcrit, pnone)] | TODO | | winmgrReady | Int | r | [1] | TODO | | fakeTap | Str | w | | TODO | | epdcMode | Str | rw | [Y8] | TODO | | debugInfo | Str | rw | [] | TODO | | logMask | Str | rw | [0x0fff0000] | TODO | | grip_enabled | Int | rw | [1] | TODO | | isScreenSaverLayerWindowActive | Int | r | [0] | TODO | | extendDamageTimeout | Int | w | | TODO | | chromeState | Int | rw | [0] | TODO | | focusChrome | Str | w | | TODO | | ASRMode | Int | rw | [0] | TODO | | orientation | Str | r | [U] | TODO | | fakeKeyEvent | Str | w | | TODO | | enableDispalyEvents | Int | rw | [0] | TODO | | orientationLock | Str | rw | [U] | TODO | ===== kindle-apps-and-services/com.lab126.wishlist.md ===== com.lab126.wishlist LIPC Properties | ID | Type | R/W/RW | Value | Description | |:------------:|:----:|:------:|:-----:|:-----------:| | refreshCache | Str | w | | TODO | ===== kindle-apps-and-services/com.lab126.yjff.md ===== com.lab126.yjff LIPC Properties APP/SERVICE DOES NOT USE LIPC ===== kindle-apps-and-services/com.lab126.yjlipclistener.md ===== com.lab126.yjlipclistener LIPC Properties | ID | Type | R/W/RW | Value | Description | |:----------------:|:----:|:------:|:-----:|:-----------:| | disableYJIndexer | Str | w | | TODO | ===== kindle-apps-and-services/index.md ===== Kindle Apps & Services The Kindle has many apps/services which communicated via LIPC, which is similar to dbus in many respsects. LIPC values are wrapped in square brackets ([]), these should be excluded when writing to a LIPC entry This entire section is a WIP and is incomplete How to use LIPC can be interacted with through the command line as so: ~~~bash lipc-set-prop # Set a property value lipc-set-prop com.lab126.powerd preventScreenSaver 1 # Disable screensaver lipc-set-prop com.lab126.appmgrd start app://com.lab126.booklet.home # Open the home "app" lipc-get-prop # Get a property value lipc-get-prop com.lab126.btfd isBtchRunning # Check if BTch is running ~~~ Identifying what process owns a service To get the pid of the process that owns/registered a service, the following command can be used (where is the name of the service, such as com.lab126.btService): ~~~bash dbus-send --system --print-reply --dest=org.freedesktop.DBus / org.freedesktop.DBus.GetConnectionUnixProcessID string: # Longer Command gdbus call -y -d org.freedesktop.DBus -o / -m org.freedesktop.DBus.GetConnectionUnixProcessID # Slightly Shorter Command ~~~ Then, you can use ps -p to get the name of the process, or use ps u -p to get the full process command line. List of apps/services The following list was obtained via the following command run on the Kindle: ~~~bash lipc-probe -a -v ~~~ ===== kindle-dev/awesome-window-manager/index.md ===== img { max-height: 30vh; object-fit: scale-down; } Awesome Window Manager As mentioned in the gtk-tutorial (../gtk-tutorial/), the Kindle uses the Awesome Window Manager with some tweaks, this means that every window must have a title which follows a specific format. For example, the Kindle store has a window title of: L:AN:applicationPC:TSID:com.lab126.store Window titles are actually a key-value store, seperated by an character, this means the above title, would translate roughly to pseudo-JSON as: { "L":"A", "N":"application", "PC":"TS", "ID":"com.lab126.store" } Below is a list of every key and what it's role is: [L]ayer The L flag is what layer the window should display on, it can be one of 5 values: | Value | Description | |-------|---------------------------| | A | The APP layer | | C | The CHROME layer | | D | The DIALOG layer | | KB | The KB (keyboard) layer | | SS | The SCREENSAVER layer | Layers are displayed from top to bottom, with applications on the SCREENSAVER layer being above applications on the APP layer. Generally you will only be using the A and D layer values. [N]ame lab126 internally refers to this as the "name/role" of the window, in reality it only represents the role of the window, and should be one of the listed values: | Value | Description | |----------------|--------------------------------------------------------------------------------------------------| | application | For use with the A layer, application windows | | dialog | For use with the D layer, dialog windows | | titlebar | For backwards compatability, | | tiledBottom | [SHOULD NOT BE USED IN PRODUCTION - lab126.applicationlayer.lua:255] | | searchResult | For use with the C layer, seemingly used for search result displays, acts as a modified dialog | | pillowAlert | An alert created by Pillow, for use with the D layer, blocks the home button | | titleBar | | | footerBar | | | topBar | Seemingly used for custom search bar apps (use with BARTYPE parameter) | | mediaBar | | | bottomBar | REDUNDANT - use topBar role with BARTYPE of B | | appToolBar | REDUNDANT - use topBar role with BARTYPE of A | | keyboard | Used by the Kindle's keyboard | | keyboardExt | | | activeSS | | | screenSaver | | | searchBar | Used by the Kindle's top bar | You will generally only use application and dialog for this, in conjunction with the A and D layers [PC] (Persistent Chrome) Used by the window manager to determine how to handle displaying chrome elements on the Kindle such as the top bar and "search bar" It's value is any combination of the following: | Value | Description | Example | |-------|-----------------------------------------------------------------------------------------------------|--------------------------------| | T | Show the Kindle top bar/status bar on modern firmware | [Image: ./images/pcexamples/T.png] | | S | Shows the "search bar" | [Image: ./images/pcexamples/S.png] | | B | Shows the legacy bottom bar | [Image: ./images/pcexamples/B.png] | | N | Show no bars (same as if PC was ommited entirely) | [Image: ./images/pcexamples/N.png] | Examples of combining multiple PC values: | Value | Image | |-------|----------------------------------| | TS | [Image: ./images/pcexamples/TS.png] | | TSB | [Image: ./images/pcexamples/TSB.png] | Window resizing appears to be broken in TSB, it is only shown for illustrative purposes and shouldn't be used [ID] (Identifier) This is a simple string giving the identifier of the app, it's value can be anything not containing an underscore (as that is used as a delimiter) and it usually takes an app ID in a format similar to com.lab126.reader (reverse domain name) Note that the value blankBackground is reserved, it's purpose is currently unknown but it makes an app invalid [BARTYPE] BARTYPE is used with thetopBar role type, it describes the bar's positioning and takes one of the following values: | Value | Description | |-------|-----------------------------------------------------------------------------------------------------| | T | Top bar type | | S | Search bar type | | B | Bottom bar type - "added for kpp chrome footer" - It behaves like top bars in terms of persistence | | A | Application bar type - Secondary bar for application specific tools | [O]rientation - Supported App Orientations Sets the application's orientation mask for supported orientations, can be any combination of 4 values (IE: ULR or UDLR): | Value | Description | |-------|-------------| | U | Up | | D | Down | | L | Left | | R | Right | [HIDE] A flag that can be set to hide the window, the title can be updated without it to show the window IE: L:AN:applicationHIDEID:org.kindlemodding.hiddenwindow Note that this flag can take an optional value of background which means this window does not take focus. (actual purpose unknown) [RC] - Rounded Corners For use with dialogs, can be used to set rounded corners on a dialog, it can be used as a flag or given an integer value representing the corner radius in pixels of all the corners. It can also be given the value custom, where any combination of the following 4 keys can be used to set a corner radius for the window: - RCTL - RCTR - RCBL - RCBR Example, setting rounded corners only on the top-left and top-right corners to the default rounded corner radius: RC:customRCTLRCTR [M]odality Used specifically for dialogs, if this flag is present, it dictates the dialog is a modal. It can have an optional value of dismissible, ie: L:AN:applicationM:dismissableID:org.kindlemodding.hiddenwindow [RKB] - Require KeyBoard Used specifically for dialogs that require the keyboard, this positions the dialog so that it does not clip with the spawned keyboard. It can seemingly take a numeric value of unknown purpose. [PALMR] - Palm Rejection Purpose unknown - only used in conjunction with M:dismissable, seemingly related to palm rejection on dismissal ===== kindle-dev/gtk-tutorial/index.md ===== GTK Tutorial This section is a step-by-step guide on creating a native Kindle app with a gui using GTK+-2.0, C++ and the Meson build system. It is assumed that you already have basic knowledge of C++ before following this guide. ===== kindle-dev/gtk-tutorial/kindle-considerations.md ===== Kindle Considerations There are some important things to consider when writing GUI-based applications on the Kindle Window Title See: Awesome Window Manager ===== kindle-dev/gtk-tutorial/prerequisites.md ===== Prerequisites You will need to be running a Linux operating system or WSL/msys2 under Windows MacOS is untested but may work You will need a jailbroken Kindle and you will need to know what firmware your Kindle is running on. You will also need to compile a toolchain targetting your device, the details of which are explained further on this page. You will also need the following packages installed on your system for the toolchain: - git - ncurses - gperf - help2man - bison - texinfo - flex - gawk - unzip - wget As well as curl and sed installed for the SDK And specifically for this tutorial: - meson - gtk2 (with development headers) - compilation tools Installing The Required Packages For Arch Linux For the toolchain sudo pacman -S base-devel curl git gperf help2man unzip wget For the SDK sudo pacman -S curl sed libarchive nettle For this tutorial sudo pacman -S meson gtk2 For Debian/Ubuntu For the toolchain sudo apt-get install build-essential autoconf automake bison flex gawk libtool libtool-bin libncurses-dev curl file git gperf help2man texinfo unzip wget For the sdk sudo apt-get install curl sed libarchive-dev nettle-dev For this tutorial sudo apt-get install meson gtk2.0 libgtk2.0-dev Building The Toolchain If you don't want to build the toolchain yourself or if you encounter difficulties in building it, use the pre-built release (https://github.com/koreader/koxtoolchain/releases/latest) 1. Clone the toolchain git clone --recursive --depth=1 https://github.com/koreader/koxtoolchain.git 2. Build the toolchain for your device cd koxtoolchain chmod +x ./gen-tc.sh ./gen-tc.sh Where target should be replaced as follows: | TC | Supported Devices | Target | |:---------:|:-------------------------------------------:|:--------------------------------:| | kindle | Kindle 2, DX, DXg, 3 | [not supported by this tutorial] | | kindle5 | Kindle 4, Touch, PW1 | [not supported by this tutorial] | | kindlepw2 | Kindle PW2 & everything since on FW = 5.16.3 | kindlehf | If you want to support multiple Kindles, you can compile multiple toolchain targets just by running ./gen-tc.sh and the new toolchain be added to your ~/x-tools directory Compilation usually takes around 30-minutes per target on most PCs Setting up the SDK The KMC Kindle SDK augments your existing koxtoolchain installation by providing headers and library files used with the Kindle. 1. Clone the SDK git clone --recursive --depth=1 https://github.com/KindleModding/kindle-sdk.git 2. Install the SDK for your target cd kindle-sdk chmod +x ./gen-sdk.sh ./gen-sdk.sh Where is the same as the toolchain you want to install the SDK for. [Image: ./images/sdkinstall.png] Once the SDK has finished installing itself, make a note of the path it returns to the meson-crosscompile.txt file, this will be important later! ===== kindle-dev/gtk-tutorial/setting-up.md ===== Setting Up The Project Create a new git repository in a safe location, this will be where we write the code for our app Setting up the Meson project Creating the meson.options file Create a file called meson.options and copy the following to it: option('kindlerootdir', type : 'string', value: '', description: 'The path to the Kindle\'s mounted rootfs (for linking libraries)') The meson.options (https://mesonbuild.com/Build-options.html) file tells Meson what parameters a project uses for configuration and compilation, in our case we only need the kindlerootdir option so we can set it to our Kindle's root directory in a later step. Creating the meson.build file The meson.build file specifies how our project is configured and compiled. Create a meson.build file and copy the following to it: project('examplegtkapplication', 'cpp', version: 'v1.0.0', defaultoptions: ['cppstd=c++17'], mesonversion: '>=1.1') Define dependencies we want gtkdep = dependency('gtk+-2.0') Project definition sources = files( './src/main.cpp' ) includedirs = includedirectories( './src/include/' ) executable('examplegtkapplication', sources, includedirectories: includedirs, dependencies: [gtkdep], cppargs: '-static-libstdc++', linkargs: '-static-libstdc++') Note how we statically link the C++ standard library! Koxtoolchain ships with a GCC version newer than the Kindle technically supports, but this is fine so long as we statically link the standard library. Your overall file structure should now look something like this: . ├── meson.build └── meson.options 1 directory, 2 files Creating our source files Now create a file called main.cpp and a folder called include under the src/ folder, your overall file structure should look something like: . ├── meson.build ├── meson.options └── src ├── include └── main.cpp 3 directories, 3 files Now in main.cpp, copy the following code: include int main(int argc, char argv[]) { GtkWidget window; gtkinit (&argc, &argv); window = gtkwindownew(GTKWINDOWTOPLEVEL); gtkwindowsettitle(GTKWINDOW(window), "L:AN:applicationID:org.kindlemodding.example-gtk-applicationPC:T"); gsignalconnect(window, "destroy", GCALLBACK(gtkmainquit), NULL); gtkwidgetshow(window); gtkmain(); return 0; } Testing compilation Now we will use meson to make sure we can actually compile our code for both our computer and our target Configure the Meson project for your computer as so: meson setup builddir Now we can try to compile our program meson compile -C builddir If you run the program on your computer, you should see an empty GTK window: [Image: ./images/firstwindow.png] Testing Cross-Compilation Now we can compile a version that can run on the Kindle itself: meson setup --cross-file builddir Where your target is the same as before and is substituted from the path the SDK installer gave you earlier. Once it is finished setting up, you can compile it just as you did before: meson compile -C builddir If all the above steps work, then you have succesfully compiled your first application for the Kindle. ===== kindle-dev/index.md ===== Kindle Development As mentioned in Kindle OS (/kindle-os/), the Kindle runs Linux, this means that you can develop your own applications for it, which run natively on the Kindle. This section of the wiki is primarily aimed towards native development with C/C++ via the Meson Build System ===== kindle-dev/kindle-sdk.md ===== Kindle SDK The Kindle SDK is an unofficial SDK developed by KMC. It supplants an existing koxtoolchain installation with libraries and pkg-config support. It is designed to be used with Meson. Installation Once koxtoolchain is installed, the SDK can be installed on top of it as such: 1. Clone the SDK git clone --recursive --depth=1 https://github.com/KindleModding/kindle-sdk.git 2. Install the SDK for your target cd kindle-sdk chmod +x ./gen-sdk.sh ./gen-sdk.sh Where is the same as the toolchain you want to install the SDK for. | TC | Supported Devices | Target | |:---------:|:-------------------------------------------:|:--------------------------------:| | kindle | Kindle 2, DX, DXg, 3 | [not supported by this tutorial] | | kindle5 | Kindle 4, Touch, PW1 | [not supported by this tutorial] | | kindlepw2 | Kindle PW2 & everything since on FW = 5.16.3 | kindlehf | Usage The toolchain is designed to be used with Meson in the following manner: meson setup --cross-file builddir_ (note that the crosscompile file path is outputted when the sdk installer is run, it will typically be under ~/x-tools//meson-crosscompile.txt) Additional information The SDK works by downloading the target firmware from Amazon, copying the libraries into the toolchain's sysroot and setting up .pc files for pkgconfig on supported libraries ===== kindle-dev/scriptlets.md ===== Scriptlets As part of the Universal Hotfix released with Winterbreak, a method of running programs was introduced: Scriptlets Scriptlets are handled by the SHIntegration (https://github.com/KindleModding/shintegration). Essentially, any .sh file in the Kindle's documents folder (/mnt/us/documents) will be indexed as though it were a book and get added to the library. From here, it can be clicked on to run it. Scriptlet Metadata How these Scriptlets appear can be customised in the file itself by adding specific lines to the start of the file: !/bin/sh Name: Test Script Author: Hackerdude echo "Hello, World!" When this Scriptlet is added to a Kindle, it will appear in the library with the name of Test Script and the author of Hackerdude. Icons Scriptlets can be given an Icon via the # Icon: flag, the value can either be an absolute path to the image file, or a base64 encoded image as shown: !/bin/sh Name: KoReader Author: Hackerdude Icon: data:image/png;base64,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 echo "Hello, World!" Note that some converters use the wrong filetype when generating the base64 string, ensure the filetype matches the actual data Hooks The # UseHooks flag allows Scriptlets to have functions that are called when certain events happen to the Scriptlet, as opposed to the entire script being called once when it is ran: !/bin/sh Name: Test For Evnets Author: HackerDude UseHooks oninstall() { echo "oninstall called!" >> /mnt/us/test.log } onremove() { echo "onremove called!" >> /mnt/us/test.log } onrun() { echo "onrun called!" >> /mnt/us/test.log } DontUseFbink By default, the script's stdout and stderr are both piped to FBink to display on the Kindle, if you do not want this behaviour, then add the # DontUseFBInk flag to your script as such: !/bin/sh Name: Silent Script Author: HackerDude DontUseFBInk echo "A user won't see this" Examples For more Scriptlet examples or to share your own, please check the scriptlets channel in the Kindle Modding Community Discord server (https://dsc.gg/kindle-modding). ===== kindle-os/Java/index.md ===== Java Prior to the "Reactification" of the Kindle frontend, Kindles used to primarily use Java for the frontend and some middleware. Modern firmwares, however, utilise significantly less Java for the frontend, LIPC middleware and backend code, however, still heavily utilises Java. ===== kindle-os/Lua/index.md ===== Lua The Kindle makes relatively little use of Lua. Lua is used for the CCAT Store-SQL-Bridge ===== kindle-os/Native/index.md ===== Native The majority of the Kindle's backend runs on native libraries and executables. This includes most of LIPC system. ===== kindle-os/React Native/index.md ===== React Native Modern Kindle firmwares have pivoted to using React Native for the frontend. React Native code is effectively just native, but the original language it was written in was not C/C++ What this means is that it's significantly easier to develop for, however, as a jailbreak developer, this makes the React Native frontend code significantly harder to reverse engineer compared to older Java frontend code. ===== kindle-os/devcap.md ===== (No textual content) ===== kindle-os/index.md ===== Kindle OS kindleos [Image: ./kindleos.png] As many Kindle developers are aware, the Kindle's OS is a mess of Java, Javascript, Lua, Native and React Native code. Due to its complexity, there hasn't been any exhaustive documentation on its working, that is what this section aims to do. The Kindle runs stripped down Linux with a React Native frontend along with Java backend applications. ===== kindle-os/upstart-diagram.html ===== %%{init: {"flowchart": {"defaultRenderer": "elk"}} }%% flowchart TD mdpd(mdpd) tee-supplicant(tee-supplicant) rcm(rcm) ace_eventmgr(ace_eventmgr) ace_messaging_service(ace_messaging_service) acedropboxd(acedropboxd) acsbtfd(acsbtfd) appmgrd(appmgrd) archive(archive) asr(asr) asr_bt_reboot(asr_bt_reboot) asr_bt_userstore(asr_bt_userstore) asr_setup(asr_setup) audiomgrd(audiomgrd) battery(battery) battstressd(battstressd) bootactions(bootactions) bootactions_monitor(bootactions_monitor) btmanagerd(btmanagerd) chroot(chroot) clickstream_logging(clickstream_logging) cmd(cmd) console(console) contentpack_fonts_dependency(contentpack_fonts_dependency) contentpackd(contentpackd) cron(cron) dbus(dbus) demd(demd) devcap(devcap) deviced(deviced) display(display) dmld(dmld) dpmd(dpmd) dynconfig(dynconfig) ekart_setup(ekart_setup) fastmetrics(fastmetrics) ffsd(ffsd) filesystems(filesystems) filesystems_keys(filesystems_keys) filesystems_nh(filesystems_nh) filesystems_pdata(filesystems_pdata) filesystems_setup(filesystems_setup) filesystems_userstore(filesystems_userstore) framework(framework) filesystems_var_local(filesystems_var_local) framework_setup(framework_setup) fuelgauge(fuelgauge) home_wait(home_wait) iohwlogs(iohwlogs) ipcservicemanager(ipcservicemanager) ivona_ttsd(ivona_ttsd) juno-acs-helper(juno-acs-helper) kb(kb) kfxreader(kfxreader) kfxview(kfxview) kindle(kindle) lab126(lab126) lab126_gui(lab126_gui) lab126_gui_monitor(lab126_gui_monitor) lab126_gui_setup(lab126_gui_setup) langpicker(langpicker) last_debug_info(last_debug_info) lipcd(lipcd) logmgr(logmgr) migrate_db(migrate_db) minerva_service(minerva_service) minervad(minervad) minervaproxy(minervaproxy) modules(modules) monitor_wand_threads(monitor_wand_threads) mtp(mtp) n_setup(n_setup) network(network) odhcp6c(odhcp6c) ota-update(ota-update) otaupd(otaupd) otav3(otav3) perfd(perfd) phd(phd) pillow(pillow) poll_daemons(poll_daemons) powerd(powerd) prereg(prereg) printklogs(printklogs) progressivedownloads(progressivedownloads) recevent(recevent) tmd(tmd) register_oobe(register_oobe) scanner(scanner) shutdown(shutdown) splash(splash) sshd(sshd) stackdumpd(stackdumpd) stored(stored) stylus(stylus) syslog(syslog) system(system) system_cramfs_loopbacks(system_cramfs_loopbacks) system_monitor(system_monitor) system_setup(system_setup) system_setup_after_shpm(system_setup_after_shpm) tmpfs_scan(tmpfs_scan) todo(todo) touch(touch) usb_audio_setup(usb_audio_setup) usbnet-autostart(usbnet-autostart) usbnetd(usbnetd) vnc(vnc) volumd(volumd) wand(wand) wandwrapper(wandwrapper) webreader(webreader) wfmdelete(wfmdelete) wfmupdate(wfmupdate) whisperstore(whisperstore) wifid(wifid) wifim(wifim) wifis(wifis) wmt(wmt) x(x) x_cleanup(x_cleanup) x_monitor(x_monitor) x_prelaunch(x_prelaunch) x_setup(x_setup) xasr(xasr) xbath(xbath) zram_setup(zram_setup) mcsd(mcsd) playermgr(playermgr) cgroups(cgroups) ttsorchestrator(ttsorchestrator) wi(wi) playermgr_limit(playermgr_limit) gesturetapd(gesturetapd) maruinstall(maruinstall) statusbar(statusbar) kppmainapp(kppmainapp) kindlesyncservice(kindlesyncservice) start_mdpd -->|start_mdpd| mdpd filesystems_keys -->|started| tee-supplicant lab126 -->|started| rcm lab126 -->|started| ace_eventmgr ace_eventmgr -->|started| ace_messaging_service lab126 -->|started| acedropboxd btmanagerd -->|started| acsbtfd lab126 -->|started| appmgrd lab126 -->|started| archive asr_setup -->|start-asr| asr lab126_gui -->|started| asr_bt_reboot winmgr_ready -->|winmgr_ready| asr_bt_reboot asr_bt_userstore -->|trigger_asr_bt_reboot| asr_bt_reboot user_store_available -->|user_store_available| asr_bt_userstore x -->|blanket_loaded_langpicker| asr_setup audio_device_detected -->|audio_device_detected| asr_setup langpicker -->|langpicker_load_complete| asr_setup user_store_available -->|user_store_available| asr_setup display -->|display_ready| battery filesystems_userstore -->|mounted_userstore| battery lab126 -->|started| battstressd x_setup -->|x_setup_ready| bootactions lab126_gui -->|start_bootactions| bootactions ekart_setup -->|ekart_ready| bootactions bootactions -->|stopped - RESULT!=ok| bootactions_monitor lab126 -->|started| btmanagerd framework_setup -->|framework_ready| chroot juno-acs-helper -->|acs_helper_ready| clickstream_logging lab126 -->|started| cmd system -->|started| console lab126_gui -->|started| contentpack_fonts_dependency lab126_gui -->|started| contentpackd system -->|started| cron devcap_ready -->|devcap_ready| dbus session_keeper_ready -->|session_keeper_ready| dbus filesystems_var_local -->|session_keeper_skipped| dbus dbus -->|dbus_ready| demd system_setup -->|started| devcap powerd -->|started| deviced migrate_db -->|mounted_varLocal| display modules -->|loaded_modules_dependencies| display framework_setup -->|framework_ready| dmld lab126 -->|started| dpmd lab126 -->|started| dynconfig filesystems_userstore -->|mounted_userstore| ekart_setup x_setup -->|x_setup_ready| ekart_setup powerd -->|started| ekart_setup framework_setup -->|framework_ready| fastmetrics langpicker -->|langpicker_ready| ffsd system -->|started| filesystems modules -->|loaded_fuse| filesystems syslog -->|started| filesystems filesystems -->|started| filesystems_keys migrate_db -->|mounted_varLocal| filesystems_nh filesystems_pdata -->|started| filesystems_nh filesystems_var_local -->|started| filesystems_pdata filesystems_userstore -->|started| filesystems_setup filesystems_var_local -->|started| filesystems_setup filesystems_nh -->|started| filesystems_userstore system -->|skip_tee_supplicant| filesystems_userstore tee-supplicant -->|started| filesystems_userstore contentpack_fonts_dependency -->|contentpack_font_ready| framework filesystems_keys -->|started| filesystems_var_local system -->|skip_tee_supplicant| filesystems_var_local tee-supplicant -->|started| filesystems_var_local framework -->|started| framework_setup filesystems -->|started| fuelgauge dbus -->|dbus_ready| home_wait filesystems_var_local -->|started| iohwlogs system_setup -->|started| ipcservicemanager asr_setup -->|start-asr| ivona_ttsd start-ivona -->|start-ivona| ivona_ttsd framework_setup -->|framework_ready| juno-acs-helper lab126_gui -->|started| kb langpicker -->|started| kb framework_setup -->|framework_ready| kfxreader framework_setup -->|framework_ready| kfxview poll_daemons -->|started| kindle kb -->|started| kindle pillow -->|started| kindle cmd -->|started| kindle system_setup_after_shpm -->|started| lab126 demd -->|started| lab126 n_setup -->|n_ready| lab126_gui langpicker -->|langpicker_ready| lab126_gui ekart_setup -->|ekart_ready| lab126_gui kb -->|stopped - RESULT!=ok| lab126_gui_monitor framework -->|stopped - RESULT!=ok| lab126_gui_monitor framework_setup -->|stopped - RESULT!=ok| lab126_gui_monitor framework_setup -->|framework_ready| lab126_gui_setup kb -->|started| lab126_gui_setup pillow -->|started| lab126_gui_setup x_setup -->|x_setup_ready| langpicker x -->|blanket_loaded_langpicker| langpicker bootactions -->|bootactions_ready| langpicker filesystems_var_local -->|started| last_debug_info dbus -->|started| lipcd ace_messaging_service -->|started| logmgr filesystems_var_local -->|migrate_DB| migrate_db lab126 -->|started| minerva_service dbus -->|dbus_ready| minervad minerva_service -->|started| minervaproxy system_cramfs_loopbacks -->|mounted_fs_loopbacks| modules wand -->|started| monitor_wand_threads lab126 -->|started| mtp filesystems_nh -->|mounted_nh| n_setup system -->|started| network lab126 -->|started| otaupd lab126 -->|started| otav3 ekart_setup -->|ekart_ready| otav3 dbus -->|dbus_ready| perfd cmd -->|started| phd lab126_gui -->|started| pillow start_pillow -->|start_pillow| pillow framework_setup -->|framework_ready| poll_daemons lab126 -->|started| powerd migrate_db -->|mounted_varLocal| prereg filesystems_var_local -->|started| printklogs framework_setup -->|framework_ready| progressivedownloads system -->|started| recevent cmd -->|started| tmd bootactions -->|bootactions_ready| register_oobe framework_setup -->|framework_ready| scanner runlevel -->|runlevel_06| shutdown lab126_gui -->|start_splash| splash system -->|started| sshd lab126 -->|started| stackdumpd framework_setup -->|framework_ready| stored migrate_db -->|mounted_varLocal| stylus modules -->|loaded_modules_dependencies| stylus system -->|started| syslog startup -->|startup| system system -->|started| system_cramfs_loopbacks syslog -->|started| system_cramfs_loopbacks modules -->|stopped - RESULT!=ok| system_monitor display -->|stopped - RESULT!=ok| system_monitor battery -->|stopped - RESULT!=ok| system_monitor prereg -->|stopped - RESULT!=ok| system_monitor filesystems -->|stopped - RESULT!=ok| system_monitor filesystems_var_local -->|stopped - RESULT!=ok| system_monitor filesystems_pdata -->|stopped - RESULT!=ok| system_monitor filesystems_userstore -->|stopped - RESULT!=ok| system_monitor filesystems_keys -->|stopped - RESULT!=ok| system_monitor filesystems_setup -->|stopped - RESULT!=ok| system_monitor network -->|stopped - RESULT!=ok| system_monitor system -->|stopped| system_monitor battery -->|battery_ready| system_setup touch -->|loaded_touch| system_setup modules -->|loaded_ppp_async| system_setup modules -->|loaded_cdc_ncm| system_setup modules -->|loaded_whitney_button| system_setup modules -->|loaded_mxc_keyb| system_setup modules -->|loaded_fakekey| system_setup filesystems_setup -->|started| system_setup system_setup -->|started| system_setup_after_shpm tmpfs_scan -->|tmpfs_scan| tmpfs_scan lab126 -->|started| todo migrate_db -->|mounted_varLocal| touch modules -->|loaded_modules_dependencies| touch deviced -->|started| usb_audio_setup lipcd_started -->|lipcd_started| usb_audio_setup volumd -->|started| usbnet-autostart usbnetd -->|started| usbnet-autostart lab126 -->|started| usbnetd x -->|lxinit_ready| vnc lab126 -->|started| volumd lab126 -->|started| wandwrapper contentpack_fonts_dependency -->|contentpack_font_ready| webreader framework_setup -->|framework_ready| whisperstore lab126 -->|started| wifid acsbtfd -->|starting| wmt wifim -->|starting| wmt wi -->|x_should_start| x langpicker -->|langpicker_ready| x_cleanup x -->|stopped - RESULT!=ok| x_monitor x_setup -->|stopped - RESULT!=ok| x_monitor langpicker -->|stopped - RESULT!=ok| x_monitor mdpd -->|start_x| x_prelaunch dynconfig -->|started| x_prelaunch dbus -->|started| x_prelaunch x -->|lxinit_ready| x_setup start-xasr -->|start-xasr| xasr devcap_ready -->|devcap_ready| zram_setup wand -->|started| mcsd lab126 -->|started| playermgr system_setup -->|started| cgroups lab126 -->|started| ttsorchestrator ekart_setup -->|ekart_ready| ttsorchestrator dynconfig -->|started| wi dbus -->|started| wi lab126 -->|started| playermgr_limit dbus -->|dbus_ready| gesturetapd lab126_gui -->|started| statusbar langpicker -->|started| statusbar framework_setup -->|framework_ready| kppmainapp framework_setup -->|framework_ready| kindlesyncservice ===== kindle-os/usermode-boot-process.md ===== Usermode Boot Process The Kindle uses upstart for its usermode boot process. Below is a diagram generated from all the Kindle's (PW6) upstart services. Fullscreen Version (./upstart-diagram.html) .language-mermaid svg { height: 70vh; } ===== mesquito/development/getting-started.md ===== Getting Started This guide will show you how to setup the correct structure for a Mesquito app. Introduction Every Mesquito app needs an identifier. This is basically the same as say, a Java namespace, and follows the following format: ~~~ .. ~~~ for example: ~~~ com.bluebotlaboratories.kchess dev.tesseractcat.sudoku ~~~ This identifier is important as it must be unique to all other apps, hence why the format is as it is. Additionally, identifiers must be lowercase and contain NO symbols. Creating the folder You will need to create an empty folder in the apps folder of your Kindle with the same name as your identifier. Generally speaking, there are 3 main files of importance to be placed in that folder, a manifest (./the-manifest-file.html), a payload and an app icon (./the-manifest-file.html) For example, the directory structure for kchess is as follows: ~~~ com.bluebotlaboratories.kchess │ icon.jpg │ index.html │ main.css │ main.js │ manifest.json │ └───pieces bB.svg bK.svg bN.svg bP.svg bQ.svg bR.svg wB.svg wK.svg wN.svg wP.svg wQ.svg wR.svg ~~~ You can see the manifest.json file, the index.html payload and the icon.jpg icon. There are also additional files which are used by the app as assets and dependencies. Finding an icon The app icon can be almost any image format, however, a resolution of 512x512 is recommended as Mesquito is optimized for square icons. The Manifest File (./the-manifest-file.html) ===== mesquito/development/index.md ===== Developing For Mesquito Developing for Mesquito is extremely simple, in fact, almost any webapp can be easily converted into a Mesquito-compatible one, all it needs is an icon and a manifest (./the-manifest-file.html) file Limitations As it is overriding the store WAF, Mesquito can only access the com.lab126.pillow, com.lab126.chromebar and com.lab126.readnow LIPC services via the messaging (../../wafs-and-mesquite/the-kindle-object/kindle-messaging.html) object. Additionally, as it is running on a Kindle, it has the same featureset as Safari 5, you can use the caniuse.com (https://caniuse.com/) (or Can Mesquite Use? (https://html-preview.github.io/?url=https://github.com/polish-penguin-dev/Illusion/blob/main/Mesquite/Can-Mesquite-Use.html)) site to determine if you can use certain web features on the Kindle. Mesquito also includes its own polyfill, and whilst the polyfill works extremely well, there are some things that can't be replaced by a polyfill, for this reason the following features do not work: - Arrow Functions (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Functions/Arrowfunctions) - Default Parameters (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Functions/Defaultparameters) (The reason for this is that a polyfill can add modern web APIs to your application, it does not add modern language features - see Babel/SWC). A fix for the LIPC limitation is being worked on. Getting Started (./getting-started.html) ===== mesquito/development/the-manifest-file.md ===== The Manifest File The manifest file holds all the information which Mesquito uses to identify the app, it should follow the following format: ~~~json { "minVersion": 1, "manifestVersion": 2, "appVersion": "v0.1.0", "waf": false, "id": "com.bluebotlaboratories.kchess", "name": "KChess", "author": "Bluebotlaboratories", "description": "Chess on a Kindle!", "repo": "https://github.com/KindleModding/KWebBrew", "icon": "icon.jpg", "entrypoint": "index.html" } ~~~ Key Explanation Here's a quick explanation of what everything does: | Key | Description | |----------------|--------------------------------------------------------------------------------------------------------------------------------------| | minVersion | The minimum KWebBrew version required to run | | manifestVerion | The version of the manifest | | appVersion | The version string of the app, it can be anything but it is recommended that you stick to the semver (https://semver.org/) standard | | waf | Set this to true if you are using Mesquito-specific or WAF-specific features. | | id | The app's identifier (MUST MATCH FOLDERNAME, BE LOWERCASE and in that format) | | name | The display name of the app | | author | The author of the app | | description | A short description of the app | | repo | A link to the repository or mobileread thread | | icon | The name of the icon file in the app's directory | | entrypoint | The name of the main app file in the app's directory | Version Info The current latest Mesquito version number (for minVersion) is: 2 For historic reference, previous minimum version numbers were: | Version Number | Mesquito Version | |----------------|------------------| | 2 | v1.0.0 | The current latest manifest version number (for manifestVersion) is: 2 For historic reference, previous manifest version numbers were: | Version Number | Mesquito Version | |----------------|------------------| | 2 | v1.0.0 | Manifest changelog 2 - Added WAF key (Must be true if you are using Mesquito features) - Added version keys - Added id key The Mesquito SDK (./the-mesquito-sdk.html) ===== mesquito/development/the-mesquito-sdk.md ===== Mesquito SDK All apps that use waf: true MUST have the following lines in their head: ~~~html ~~~ The polyfill.min.js allows you to use somewhat modern web features in your app. Whilst the sdk.js allows you to utilise Mesquito's SDK and access special Kindle JS functions. It is also important to set a title for your app in HTML so that it appears in the title bar. If your app does not use Mesquito-specific features, it is recommented you instead use KWebBrew's files so that the app can function on both Mesquito and KWebBrew (as Mesquito is backwards-compatible with KWebBrew apps) Simply add the following to your head instead: ~~~html ~~~ SDK Functionality The Mesquito SDK exposes the kindle object so that it can be invoked directly in scripts as so: ~~~js kindle.appmgr.start("com.lab126.booklet.home"); // "launches" the home app (just goes home) ~~~ Additionally, the Mesquito SDK exposes some useful functions: fetchFile ~~~js fetchFile(url, timeout=2000, fixKindleFormatting=true) ~~~ This function returns the contents of a file as a string given a url, such as file:///mnt/us/apps/com.bluebotlaboratories.kchess/manifest.json. It should, in theory, work an all text-based filetypes, but will NOT work on binary formats. | Parameter | Default Value | Description | |---------------------|---------------|------------------------------------------------------------------------------------------------| | url | | The URL of the file to obtain | | timeout | 2000 | The amount of time to wait until deleting the iframe from DOM | | fixKindleFormatting | true | Needed for local files, whether to fix the formatting the Kindle applies to local files or not | getDirectory ~~~js getDirectory(location) ~~~ This function is similar to fetchFile and works in almost the same way. Except it fetches the contents of a directory as an object. The location parameter, despite its name, is just a url, ie: file:///mnt/us/ (despite being a url, it will only work with local folders) Example Output: ~~~json [ { "name": "documents", "path": "file:///mnt/us/documents/" }, { "name": "apps", "path": "file:///mnt/us/apps/" }, { "name": "mesquito", "path": "file:///mnt/us/mesquito/" }, { "name": "log.txt", "path": "file:///mnt/us/log.txt" } ] ~~~ | Parameter | Default Value | Description | |-----------|---------------|-------------------------------| | location | | The URL of the folder to list | getQueryData ~~~js getQueryData() ~~~ Taking no arguments, it returns an object representing the GET parameters of the current location. IE, the location: ~~~ file:///mnt/us/mesquito/index.html?entrypoint=hello&launch=false ~~~ would return: ~~~json { "entrypoint": "hello", "launch": "false" } ~~~ joinPaths ~~~js joinPaths(path1, path2) ~~~ Given two paths, joins them together. IE: Given /test/ and ./hello ~~~ /test/hello ~~~ | Parameter | Default Value | Description | |-----------|---------------|-------------------------| | path1 | | The first path to join | | path2 | | The second path to join | window.mesquito The window.mesquito object holds useful helper functions to the kindle API window.mesquito.updateNavigation ~~~js window.mesquito.updateNavigation() ~~~ This reloads the navbar, updating its contents, useful when updating the available menuItems window.mesquito.menuItems ~~~js window.mesquito.menuItems = [ { id: "CHESSRELOAD", state: "enabled", label: "Reload Game" }, { id: "DIVIDEZERO", state: "enabled", label: "Divide By Zero" } ] ~~~ This serves as an object which allows your app to add custom menu items to the Kindle's menu (under the three dots). As mentioned earlier, window.mesquito.updateNavigation() must be called to update the actual state of the navbar. window.mesquito.onKindleButton ~~~js window.mesquito.onKindleButton = function(buttonType, buttonID) { console.log(buttonType); console.log(buttonID); } ~~~ This is a function which can be overriden by your app to handle menu item button presses. the buttonID parameter will be equal to whatever id you set the button to, ie: DIVIDEZERO or CHESSRELOAD. The buttonType parameter is used to differenciate between menu buttons (systemMenuItemSelected) and navbar buttons (TBA) and can be ignored. ===== mesquito/development/tutorial.md ===== Your First App Assuming you have read all the other sections, this tutorial will go over how you can create your own functioning Mesquito WAF. Creating the folder Either on a safe place in your PC or in the apps/ folder of your Kindle, create a new folder, call it com.mesquito.firstapptutorial, this will store our app data Creating the manifest file Within that folder, create a manifest.json as so: ~~~json { "minVersion": 2, "manifestVersion": 2, "appVersion": "v1.0.0", "waf": true, "id": "com.mesquito.firstapptutorial", "name": "My First App!", "author": "tutorial", "description": "Tutorial App", "repo": "https://example.com", "icon": "icon.png", "entrypoint": "index.html" } ~~~ The manifest file tells Mesquito all the information it needs to load the app. Creating the index.html file As hinted by the payload key of the manifest, the app will need an index.html file to work with, simply create one in the folder and insert the following contents: ~~~html My First APP My First Mesquito App! Flip Orientation ~~~ This will display a simple webpage but won't do anything itself, that's because we still need to add some code! Adding some Javascript Create a new file, call it main.js, this will store all the code for the app, you can insert the following contents: ~~~js var flipped = false; function buttonClick() { if (flipped) { kindle.device.setOrientation("portraitUp"); flipped = false; } else { kindle.device.setOrientation("portraitDown"); flipped = true; } } ~~~ This code will use the setOrientation (../../wafs-and-mesquite/the-kindle-object/kindle-device.html#kindledevicesetorientation) function to flip the orientation of the screen at the press of the button. Adding some style The app would still look quite basic at this stage, so we need to give it some style! Simply create a file called main.css and insert the following content: ~~~css button { border-radius: 15px; } ~~~ You should NEVER use relative units when developing for a Kindle, as pixel units are more consistent accross models Testing it out If you haven't already, copy the com.mesquito.firstapptutorial folder to your apps folder, reload Mesquito by clicking on the three dots and then Home, and open your app: first app screenshot [Image: ./firstapp.png] Next steps You saw how we can use the WAF API within a Mesquito app to affect the device to an extent, feel free to read the kindle object (../../wafs-and-mesquite/the-kindle-object/) for more information! ===== mesquito/index.md ===== Mesquito Mesquito is a simple WAF loader designed to replace the Kindle store on Kindles. Mesquito is extremely simple to install and runs on all firmwares below 5.18. Installation 1. Download the latest release (https://github.com/KindleModding/Mesquito/releases/latest) 2. Place your Kindle into airplane mode 3. Plug your Kindle into your PC 4. Extract the zip file you downloaded to the root of your Kindle 5. Replace any files if prompted 6. Reboot your Kindle 7. Open the Kindle Store 8. When prompted, turn on WiFi 9. Done! Make sure you turn on Airplane mode to stop the Kindle getting an OTA update that could break Mesquito! Post-Installation A collection of Mesquito apps are available here (https://github.com/KindleModding/KindleModding-Apps) Simply download the latest release (https://github.com/KindleModding/Mesquito/releases/latest) and copy the apps you want to the apps folder on your Kindle and re-load Mesquito by clicking on the 3 dots > Home Development See Developing For Mesquito (../mesquito/development/) Screenshot Of Mesquito Mesquito screenshot [Image: ../mesquito/mesquito.png] ===== models.json.md ===== // Kindle model info /* releaseyear - The year this particular model was released (number) releasefirmware - The semvar of the firmware this model was originally released with generationnickname - The community nickname for the Kindle amazonname - What Amazon calls the Kindle (specifically amazon.co.uk (British)) lastfirmware - If the Kindle is unsupported, what's the latest firmware available for it (If the Kindle is still supported this field shoudl read "LATEST") platform - The platform/hostname of the Kindle (it is the hostname right?) board - The "board" of the Kindle jailbreak - The jailbreak method for the Kindle kindletoolname - What KindleTool internally calls this Kindle nicknames - an array of additional nicknames for the Kindle, includes generationnickname and can have additional nicknames for the specific variant (like white/black or storage variants) serialversion - The version of the serial number snippet, should be 1 for all newly added Kindles 0 - Serial number starts with "B" or "9", the snippet is the 2nd and 3rd characters in the serial 1 - Serial number starts with "G", the snipper is the 3rd, 4th and 4th characters in the serial Note: Serial snippet should ALWAYS be capitalised / ===== readme.md ===== Kindle Modding Wiki ===== robots.txt ===== User-agent: * Allow: / ===== wafs-and-mesquite/index.md ===== WAFs & Mesquite WAFs are Kindle "applications", which similar to Mesquito or KWebBrew applications, are really just webapps in fancy wrappers. WAFs should be placed in /opt/var/local/mesquite, in its own folder, such as: ~~~ /opt/var/local/mesquite/store ~~~ Additionally, they should be declared in /opt/var/local/appreg.db so they are launchable. For example, lets examine the Kindle store's folder structure: ~~~ /opt/var/local/mesquite/store/ │ config.xml │ configbellatrix.xml │ configduet.xml │ configheisenberg.xml │ configrex.xml │ configwario.xml │ configyoshi.xml │ configyoshime3.xml │ configzelda.xml │ index.html │ privateCookies │ store.js │ ├───images │ spinner.gif │ ├───js │ jquery.js │ spritev1.js │ spritev2.js │ ├───locales │ ├───de │ │ └───strings │ │ strings.js │ │ │ ├───en-GB │ │ └───strings │ │ strings.js │ │ │ ├───es │ │ └───strings │ │ strings.js │ │ │ ├───fr │ │ └───strings │ │ strings.js │ │ │ ├───it │ │ └───strings │ │ strings.js │ │ │ ├───ja │ │ └───strings │ │ strings.js │ │ │ ├───nl │ │ └───strings │ │ strings.js │ │ │ ├───pt │ │ └───strings │ │ strings.js │ │ │ ├───ru │ │ └───strings │ │ strings.js │ │ │ └───zh │ └───strings │ strings.js │ └───strings configwario.xml privateCookies strings.js ~~~ Most of the files are just dependencies used by the store, lets filter it down to whats interesting to us: ~~~ /opt/var/local/mesquite/store/ │ config.xml │ configbellatrix.xml │ configduet.xml │ configheisenberg.xml │ configrex.xml │ configwario.xml │ configyoshi.xml │ configyoshime3.xml │ configzelda.xml │ index.html │ privateCookies │ store.js │ ├───images │ spinner.gif │ ├───js │ jquery.js │ spritev1.js │ spritev2.js │ ├───locales │ └───en-GB │ └───strings │ strings.js │ └───strings configwario.xml privateCookies strings.js ~~~ All WAFs have a config.xml file, which gives the Kindle the metadata which it needs to launch the WAF. Additionally, notice the strings folder, whilst not required, Amazon has a standardized localisation method of using strings.js files in strings folders for each locale (ie: the locales folder). More information on these is available in the sub-pages of this section. ===== wafs-and-mesquite/the-kindle-object/enums.md ===== Enums Many of the Kindle Object API calls rely on or return certain strings. The meaning of these strings is detailed in this page. The majority of this information was taken from the firmware from /opt/var/local/mesquite (in the sqsh file) connectionPromptLevels | Value | Description | |-----------|------------------------------------------------------------------------------------| | all | Turn on all user prompting. Everything needed to make a connection will be used. | | never | Turn off all user prompting. A connection will be made automatically if possible | | nocaptive | Turn on user prompting for everything but a captive portal situation | connectionResults | Value | Description | |------------------------|------------------------------------------------------------| | success | The connection attempt succeeded | | failure-user-canceled | The user canceled the connection request | | failure | There was a failure when connecting | | failure-captive-portal | There was a captive-portal related failure when connecting | scrollBarStates | Value | Description | |---------|-----------------------------------| | auto | Automatically hide/show scrollbar | | hidden | Hide the scrollbar | | visible | Show the scrollbar | fileDownloadResults | Value | Description | |----------|--------------------------------------------| | success | Succeeded in downloadin the file | | error | There was an error downloading the file | | canceled | The file download was canceled by the user | | rejected | The file type is not downloadable | eInkRefreshModes | Value | Description | |---------|---------------------------------------------------------------------| | auto | Automatically set the refresh mode | | minimal | Do not refresh the display often | | maximal | Refresh the display often | | manual | Do not refresh the display at all unless directly called by JS/Code | connectionTypes | Value | Description | |-------|------------------------------------------------------------------| | wifi | Kindle is connected via WiFi | | wan | Kindle is connected via 3g | | none | No interfaces are currently active on the Kindle (airplane mode) | orientations | Value | Description | |----------------|---------------------------------------------| | auto | Set orientation automatically | | portrait | Set portrait orientation automatically | | portraitUp | Portrait orientation | | portraitDown | Portrait orientation (upside down) | | landscape | Set landscape orientation automatically | | landscapeLeft | Landscape orientation (clockwise) | | landscapeRight | Landscape orientation (anticlockwise) | direction | Value | Description | |-------|-------------| | up | Up | | down | Down | | left | Left | | right | Right | alignment | Value | Description | |--------|-------------| | top | Top | | buttom | Bottom | | center | Center | | left | Left | | right | Right | pillow.buttons | Value | Description | |-----------|------------------------------| | back | Back button | | store | Store button | | home | Home button | | forward | Forward button | | menu | Menu button | | refresh | Browser refresh button | | cancel | Cancel button | | discovery | Discovery button | | KPPBACK | Decanter Chrome back button | | KPPCLOSE | Decanter Chrome close button | pillow.buttonStates | Value | Description | |----------|-------------------------------------------------------------------------| | enabled | Button is enabled | | disabled | Button is disabled | | false | Button is hidden (this one is a boolean, not a string like the others) | pillow.buttonHandling | Value | Description | |-----------|----------------------------------------| | system | Button is handled by the Kindle itself | | notifyapp | Button is handled by the WAF | pillow.contextMenuIDs | Value | Description | |-------------------------|-------------| | browserSettings | ??? | | browserBookmarks | ??? | | browserBookmarkPage | ??? | | browserHistory | ??? | | browserArticleOrWebMode | ??? | pillow.contextMenuStates | Value | Description | |----------|--------------------| | enabled | Menu item enabled | | disabled | Menu item disabled | ===== wafs-and-mesquite/the-kindle-object/index.md ===== The Kindle Object All WAFs have a window.kindle object available to them. This serves as a bridge between the Javascript and the Kindle's system. There are many APIs available, which can be configured via the Features (../understanding-config-xml.html#features) section of the config.xml file of a WAF. This section aims to document every API available via the window.kindle object The kindle object also has the following properties: | Name | Value | Description | |---------|---------|-------------------------------------------------------| | version | 1 | An int which appears to store the version of the API? | Secret Dev Stuff In the local-development version (the Kindle object is spoofed for local development), the following interesting properties also exist, isMock which is 1 and extensions which is {} ===== wafs-and-mesquite/the-kindle-object/kindle-chrome.md ===== kindle.chrome Functions specific to the titlebar and dialog interfaces. Has the following parameters: | Name | Value | Dscription | |-------------------------|-------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------| | isDecanterChromeEnabled | true | A boolean describing whether or not "decanter chrome" is enabled. Seemingly related to firmware version as new firmwares have whatever "decanter chrome" is. | This page is a WIP and should be considered incomplete kindle.chrome.setTitleBar ~~~js kindle.chrome.setTitleBar(centerText, leftText) ~~~ Seemingly accepts 2 string arguments, purpose is unknown, possibly deprecated in modern Kindle firmware versions DO NOT use this in Mesquite applications, that is what the SDK (../../mesquito/development/the-mesquito-sdk.html) is for kindle.chrome.createHeader ~~~js kindle.chrome.createHeader(uri, height, tiled) ~~~ Seemingly accepts a string, integer and boolean parameter for uri, height and tiled respectively. Function is unknown. kindle.chrome.createDialog ~~~js kindle.chrome.createDialog(uri, width, height, modal) ~~~ Creates a dialog visible on the Kindle. Exact usage is currently unknown. | Name | Type | Dscription | |--------|---------|------------------------------------------------------------------------| | uri | String | The URI to the dialog to display, unknown if it can be to a local file | | width | Integer | The width of the dialog, in pixels | | height | Integer | The height of the dialog, in pixels | | modal | Boolean | Exact usage unknown, usually seems to be set to true | kindle.chrome.setSpinnerState ~~~js kindle.chrome.setSpinnerState(state, timeout, delay) ~~~ Used to indicate progress via a spinner in the title bar. | Name | Type | Dscription | |---------|---------|-------------------------------------------------------------------------------------------------------| | state | String | Either start or stop to start or stop displaying the spinner respectively. | | timeout | Integer | The maximum amount of time to show the spinner, units unknown, possible milliseconds? todo: confirm | | delay | Integer | The time to wait to start spinning todo: confirm | timeout and delay are still needed even if state is stop as JSObjectChrome::setSpinnerState expects three arguments despite the fact that they are ignored when state is stop. The following section refers to content windows these are not currently fully understood, continue with caution. kindle.chrome.createContentWindow ~~~js kindle.chrome.createContentWindow(uri) ~~~ Exact usage unknown, it just... exists, returns some sort of window object/string kindle.chrome.setContentWinDisplay ~~~js kindle.chrome.setContentWinDisplay(displayState) ~~~ Purpose somewhat unknown, seems to be related to createContentWindow. The displayState parameter is a string, either foreground or background to show/hide the content Window respectively kindle.chrome.setJavaScript ~~~js kindle.chrome.setJavaScript(enabled) ~~~ Enables or Disables JS execution in a contentWindow. The enabled parameter is a string, either enabled or disabled kindle.chrome.setImageRendering ~~~js kindle.chrome.setImageRendering(enabled) ~~~ Enables or Disables JS execution in a contentWindow. The enabled parameter is a string, either on or off kindle.chrome.onContentStart ~~~js kindle.chrome.onContentStart() ~~~ An overridable function, similar to that of gestures (./kindle-gestures.html) which is called on a "content load start event" kindle.chrome.onContentProgress ~~~js kindle.chrome.onContentProgress(progress) ~~~ An overridable function, similar to that of gestures (./kindle-gestures.html) which is called on a "progress event". The callback has a progress parameter, a decimal number from 0 to 1 indicating the amount of progress. kindle.chrome.onContentUrlChanged ~~~js kindle.chrome.onContentUrlChanged(url) ~~~ An overridable function, similar to that of gestures (./kindle-gestures.html) which is called on a "content url changed event". The callback has a url parameter, a string seemingly indicating the new URL the contentWindow has navigated to. kindle.chrome.onContentTitleChanged ~~~js kindle.chrome.onContentTitleChanged(title) ~~~ An overridable function, similar to that of gestures (./kindle-gestures.html) which is called on a "content title changed event". The callback has a title parameter, a string seemingly indicating the new title the contentWindow is now set to. kindle.chrome.registerWindowOpenEventListener ~~~js kindle.chrome.registerWindowOpenEventListener(callback) ~~~ Unknown what it does. Callback is called with a string parameter known as url. ===== wafs-and-mesquite/the-kindle-object/kindle-dconfig.md ===== kindle.dconfig It isn't fully known what this does, it seems to hold store-specific configuration values. kindle.dconfig.getValue ~~~js kindle.dconfig.getValue(key) ~~~ Returns a string representing whatever configuration value exists for key, known keyvalue pairs are as so: | Key | Value | Dscription | |-------------------------------|------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | url.store | https://www.amazon.co.uk/gp/digital/juno/index.html | Seemingly the URL which the store WAF uses | | amz.cor | GB | Something todo with CORS??? | | url.cantilever | https://digprjsurvey$DOMAIN/csad/workflow/ed89e52d | $DOMAIN is replaced at runtime, example of a valid url: https://digprjsurvey.amazon.com/csad/workflow/ed89e52d (https://digprjsurvey.amazon.com/csad/workflow/ed89e52d) | | marketplace.obfuscated.id | .............. | 14 character alphanumeric ID of sorts, not sharing it here as it could be sensitive information. Used by whatever csapp is | | url.ku.eligible | /gp/kindle/ku/sign-up/ajax/is-customer-eligible | Relates to ku, which is what kindle unlimited is sometimes reffered to as internally | | url.ku.landing.page | /gp/kindle/ku/sign-up/ui/juno/upsell/ref= | Relates to ku, which is what kindle unlimited is sometimes reffered to as internally | | url.mysn.reap | https://rexp-auth-proxy.amazon.cn/socialdeviceauth | Used by whatever mysn is | | url.odac | https://www.amazon.com | Used by whatever odac is | | cmd.account.registration | gp/kw/land | Used by whatever odac is | | url.website | https://www.amazon.co.uk | Used by payment WAF | | url.kindlestore.kcw.metrics | /mn/kcw/workflow/log-metrics | Used by payment WAF | | store.disableDiskFileUse | | Returns nothing, makes sense as its output is used in an if statement | | mesquite.interceptorIndicator | ................................ | A 32-character alphanumeric ID of sorts, not sharing it here as it could be sensitive. Used by the Kindle store in relation to getCacheTriggersKey in which a hash fragment is added to the URL for "cache triggers case" | ===== wafs-and-mesquite/the-kindle-object/kindle-dev.md ===== kindle.dev Functions which can adjust specific device properties Whilst extremely similar to kindle.device, it has a few differences. Documentation for kindle.dev is incomplete. Information on this page may be innacurate It also contains certain properties: | Name | Value | Description | |-----------------------|-------------------------------|----------------------------------------------------------------------------------------------------------------------| | contactInfo | 'Your System Administrator' | he who controls the sudo reports | | eid | BASE64 ENCODED DATA | A piece base64 encoded data, unknown what purpose it serves | | getRegistrationState | 'registered' | Whether or not the Kindle is registered | | hasScreenLight | true | Whether or not the Kindle has a screen light | | hasKindleStoreAccess | true | Whether or not... the Kindle can... access the Kindle store? Seems to be used for parental controls? | | isWirelessMenuEnabled | true | Whether the user has the wireless menu enabled or not | | controlStatus | 0 | Whether the state is Parental/Device/No control - 1 if Device Control, 2 if Parental and 3 if No Control | kindle.dev.setSensitivity ~~~js kindle.dev.setSensitivity(useThreshold, threshold) ~~~ Sets the "sensitivity" of the eInk display according to a threshold. A threshold of 100 will cause the Kindle to refresh significantly more than a threshold of 0 Parameters: | Name | Type | Description | |--------------|---------|------------------------------------------------------------------------------------------------------------| | useThreshold | Boolean | Whether threshold should be used or whether to refresh like normal. If false, do not provide threshold | | threshold | Integer | A number from 0-100 describing how often the eInk panel of the Kindle will "refresh" | kindle.dev.setOrientation ~~~js kindle.dev.setOrientation(orientation) ~~~ Sets the screen orientation of the device according to the provided orientation string. An invalid orientation will result in nothing happening. A list of valid strings can be found here (./enums#orientations) kindle.dev.getDPI ~~~js kindle.dev.getDPI() ~~~ Returns the DPI of the device kindle.dev.hasWirelessMenu ~~~js kindle.dev.hasWirelessMenu() ~~~ Returns a boolean describing whether or not the device has a... wireless menu? kindle.dev.log ~~~js kindle.dev.log(logServiceName, logString, logLevel) ~~~ Adds something to the Kindle's log. Parameters: | Name | Type | Description | |----------|--------|--------------------------------------------------------------------------| | logEvent | String | The name of the "event" which is producing the log, ie: wafjs | | logMsg | String | The data to be logged | | logLevel | String | The log leve, valid values are: info, warn, error, debug, perf | Heads Up: Kindle logs ARE sent to Amazon, so be careful kindle.dev.getLab126SessionToken ~~~js kindle.dev.getLab126SessionToken() ~~~ Returns the correct session token needed to access the internal DB API TBA kindle.dev.loadResource ~~~js kindle.dev.loadResource(frameId, resourceId) ~~~ (taken from /opt/var/local/mesquite/shared/javascripts/userAgent.js) Loads a local javascript file into any frame within the web application. It is used to override the xss security. The file that is loaded must be specified in the config.xml file of the application. Parameters: | Name | Type | Description | |------------|--------|------------------------------------------------------------------------------------------------------------------------------------------------| | frameId | String | The DOM id of the frame in which the file will be loaded. The top level frame of the application can be specified via self | | resourceId | String | The identifier of the JS File as specified in the application's config.xml file, it must also reference a valid file on the local filesystem | kindle.dev.addDomainToWhitelist ~~~js kindle.dev.addDomainToWhitelist(uri, addSubDomains) ~~~ Adds a URI to the allowed domain list. It's function is somewhat unknown... Parameters: | Name | Type | Description | |---------------|--------|----------------------------------------------------------------------------------------------------------------------------------| | uri | String | The uri to add to the whitelist, ie: http://amazon.com | | addSubDomains | String | A string, either 'true' or 'false' dictating whether or not subdomains of the specified uri should be whitelisted as well. | kindle.dev.clearCookies ~~~js kindle.dev.clearCookies() ~~~ Clears the application's cookie jar Using this function on Mesquito will clear ALL cookies accross ALL Mesquito apps and get your app PERMANENTLY BLACKLISTED by Mesquito. You have been warned. kindle.dev.clearApplicationCache ~~~js kindle.dev.clearApplicationCache() ~~~ Clears the application's HTML cache Using this function on Mesquito has the chance of breaking Mesquito and will get your app PERMANENTLY BLACKLISTED by Mesquito. You have been warned. kindle.dev.clearCache ~~~js kindle.dev.clearCache() ~~~ Clears any resources cached by the application in memory Using this with a Mesquito app can cause bugs and be generally annoying, avoid its use when possible for Mesquito apps kindle.dev.getMPDomain ~~~js kindle.dev.getMPDomain() ~~~ Gets the marketplace domain. Seemingly non-functional Fun fact, the firmware reffers to ".amazon.cn" as the CHINESEOBFUSCATEDMARKETPLACE when returned by this function kindle.dev.getBaiduSearchURL ~~~js kindle.dev.getBaiduSearchURL() ~~~ Returns the Baidu Search URL I would assume... Returns the following string (at the time of writing): ~~~ https://www.baidu.com/s?tn=baiduhomepg&ie=utf-8&rn=4&wd= ~~~ Example usage of format in firmware: ~~~js var dynUrlBaiduSearch = kindle.dev.getBaiduSearchURL(); websiteUrl = dynUrlBaiduSearch ? dynUrlBaiduSearch + encodeURIComponent(args.label) : b.strings.goActions[args.domain].url + encodeURIComponent(args.label); ~~~ kindle.dev.disableSecureApis ~~~js kindle.dev.disableSecureApis() ~~~ Related to payment WAF, seems to disable "secure APIs" on non-Amazon URLs kindle.dev.getRegisteredUserId ~~~js kindle.dev.getRegisteredUserId() ~~~ Returns a string identifier which is the userId, seemingly used to track change in Registration. (Amazon's words, not mine) kindle.dev.getDSN ~~~js kindle.dev.getDSN() ~~~ Returns a string, unknown what this is. kindle.dev.getDeviceLocale ~~~js kindle.dev.getDeviceLocale() ~~~ Returns a string representing the device's locale, ie: en_GB kindle.dev.getDeviceTypeString ~~~js kindle.dev.getDeviceTypeString() ~~~ Returns a string representing the device's type, ie: malbec ===== wafs-and-mesquite/the-kindle-object/kindle-device.md ===== kindle.device Functions which can adjust specific device properties It also contains certain properties: | Name | Value | Description | |-----------------------|-------------------------------|----------------------------------------------------------------------------------------------------------------------| | contactInfo | 'Your System Administrator' | he who controls the sudo reports | | eid | BASE64 ENCODED DATA | A piece base64 encoded data, unknown what purpose it serves | | getRegistrationState | 'registered' | Whether or not the Kindle is registered | | hasScreenLight | true | Whether or not the Kindle has a screen light | | hasKindleStoreAccess | true | Whether or not... the Kindle can... access the Kindle store? Seems to be used for parental controls? | | isWirelessMenuEnabled | true | Whether the user has the wireless menu enabled or not | | controlStatus | 0 | Whether the state is Parental/Device/No control - 1 if Device Control, 2 if Parental and 3 if No Control | kindle.device.setSensitivity ~~~js kindle.device.setSensitivity(useThreshold, threshold) ~~~ Sets the "sensitivity" of the eInk display according to a threshold. A threshold of 100 will cause the Kindle to refresh significantly more than a threshold of 0 Parameters: | Name | Type | Description | |--------------|---------|------------------------------------------------------------------------------------------------------------| | useThreshold | Boolean | Whether threshold should be used or whether to refresh like normal. If false, do not provide threshold | | threshold | Integer | A number from 0-100 describing how often the eInk panel of the Kindle will "refresh" | kindle.device.setOrientation ~~~js kindle.device.setOrientation(orientation) ~~~ Sets the screen orientation of the device according to the provided orientation string. An invalid orientation will result in nothing happening. A list of valid strings can be found here (./enums#orientations) kindle.device.getDPI ~~~js kindle.device.getDPI() ~~~ Returns the DPI of the device kindle.device.hasWirelessMenu ~~~js kindle.device.hasWirelessMenu() ~~~ Returns a boolean describing whether or not the device has a... wireless menu? kindle.device.log ~~~js kindle.device.log(logServiceName, logString, logLevel) ~~~ Adds something to the Kindle's log. Parameters: | Name | Type | Description | |----------|--------|--------------------------------------------------------------------------| | logEvent | String | The name of the "event" which is producing the log, ie: wafjs | | logMsg | String | The data to be logged | | logLevel | String | The log leve, valid values are: info, warn, error, debug, perf | Heads Up: Kindle logs ARE sent to Amazon, so be careful kindle.device.getLab126SessionToken ~~~js kindle.device.getLab126SessionToken() ~~~ Returns the correct session token needed to access the internal DB API TBA kindle.device.loadResource ~~~js kindle.device.loadResource(frameId, resourceId) ~~~ (taken from /opt/var/local/mesquite/shared/javascripts/userAgent.js) Loads a local javascript file into any frame within the web application. It is used to override the xss security. The file that is loaded must be specified in the config.xml file of the application. Parameters: | Name | Type | Description | |------------|--------|------------------------------------------------------------------------------------------------------------------------------------------------| | frameId | String | The DOM id of the frame in which the file will be loaded. The top level frame of the application can be specified via self | | resourceId | String | The identifier of the JS File as specified in the application's config.xml file, it must also reference a valid file on the local filesystem | kindle.device.addDomainToWhitelist ~~~js kindle.device.addDomainToWhitelist(uri, addSubDomains) ~~~ Adds a URI to the allowed domain list. It's function is somewhat unknown... Parameters: | Name | Type | Description | |---------------|--------|----------------------------------------------------------------------------------------------------------------------------------| | uri | String | The uri to add to the whitelist, ie: http://amazon.com | | addSubDomains | String | A string, either 'true' or 'false' dictating whether or not subdomains of the specified uri should be whitelisted as well. | kindle.device.clearCookies ~~~js kindle.device.clearCookies() ~~~ Clears the application's cookie jar Using this function on Mesquito will clear ALL cookies accross ALL Mesquito apps and get your app PERMANENTLY BLACKLISTED by Mesquito. You have been warned. kindle.device.clearApplicationCache ~~~js kindle.device.clearApplicationCache() ~~~ Clears the application's HTML cache Using this function on Mesquito has the chance of breaking Mesquito and will get your app PERMANENTLY BLACKLISTED by Mesquito. You have been warned. kindle.device.clearCache ~~~js kindle.device.clearCache() ~~~ Clears any resources cached by the application in memory Using this with a Mesquito app can cause bugs and be generally annoying, avoid its use when possible for Mesquito apps kindle.device.getMPDomain ~~~js kindle.device.getMPDomain() ~~~ Gets the marketplace domain. Fun fact, the firmware reffers to ".amazon.cn" as the CHINESEOBFUSCATEDMARKETPLACE when returned by this function kindle.device.getBaiduSearchURL ~~~js kindle.device.getBaiduSearchURL() ~~~ Returns the Baidu Search URL I would assume... Returns the following string (at the time of writing): ~~~ https://www.baidu.com/s?tn=baiduhomepg&ie=utf-8&rn=4&wd= ~~~ Example usage of format in firmware: ~~~js var dynUrlBaiduSearch = kindle.device.getBaiduSearchURL(); websiteUrl = dynUrlBaiduSearch ? dynUrlBaiduSearch + encodeURIComponent(args.label) : b.strings.goActions[args.domain].url + encodeURIComponent(args.label); ~~~ kindle.device.disableSecureApis ~~~js kindle.device.disableSecureApis() ~~~ Related to payment WAF, seems to disable "secure APIs" on non-Amazon URLs kindle.device.isInDemoMode ~~~js kindle.device.isInDemoMode() ~~~ Returns a Boolean which is true if the device is in Demo mode. kindle.device.getSoftwareVersionNumber ~~~js kindle.device.getSoftwareVersionNumber() ~~~ Returns an int representing the firmware's version number. IE: 5.15.1.1 is 3924990005 kindle.device.getSoftwareVersionString ~~~js kindle.device.getSoftwareVersionString() ~~~ Returns the string representing the firmware's version number. IE: "1.15.1.1" kindle.device.getASRMode ~~~js kindle.device.getASRMode() ~~~ Returns a number. What it represents is currently unknown. Returns 0 on the Kindle it was tested on. kindle.device.getCSSPixelsPerInch ~~~js kindle.device.getCSSPixelsPerInch() ~~~ Returns the number of CSS Pixels per Inch, presumably. kindle.device.getBaiduSearchURL ~~~js kindle.device.getBaiduSearchURL() ~~~ Returns the Baidu Search URL I would assume... Returns the following string (at the time of writing): ~~~ https://www.baidu.com/s?tn=baiduhome_pg&ie=utf-8&rn=4&wd= ~~~ Example usage of format in firmware: ~~~js var dynUrlBaiduSearch = kindle.device.getBaiduSearchURL(); websiteUrl = dynUrlBaiduSearch ? dynUrlBaiduSearch + encodeURIComponent(args.label) : b.strings.goActions[args.domain].url + encodeURIComponent(args.label); ~~~ ===== wafs-and-mesquite/the-kindle-object/kindle-gestures.md ===== kindle.gestures A set of overridable functions which are called when the user performs a gesture, configured here (../understanding-config-xml.html#gestures) in the config.xml file. This section of the documentation is UNFINISHED. Only onswipe and ontap work with Mesquito due to the store's config.xml (../understanding-config-xml) file kindle.gestures.onswipe ~~~js kindle.gestures.onswipe(direction, pageX, pageY) ~~~ Triggered whenever the user swipes on the Kindle screen, has 3 parameters, including single string parameter which is the swipe direction (./enums#direction), and pageX and pageY parameters indicating the location of the swipe on the page. kindle.gestures.onflick ~~~js kindle.gestures.onflick(direction) ~~~ Triggered whenever the user flicks on the Kindle screen, only has a single string parameter which is the flick direction (./enums#direction) kindle.gestures.onpan ~~~js kindle.gestures.onpan(event) ~~~ Triggered whenever the user pans? the kindle screen. It is unknown what the event parameter holds. kindle.gestures.onpinch ~~~js kindle.gestures.onpinch(event) ~~~ Triggered whenever the user pinches the kindle screen. It is unknown what the event parameter holds. kindle.gestures.onhold ~~~js kindle.gestures.onhold(event) ~~~ Triggered whenever the user holds down on the kindle screen. It is unknown what the event parameter represents. kindle.gestures.onzoom ~~~js kindle.gestures.onzooms(event) ~~~ Triggered whenever the user performs the zoom gesture on the kindle screen. It is unknown what the event parameter holds. kindle.gestures.ontap ~~~js kindle.gestures.ontap(event) ~~~ Triggered whenever the user taps the kindle screen. It is unknown what the event parameter holds. ===== wafs-and-mesquite/the-kindle-object/kindle-messaging.md ===== kindle.messaging Kindle's use an internal system known as ToDo to handle communication with Amazon. This is used for downloading books, updating screensavers*, updating the store, telemetry, etc. kindle.messaging.sendMessage ~~~js kindle.messaging.sendMessage(id, eventType, eventData) ~~~ Sends a message through the Kindle's internal LIPC messaging system, message which is an object | Name | Example Value | Type | Dscription | |-------------|-----------------------------------------------------------------------------------------------------------------------|--------|---------------------------------------------------------| | id | com.lab126.chromebar | String | The ID used to determine the app to send the message to | | eventType | configureChrome | String | The event to send | | eventData | { appId: 'com.lab126.store', topNavBar: { template: 'title', title: "Mesquito Loader" } } | Object | The data sent with the corresponding event | kindle.messaging.sendStringMessage ~~~js kindle.messaging.sendStringMessage(id, eventType, eventData) ~~~ Sends a message through the Kindle's internal LIPC messaging system, message is a String | Name | Example Value | Type | Dscription | |-----------|----------------|--------|---------------------------------------------------------| | id | com.lab126.mfa | String | The ID used to determine the app to send the message to | | eventType | switchViewMode | String | The event to send | | eventData | fullscreen | String | The data sent with the corresponding event | kindle.messaging.recieveMessage ~~~js kindle.messaging.recieveMessage(eventType, callback) ~~~ Registers a callback function for a specific eventType if a LIPC message is sent to the WAF. The callback recieves a property and json (or string) argument, ie: ~~~js callback(property, json) ~~~ The property value is a string of the eventType whilst the json value stores the data which is sent with an event. This page a WIP, a list of possible callbacks is being worked on at the moment ===== wafs-and-mesquite/the-kindle-object/kindle-net.md ===== kindle.net Handles network functionality Has the following properties: | Name | Value | Description | |-------------------------|----------------------------------------|----------------------------------------------------------------------| | backgroundRequestHeader | 'WAF-HTTP-REQUEST-BACKGROUND-HEADER' | Unknown, possibly a header used to show background network requests? | | roaming | false | Determine if a 3G Kindle is roaming | | rffSessionId | '' | Unknown | kindle.net.getWirelessState ~~~js kindle.net.getWirelessState() ~~~ Gets the wireless state of the Kindle, returns a string, either 'on' or 'off' kindle.net.getActiveInterface ~~~js kindle.net.getActiveInterface() ~~~ Gets the currently active interface of the Kindle, returns a string of the connectionTypes (./enums#connectiontypes) enum kindle.net.setWirelessPrompt ~~~js kindle.net.setWirelessPrompt(promptLevel) ~~~ Enables/Disables wireless prompting via the promptLevel (./enums#connectionpromptlevels) parameter kindle.net.confirmSSLException ~~~js kindle.net.confirmSSLException(confirm, callback) ~~~ Method for handling an invalid SSL certificate Accepts/Cancels last invalid certificate exception recieved depending on argument confirm whether it is 'yes' or 'no'. Callback method is optional, it is unknown if any parameters are passed to it. kindle.net.ensureWifiConnection ~~~js kindle.net.ensureWifiConnection(promptLevel, callback) ~~~ Ensures a WiFi connection. Can be done with/without a prompt as set by the promptLevel (./enums#connectionpromptlevels) parameter The callback also gets an response parameter passed to it. It is a string which has the value of 'success' when it is successful, see connectionResults (#connectionresults) for possible values. kindle.net.ensureConnection ~~~js kindle.net.ensureConnection(promptLevel, forceConnect, callback); ~~~ Ensures any sort of connection. Can be done with/without a prompt as set by the promptLevel (./enums#connectionpromptlevels) parameter Additional parameters: | Parameter | Type | Description | |-----------|----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | wifiOnly | Boolean | Whether the request is for a wifi only connection or not | | callback | Function | The function called when the request returns, has a single parameter which is a string, see connectionResults (./enums#connectionresults) for possible values. | kindle.net.registerHttpErrorListener ~~~js kindle.net.registerHttpErrorListener(onHttpError) ~~~ Registers a callback for http errors. The onHttpError function will recieve the following arguments: | Name | Description | |-----------------|---------------------------------------------------------------------------------------------------------| | internalCode | String describing the error | | uri | The uri that was accessed | | httpStatus | Most likely the HTTP response's status code (https://developer.mozilla.org/en-US/docs/Web/HTTP/Status) | | responseMessage | The HTTP response message | in the order: onHttpError(internalCode, uri, httpStatus, responseMessage) kindle.net.deregisterHttpErrorListener ~~~js kindle.net.deregisterHttpErrorListener() ~~~ Takes no arguments, deregisters any registered http handlers ===== wafs-and-mesquite/the-kindle-object/kindle-todo.md ===== kindle.todo Kindle's use an internal system known as ToDo to handle communication with Amazon. This is used for downloading books, updating screensavers*, updating the store, telemetry, etc. kindle.todo.scheduleItems ~~~js kindle.todo.scheduleItems(items) ~~~ This sends a series of items via a string argument in the required XML format (described below) Todo Document Format ~~~xml 1 ~~~ This XML format dictates the TODO action via the type and action parameters, this is known as the contentId. The contentId is in the format action.type, so in this case, it would be REFRESH.WISHLIST. All TODO items have a priority and a key attribute, however, all other attributes are arbritary and are simply passed to the handler. Attributes | Name | Value | Dscription | |----------|----------|--------------------------------------------------------------------------------------------------------| | priority | 1 | An integer which dictates the priority of a TODO item | | type | WISHLIST | What type of action to perform | | action | REFRESH | The action to perform | | key | DUMMY | A string used to uniquely identify the TODO item, can also be used by the handler or simply be "DUMMY" | A list of valid todo documents will be made in the future, more research is required. ===== wafs-and-mesquite/understanding-config-xml.md ===== Understanding config.xml The config.xml file stores everything a Kindle needs to know about a WAF, this page goes over the format and specification of such a file. Here is the Kindle store's XML file for convenience: ~~~xml Kindle Store Amazon Kindle Store Kindle-Shop Amazon Kindle-Shop Boutique Kindle Amazon Boutique Kindle Kindle Store Amazon Kindle Store Kindle Store Amazon Kindle Store Loja Kindle Amazon Loja Kindle Tienda Kindle Amazon Tienda Kindle Kindleストア Amazon Kindleストア Kindle网店 Amazon Kindle网店 ~~~ Yes, it's quite complex, let's break it down: The header ~~~xml ~~~ This section is quite simple, it tells the Kindle the id of the WAF (com.lab126.store) and the viewmode of the WAF (currently unknown other than application) The id, like Mesquito IDs, can be any unique "Java-like namespace". Name/Description ~~~xml Kindle Store Amazon Kindle Store Kindle-Shop Amazon Kindle-Shop Kindleストア Amazon Kindleストア ... ~~~ This section serves to show the name and description of the WAF on the Kindle's UI... somewhere It supports an xml:lang attribute which allows for localisation. It also allows for the use of unicode characters, as shown The "Payload" ~~~xml ~~~ This is a single tag which tells the Kindle which file to load when the WAF is loaded. In this case, it'll be the store's index.html file Permissions ~~~xml ~~~ Yes, that spelling mistake is indeed in the firmware This tag serves to request certain special permissions from the Kindle, below is a list of all known permissions: | Permission Name | Description | |-------------------|------------------------------------------------------------------------------------| | local-port-access | Allows the WAF to access localhost (mainly just the DB interface on port 9101) | | download-allowed | Allows the WAF to download files to the Kindle's documents folder | Network ~~~xml ~~~ Other example from audibleupsell WAF: ~~~xml ~~~ Other example from browser WAF: ~~~xml ~~~ This section appears to handle Kindle networking, allowing you to set proxy overrides for a specific WAF, network headers, as well as setting an errorPage for when loads fail. enableCaching does not appear to handle the actual caching of the WAF itself Cookiejar ~~~xml ~~~ Chrome ~~~xml ~~~ It is currently unclear what this does exactly, known values for configureSearchBar are "system" and "none" Gestures ~~~xml ~~~ Other example from browser WAF: ~~~xml ~~~ Seems to be related to the gesture API of the kindle object (See The Kindle Object (./the-kindle-object.html)) Features ~~~xml ~~~ Enables/Disables specific APIs available to the kindle object Messaging ~~~xml ~~~ Acts as a whitelist to which lipc services can be called by kindle.messaging Resources ~~~xml ~~~ This seems to handle the caching of WAFs as well as quotas for localStorage Settings ~~~xml ~~~ Other example from browser WAF: ~~~xml ~~~ Other example from payment WAF: ~~~xml ~~~ This handles certain settings for the WAF