This is a major overhaul of the hardware abstraction layer.
A few notes:
General platform distinction happens in
frontend/device.lua
which will delegate everything else to
frontend/device/<platform_name>/device.lua
which should extend
frontend/device/generic/device.lua
Screen handling is implemented in
frontend/device/screen.lua
which includes the *functionality* to support device specifics.
Actually setting up the device specific functionality, however,
is done in the device specific setup code in the relevant
device.lua file.
The same goes for input handling.
colors were a mixture of 4bpp integers (0=white, 15=black) and
fractional blackness levels (0=white, 1.0=black) before. This is
now unified to use the color specification of the Blitbuffer API.
I would suggest when creating a translate string you'd better keep
as much words together as you can other than trying to call the
`_` function on each word which may cause the final
translation in some languages unreadable.
For example, no matter how we translate the single words, the Chinese
translation of
```
_("No ") .. some_thing .. _("found ") .. _("matching") .. other_thing
```
will be nonsense.
Better way would be:
```
some_thing .. " is not found matching" .. other_thing
```
This should make it easier to update the format of the file and also prevents errors when someone keeps this file but the deletes the original calibre file
And not also settings that are different from the ones loaded.
This prevents Koreader from overwriting your complete persistent.defaults.settings when you started Koreader with a malformated persistent.defaults.settings file and choose "save settings". In such a malformated case you just can edit the damaged setting and save it back (although you can't see which one is damaged since the defaults settings are taken)