mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-05-17 04:34:44 -07:00
update Wii EC
This commit is contained in:
@@ -1,21 +0,0 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2022 BlueChip
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
@@ -1,234 +0,0 @@
|
||||
# [FlipperZero] Wii Extension Controller Protocol Analyser
|
||||
This Protocol Analyser offers a full Test and Calibrate system for Wii Extension Controllers.
|
||||
|
||||
__Disclaimer:__ *Use of this plugin, and notably connecting an Extension Controller to the FlipperZero is performed entirely at your own risk.*
|
||||
|
||||
# Notes
|
||||
This plugin has (todate) only been tested with official Nintendo Nunchucks and Classic Controllers - namely Nunchucks and Classic Controllers.
|
||||
|
||||
# Encryption
|
||||
This plugin has SOME code to handle encryption, but it it unused, untested, and some of it is known to un-work.
|
||||
|
||||
This plugin (currently) only works with Extension Controllers which implement the encryption-bypass strategy. IE. `i2c_write(0xf0, 0x55) ; i2c_write(0xfb, 0x00)`
|
||||
|
||||
If you need this functionality, either raise an Issue or, better still, a Pull Request.
|
||||
|
||||
# Screen: SPLASH
|
||||
<img src="_images/SPLASH.png" width="256"/><br/>
|
||||
The SPLASH Screen is displayed when the Plugin starts. It can be cleared by pressing any key, else it will auto-clear after 3.5 seconds.
|
||||
|
||||
# Screen: WAIT
|
||||
<img src="_images/WAIT.png" width="256"/> <img src="_images/Wiring.png" width="512"/><br/><br/>
|
||||
The WAIT screen will display which pins you need to connect between the flipper and the Wii Extension Controller.
|
||||
|
||||
__Disclaimer:__ Use of this plugin, and notably connecting the Controller to the FlipperZero is performed entirely at your own risk.
|
||||
|
||||
Looking in to the exposed side of the Extension Controller plug, with the notch on the bottom
|
||||
|
||||
| EC Pin # | EC Position | EC Pin ID | Pin Function | FZ GPIO Pin Name | FZ GPIO Pin # |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 1 | top-left | +3v3 | Power | 3v3 | 9 |
|
||||
| 2 | bottom-left | SCL | i2c clock | C0 | 16 |
|
||||
| 3 | top-centre | EN | ¿detect? | | |
|
||||
| 4 | bottom-centre | -x- | -none- | | |
|
||||
| 5 | top-right | SDA | i2c data | C1 | 15 |
|
||||
| 6 | bottom-right | Gnd | Power | Gnd | 18 |
|
||||
|
||||
Keys:
|
||||
* Left - Show splash screen
|
||||
* Back - exit plugin
|
||||
|
||||
The easiest way to connect a Wii Extension Controller to a FlipperZero is arguably with a ["WiiChuck"](https://www.ebay.co.uk/sch/?_nkw=wiichuck) or a ["Nunchucky"](https://www.solarbotics.com/product/31040)<br/><br/>
|
||||
<table style="border:none">
|
||||
<tr><td><img src="_images/WiiChuck.png" width="166"/></td>
|
||||
<td><img src="_images/Nunchucky.png" width="128"/></td></tr>
|
||||
<tr><td align="center"><a href="https://www.ebay.co.uk/sch/?_nkw=wiichuck">WiiChuck</a></td>
|
||||
<td align="center"><a href="https://www.solarbotics.com/product/31040">Nunchucky</a></td></tr>
|
||||
</table>
|
||||
|
||||
### ** WARNING **
|
||||
Neither the WiiChuck, nor the Nunchucky have a pin polarisation mechanism.<br/>
|
||||
If you plug the adaptor in the wrong way around you WILL apply voltage to the Controller the wrong way round!!<br/>
|
||||
I have no idea if THIS WILL PERMANENTLY KILL THE CONTROLLER ...Who wants to try it?
|
||||
|
||||
On all the WiiChucks I have seen:
|
||||
* The WiiChuck has THREE connectors on one side, and TWO connectors on the other.
|
||||
* The side with TWO connectors should go against the side of the Controller plug with the big indent.
|
||||
```
|
||||
+-------------+
|
||||
| _________ |
|
||||
| | = = = | |
|
||||
| |_=_____=_| | <-- notice missing pin
|
||||
| ___ |
|
||||
| | | | <-- notice indent
|
||||
+----+ +----+
|
||||
```
|
||||
<img src="_images/plug.png" width="128"/><br/>
|
||||
|
||||
...BUT I *highly* recommend you check the pins on your adaptor to make sure everything goes well.
|
||||
|
||||
I believe the unconnected pin on the top is a "presence detect" function, but I have not (yet) verified this.<br/>
|
||||
This feature is NOT required by this plugin, as the detection is performed by means of an i2c handshake.
|
||||
|
||||
When a device is connected it will be immediately recognised. If it is not, either:
|
||||
* The Controller is not correctly connected<br/>
|
||||
...This may be as simple as a broken wire.
|
||||
* The controller board in the Controller is faulty.<br/>
|
||||
...Repair of which is beyond the scope of this document.
|
||||
|
||||
To get the list of "known" Controllers, run `./info.sh`<br/>
|
||||
As of writing this, that returns:
|
||||
```c
|
||||
[PID_UNKNOWN ] = { {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, "Unknown Perhipheral", SCENE_DUMP,
|
||||
[PID_NUNCHUCK ] = { {0x00, 0x00, 0xA4, 0x20, 0x00, 0x00}, "Nunchuck", SCENE_NUNCHUCK,
|
||||
[PID_CLASSIC ] = { {0x00, 0x00, 0xA4, 0x20, 0x01, 0x01}, "Classic Controller", SCENE_CLASSIC,
|
||||
[PID_BALANCE ] = { {0x00, 0x00, 0xA4, 0x20, 0x04, 0x02}, "Balance Board", SCENE_DUMP,
|
||||
[PID_GH_GUITAR ] = { {0x00, 0x00, 0xA4, 0x20, 0x01, 0x03}, "Guitar Hero Guitar", SCENE_DUMP,
|
||||
[PID_GH_DRUMS ] = { {0x01, 0x00, 0xA4, 0x20, 0x01, 0x03}, "Guitar Hero World Tour Drums", SCENE_DUMP,
|
||||
[PID_TURNTABLE ] = { {0x03, 0x00, 0xA4, 0x20, 0x01, 0x03}, "DJ Hero Turntable", SCENE_DUMP,
|
||||
[PID_TAIKO_DRUMS] = { {0x00, 0x00, 0xA4, 0x20, 0x01, 0x11}, "Taiko Drum Controller)", SCENE_DUMP,
|
||||
|
||||
```
|
||||
|
||||
You can see that there are EIGHT known devices. One is the default for an unknown controller; SEVEN devices are known by name; and TWO (of those seven) have bespoke "scenes" (ie. SCENE_NUNCHUCK & SCENE_CLASSIC).
|
||||
|
||||
# Screen: NUNCHUCK - MAIN
|
||||
<img src="_images/NUNCHUCK.png" width="256"/><br/>
|
||||
When you connect a Nunchuck, you will see a screen displaying:
|
||||
* Accelerometer{X,Y,Z} values
|
||||
* Joystick{X,Y} values
|
||||
* Joystick graphic
|
||||
* Button{C,Z}
|
||||
|
||||
Keys:
|
||||
* Left - Go to the DUMP screen
|
||||
* Right - Go to the NUNCHUCK_ACC accelerometers screen
|
||||
* Up/Down/OK - [qv. Peak Meters]
|
||||
* Short-Back - Reset controller
|
||||
* Long-Back - Exit plugin
|
||||
|
||||
# Screen: NUNCHUCK - ACCELEROMETERS
|
||||
|
||||
<img src="_images/NUNCHUCK_anal.png" width="256" align="top"/> <img src="_images/NUNCHUCK_acc.png" width="200"/><br/>
|
||||
|
||||
| Axis | Movement | Lower | Higher |
|
||||
| :---: | :---: | :---: | :---: |
|
||||
| X | Left / Right | Left | Right |
|
||||
| Y | Fwd / Bkwd | Fwd | Bkwd |
|
||||
| Z | Down / Up | Down | Up |
|
||||
|
||||
* Movement in the direction of an axis changes that axis reading
|
||||
* Twisting/tilting around an axis changes the other two readings
|
||||
* EG.
|
||||
* Move left (along the X axis) will effect X
|
||||
* Turn left (a rotation around the Y axis) will effect X and Z
|
||||
|
||||
Keys:
|
||||
* Left - go to the main NUNCHUCK screen
|
||||
* Up
|
||||
* Auto-Pause Disabled --> Enable Auto-Pause
|
||||
* Paused at the end of a page --> Restart scanner
|
||||
* Running with Auto-Pause Enabled --> Disable Auto-Pause
|
||||
* Nunchuck-Z - Toggle pause
|
||||
* Nunchuck-C - Toggle auto-pause
|
||||
* Long-OK - Enter Software Calibration mode [qv. Calibration]
|
||||
* Calibration mode on the Accelerometer screen will ONLY calibrate the accelerometer
|
||||
* Short-OK - Leave Software Calibration mode *and* Calibrate CENTRE position(s)
|
||||
* Short-Back - Reset controller
|
||||
* Long-Back - Exit plugin
|
||||
|
||||
<sub>NB. Code DOES exist to scroll the display, but the LCD refresh rate is too low, and it looks awful</sub>
|
||||
|
||||
# Screen: CLASSIC
|
||||
<img src="_images/CLASSIC.png" width="256"/><img src="_images/CLASSIC_N.png" width="256"/><br/>
|
||||
When you connect a Classic Controller [Pro], you will see a screen displaying a Classic Controller
|
||||
* The Classic Controller will animate in line with controller events
|
||||
* The scan rate is set to 30fps, but in reality there is a bit of lag with the LCD screen, so YMMV.
|
||||
|
||||
Keys:
|
||||
* Left - go to the DUMP screen
|
||||
* Right - show analogue readings (Left to hide them again)
|
||||
* Up/Down/OK - [qv. Peak Meters]
|
||||
* Short-Back - Reset controller
|
||||
* Long-Back - Exit plugin
|
||||
|
||||
# Screen: DUMP
|
||||
<img src="_images/DUMP.png" width="256"/><br/>
|
||||
The Dump screen will show you the raw readings from the device.<br/>
|
||||
If you connect a device which does not have a bespoke `_decode()` function (etc.), you will see (only) this screen.
|
||||
* SID - String ID - human-readable name (from the `info` table)
|
||||
* PID - Peripheral ID - The 6 bytes which identify the device.
|
||||
* Cal - Calibration data - 16 bytes
|
||||
* The bottom row of hex shows the SIX bytes of Controller data
|
||||
* Below each hex digit is the binary representation of that digit
|
||||
* By example. With a Nunchuck connected, click the Z button, and watch the bit on the far right
|
||||
|
||||
Keys:
|
||||
* Right - return to controller-specific screen (if there is one)
|
||||
* Short-Back - Reset controller
|
||||
* Long-Back - Exit plugin
|
||||
|
||||
# Peak Meters (Calibration values)
|
||||
|
||||
On any Controller-specific screen with a Peak/Trough menu displayed:
|
||||
* Up - [toggle] only show peak values
|
||||
* Down - [toggle] only show trough values
|
||||
* Long-OK - Enter Software Calibration mode [qv. Calibration]
|
||||
* Short-OK - Leave Software Calibration mode / Calibrate CENTRE position(s)
|
||||
|
||||
# Calibration
|
||||
<img src="_images/NUNCHUCK_cal.gif" width="256"/><br/>
|
||||
|
||||
* __This project handles Calibration of Analogue Controls, but has NO understanding of Accelerometer values (yet).__
|
||||
|
||||
Digital buttons do NOT require Calibration.
|
||||
|
||||
Some Calibration data is calculated at the factory, and stored in memory (¿OTP?) on the Controller.
|
||||
|
||||
Each device has a different way to interpret the Calibration Data.<br/>
|
||||
EG. A Nunchuck has one joystick, and an accelerometer ...whereas a Classic Controller has 2 joysticks and 2 analogue buttons.
|
||||
|
||||
I have personally found the calibration data to be inaccurate (when compared to actual readings), I guess Controllers drift over the years‽
|
||||
If the factory-values LIMIT movement, this is easily resolved - by expanding them on-the-fly.<br/>
|
||||
BUT, I have seen Controllers with factory calibration data that suggests the limits are FURTHER than the joystick can reach ...and this requires a full re-calibration of the Controller!
|
||||
|
||||
Probably the best way to calibrate is to:
|
||||
* Take a/some reading(s) while the Controller is 'at rest', IE. perfectly still and level.
|
||||
* Move the Controller to all extremes and store the extreme {peak/trough} values.
|
||||
|
||||
Nintendo (allegedly) take the 'at rest' reading immediately after the Controller is connected, and a 're-calibration' can be performed at any time by pressing {`A`, `B`, `+`, `-`} at the same time, for at least 3 seconds. Although I have no details on what this actually does.
|
||||
|
||||
### This tool calibrates as such:
|
||||
* When the Controller is first recognised
|
||||
* The factory Calibration data is used to decide the Centre/Middle position and extreme values (eg. far-left & far-right) for each analogue Control
|
||||
* Long-OK button press (on the FlipperZero) ...Do NOT touch ANY of the analogue controllers while you are pressing Long-OK
|
||||
* Start the calibrate button flashing
|
||||
* Take the current reading as the Centre position
|
||||
* Set the range limits to "no range"
|
||||
* You must now move the Control between its extremes, so the code can work out the new Calibration/range/peak+trough values
|
||||
* When done, press Short-OK to end Software Calibration mode
|
||||
* Short-OK button press (on the FlipperZero) ...Do NOT touch ANY of the analogue controllers while you are pressing Short-OK
|
||||
* Stop the calibrate button flashing
|
||||
* Calibrate the centre position of all analogue controls (accelerometers not supported (yet))
|
||||
|
||||
# Screen: DEBUG
|
||||
<img src="_images/DEBUG.png" width="256"/><br/>
|
||||
On any screen (except SPLASH) you may press Long-Down to enter Debug mode.
|
||||
|
||||
You can (at any time) attach to the FlipperZero (via USB) with a serial console {`minicom`, `putty`, whatever} and start the `log` function to see the debug messages.
|
||||
|
||||
When you enter the DEBUG screen, the real-time scanner will be stopped. And the following keys made available:
|
||||
* Up - Attempt to initialise the attached Controller
|
||||
* OK - Take a reading from the attached Controller
|
||||
* Long-Down - Restart the real-time scanner and return to the WAIT screen
|
||||
|
||||
You can limit the messages at compile-time [see `./info.sh`], or at runtime [FZ->Settings->System->LogLevel]<br/>
|
||||
|
||||
[This is probably irrelevant since the introduction of FAP support]<br/>
|
||||
If you have memory issues, limiting the messages at compile-time will make the plugin smaller.<br/>
|
||||
But (¿obviously?) the more you limit the messsages, the less debug information will be sent to the logger.
|
||||
|
||||
# TODO
|
||||
|
||||
* FZ Bug: At the time of writing this, there are problems with the i2c FZ functions [qv `i2c_workaround.c`]
|
||||
|
||||
@@ -1,67 +0,0 @@
|
||||
,-------.
|
||||
---( Files )---
|
||||
`-------'
|
||||
|
||||
README.md - User Manual : Body [github markdown]
|
||||
_images/ - User Manual : Images
|
||||
_images/GIMP/ - User Manual : GIMP image masters
|
||||
|
||||
LICENSE - Tech Docs : MIT Licence file
|
||||
README.txt - Tech Docs : Dev notes
|
||||
notes.txt - Tech Docs : Random dev notes
|
||||
info.sh - Tech Docs : Retrieve info from source code
|
||||
|
||||
application.fam - FAP : Header file
|
||||
WiiEC.png - FAP : Icon {10x10}
|
||||
|
||||
gfx/ - Analyser : Images [generated by bc_image_tool]
|
||||
wii_anal.c|h - Analyser : Main application
|
||||
wii_anal_ec.c|h - Analyser : Extension controller actions
|
||||
wii_anal_keys.c|h - Analyser : Keyboard handling
|
||||
wii_anal_lcd.c|h - Analyser : LCD handling
|
||||
|
||||
i2c_workaround.h - Temporary workaround for i2c bug in FZ code
|
||||
err.h - Errors
|
||||
bc_logging.h - Logging macros - especially LOG_LEVEL
|
||||
|
||||
wii_i2c.c|h - i2c functionality
|
||||
|
||||
wii_ec.c|h - Extension Controller basic functions
|
||||
wii_ec_macros.h - Bespoke Extension Controller handy-dandy MACROs
|
||||
wii_ec_classic.c|h - EC: Classic Controller Pro scene
|
||||
wii_ec_nunchuck.c|h - EC: Nunchuck scene
|
||||
wii_ec_udraw.c|h - EC: UDraw scene - not written
|
||||
|
||||
,----------------------------------.
|
||||
---( Adding a new Extension Controller )---
|
||||
`----------------------------------'
|
||||
|
||||
//! I'll finish this when I write the UDraw code
|
||||
|
||||
Create a new Extension Controller called "mydev"
|
||||
|
||||
Create wii_ec_mydev.c and wii_ec_mydev.h
|
||||
|
||||
In wii_ec_mydev.c|h
|
||||
Create the functions [& prototypes]
|
||||
bool mydev_init (wiiEC_t* const) ; // Additional initialisation code
|
||||
void mydev_decode (wiiEC_t* const) ; // Decode controller input data
|
||||
void mydev_msg (wiiEC_t* const, FuriMessageQueue* const) ; // Put event messages in the event queue
|
||||
void mydev_calib (wiiEC_t* const, ecCalib_t) ; // Controller calibration function
|
||||
void mydev_show (Canvas* const, state_t* const) ; // Scene LCD display
|
||||
bool mydev_key (const eventMsg_t* const, state_t* const) ; // Scene key controls
|
||||
|
||||
In wii_ec.h
|
||||
Include the new header
|
||||
#include "wii_ec_mydev.h"
|
||||
Add a perhipheral id to enum ecPid
|
||||
PID_MYDEV
|
||||
|
||||
In wii_anal.h
|
||||
As a scene name to enum scene
|
||||
SCENE_MYDEV
|
||||
|
||||
In wii_ec.c
|
||||
Add the device definition to the ecId[] array
|
||||
[PID_MYDEV] = { {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, "My Device", SCENE_MYDEV,
|
||||
mydev_init, mydev_decode, mydev_msg, mydev_calib, mydev_show, mydev_key },
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 116 B |
@@ -3,7 +3,8 @@
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
int main(int argc, char* argv[]) {
|
||||
int main (int argc, char* argv[])
|
||||
{
|
||||
const unsigned char* pp = NULL;
|
||||
uint32_t pix = 0;
|
||||
int bit = 0;
|
||||
@@ -47,7 +48,8 @@ int main(int argc, char* argv[]) {
|
||||
}
|
||||
|
||||
// Find white value
|
||||
for(x = 1; x < img.bpp; x++) white = (white << 8) | 0xFF;
|
||||
for (x = 1; x < img.bpp; x++)
|
||||
white = (white << 8) | 0xFF ;
|
||||
|
||||
// build bit pattern
|
||||
// create the comment as we go
|
||||
@@ -55,8 +57,7 @@ int main(int argc, char* argv[]) {
|
||||
fprintf(fh, "// ");
|
||||
for (x = 0; x < img.w; x++) {
|
||||
// read pixel
|
||||
for(pix = 0, z = 0; z < img.bpp; pix = (pix << 8) | *pp++, z++)
|
||||
;
|
||||
for (pix = 0, z = 0; z < img.bpp; pix = (pix << 8) | *pp++, z++) ;
|
||||
// get bit and draw
|
||||
if (pix < white) {
|
||||
b = (b << 1) | 1;
|
||||
@@ -97,10 +98,8 @@ int main(int argc, char* argv[]) {
|
||||
for (bp = buf, x = 0; (clen < blen) && (x < blen); x++) {
|
||||
// need at least 4 the same to be worth it
|
||||
// must compress tag (if it occurs)
|
||||
if((bp[x] == bp[x + 1]) && (bp[x] == bp[x + 2]) && (bp[x] == bp[x + 3]) ||
|
||||
(bp[x] == ctag)) {
|
||||
for(y = 1; (y < 255) && (bp[x] == bp[x + y]); y++)
|
||||
;
|
||||
if ((bp[x] == bp[x+1]) && (bp[x] == bp[x+2]) && (bp[x] == bp[x+3]) || (bp[x] == ctag)) {
|
||||
for (y = 1; (y < 255) && (bp[x] == bp[x+y]); y++) ;
|
||||
*cp++ = ctag; // tag
|
||||
*cp++ = y; // length
|
||||
*cp++ = bp[x]; // byte
|
||||
@@ -117,26 +116,17 @@ int main(int argc, char* argv[]) {
|
||||
fprintf(fh, "const image_t img_%s = { %d, %d, ", name, img.w, img.h);
|
||||
|
||||
if (clen < blen) { // dump compressed?
|
||||
fprintf(
|
||||
fh,
|
||||
"true, %d, 0x%02X, { // orig:%d, comp:%.2f%%\n\t",
|
||||
clen,
|
||||
ctag,
|
||||
blen,
|
||||
100.0 - ((clen * 100.0) / blen));
|
||||
fprintf(fh, "true, %d, 0x%02X, { // orig:%d, comp:%.2f%%\n\t",
|
||||
clen, ctag, blen, 100.0-((clen*100.0)/blen));
|
||||
for (x = 0; x < clen; x++)
|
||||
if(x == clen - 1)
|
||||
fprintf(fh, "0x%02X\n}};\n", cmp[x]);
|
||||
else
|
||||
fprintf(fh, "0x%02X%s", cmp[x], (!((x + 1) % 16)) ? ",\n\t" : ", ");
|
||||
if (x == clen -1) fprintf(fh, "0x%02X\n}};\n", cmp[x]) ;
|
||||
else fprintf(fh, "0x%02X%s", cmp[x], (!((x+1)%16)) ? ",\n\t" : ", ") ;
|
||||
|
||||
} else { // dump UNcompressed
|
||||
fprintf(fh, "false, %d, 0, {\n\t", blen);
|
||||
for (x = 0; x < blen; x++)
|
||||
if(x == blen - 1)
|
||||
fprintf(fh, "0x%02X\n}};\n", buf[x]);
|
||||
else
|
||||
fprintf(fh, "0x%02X%s", buf[x], (!((x + 1) % 16)) ? ",\n\t" : ", ");
|
||||
if (x == blen -1) fprintf(fh, "0x%02X\n}};\n", buf[x]) ;
|
||||
else fprintf(fh, "0x%02X%s", buf[x], (!((x+1)%16)) ? ",\n\t" : ", ") ;
|
||||
}
|
||||
|
||||
bail:
|
||||
|
||||
@@ -17,7 +17,9 @@ static Color _set;
|
||||
static Color _clr;
|
||||
|
||||
//+============================================================================
|
||||
static void _showByteSet(const uint8_t b) {
|
||||
static
|
||||
void _showByteSet (const uint8_t b)
|
||||
{
|
||||
for (uint8_t m = 0x80; m; m >>= 1) {
|
||||
if (b & m) // plot only SET bits
|
||||
canvas_draw_dot(_canvas, (_tlx +_x), (_tly +_y)) ;
|
||||
@@ -26,7 +28,9 @@ static void _showByteSet(const uint8_t b) {
|
||||
}
|
||||
|
||||
//+============================================================================
|
||||
static void _showByteClr(const uint8_t b) {
|
||||
static
|
||||
void _showByteClr (const uint8_t b)
|
||||
{
|
||||
for (uint8_t m = 0x80; m; m >>= 1) {
|
||||
if (!(b & m)) // plot only CLR bits
|
||||
canvas_draw_dot(_canvas, (_tlx +_x), (_tly +_y)) ;
|
||||
@@ -35,7 +39,9 @@ static void _showByteClr(const uint8_t b) {
|
||||
}
|
||||
|
||||
//+============================================================================
|
||||
static void _showByteAll(const uint8_t b) {
|
||||
static
|
||||
void _showByteAll (const uint8_t b)
|
||||
{
|
||||
for (uint8_t m = 0x80; m; m >>= 1) {
|
||||
if ((!!(b & m)) ^ _blk) { // Change colour only when required
|
||||
canvas_set_color(_canvas, ((b & m) ? _set : _clr));
|
||||
@@ -55,12 +61,9 @@ static void _showByteAll(const uint8_t b) {
|
||||
// SHOW_ALL - plot all images pixels as they are
|
||||
// SHOW_ALL_INV - plot all images pixels inverted
|
||||
//
|
||||
void show(
|
||||
Canvas* const canvas,
|
||||
const uint8_t tlx,
|
||||
const uint8_t tly,
|
||||
const image_t* img,
|
||||
const showMode_t mode) {
|
||||
void show (Canvas* const canvas, const uint8_t tlx, const uint8_t tly,
|
||||
const image_t* img, const showMode_t mode)
|
||||
{
|
||||
void(*fnShow)(const uint8_t) = NULL;
|
||||
|
||||
const uint8_t* bp = img->data;
|
||||
@@ -84,6 +87,7 @@ void show(
|
||||
case SHOW_WHT_:
|
||||
canvas_set_color(canvas, ColorWhite);
|
||||
break;
|
||||
|
||||
}
|
||||
switch (mode & SHOW_INV_) {
|
||||
case SHOW_NRM_:
|
||||
|
||||
@@ -5,7 +5,8 @@
|
||||
#include <stdbool.h>
|
||||
|
||||
//----------------------------------------------------------------------------- ----------------------------------------
|
||||
typedef enum showMode {
|
||||
typedef
|
||||
enum showMode {
|
||||
// {INV:--:WHT:BLK::--:--:CLR:SET}
|
||||
SHOW_SET_ = 0x01,
|
||||
SHOW_CLR_ = 0x02,
|
||||
@@ -24,17 +25,20 @@ typedef enum showMode {
|
||||
|
||||
SHOW_ALL = SHOW_ALL_ | SHOW_NRM_,
|
||||
SHOW_ALL_INV = SHOW_ALL_ | SHOW_INV_,
|
||||
} showMode_t;
|
||||
}
|
||||
showMode_t;
|
||||
|
||||
//----------------------------------------------------------------------------- ----------------------------------------
|
||||
typedef struct image {
|
||||
typedef
|
||||
struct image {
|
||||
uint8_t w; // width
|
||||
uint8_t h; // height
|
||||
bool c; // compressed?
|
||||
uint16_t len; // image data length
|
||||
uint8_t tag; // rle tag
|
||||
uint8_t data[]; // image data
|
||||
} image_t;
|
||||
}
|
||||
image_t;
|
||||
|
||||
//----------------------------------------------------------------------------- ----------------------------------------
|
||||
//[TAG]
|
||||
@@ -42,12 +46,8 @@ typedef struct image {
|
||||
//----------------------------------------------------------------------------- ----------------------------------------
|
||||
#ifndef IMGTEST
|
||||
# include <gui/gui.h>
|
||||
void show(
|
||||
Canvas* const canvas,
|
||||
const uint8_t tlx,
|
||||
const uint8_t tly,
|
||||
const image_t* img,
|
||||
const showMode_t mode);
|
||||
void show (Canvas* const canvas, const uint8_t tlx, const uint8_t tly,
|
||||
const image_t* img, const showMode_t mode) ;
|
||||
#endif
|
||||
|
||||
#endif //IMAGES_H_
|
||||
|
||||
@@ -6,8 +6,7 @@
|
||||
//-----------------------------------------------------------------------------
|
||||
// This will be the plot function out of your graphics library
|
||||
//
|
||||
#define PLOT(x, y, c) \
|
||||
do { \
|
||||
#define PLOT(x,y,c) do { \
|
||||
printf("%s", (c ? "#" : ".")); \
|
||||
if (x == img->w -1) printf("\n") ; \
|
||||
}while(0)
|
||||
@@ -15,15 +14,15 @@
|
||||
//+============================================================================
|
||||
// The pain we endure to avoid code duplication cleanly
|
||||
//
|
||||
#define PLOTBYTE(b) \
|
||||
do { \
|
||||
#define PLOTBYTE(b) do { \
|
||||
for (uint8_t m = 0x80; m; m>>=1) { \
|
||||
PLOT(x,y, (b & m)); \
|
||||
if ( ((++x) == img->w) && !(x = 0) && ((++y) == img->h) ) break ; \
|
||||
} \
|
||||
}while(0)
|
||||
|
||||
void show(const image_t* img) {
|
||||
void show (const image_t* img)
|
||||
{
|
||||
// Some variables
|
||||
const uint8_t* bp = img->data;
|
||||
unsigned int x = 0;
|
||||
@@ -53,7 +52,8 @@ void show(const image_t* img) {
|
||||
#undef PLOTBYTE
|
||||
|
||||
//+============================================================================
|
||||
int main(void) {
|
||||
int main (void)
|
||||
{
|
||||
show(&img_zzz);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
App(
|
||||
# --- App Info
|
||||
appid="Wii_EC_Analyser",
|
||||
appid="wii_ec_anal",
|
||||
name="Wii EC Analyser",
|
||||
|
||||
# --- Entry point
|
||||
@@ -32,5 +32,5 @@ App(
|
||||
# fap_version=(1,0),
|
||||
|
||||
fap_icon="WiiEC.png",
|
||||
fap_category="Misc",
|
||||
fap_category="Cyborg Systems",
|
||||
)
|
||||
|
||||
@@ -17,43 +17,40 @@ static const char* const appName = "Wii_i2c"; //$ Name used in log files
|
||||
/* The first line MUST define 'ERR_OK = 0' */ \
|
||||
esPrial( 0, ERR_OK , "OK (no error)") \
|
||||
\
|
||||
esPrial(1, ERR_MALLOC_QUEUE, "malloc() fail - queue") esPrial( \
|
||||
2, \
|
||||
ERR_MALLOC_STATE, \
|
||||
"malloc() fail - state") esPrial(3, ERR_MALLOC_TEXT, "malloc() fail - text") \
|
||||
esPrial(4, ERR_MALLOC_VIEW, "malloc() fail - viewport") esPrial( \
|
||||
5, ERR_NO_MUTEX, "Cannot create mutex") esPrial(6, ERR_NO_GUI, "Cannot open GUI") \
|
||||
esPrial(7, ERR_NO_TIMER, "Cannot create timer") esPrial( \
|
||||
8, ERR_NO_NOTIFY, "Cannot acquire notifications handle") \
|
||||
esPrial( 1, ERR_MALLOC_QUEUE , "malloc() fail - queue") \
|
||||
esPrial( 2, ERR_MALLOC_STATE , "malloc() fail - state") \
|
||||
esPrial( 3, ERR_MALLOC_TEXT , "malloc() fail - text") \
|
||||
esPrial( 4, ERR_MALLOC_VIEW , "malloc() fail - viewport") \
|
||||
esPrial( 5, ERR_NO_MUTEX , "Cannot create mutex") \
|
||||
esPrial( 6, ERR_NO_GUI , "Cannot open GUI") \
|
||||
esPrial( 7, ERR_NO_TIMER , "Cannot create timer") \
|
||||
esPrial( 8, ERR_NO_NOTIFY , "Cannot acquire notifications handle") \
|
||||
\
|
||||
esPrial(10, ERR_MUTEX_BLOCK, "Mutex block failed") esPrial( \
|
||||
11, ERR_MUTEX_RELEASE, "Mutex release failed") \
|
||||
esPrial(10, ERR_MUTEX_BLOCK , "Mutex block failed") \
|
||||
esPrial(11, ERR_MUTEX_RELEASE , "Mutex release failed") \
|
||||
\
|
||||
esPrial(20, ERR_QUEUE_RTOS , "queue - Undefined RTOS error") \
|
||||
esPrial(21, DEBUG_QUEUE_TIMEOUT, "queue - Timeout") esPrial( \
|
||||
22, ERR_QUEUE_RESOURCE, "queue - Resource not available") \
|
||||
esPrial(23, ERR_QUEUE_BADPRM, "queue - Bad parameter") esPrial( \
|
||||
24, ERR_QUEUE_NOMEM, "queue - Out of memory") \
|
||||
esPrial(25, ERR_QUEUE_ISR, "queue - Banned in ISR") esPrial( \
|
||||
26, ERR_QUEUE_UNK, "queue - Unknown") \
|
||||
esPrial(21, DEBUG_QUEUE_TIMEOUT, "queue - Timeout") \
|
||||
esPrial(22, ERR_QUEUE_RESOURCE , "queue - Resource not available") \
|
||||
esPrial(23, ERR_QUEUE_BADPRM , "queue - Bad parameter") \
|
||||
esPrial(24, ERR_QUEUE_NOMEM , "queue - Out of memory") \
|
||||
esPrial(25, ERR_QUEUE_ISR , "queue - Banned in ISR") \
|
||||
esPrial(26, ERR_QUEUE_UNK , "queue - Unknown") \
|
||||
\
|
||||
esPrial(30, WARN_SCAN_START , "Scan - Already started") \
|
||||
esPrial(31, WARN_SCAN_STOP , "Scan - Already stopped") \
|
||||
esPrial( \
|
||||
32, \
|
||||
ERR_TIMER_START, \
|
||||
"Scan - Cannot start timer") \
|
||||
esPrial( \
|
||||
33, \
|
||||
ERR_TIMER_STOP, \
|
||||
"Scan - Cannot stop timer") //[EOT]
|
||||
esPrial(32, ERR_TIMER_START , "Scan - Cannot start timer") \
|
||||
esPrial(33, ERR_TIMER_STOP , "Scan - Cannot stop timer") \
|
||||
//[EOT]
|
||||
|
||||
// Declare list extraction macros
|
||||
#define ES_ENUM(num, ename, string) ename = num,
|
||||
#define ES_STRING(num, ename, string) string"\r\n",
|
||||
|
||||
// Build the enum
|
||||
typedef enum err { FOREACH_ES(ES_ENUM) } err_t;
|
||||
typedef
|
||||
enum err { FOREACH_ES(ES_ENUM) }
|
||||
err_t ;
|
||||
|
||||
// You need to '#define ERR_C_' in precisely ONE source file
|
||||
#ifdef ERR_C_
|
||||
|
||||
@@ -17,7 +17,9 @@ static Color _set;
|
||||
static Color _clr;
|
||||
|
||||
//+============================================================================
|
||||
static void _showByteSet(const uint8_t b) {
|
||||
static
|
||||
void _showByteSet (const uint8_t b)
|
||||
{
|
||||
for (uint8_t m = 0x80; m; m >>= 1) {
|
||||
if (b & m) // plot only SET bits
|
||||
canvas_draw_dot(_canvas, (_tlx +_x), (_tly +_y)) ;
|
||||
@@ -26,7 +28,9 @@ static void _showByteSet(const uint8_t b) {
|
||||
}
|
||||
|
||||
//+============================================================================
|
||||
static void _showByteClr(const uint8_t b) {
|
||||
static
|
||||
void _showByteClr (const uint8_t b)
|
||||
{
|
||||
for (uint8_t m = 0x80; m; m >>= 1) {
|
||||
if (!(b & m)) // plot only CLR bits
|
||||
canvas_draw_dot(_canvas, (_tlx +_x), (_tly +_y)) ;
|
||||
@@ -35,7 +39,9 @@ static void _showByteClr(const uint8_t b) {
|
||||
}
|
||||
|
||||
//+============================================================================
|
||||
static void _showByteAll(const uint8_t b) {
|
||||
static
|
||||
void _showByteAll (const uint8_t b)
|
||||
{
|
||||
for (uint8_t m = 0x80; m; m >>= 1) {
|
||||
if ((!!(b & m)) ^ _blk) { // Change colour only when required
|
||||
canvas_set_color(_canvas, ((b & m) ? _set : _clr));
|
||||
@@ -55,12 +61,9 @@ static void _showByteAll(const uint8_t b) {
|
||||
// SHOW_ALL - plot all images pixels as they are
|
||||
// SHOW_ALL_INV - plot all images pixels inverted
|
||||
//
|
||||
void show(
|
||||
Canvas* const canvas,
|
||||
const uint8_t tlx,
|
||||
const uint8_t tly,
|
||||
const image_t* img,
|
||||
const showMode_t mode) {
|
||||
void show (Canvas* const canvas, const uint8_t tlx, const uint8_t tly,
|
||||
const image_t* img, const showMode_t mode)
|
||||
{
|
||||
void(*fnShow)(const uint8_t) = NULL;
|
||||
|
||||
const uint8_t* bp = img->data;
|
||||
@@ -84,6 +87,7 @@ void show(
|
||||
case SHOW_WHT_:
|
||||
canvas_set_color(canvas, ColorWhite);
|
||||
break;
|
||||
|
||||
}
|
||||
switch (mode & SHOW_INV_) {
|
||||
case SHOW_NRM_:
|
||||
|
||||
@@ -5,7 +5,8 @@
|
||||
#include <stdbool.h>
|
||||
|
||||
//----------------------------------------------------------------------------- ----------------------------------------
|
||||
typedef enum showMode {
|
||||
typedef
|
||||
enum showMode {
|
||||
// {INV:--:WHT:BLK::--:--:CLR:SET}
|
||||
SHOW_SET_ = 0x01,
|
||||
SHOW_CLR_ = 0x02,
|
||||
@@ -24,17 +25,20 @@ typedef enum showMode {
|
||||
|
||||
SHOW_ALL = SHOW_ALL_ | SHOW_NRM_,
|
||||
SHOW_ALL_INV = SHOW_ALL_ | SHOW_INV_,
|
||||
} showMode_t;
|
||||
}
|
||||
showMode_t;
|
||||
|
||||
//----------------------------------------------------------------------------- ----------------------------------------
|
||||
typedef struct image {
|
||||
typedef
|
||||
struct image {
|
||||
uint8_t w; // width
|
||||
uint8_t h; // height
|
||||
bool c; // compressed?
|
||||
uint16_t len; // image data length
|
||||
uint8_t tag; // rle tag
|
||||
uint8_t data[]; // image data
|
||||
} image_t;
|
||||
}
|
||||
image_t;
|
||||
|
||||
//----------------------------------------------------------------------------- ----------------------------------------
|
||||
//[TAG]
|
||||
@@ -123,12 +127,8 @@ extern const image_t img_6x8_D;
|
||||
//----------------------------------------------------------------------------- ----------------------------------------
|
||||
#ifndef IMGTEST
|
||||
# include <gui/gui.h>
|
||||
void show(
|
||||
Canvas* const canvas,
|
||||
const uint8_t tlx,
|
||||
const uint8_t tly,
|
||||
const image_t* img,
|
||||
const showMode_t mode);
|
||||
void show (Canvas* const canvas, const uint8_t tlx, const uint8_t tly,
|
||||
const image_t* img, const showMode_t mode) ;
|
||||
#endif
|
||||
|
||||
#endif //IMAGES_H_
|
||||
|
||||
@@ -6,4 +6,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_3x5_0 = {3, 5, false, 2, 0, {0xF6, 0xDE}};
|
||||
const image_t img_3x5_0 = { 3, 5, false, 2, 0, {
|
||||
0xF6, 0xDE
|
||||
}};
|
||||
|
||||
@@ -6,4 +6,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_3x5_1 = {3, 5, false, 2, 0, {0xC9, 0x2E}};
|
||||
const image_t img_3x5_1 = { 3, 5, false, 2, 0, {
|
||||
0xC9, 0x2E
|
||||
}};
|
||||
|
||||
@@ -6,4 +6,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_3x5_2 = {3, 5, false, 2, 0, {0xE7, 0xCE}};
|
||||
const image_t img_3x5_2 = { 3, 5, false, 2, 0, {
|
||||
0xE7, 0xCE
|
||||
}};
|
||||
|
||||
@@ -6,4 +6,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_3x5_3 = {3, 5, false, 2, 0, {0xE5, 0x9E}};
|
||||
const image_t img_3x5_3 = { 3, 5, false, 2, 0, {
|
||||
0xE5, 0x9E
|
||||
}};
|
||||
|
||||
@@ -6,4 +6,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_3x5_4 = {3, 5, false, 2, 0, {0x97, 0x92}};
|
||||
const image_t img_3x5_4 = { 3, 5, false, 2, 0, {
|
||||
0x97, 0x92
|
||||
}};
|
||||
|
||||
@@ -6,4 +6,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_3x5_5 = {3, 5, false, 2, 0, {0xF3, 0x9E}};
|
||||
const image_t img_3x5_5 = { 3, 5, false, 2, 0, {
|
||||
0xF3, 0x9E
|
||||
}};
|
||||
|
||||
@@ -6,4 +6,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_3x5_6 = {3, 5, false, 2, 0, {0xD3, 0xDE}};
|
||||
const image_t img_3x5_6 = { 3, 5, false, 2, 0, {
|
||||
0xD3, 0xDE
|
||||
}};
|
||||
|
||||
@@ -6,4 +6,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_3x5_7 = {3, 5, false, 2, 0, {0xE5, 0x24}};
|
||||
const image_t img_3x5_7 = { 3, 5, false, 2, 0, {
|
||||
0xE5, 0x24
|
||||
}};
|
||||
|
||||
@@ -6,4 +6,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_3x5_8 = {3, 5, false, 2, 0, {0xF7, 0xDE}};
|
||||
const image_t img_3x5_8 = { 3, 5, false, 2, 0, {
|
||||
0xF7, 0xDE
|
||||
}};
|
||||
|
||||
@@ -6,4 +6,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_3x5_9 = {3, 5, false, 2, 0, {0xF7, 0x96}};
|
||||
const image_t img_3x5_9 = { 3, 5, false, 2, 0, {
|
||||
0xF7, 0x96
|
||||
}};
|
||||
|
||||
@@ -6,4 +6,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_3x5_v = {3, 5, false, 2, 0, {0x02, 0xD4}};
|
||||
const image_t img_3x5_v = { 3, 5, false, 2, 0, {
|
||||
0x02, 0xD4
|
||||
}};
|
||||
|
||||
@@ -8,4 +8,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_5x7_0 = {5, 7, false, 5, 0, {0x74, 0x67, 0x5C, 0xC5, 0xC0}};
|
||||
const image_t img_5x7_0 = { 5, 7, false, 5, 0, {
|
||||
0x74, 0x67, 0x5C, 0xC5, 0xC0
|
||||
}};
|
||||
|
||||
@@ -8,4 +8,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_5x7_1 = {5, 7, false, 5, 0, {0x65, 0x08, 0x42, 0x13, 0xE0}};
|
||||
const image_t img_5x7_1 = { 5, 7, false, 5, 0, {
|
||||
0x65, 0x08, 0x42, 0x13, 0xE0
|
||||
}};
|
||||
|
||||
@@ -8,4 +8,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_5x7_2 = {5, 7, false, 5, 0, {0x74, 0x42, 0x22, 0x23, 0xE0}};
|
||||
const image_t img_5x7_2 = { 5, 7, false, 5, 0, {
|
||||
0x74, 0x42, 0x22, 0x23, 0xE0
|
||||
}};
|
||||
|
||||
@@ -8,4 +8,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_5x7_3 = {5, 7, false, 5, 0, {0x74, 0x42, 0x60, 0xC5, 0xC0}};
|
||||
const image_t img_5x7_3 = { 5, 7, false, 5, 0, {
|
||||
0x74, 0x42, 0x60, 0xC5, 0xC0
|
||||
}};
|
||||
|
||||
@@ -8,4 +8,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_5x7_4 = {5, 7, false, 5, 0, {0x84, 0x25, 0x2F, 0x88, 0x40}};
|
||||
const image_t img_5x7_4 = { 5, 7, false, 5, 0, {
|
||||
0x84, 0x25, 0x2F, 0x88, 0x40
|
||||
}};
|
||||
|
||||
@@ -8,4 +8,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_5x7_5 = {5, 7, false, 5, 0, {0xFC, 0x21, 0xE0, 0x87, 0xC0}};
|
||||
const image_t img_5x7_5 = { 5, 7, false, 5, 0, {
|
||||
0xFC, 0x21, 0xE0, 0x87, 0xC0
|
||||
}};
|
||||
|
||||
@@ -8,4 +8,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_5x7_6 = {5, 7, false, 5, 0, {0x74, 0x21, 0xE8, 0xC5, 0xC0}};
|
||||
const image_t img_5x7_6 = { 5, 7, false, 5, 0, {
|
||||
0x74, 0x21, 0xE8, 0xC5, 0xC0
|
||||
}};
|
||||
|
||||
@@ -8,4 +8,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_5x7_7 = {5, 7, false, 5, 0, {0xF8, 0x44, 0x22, 0x10, 0x80}};
|
||||
const image_t img_5x7_7 = { 5, 7, false, 5, 0, {
|
||||
0xF8, 0x44, 0x22, 0x10, 0x80
|
||||
}};
|
||||
|
||||
@@ -8,4 +8,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_5x7_8 = {5, 7, false, 5, 0, {0x74, 0x62, 0xE8, 0xC5, 0xC0}};
|
||||
const image_t img_5x7_8 = { 5, 7, false, 5, 0, {
|
||||
0x74, 0x62, 0xE8, 0xC5, 0xC0
|
||||
}};
|
||||
|
||||
@@ -8,4 +8,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_5x7_9 = {5, 7, false, 5, 0, {0x74, 0x62, 0xF0, 0x85, 0xC0}};
|
||||
const image_t img_5x7_9 = { 5, 7, false, 5, 0, {
|
||||
0x74, 0x62, 0xF0, 0x85, 0xC0
|
||||
}};
|
||||
|
||||
@@ -8,4 +8,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_5x7_A = {5, 7, false, 5, 0, {0x74, 0x63, 0xF8, 0xC6, 0x20}};
|
||||
const image_t img_5x7_A = { 5, 7, false, 5, 0, {
|
||||
0x74, 0x63, 0xF8, 0xC6, 0x20
|
||||
}};
|
||||
|
||||
@@ -8,4 +8,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_5x7_B = {5, 7, false, 5, 0, {0xF4, 0x63, 0x68, 0xC7, 0xC0}};
|
||||
const image_t img_5x7_B = { 5, 7, false, 5, 0, {
|
||||
0xF4, 0x63, 0x68, 0xC7, 0xC0
|
||||
}};
|
||||
|
||||
@@ -8,4 +8,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_5x7_C = {5, 7, false, 5, 0, {0x74, 0x61, 0x08, 0x45, 0xC0}};
|
||||
const image_t img_5x7_C = { 5, 7, false, 5, 0, {
|
||||
0x74, 0x61, 0x08, 0x45, 0xC0
|
||||
}};
|
||||
|
||||
@@ -8,4 +8,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_5x7_D = {5, 7, false, 5, 0, {0x75, 0x4A, 0x52, 0xD5, 0xC0}};
|
||||
const image_t img_5x7_D = { 5, 7, false, 5, 0, {
|
||||
0x75, 0x4A, 0x52, 0xD5, 0xC0
|
||||
}};
|
||||
|
||||
@@ -8,4 +8,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_5x7_E = {5, 7, false, 5, 0, {0xFC, 0x21, 0xC8, 0x43, 0xE0}};
|
||||
const image_t img_5x7_E = { 5, 7, false, 5, 0, {
|
||||
0xFC, 0x21, 0xC8, 0x43, 0xE0
|
||||
}};
|
||||
|
||||
@@ -8,4 +8,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_5x7_F = {5, 7, false, 5, 0, {0xFC, 0x21, 0xC8, 0x42, 0x00}};
|
||||
const image_t img_5x7_F = { 5, 7, false, 5, 0, {
|
||||
0xFC, 0x21, 0xC8, 0x42, 0x00
|
||||
}};
|
||||
|
||||
@@ -9,4 +9,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_6x8_0 = {6, 8, false, 6, 0, {0x7B, 0xFC, 0xF3, 0xCF, 0x3F, 0xDE}};
|
||||
const image_t img_6x8_0 = { 6, 8, false, 6, 0, {
|
||||
0x7B, 0xFC, 0xF3, 0xCF, 0x3F, 0xDE
|
||||
}};
|
||||
|
||||
@@ -9,4 +9,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_6x8_1 = {6, 8, false, 6, 0, {0x73, 0xC3, 0x0C, 0x30, 0xCF, 0xFF}};
|
||||
const image_t img_6x8_1 = { 6, 8, false, 6, 0, {
|
||||
0x73, 0xC3, 0x0C, 0x30, 0xCF, 0xFF
|
||||
}};
|
||||
|
||||
@@ -9,4 +9,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_6x8_2 = {6, 8, false, 6, 0, {0x7B, 0xF0, 0xC7, 0x31, 0x8F, 0xFF}};
|
||||
const image_t img_6x8_2 = { 6, 8, false, 6, 0, {
|
||||
0x7B, 0xF0, 0xC7, 0x31, 0x8F, 0xFF
|
||||
}};
|
||||
|
||||
@@ -9,4 +9,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_6x8_3 = {6, 8, false, 6, 0, {0x7B, 0xF0, 0xCF, 0x3C, 0x3F, 0xDE}};
|
||||
const image_t img_6x8_3 = { 6, 8, false, 6, 0, {
|
||||
0x7B, 0xF0, 0xCF, 0x3C, 0x3F, 0xDE
|
||||
}};
|
||||
|
||||
@@ -9,4 +9,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_6x8_4 = {6, 8, false, 6, 0, {0xC3, 0x0D, 0xB6, 0xFF, 0xF1, 0x86}};
|
||||
const image_t img_6x8_4 = { 6, 8, false, 6, 0, {
|
||||
0xC3, 0x0D, 0xB6, 0xFF, 0xF1, 0x86
|
||||
}};
|
||||
|
||||
@@ -9,4 +9,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_6x8_5 = {6, 8, false, 6, 0, {0xFF, 0xFC, 0x3E, 0xFC, 0x3F, 0xFE}};
|
||||
const image_t img_6x8_5 = { 6, 8, false, 6, 0, {
|
||||
0xFF, 0xFC, 0x3E, 0xFC, 0x3F, 0xFE
|
||||
}};
|
||||
|
||||
@@ -9,4 +9,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_6x8_6 = {6, 8, false, 6, 0, {0x7B, 0xEC, 0x3E, 0xFF, 0x3F, 0xDE}};
|
||||
const image_t img_6x8_6 = { 6, 8, false, 6, 0, {
|
||||
0x7B, 0xEC, 0x3E, 0xFF, 0x3F, 0xDE
|
||||
}};
|
||||
|
||||
@@ -9,4 +9,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_6x8_7 = {6, 8, false, 6, 0, {0xFF, 0xF0, 0xC6, 0x18, 0xC3, 0x0C}};
|
||||
const image_t img_6x8_7 = { 6, 8, false, 6, 0, {
|
||||
0xFF, 0xF0, 0xC6, 0x18, 0xC3, 0x0C
|
||||
}};
|
||||
|
||||
@@ -9,4 +9,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_6x8_8 = {6, 8, false, 6, 0, {0x7B, 0xFC, 0xDE, 0xFF, 0x3F, 0xDE}};
|
||||
const image_t img_6x8_8 = { 6, 8, false, 6, 0, {
|
||||
0x7B, 0xFC, 0xDE, 0xFF, 0x3F, 0xDE
|
||||
}};
|
||||
|
||||
@@ -9,4 +9,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_6x8_9 = {6, 8, false, 6, 0, {0x7B, 0xFC, 0xFF, 0x7C, 0x37, 0xDE}};
|
||||
const image_t img_6x8_9 = { 6, 8, false, 6, 0, {
|
||||
0x7B, 0xFC, 0xFF, 0x7C, 0x37, 0xDE
|
||||
}};
|
||||
|
||||
@@ -9,4 +9,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_6x8_A = {6, 8, false, 6, 0, {0x7B, 0xFC, 0xF3, 0xFF, 0xFC, 0xF3}};
|
||||
const image_t img_6x8_A = { 6, 8, false, 6, 0, {
|
||||
0x7B, 0xFC, 0xF3, 0xFF, 0xFC, 0xF3
|
||||
}};
|
||||
|
||||
@@ -9,4 +9,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_6x8_B = {6, 8, false, 6, 0, {0xFB, 0xFC, 0xFE, 0xFB, 0x3F, 0xFE}};
|
||||
const image_t img_6x8_B = { 6, 8, false, 6, 0, {
|
||||
0xFB, 0xFC, 0xFE, 0xFB, 0x3F, 0xFE
|
||||
}};
|
||||
|
||||
@@ -9,4 +9,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_6x8_C = {6, 8, false, 6, 0, {0x7F, 0xFC, 0x30, 0xC3, 0x0F, 0xDF}};
|
||||
const image_t img_6x8_C = { 6, 8, false, 6, 0, {
|
||||
0x7F, 0xFC, 0x30, 0xC3, 0x0F, 0xDF
|
||||
}};
|
||||
|
||||
@@ -9,4 +9,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_6x8_D = {6, 8, false, 6, 0, {0xFB, 0xF6, 0xDB, 0x6D, 0xBF, 0xFE}};
|
||||
const image_t img_6x8_D = { 6, 8, false, 6, 0, {
|
||||
0xFB, 0xF6, 0xDB, 0x6D, 0xBF, 0xFE
|
||||
}};
|
||||
|
||||
@@ -9,4 +9,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_6x8_E = {6, 8, false, 6, 0, {0xFF, 0xFC, 0x3C, 0xF3, 0x0F, 0xFF}};
|
||||
const image_t img_6x8_E = { 6, 8, false, 6, 0, {
|
||||
0xFF, 0xFC, 0x3C, 0xF3, 0x0F, 0xFF
|
||||
}};
|
||||
|
||||
@@ -9,4 +9,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_6x8_F = {6, 8, false, 6, 0, {0xFF, 0xFC, 0x3C, 0xF3, 0x0C, 0x30}};
|
||||
const image_t img_6x8_F = { 6, 8, false, 6, 0, {
|
||||
0xFF, 0xFC, 0x3C, 0xF3, 0x0C, 0x30
|
||||
}};
|
||||
|
||||
@@ -9,4 +9,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_6x8_G = {6, 8, false, 6, 0, {0x7F, 0xFC, 0x30, 0xDF, 0x3F, 0xDF}};
|
||||
const image_t img_6x8_G = { 6, 8, false, 6, 0, {
|
||||
0x7F, 0xFC, 0x30, 0xDF, 0x3F, 0xDF
|
||||
}};
|
||||
|
||||
@@ -9,4 +9,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_6x8_X = {6, 8, false, 6, 0, {0xCF, 0x36, 0x8E, 0x71, 0x6C, 0xF3}};
|
||||
const image_t img_6x8_X = { 6, 8, false, 6, 0, {
|
||||
0xCF, 0x36, 0x8E, 0x71, 0x6C, 0xF3
|
||||
}};
|
||||
|
||||
@@ -9,4 +9,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_6x8_Y = {6, 8, false, 6, 0, {0xCF, 0x3C, 0xF3, 0x78, 0xC3, 0x0C}};
|
||||
const image_t img_6x8_Y = { 6, 8, false, 6, 0, {
|
||||
0xCF, 0x3C, 0xF3, 0x78, 0xC3, 0x0C
|
||||
}};
|
||||
|
||||
@@ -9,4 +9,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_6x8_Z = {6, 8, false, 6, 0, {0xFF, 0xF0, 0xC6, 0x31, 0x8F, 0xFF}};
|
||||
const image_t img_6x8_Z = { 6, 8, false, 6, 0, {
|
||||
0xFF, 0xF0, 0xC6, 0x31, 0x8F, 0xFF
|
||||
}};
|
||||
|
||||
@@ -9,4 +9,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_6x8_d = {6, 8, false, 6, 0, {0x0C, 0x30, 0xDF, 0xFF, 0x3F, 0xDF}};
|
||||
const image_t img_6x8_d = { 6, 8, false, 6, 0, {
|
||||
0x0C, 0x30, 0xDF, 0xFF, 0x3F, 0xDF
|
||||
}};
|
||||
|
||||
@@ -9,4 +9,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_6x8_n = {6, 8, false, 6, 0, {0x00, 0x07, 0xBF, 0xCF, 0x3C, 0xF3}};
|
||||
const image_t img_6x8_n = { 6, 8, false, 6, 0, {
|
||||
0x00, 0x07, 0xBF, 0xCF, 0x3C, 0xF3
|
||||
}};
|
||||
|
||||
@@ -9,4 +9,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_6x8_v = {6, 8, false, 6, 0, {0x00, 0x08, 0x73, 0xCF, 0xF7, 0x8C}};
|
||||
const image_t img_6x8_v = { 6, 8, false, 6, 0, {
|
||||
0x00, 0x08, 0x73, 0xCF, 0xF7, 0x8C
|
||||
}};
|
||||
|
||||
@@ -65,66 +65,58 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_RIP = {
|
||||
128,
|
||||
64,
|
||||
true,
|
||||
837,
|
||||
0x06,
|
||||
{// orig:1024, comp:18.26%
|
||||
0x06, 0x20, 0xFF, 0xC0, 0x06, 0x0E, 0x00, 0x03, 0xD4, 0x06, 0x0E, 0x00, 0x2B, 0xC8, 0x01,
|
||||
0xFC, 0x1E, 0x1F, 0xF0, 0x00, 0xFE, 0x20, 0x8F, 0xE3, 0xF8, 0xFE, 0x3F, 0x80, 0x13, 0xD4,
|
||||
0x01, 0xFC, 0x0E, 0x0F, 0xF0, 0x00, 0xFE, 0x71, 0xCF, 0xE3, 0xF8, 0xFE, 0x3F, 0x80, 0x2B,
|
||||
0xC0, 0x00, 0x0E, 0x0A, 0x00, 0x38, 0x01, 0x87, 0x71, 0xD8, 0x77, 0x1C, 0x07, 0x71, 0xC0,
|
||||
0x03, 0xC0, 0x03, 0x8E, 0x0A, 0x0E, 0x28, 0x01, 0xC5, 0x51, 0x5C, 0x77, 0x1D, 0xC7, 0x71,
|
||||
0x40, 0x03, 0xC0, 0x03, 0x8A, 0x0A, 0x0E, 0x28, 0x01, 0x47, 0x51, 0x5C, 0x55, 0x15, 0xC5,
|
||||
0x51, 0x40, 0x03, 0xC0, 0x02, 0x8A, 0x0A, 0x0A, 0x28, 0x01, 0x40, 0x51, 0x54, 0x55, 0x15,
|
||||
0x45, 0x51, 0x40, 0x03, 0xC0, 0x02, 0x8A, 0x0A, 0x0A, 0x28, 0x01, 0x40, 0x51, 0x54, 0x55,
|
||||
0x15, 0x45, 0x51, 0xC0, 0x03, 0xC0, 0x02, 0x8E, 0x0A, 0x0A, 0x38, 0x01, 0x40, 0x51, 0x54,
|
||||
0x75, 0x55, 0x47, 0x50, 0x00, 0x03, 0xC0, 0x02, 0xF8, 0x0A, 0x0B, 0xE0, 0x01, 0x40, 0x71,
|
||||
0xD7, 0xC5, 0x15, 0x7C, 0x50, 0x00, 0x03, 0xC0, 0x02, 0xF8, 0x0A, 0x0B, 0xE0, 0x01, 0x40,
|
||||
0x3F, 0x97, 0xC5, 0x15, 0x7C, 0x57, 0x80, 0x03, 0xC0, 0x02, 0x9C, 0x0A, 0x0A, 0x00, 0x01,
|
||||
0x40, 0x1B, 0x14, 0x75, 0x55, 0x4E, 0x57, 0xC0, 0x03, 0xC0, 0x02, 0x94, 0x0A, 0x0A, 0x00,
|
||||
0x01, 0x40, 0x0A, 0x14, 0x55, 0x15, 0x4A, 0x51, 0x40, 0x03, 0xC0, 0x02, 0x94, 0x0A, 0x0A,
|
||||
0x00, 0x01, 0x40, 0x0A, 0x14, 0x55, 0x15, 0x4A, 0x51, 0x40, 0x03, 0xC0, 0x02, 0x94, 0x0A,
|
||||
0x0A, 0x00, 0x01, 0xC7, 0x0A, 0x14, 0x55, 0x15, 0x4A, 0x71, 0x40, 0x03, 0xC0, 0x02, 0x94,
|
||||
0x0A, 0x0A, 0x00, 0x01, 0xC5, 0x0A, 0x1C, 0x77, 0x1D, 0x4A, 0x71, 0x40, 0x03, 0xC0, 0x02,
|
||||
0x94, 0x0A, 0x0A, 0x00, 0x01, 0x87, 0x0E, 0x1C, 0x77, 0x1D, 0x4A, 0x61, 0xC0, 0x03, 0xC0,
|
||||
0x03, 0x9C, 0xCE, 0xCE, 0xC0, 0x00, 0xFE, 0x0E, 0x0F, 0xE3, 0xF9, 0xCE, 0x3F, 0x80, 0x03,
|
||||
0xC0, 0x03, 0x8E, 0xDE, 0xDE, 0xC0, 0x00, 0xFE, 0x1F, 0x0F, 0xE3, 0xF9, 0xC7, 0x3F, 0x80,
|
||||
0x03, 0xC0, 0x06, 0x0E, 0x00, 0x03, 0xC0, 0x06, 0x0E, 0x00, 0x03, 0xC0, 0x06, 0x0A, 0x00,
|
||||
0x01, 0x8C, 0x07, 0xF0, 0x03, 0xC0, 0x06, 0x07, 0x00, 0x04, 0x00, 0x00, 0x02, 0x52, 0x18,
|
||||
0x0C, 0x03, 0xC1, 0xD5, 0xC7, 0x57, 0x77, 0x6D, 0xC4, 0x5D, 0x2B, 0x8E, 0xE0, 0x03, 0x5A,
|
||||
0x20, 0x02, 0x03, 0xC0, 0x95, 0x04, 0x54, 0x24, 0x55, 0x04, 0x55, 0xA1, 0x0A, 0x80, 0x01,
|
||||
0x8C, 0x47, 0xC1, 0x03, 0xC0, 0x9D, 0x87, 0x27, 0x26, 0x55, 0xC5, 0x55, 0x61, 0x0C, 0xC0,
|
||||
0x00, 0x50, 0x88, 0x21, 0x03, 0xC0, 0x95, 0x01, 0x21, 0x24, 0x44, 0x45, 0x55, 0x21, 0x0A,
|
||||
0x80, 0x00, 0x20, 0x90, 0x11, 0x03, 0xC0, 0x95, 0xC7, 0x27, 0x27, 0x45, 0xC6, 0xDD, 0x21,
|
||||
0x0E, 0xE0, 0x00, 0x70, 0x91, 0x91, 0x03, 0xC0, 0x06, 0x0B, 0x00, 0x88, 0x92, 0x51, 0x03,
|
||||
0xC0, 0x06, 0x0A, 0x00, 0x01, 0x08, 0x92, 0x91, 0x03, 0xC0, 0x06, 0x0A, 0x00, 0x01, 0x08,
|
||||
0x92, 0x11, 0x03, 0xC1, 0xD5, 0xC7, 0x76, 0xDC, 0x45, 0xDD, 0x5D, 0x5C, 0x57, 0x50, 0x00,
|
||||
0x87, 0x11, 0xE2, 0x03, 0xC0, 0x95, 0x04, 0x55, 0x50, 0x44, 0x89, 0x55, 0x48, 0x55, 0x50,
|
||||
0x00, 0x80, 0x88, 0x03, 0x03, 0xC0, 0x9D, 0x87, 0x75, 0x58, 0x54, 0x89, 0xD5, 0x48, 0x25,
|
||||
0x50, 0x00, 0x40, 0x7C, 0x04, 0x83, 0xC0, 0x95, 0x01, 0x54, 0x50, 0x54, 0x89, 0x55, 0x48,
|
||||
0x25, 0x50, 0x00, 0x40, 0x07, 0xF8, 0x43, 0xC0, 0x95, 0xC7, 0x54, 0x5C, 0x6D, 0xC9, 0x5D,
|
||||
0xC8, 0x27, 0x70, 0x00, 0x30, 0x00, 0x00, 0x43, 0xC0, 0x06, 0x0B, 0x00, 0x0F, 0xFF, 0xFF,
|
||||
0x83, 0xC0, 0x06, 0x0E, 0x00, 0x03, 0xC0, 0x06, 0x0E, 0x00, 0x03, 0xC0, 0x00, 0x07, 0xC7,
|
||||
0xF1, 0xFC, 0x7F, 0x00, 0x03, 0xF8, 0xFE, 0x3F, 0x8F, 0xE0, 0x00, 0x03, 0xC0, 0x00, 0x07,
|
||||
0xC7, 0xF1, 0xFC, 0x7F, 0x00, 0x03, 0xF8, 0xFE, 0x3F, 0x8F, 0xE0, 0x00, 0x03, 0xC0, 0x00,
|
||||
0x05, 0x4E, 0x3B, 0x8E, 0xE3, 0x80, 0x07, 0x1D, 0xC7, 0x71, 0xDC, 0x70, 0x00, 0x03, 0xC0,
|
||||
0x00, 0x01, 0x4E, 0x3A, 0x8E, 0xE3, 0x80, 0x05, 0x15, 0xC7, 0x51, 0x54, 0x50, 0x00, 0x03,
|
||||
0xC0, 0x00, 0x01, 0x4A, 0x2B, 0x8A, 0xA2, 0x80, 0x07, 0x15, 0x45, 0x71, 0x5C, 0x50, 0x00,
|
||||
0x03, 0xC0, 0x00, 0x01, 0x4A, 0x28, 0x0A, 0xA2, 0x80, 0x00, 0x15, 0x45, 0x01, 0x40, 0x50,
|
||||
0x00, 0x03, 0xC0, 0x00, 0x01, 0x4A, 0x28, 0x0A, 0xA6, 0x80, 0x00, 0x15, 0x4D, 0x01, 0x40,
|
||||
0x50, 0x00, 0x03, 0xC0, 0x00, 0x01, 0x4E, 0x28, 0x0E, 0xA6, 0x80, 0x00, 0x1D, 0x4D, 0x01,
|
||||
0xC0, 0x70, 0x00, 0x03, 0xC0, 0x00, 0x01, 0xC3, 0xE8, 0x0E, 0xAA, 0x9F, 0xE1, 0xF9, 0x55,
|
||||
0x1F, 0x87, 0xE0, 0x00, 0x03, 0xC0, 0x00, 0x01, 0xC3, 0xE8, 0x38, 0xAA, 0x90, 0x23, 0xF1,
|
||||
0x55, 0x3F, 0x0F, 0xC0, 0x00, 0x03, 0xC0, 0x00, 0x01, 0x40, 0x28, 0x38, 0xB2, 0x9F, 0xE7,
|
||||
0x01, 0x65, 0x70, 0x1C, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x01, 0x40, 0x28, 0x28, 0xB2, 0x80,
|
||||
0x05, 0x01, 0x65, 0x50, 0x14, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x01, 0x40, 0x28, 0x28, 0xA2,
|
||||
0x80, 0x05, 0x01, 0x45, 0x50, 0x14, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x01, 0x40, 0x28, 0x28,
|
||||
0xA2, 0x80, 0x05, 0x01, 0x45, 0x50, 0x14, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x01, 0x40, 0x38,
|
||||
0x28, 0xE3, 0x80, 0x05, 0x01, 0xC7, 0x50, 0x14, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x01, 0x40,
|
||||
0x38, 0x28, 0xE3, 0x80, 0x05, 0x0D, 0xC7, 0x50, 0xD4, 0x30, 0x00, 0x03, 0xD4, 0x00, 0x07,
|
||||
0xF3, 0xF0, 0x38, 0x7F, 0x00, 0x07, 0xFC, 0xFE, 0x7F, 0xDF, 0xF0, 0x00, 0x2B, 0xC8, 0x00,
|
||||
0x0F, 0xFB, 0xF0, 0x38, 0x7F, 0x00, 0x07, 0xFC, 0xFE, 0x7F, 0xDF, 0xF0, 0x00, 0x13, 0xD4,
|
||||
0x06, 0x0E, 0x00, 0x2B, 0xC0, 0x06, 0x0E, 0x00, 0x03, 0x06, 0x20, 0xFF}};
|
||||
const image_t img_RIP = { 128, 64, true, 837, 0x06, { // orig:1024, comp:18.26%
|
||||
0x06, 0x20, 0xFF, 0xC0, 0x06, 0x0E, 0x00, 0x03, 0xD4, 0x06, 0x0E, 0x00, 0x2B, 0xC8, 0x01, 0xFC,
|
||||
0x1E, 0x1F, 0xF0, 0x00, 0xFE, 0x20, 0x8F, 0xE3, 0xF8, 0xFE, 0x3F, 0x80, 0x13, 0xD4, 0x01, 0xFC,
|
||||
0x0E, 0x0F, 0xF0, 0x00, 0xFE, 0x71, 0xCF, 0xE3, 0xF8, 0xFE, 0x3F, 0x80, 0x2B, 0xC0, 0x00, 0x0E,
|
||||
0x0A, 0x00, 0x38, 0x01, 0x87, 0x71, 0xD8, 0x77, 0x1C, 0x07, 0x71, 0xC0, 0x03, 0xC0, 0x03, 0x8E,
|
||||
0x0A, 0x0E, 0x28, 0x01, 0xC5, 0x51, 0x5C, 0x77, 0x1D, 0xC7, 0x71, 0x40, 0x03, 0xC0, 0x03, 0x8A,
|
||||
0x0A, 0x0E, 0x28, 0x01, 0x47, 0x51, 0x5C, 0x55, 0x15, 0xC5, 0x51, 0x40, 0x03, 0xC0, 0x02, 0x8A,
|
||||
0x0A, 0x0A, 0x28, 0x01, 0x40, 0x51, 0x54, 0x55, 0x15, 0x45, 0x51, 0x40, 0x03, 0xC0, 0x02, 0x8A,
|
||||
0x0A, 0x0A, 0x28, 0x01, 0x40, 0x51, 0x54, 0x55, 0x15, 0x45, 0x51, 0xC0, 0x03, 0xC0, 0x02, 0x8E,
|
||||
0x0A, 0x0A, 0x38, 0x01, 0x40, 0x51, 0x54, 0x75, 0x55, 0x47, 0x50, 0x00, 0x03, 0xC0, 0x02, 0xF8,
|
||||
0x0A, 0x0B, 0xE0, 0x01, 0x40, 0x71, 0xD7, 0xC5, 0x15, 0x7C, 0x50, 0x00, 0x03, 0xC0, 0x02, 0xF8,
|
||||
0x0A, 0x0B, 0xE0, 0x01, 0x40, 0x3F, 0x97, 0xC5, 0x15, 0x7C, 0x57, 0x80, 0x03, 0xC0, 0x02, 0x9C,
|
||||
0x0A, 0x0A, 0x00, 0x01, 0x40, 0x1B, 0x14, 0x75, 0x55, 0x4E, 0x57, 0xC0, 0x03, 0xC0, 0x02, 0x94,
|
||||
0x0A, 0x0A, 0x00, 0x01, 0x40, 0x0A, 0x14, 0x55, 0x15, 0x4A, 0x51, 0x40, 0x03, 0xC0, 0x02, 0x94,
|
||||
0x0A, 0x0A, 0x00, 0x01, 0x40, 0x0A, 0x14, 0x55, 0x15, 0x4A, 0x51, 0x40, 0x03, 0xC0, 0x02, 0x94,
|
||||
0x0A, 0x0A, 0x00, 0x01, 0xC7, 0x0A, 0x14, 0x55, 0x15, 0x4A, 0x71, 0x40, 0x03, 0xC0, 0x02, 0x94,
|
||||
0x0A, 0x0A, 0x00, 0x01, 0xC5, 0x0A, 0x1C, 0x77, 0x1D, 0x4A, 0x71, 0x40, 0x03, 0xC0, 0x02, 0x94,
|
||||
0x0A, 0x0A, 0x00, 0x01, 0x87, 0x0E, 0x1C, 0x77, 0x1D, 0x4A, 0x61, 0xC0, 0x03, 0xC0, 0x03, 0x9C,
|
||||
0xCE, 0xCE, 0xC0, 0x00, 0xFE, 0x0E, 0x0F, 0xE3, 0xF9, 0xCE, 0x3F, 0x80, 0x03, 0xC0, 0x03, 0x8E,
|
||||
0xDE, 0xDE, 0xC0, 0x00, 0xFE, 0x1F, 0x0F, 0xE3, 0xF9, 0xC7, 0x3F, 0x80, 0x03, 0xC0, 0x06, 0x0E,
|
||||
0x00, 0x03, 0xC0, 0x06, 0x0E, 0x00, 0x03, 0xC0, 0x06, 0x0A, 0x00, 0x01, 0x8C, 0x07, 0xF0, 0x03,
|
||||
0xC0, 0x06, 0x07, 0x00, 0x04, 0x00, 0x00, 0x02, 0x52, 0x18, 0x0C, 0x03, 0xC1, 0xD5, 0xC7, 0x57,
|
||||
0x77, 0x6D, 0xC4, 0x5D, 0x2B, 0x8E, 0xE0, 0x03, 0x5A, 0x20, 0x02, 0x03, 0xC0, 0x95, 0x04, 0x54,
|
||||
0x24, 0x55, 0x04, 0x55, 0xA1, 0x0A, 0x80, 0x01, 0x8C, 0x47, 0xC1, 0x03, 0xC0, 0x9D, 0x87, 0x27,
|
||||
0x26, 0x55, 0xC5, 0x55, 0x61, 0x0C, 0xC0, 0x00, 0x50, 0x88, 0x21, 0x03, 0xC0, 0x95, 0x01, 0x21,
|
||||
0x24, 0x44, 0x45, 0x55, 0x21, 0x0A, 0x80, 0x00, 0x20, 0x90, 0x11, 0x03, 0xC0, 0x95, 0xC7, 0x27,
|
||||
0x27, 0x45, 0xC6, 0xDD, 0x21, 0x0E, 0xE0, 0x00, 0x70, 0x91, 0x91, 0x03, 0xC0, 0x06, 0x0B, 0x00,
|
||||
0x88, 0x92, 0x51, 0x03, 0xC0, 0x06, 0x0A, 0x00, 0x01, 0x08, 0x92, 0x91, 0x03, 0xC0, 0x06, 0x0A,
|
||||
0x00, 0x01, 0x08, 0x92, 0x11, 0x03, 0xC1, 0xD5, 0xC7, 0x76, 0xDC, 0x45, 0xDD, 0x5D, 0x5C, 0x57,
|
||||
0x50, 0x00, 0x87, 0x11, 0xE2, 0x03, 0xC0, 0x95, 0x04, 0x55, 0x50, 0x44, 0x89, 0x55, 0x48, 0x55,
|
||||
0x50, 0x00, 0x80, 0x88, 0x03, 0x03, 0xC0, 0x9D, 0x87, 0x75, 0x58, 0x54, 0x89, 0xD5, 0x48, 0x25,
|
||||
0x50, 0x00, 0x40, 0x7C, 0x04, 0x83, 0xC0, 0x95, 0x01, 0x54, 0x50, 0x54, 0x89, 0x55, 0x48, 0x25,
|
||||
0x50, 0x00, 0x40, 0x07, 0xF8, 0x43, 0xC0, 0x95, 0xC7, 0x54, 0x5C, 0x6D, 0xC9, 0x5D, 0xC8, 0x27,
|
||||
0x70, 0x00, 0x30, 0x00, 0x00, 0x43, 0xC0, 0x06, 0x0B, 0x00, 0x0F, 0xFF, 0xFF, 0x83, 0xC0, 0x06,
|
||||
0x0E, 0x00, 0x03, 0xC0, 0x06, 0x0E, 0x00, 0x03, 0xC0, 0x00, 0x07, 0xC7, 0xF1, 0xFC, 0x7F, 0x00,
|
||||
0x03, 0xF8, 0xFE, 0x3F, 0x8F, 0xE0, 0x00, 0x03, 0xC0, 0x00, 0x07, 0xC7, 0xF1, 0xFC, 0x7F, 0x00,
|
||||
0x03, 0xF8, 0xFE, 0x3F, 0x8F, 0xE0, 0x00, 0x03, 0xC0, 0x00, 0x05, 0x4E, 0x3B, 0x8E, 0xE3, 0x80,
|
||||
0x07, 0x1D, 0xC7, 0x71, 0xDC, 0x70, 0x00, 0x03, 0xC0, 0x00, 0x01, 0x4E, 0x3A, 0x8E, 0xE3, 0x80,
|
||||
0x05, 0x15, 0xC7, 0x51, 0x54, 0x50, 0x00, 0x03, 0xC0, 0x00, 0x01, 0x4A, 0x2B, 0x8A, 0xA2, 0x80,
|
||||
0x07, 0x15, 0x45, 0x71, 0x5C, 0x50, 0x00, 0x03, 0xC0, 0x00, 0x01, 0x4A, 0x28, 0x0A, 0xA2, 0x80,
|
||||
0x00, 0x15, 0x45, 0x01, 0x40, 0x50, 0x00, 0x03, 0xC0, 0x00, 0x01, 0x4A, 0x28, 0x0A, 0xA6, 0x80,
|
||||
0x00, 0x15, 0x4D, 0x01, 0x40, 0x50, 0x00, 0x03, 0xC0, 0x00, 0x01, 0x4E, 0x28, 0x0E, 0xA6, 0x80,
|
||||
0x00, 0x1D, 0x4D, 0x01, 0xC0, 0x70, 0x00, 0x03, 0xC0, 0x00, 0x01, 0xC3, 0xE8, 0x0E, 0xAA, 0x9F,
|
||||
0xE1, 0xF9, 0x55, 0x1F, 0x87, 0xE0, 0x00, 0x03, 0xC0, 0x00, 0x01, 0xC3, 0xE8, 0x38, 0xAA, 0x90,
|
||||
0x23, 0xF1, 0x55, 0x3F, 0x0F, 0xC0, 0x00, 0x03, 0xC0, 0x00, 0x01, 0x40, 0x28, 0x38, 0xB2, 0x9F,
|
||||
0xE7, 0x01, 0x65, 0x70, 0x1C, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x01, 0x40, 0x28, 0x28, 0xB2, 0x80,
|
||||
0x05, 0x01, 0x65, 0x50, 0x14, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x01, 0x40, 0x28, 0x28, 0xA2, 0x80,
|
||||
0x05, 0x01, 0x45, 0x50, 0x14, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x01, 0x40, 0x28, 0x28, 0xA2, 0x80,
|
||||
0x05, 0x01, 0x45, 0x50, 0x14, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x01, 0x40, 0x38, 0x28, 0xE3, 0x80,
|
||||
0x05, 0x01, 0xC7, 0x50, 0x14, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x01, 0x40, 0x38, 0x28, 0xE3, 0x80,
|
||||
0x05, 0x0D, 0xC7, 0x50, 0xD4, 0x30, 0x00, 0x03, 0xD4, 0x00, 0x07, 0xF3, 0xF0, 0x38, 0x7F, 0x00,
|
||||
0x07, 0xFC, 0xFE, 0x7F, 0xDF, 0xF0, 0x00, 0x2B, 0xC8, 0x00, 0x0F, 0xFB, 0xF0, 0x38, 0x7F, 0x00,
|
||||
0x07, 0xFC, 0xFE, 0x7F, 0xDF, 0xF0, 0x00, 0x13, 0xD4, 0x06, 0x0E, 0x00, 0x2B, 0xC0, 0x06, 0x0E,
|
||||
0x00, 0x03, 0x06, 0x20, 0xFF
|
||||
}};
|
||||
|
||||
@@ -12,14 +12,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_cc_Cable = {
|
||||
4,
|
||||
11,
|
||||
true,
|
||||
4,
|
||||
0x00,
|
||||
{// orig:6, comp:33.33%
|
||||
0x00,
|
||||
0x05,
|
||||
0xDB,
|
||||
0xD0}};
|
||||
const image_t img_cc_Cable = { 4, 11, true, 4, 0x00, { // orig:6, comp:33.33%
|
||||
0x00, 0x05, 0xDB, 0xD0
|
||||
}};
|
||||
|
||||
@@ -18,8 +18,8 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_cc_Joy = {17, 17, false, 37, 0, {0x00, 0x80, 0x01, 0xF0, 0x0F, 0xDF, 0x87, 0x01,
|
||||
0xC3, 0x00, 0x61, 0x00, 0x11, 0x80, 0x0C, 0xC0,
|
||||
0x06, 0xC0, 0x01, 0xB0, 0x01, 0x98, 0x00, 0xC4,
|
||||
0x00, 0x43, 0x00, 0x61, 0xC0, 0x70, 0xFD, 0xF8,
|
||||
0x07, 0xC0, 0x00, 0x80, 0x00}};
|
||||
const image_t img_cc_Joy = { 17, 17, false, 37, 0, {
|
||||
0x00, 0x80, 0x01, 0xF0, 0x0F, 0xDF, 0x87, 0x01, 0xC3, 0x00, 0x61, 0x00, 0x11, 0x80, 0x0C, 0xC0,
|
||||
0x06, 0xC0, 0x01, 0xB0, 0x01, 0x98, 0x00, 0xC4, 0x00, 0x43, 0x00, 0x61, 0xC0, 0x70, 0xFD, 0xF8,
|
||||
0x07, 0xC0, 0x00, 0x80, 0x00
|
||||
}};
|
||||
|
||||
@@ -54,47 +54,39 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_cc_Main = {
|
||||
116,
|
||||
53,
|
||||
true,
|
||||
542,
|
||||
0x05,
|
||||
{// orig:769, comp:29.52%
|
||||
0x00, 0x00, 0x00, 0x7F, 0xC0, 0x05, 0x05, 0x00, 0x3F, 0xE0, 0x05, 0x04, 0x00, 0x01, 0xF8,
|
||||
0x04, 0x0F, 0x80, 0x00, 0x00, 0x1F, 0x02, 0x01, 0xF8, 0x05, 0x04, 0x00, 0x60, 0x00, 0x41,
|
||||
0x04, 0x00, 0x60, 0x02, 0x08, 0x20, 0x00, 0x60, 0x00, 0x00, 0x00, 0x08, 0x00, 0x07, 0xF0,
|
||||
0x7F, 0xFF, 0xFF, 0xE0, 0xFE, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x41, 0x04,
|
||||
0x00, 0x60, 0x02, 0x08, 0x20, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x50, 0x03, 0xFC, 0x10, 0x40,
|
||||
0x06, 0x00, 0x20, 0x83, 0xFC, 0x00, 0xA0, 0x00, 0x00, 0x09, 0x0F, 0xC0, 0x00, 0xF8, 0x00,
|
||||
0x00, 0x01, 0xF0, 0x00, 0x3F, 0x09, 0x00, 0x00, 0x01, 0x1F, 0x05, 0x09, 0x00, 0x0F, 0x88,
|
||||
0x00, 0x00, 0x20, 0x05, 0x0A, 0xFF, 0xF0, 0x40, 0x00, 0x04, 0x78, 0x05, 0x09, 0x00, 0x01,
|
||||
0xE2, 0x00, 0x00, 0x9C, 0x05, 0x0A, 0x00, 0x03, 0x90, 0x00, 0x13, 0x05, 0x0B, 0x00, 0x0C,
|
||||
0x80, 0x03, 0xE0, 0x05, 0x0B, 0x00, 0x7C, 0x00, 0x38, 0x05, 0x05, 0x00, 0xC6, 0xD8, 0x05,
|
||||
0x04, 0x00, 0x01, 0xC0, 0x07, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x0D, 0x60, 0x00, 0x00, 0x00,
|
||||
0x0E, 0x00, 0x0E, 0x00, 0x60, 0x01, 0xFF, 0x00, 0x00, 0x00, 0xD6, 0xD8, 0x00, 0x00, 0x01,
|
||||
0xF0, 0x00, 0x60, 0x0C, 0x00, 0x18, 0x30, 0x00, 0x00, 0x0D, 0x6D, 0x80, 0x00, 0x00, 0x31,
|
||||
0x80, 0x03, 0x01, 0xC0, 0x01, 0x83, 0x00, 0x00, 0x00, 0x6C, 0xD8, 0x00, 0x00, 0x06, 0x0C,
|
||||
0x00, 0x38, 0x18, 0x00, 0x19, 0x30, 0x05, 0x07, 0x00, 0xCA, 0x60, 0x01, 0x81, 0x00, 0x01,
|
||||
0x93, 0x05, 0x07, 0x00, 0x0C, 0x46, 0x00, 0x0C, 0x30, 0x00, 0x19, 0x30, 0x05, 0x07, 0x00,
|
||||
0xCA, 0x60, 0x00, 0xC2, 0x00, 0xFF, 0x83, 0xFE, 0x05, 0x05, 0x00, 0x07, 0x06, 0x0C, 0x1C,
|
||||
0x04, 0x60, 0x0F, 0xF8, 0x3F, 0xE0, 0x05, 0x05, 0x00, 0xF8, 0x31, 0x83, 0xE0, 0x64, 0x00,
|
||||
0xC0, 0x00, 0x06, 0x00, 0x0F, 0x0F, 0x0F, 0x00, 0x18, 0xC1, 0xF0, 0x63, 0x02, 0x40, 0x0C,
|
||||
0x00, 0x00, 0x60, 0x01, 0x99, 0x99, 0x98, 0x03, 0x06, 0x0E, 0x0C, 0x98, 0x2C, 0x00, 0xCE,
|
||||
0x00, 0xE6, 0x00, 0x10, 0x90, 0x90, 0x80, 0x65, 0x30, 0x01, 0x94, 0xC3, 0x80, 0x0C, 0x00,
|
||||
0x00, 0x60, 0x01, 0x09, 0x09, 0x08, 0x06, 0x73, 0x00, 0x19, 0xCC, 0x18, 0x00, 0xC0, 0x00,
|
||||
0x06, 0x00, 0x19, 0x99, 0x99, 0x80, 0x61, 0x30, 0x01, 0x94, 0xC1, 0x80, 0x0F, 0xF8, 0x3F,
|
||||
0xE0, 0x00, 0xF0, 0xF0, 0xF0, 0x03, 0x26, 0x0E, 0x0C, 0x18, 0x18, 0x00, 0xFF, 0x83, 0xFE,
|
||||
0x05, 0x05, 0x00, 0x18, 0xC1, 0xF0, 0x63, 0x01, 0x80, 0x00, 0x19, 0x30, 0x05, 0x06, 0x00,
|
||||
0xF8, 0x31, 0x83, 0xE0, 0x18, 0x00, 0x01, 0x93, 0x05, 0x06, 0x00, 0x07, 0x06, 0x8C, 0x1C,
|
||||
0x01, 0x80, 0x00, 0x19, 0x30, 0x05, 0x07, 0x00, 0xC8, 0x60, 0x00, 0x18, 0x00, 0x01, 0x83,
|
||||
0x05, 0x07, 0x00, 0x0C, 0xC6, 0x00, 0x01, 0x80, 0x00, 0x18, 0x30, 0x05, 0x07, 0x00, 0xCA,
|
||||
0x60, 0x00, 0x1C, 0x00, 0x01, 0xFF, 0x05, 0x07, 0x00, 0x06, 0x6C, 0x00, 0x03, 0x40, 0x00,
|
||||
0x1F, 0xF0, 0x05, 0x07, 0x00, 0x31, 0x80, 0x00, 0x24, 0x05, 0x0A, 0x00, 0x01, 0xF0, 0x00,
|
||||
0x02, 0x60, 0x05, 0x0A, 0x00, 0x0E, 0x00, 0x00, 0x62, 0x05, 0x0D, 0x00, 0x04, 0x20, 0x05,
|
||||
0x0D, 0x00, 0x43, 0x05, 0x0D, 0x00, 0x0C, 0x10, 0x05, 0x0D, 0x00, 0x81, 0x80, 0x05, 0x0C,
|
||||
0x00, 0x18, 0x0C, 0x05, 0x0C, 0x00, 0x03, 0x00, 0x60, 0x05, 0x0C, 0x00, 0x60, 0x03, 0x05,
|
||||
0x0C, 0x00, 0x0C, 0x00, 0x18, 0x05, 0x0B, 0x00, 0x01, 0x80, 0x00, 0xE0, 0x05, 0x0B, 0x00,
|
||||
0x70, 0x00, 0x03, 0x05, 0x0B, 0x00, 0x0C, 0x00, 0x00, 0x1C, 0x05, 0x0A, 0x00, 0x03, 0x80,
|
||||
0x00, 0x00, 0x78, 0x05, 0x09, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x00, 0x05, 0x0A, 0xFF, 0xF0,
|
||||
0x00, 0x00}};
|
||||
const image_t img_cc_Main = { 116, 53, true, 542, 0x05, { // orig:769, comp:29.52%
|
||||
0x00, 0x00, 0x00, 0x7F, 0xC0, 0x05, 0x05, 0x00, 0x3F, 0xE0, 0x05, 0x04, 0x00, 0x01, 0xF8, 0x04,
|
||||
0x0F, 0x80, 0x00, 0x00, 0x1F, 0x02, 0x01, 0xF8, 0x05, 0x04, 0x00, 0x60, 0x00, 0x41, 0x04, 0x00,
|
||||
0x60, 0x02, 0x08, 0x20, 0x00, 0x60, 0x00, 0x00, 0x00, 0x08, 0x00, 0x07, 0xF0, 0x7F, 0xFF, 0xFF,
|
||||
0xE0, 0xFE, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x41, 0x04, 0x00, 0x60, 0x02, 0x08,
|
||||
0x20, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x50, 0x03, 0xFC, 0x10, 0x40, 0x06, 0x00, 0x20, 0x83, 0xFC,
|
||||
0x00, 0xA0, 0x00, 0x00, 0x09, 0x0F, 0xC0, 0x00, 0xF8, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x3F, 0x09,
|
||||
0x00, 0x00, 0x01, 0x1F, 0x05, 0x09, 0x00, 0x0F, 0x88, 0x00, 0x00, 0x20, 0x05, 0x0A, 0xFF, 0xF0,
|
||||
0x40, 0x00, 0x04, 0x78, 0x05, 0x09, 0x00, 0x01, 0xE2, 0x00, 0x00, 0x9C, 0x05, 0x0A, 0x00, 0x03,
|
||||
0x90, 0x00, 0x13, 0x05, 0x0B, 0x00, 0x0C, 0x80, 0x03, 0xE0, 0x05, 0x0B, 0x00, 0x7C, 0x00, 0x38,
|
||||
0x05, 0x05, 0x00, 0xC6, 0xD8, 0x05, 0x04, 0x00, 0x01, 0xC0, 0x07, 0x00, 0x1F, 0xF0, 0x00, 0x00,
|
||||
0x0D, 0x60, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x60, 0x01, 0xFF, 0x00, 0x00, 0x00, 0xD6,
|
||||
0xD8, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x60, 0x0C, 0x00, 0x18, 0x30, 0x00, 0x00, 0x0D, 0x6D, 0x80,
|
||||
0x00, 0x00, 0x31, 0x80, 0x03, 0x01, 0xC0, 0x01, 0x83, 0x00, 0x00, 0x00, 0x6C, 0xD8, 0x00, 0x00,
|
||||
0x06, 0x0C, 0x00, 0x38, 0x18, 0x00, 0x19, 0x30, 0x05, 0x07, 0x00, 0xCA, 0x60, 0x01, 0x81, 0x00,
|
||||
0x01, 0x93, 0x05, 0x07, 0x00, 0x0C, 0x46, 0x00, 0x0C, 0x30, 0x00, 0x19, 0x30, 0x05, 0x07, 0x00,
|
||||
0xCA, 0x60, 0x00, 0xC2, 0x00, 0xFF, 0x83, 0xFE, 0x05, 0x05, 0x00, 0x07, 0x06, 0x0C, 0x1C, 0x04,
|
||||
0x60, 0x0F, 0xF8, 0x3F, 0xE0, 0x05, 0x05, 0x00, 0xF8, 0x31, 0x83, 0xE0, 0x64, 0x00, 0xC0, 0x00,
|
||||
0x06, 0x00, 0x0F, 0x0F, 0x0F, 0x00, 0x18, 0xC1, 0xF0, 0x63, 0x02, 0x40, 0x0C, 0x00, 0x00, 0x60,
|
||||
0x01, 0x99, 0x99, 0x98, 0x03, 0x06, 0x0E, 0x0C, 0x98, 0x2C, 0x00, 0xCE, 0x00, 0xE6, 0x00, 0x10,
|
||||
0x90, 0x90, 0x80, 0x65, 0x30, 0x01, 0x94, 0xC3, 0x80, 0x0C, 0x00, 0x00, 0x60, 0x01, 0x09, 0x09,
|
||||
0x08, 0x06, 0x73, 0x00, 0x19, 0xCC, 0x18, 0x00, 0xC0, 0x00, 0x06, 0x00, 0x19, 0x99, 0x99, 0x80,
|
||||
0x61, 0x30, 0x01, 0x94, 0xC1, 0x80, 0x0F, 0xF8, 0x3F, 0xE0, 0x00, 0xF0, 0xF0, 0xF0, 0x03, 0x26,
|
||||
0x0E, 0x0C, 0x18, 0x18, 0x00, 0xFF, 0x83, 0xFE, 0x05, 0x05, 0x00, 0x18, 0xC1, 0xF0, 0x63, 0x01,
|
||||
0x80, 0x00, 0x19, 0x30, 0x05, 0x06, 0x00, 0xF8, 0x31, 0x83, 0xE0, 0x18, 0x00, 0x01, 0x93, 0x05,
|
||||
0x06, 0x00, 0x07, 0x06, 0x8C, 0x1C, 0x01, 0x80, 0x00, 0x19, 0x30, 0x05, 0x07, 0x00, 0xC8, 0x60,
|
||||
0x00, 0x18, 0x00, 0x01, 0x83, 0x05, 0x07, 0x00, 0x0C, 0xC6, 0x00, 0x01, 0x80, 0x00, 0x18, 0x30,
|
||||
0x05, 0x07, 0x00, 0xCA, 0x60, 0x00, 0x1C, 0x00, 0x01, 0xFF, 0x05, 0x07, 0x00, 0x06, 0x6C, 0x00,
|
||||
0x03, 0x40, 0x00, 0x1F, 0xF0, 0x05, 0x07, 0x00, 0x31, 0x80, 0x00, 0x24, 0x05, 0x0A, 0x00, 0x01,
|
||||
0xF0, 0x00, 0x02, 0x60, 0x05, 0x0A, 0x00, 0x0E, 0x00, 0x00, 0x62, 0x05, 0x0D, 0x00, 0x04, 0x20,
|
||||
0x05, 0x0D, 0x00, 0x43, 0x05, 0x0D, 0x00, 0x0C, 0x10, 0x05, 0x0D, 0x00, 0x81, 0x80, 0x05, 0x0C,
|
||||
0x00, 0x18, 0x0C, 0x05, 0x0C, 0x00, 0x03, 0x00, 0x60, 0x05, 0x0C, 0x00, 0x60, 0x03, 0x05, 0x0C,
|
||||
0x00, 0x0C, 0x00, 0x18, 0x05, 0x0B, 0x00, 0x01, 0x80, 0x00, 0xE0, 0x05, 0x0B, 0x00, 0x70, 0x00,
|
||||
0x03, 0x05, 0x0B, 0x00, 0x0C, 0x00, 0x00, 0x1C, 0x05, 0x0A, 0x00, 0x03, 0x80, 0x00, 0x00, 0x78,
|
||||
0x05, 0x09, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x00, 0x05, 0x0A, 0xFF, 0xF0, 0x00, 0x00
|
||||
}};
|
||||
|
||||
@@ -8,4 +8,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_cc_btn_A1 = {7, 7, false, 7, 0, {0xFF, 0xDF, 0x5E, 0x3D, 0x7F, 0xFF, 0x80}};
|
||||
const image_t img_cc_btn_A1 = { 7, 7, false, 7, 0, {
|
||||
0xFF, 0xDF, 0x5E, 0x3D, 0x7F, 0xFF, 0x80
|
||||
}};
|
||||
|
||||
@@ -8,4 +8,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_cc_btn_B1 = {7, 7, false, 7, 0, {0xFF, 0xBF, 0x7E, 0x7D, 0x7C, 0xFF, 0x80}};
|
||||
const image_t img_cc_btn_B1 = { 7, 7, false, 7, 0, {
|
||||
0xFF, 0xBF, 0x7E, 0x7D, 0x7C, 0xFF, 0x80
|
||||
}};
|
||||
|
||||
@@ -8,4 +8,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_cc_btn_X1 = {7, 7, false, 7, 0, {0xFF, 0xFF, 0x5F, 0x7D, 0x7F, 0xFF, 0x80}};
|
||||
const image_t img_cc_btn_X1 = { 7, 7, false, 7, 0, {
|
||||
0xFF, 0xFF, 0x5F, 0x7D, 0x7F, 0xFF, 0x80
|
||||
}};
|
||||
|
||||
@@ -8,4 +8,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_cc_btn_Y1 = {7, 7, false, 7, 0, {0xFF, 0xFF, 0x5E, 0x3F, 0x7D, 0xFF, 0x80}};
|
||||
const image_t img_cc_btn_Y1 = { 7, 7, false, 7, 0, {
|
||||
0xFF, 0xFF, 0x5E, 0x3F, 0x7D, 0xFF, 0x80
|
||||
}};
|
||||
|
||||
@@ -6,4 +6,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_cc_pad_LR1 = {7, 5, false, 5, 0, {0xFF, 0xFF, 0x1F, 0xFF, 0xE0}};
|
||||
const image_t img_cc_pad_LR1 = { 7, 5, false, 5, 0, {
|
||||
0xFF, 0xFF, 0x1F, 0xFF, 0xE0
|
||||
}};
|
||||
|
||||
@@ -8,4 +8,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_cc_pad_UD1 = {5, 7, false, 5, 0, {0xFF, 0xF7, 0xBD, 0xFF, 0xE0}};
|
||||
const image_t img_cc_pad_UD1 = { 5, 7, false, 5, 0, {
|
||||
0xFF, 0xF7, 0xBD, 0xFF, 0xE0
|
||||
}};
|
||||
|
||||
@@ -7,10 +7,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_cc_trg_L1 = {
|
||||
17,
|
||||
6,
|
||||
false,
|
||||
13,
|
||||
0,
|
||||
{0x1F, 0xC9, 0x34, 0x92, 0x64, 0x92, 0x54, 0x92, 0x44, 0x93, 0xFC, 0xFE, 0x00}};
|
||||
const image_t img_cc_trg_L1 = { 17, 6, false, 13, 0, {
|
||||
0x1F, 0xC9, 0x34, 0x92, 0x64, 0x92, 0x54, 0x92, 0x44, 0x93, 0xFC, 0xFE, 0x00
|
||||
}};
|
||||
|
||||
@@ -7,22 +7,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_cc_trg_L2 = {
|
||||
17,
|
||||
6,
|
||||
true,
|
||||
12,
|
||||
0x01,
|
||||
{// orig:13, comp:7.69%
|
||||
0x1F,
|
||||
0xD5,
|
||||
0x35,
|
||||
0x55,
|
||||
0x75,
|
||||
0x01,
|
||||
0x04,
|
||||
0x55,
|
||||
0x57,
|
||||
0xFD,
|
||||
0x7E,
|
||||
0x00}};
|
||||
const image_t img_cc_trg_L2 = { 17, 6, true, 12, 0x01, { // orig:13, comp:7.69%
|
||||
0x1F, 0xD5, 0x35, 0x55, 0x75, 0x01, 0x04, 0x55, 0x57, 0xFD, 0x7E, 0x00
|
||||
}};
|
||||
|
||||
@@ -7,10 +7,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_cc_trg_L3 = {
|
||||
17,
|
||||
6,
|
||||
false,
|
||||
13,
|
||||
0,
|
||||
{0x1F, 0xB6, 0xBB, 0x6D, 0xBB, 0x6D, 0xBB, 0x6D, 0xBB, 0x6F, 0xFB, 0x7E, 0x00}};
|
||||
const image_t img_cc_trg_L3 = { 17, 6, false, 13, 0, {
|
||||
0x1F, 0xB6, 0xBB, 0x6D, 0xBB, 0x6D, 0xBB, 0x6D, 0xBB, 0x6F, 0xFB, 0x7E, 0x00
|
||||
}};
|
||||
|
||||
@@ -7,18 +7,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_cc_trg_L4 = {
|
||||
17,
|
||||
6,
|
||||
true,
|
||||
8,
|
||||
0x01,
|
||||
{// orig:13, comp:38.46%
|
||||
0x1F,
|
||||
0xFF,
|
||||
0xBF,
|
||||
0x01,
|
||||
0x08,
|
||||
0xFF,
|
||||
0xFE,
|
||||
0x00}};
|
||||
const image_t img_cc_trg_L4 = { 17, 6, true, 8, 0x01, { // orig:13, comp:38.46%
|
||||
0x1F, 0xFF, 0xBF, 0x01, 0x08, 0xFF, 0xFE, 0x00
|
||||
}};
|
||||
|
||||
@@ -7,10 +7,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_cc_trg_R1 = {
|
||||
17,
|
||||
6,
|
||||
false,
|
||||
13,
|
||||
0,
|
||||
{0x49, 0xFC, 0x49, 0x25, 0x92, 0x49, 0x24, 0x92, 0x5F, 0xE4, 0x90, 0x0F, 0xE4}};
|
||||
const image_t img_cc_trg_R1 = { 17, 6, false, 13, 0, {
|
||||
0x49, 0xFC, 0x49, 0x25, 0x92, 0x49, 0x24, 0x92, 0x5F, 0xE4, 0x90, 0x0F, 0xE4
|
||||
}};
|
||||
|
||||
@@ -7,10 +7,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_cc_trg_R2 = {
|
||||
17,
|
||||
6,
|
||||
false,
|
||||
13,
|
||||
0,
|
||||
{0x55, 0xFC, 0x55, 0x55, 0x95, 0x55, 0x75, 0x55, 0x5F, 0xF5, 0x50, 0x0F, 0xD4}};
|
||||
const image_t img_cc_trg_R2 = { 17, 6, false, 13, 0, {
|
||||
0x55, 0xFC, 0x55, 0x55, 0x95, 0x55, 0x75, 0x55, 0x5F, 0xF5, 0x50, 0x0F, 0xD4
|
||||
}};
|
||||
|
||||
@@ -7,10 +7,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_cc_trg_R3 = {
|
||||
17,
|
||||
6,
|
||||
false,
|
||||
13,
|
||||
0,
|
||||
{0xB6, 0xFC, 0x36, 0xDB, 0xAD, 0xB6, 0xFB, 0x6D, 0xBF, 0xFB, 0x68, 0x0F, 0xD8}};
|
||||
const image_t img_cc_trg_R3 = { 17, 6, false, 13, 0, {
|
||||
0xB6, 0xFC, 0x36, 0xDB, 0xAD, 0xB6, 0xFB, 0x6D, 0xBF, 0xFB, 0x68, 0x0F, 0xD8
|
||||
}};
|
||||
|
||||
@@ -7,21 +7,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_cc_trg_R4 = {
|
||||
17,
|
||||
6,
|
||||
true,
|
||||
11,
|
||||
0x00,
|
||||
{// orig:13, comp:15.38%
|
||||
0xFF,
|
||||
0xFC,
|
||||
0x7F,
|
||||
0xFF,
|
||||
0xBF,
|
||||
0x00,
|
||||
0x05,
|
||||
0xFF,
|
||||
0xF8,
|
||||
0x0F,
|
||||
0xFC}};
|
||||
const image_t img_cc_trg_R4 = { 17, 6, true, 11, 0x00, { // orig:13, comp:15.38%
|
||||
0xFF, 0xFC, 0x7F, 0xFF, 0xBF, 0x00, 0x05, 0xFF, 0xF8, 0x0F, 0xFC
|
||||
}};
|
||||
|
||||
@@ -41,49 +41,41 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_csLogo_FULL = {
|
||||
124,
|
||||
40,
|
||||
true,
|
||||
571,
|
||||
0x0B,
|
||||
{// orig:620, comp:7.90%
|
||||
0x3F, 0xFF, 0xFE, 0x10, 0x43, 0xF8, 0x7F, 0x0F, 0xE1, 0xFC, 0x0B, 0x05, 0x00, 0x03, 0xFF,
|
||||
0xFF, 0xE3, 0x8E, 0x3F, 0x87, 0xF0, 0xFE, 0x1F, 0xC0, 0x0B, 0x05, 0x00, 0xFC, 0x00, 0x07,
|
||||
0x38, 0xE6, 0x1C, 0xE3, 0x80, 0x73, 0x8E, 0x03, 0xBB, 0x80, 0x00, 0x00, 0x0F, 0xC0, 0x00,
|
||||
0x52, 0x8A, 0x71, 0xCE, 0x39, 0xC7, 0x38, 0xA0, 0x22, 0x10, 0x00, 0x00, 0x00, 0xFC, 0x00,
|
||||
0x05, 0x28, 0xA7, 0x14, 0xA2, 0x9C, 0x52, 0x8A, 0x03, 0x39, 0x00, 0x00, 0x00, 0x0C, 0xC0,
|
||||
0x00, 0x52, 0x8A, 0x51, 0x4A, 0x29, 0x45, 0x28, 0xA0, 0x20, 0x90, 0x00, 0x00, 0x00, 0xFC,
|
||||
0x00, 0x07, 0x28, 0xA5, 0x14, 0xA2, 0x94, 0x52, 0x8E, 0x03, 0xB9, 0x40, 0x00, 0x00, 0x0F,
|
||||
0xC0, 0x00, 0x02, 0x8A, 0x51, 0xCA, 0xA9, 0x47, 0x28, 0x0B, 0x06, 0x00, 0xCC, 0x00, 0x00,
|
||||
0x38, 0xE5, 0xF0, 0xA2, 0x97, 0xC2, 0x80, 0x06, 0xEE, 0x80, 0x00, 0x00, 0x0E, 0xC3, 0x00,
|
||||
0x01, 0xFC, 0x5F, 0x0A, 0x29, 0x7C, 0x2B, 0xC0, 0x2A, 0xAA, 0x00, 0x00, 0x00, 0xDC, 0x30,
|
||||
0x00, 0x0D, 0x85, 0x1C, 0xAA, 0x94, 0xE2, 0xBE, 0x02, 0xEE, 0xE0, 0x00, 0x00, 0x0E, 0xC0,
|
||||
0x30, 0x00, 0x50, 0x51, 0x4A, 0x29, 0x4A, 0x28, 0xA0, 0x22, 0xA2, 0x00, 0x00, 0x00, 0xDC,
|
||||
0x04, 0x80, 0x05, 0x05, 0x14, 0xA2, 0x94, 0xA2, 0x8A, 0x07, 0x2E, 0x20, 0x00, 0x08, 0x0E,
|
||||
0xC0, 0x48, 0x00, 0x50, 0x51, 0x4A, 0x29, 0x4A, 0x38, 0xA0, 0x00, 0x00, 0x00, 0x01, 0x40,
|
||||
0xDC, 0x03, 0x00, 0x05, 0x07, 0x1C, 0xE3, 0x94, 0xA3, 0x8A, 0x0B, 0x04, 0x00, 0xE2, 0x0C,
|
||||
0xC0, 0x00, 0x00, 0x70, 0x71, 0xCE, 0x39, 0x4A, 0x30, 0xE0, 0x00, 0x00, 0x00, 0x0C, 0x90,
|
||||
0xCC, 0x00, 0x00, 0x07, 0x03, 0xF8, 0x7F, 0x1C, 0xE1, 0xFC, 0x0B, 0x04, 0x00, 0x94, 0x8C,
|
||||
0xC0, 0x00, 0x00, 0xF8, 0x3F, 0x87, 0xF1, 0xC7, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x72, 0x24,
|
||||
0xCC, 0x0B, 0x0C, 0x00, 0x06, 0x15, 0x2C, 0xC0, 0x0B, 0x0C, 0x00, 0x48, 0x89, 0xCC, 0x00,
|
||||
0xFE, 0x10, 0x43, 0xF8, 0xFF, 0x8F, 0xE1, 0xFC, 0x3F, 0x80, 0x00, 0x39, 0x05, 0x3C, 0xC0,
|
||||
0x0F, 0xE3, 0x8E, 0x3F, 0x8F, 0xF8, 0xFE, 0x1F, 0xC3, 0xF8, 0x00, 0x03, 0x22, 0x27, 0xDC,
|
||||
0x01, 0x87, 0x38, 0xE6, 0x1C, 0xDD, 0x99, 0xF3, 0xFE, 0x61, 0xC0, 0x00, 0x21, 0x50, 0xFE,
|
||||
0xC0, 0x1C, 0x52, 0x8A, 0x71, 0x41, 0x41, 0xC0, 0x3A, 0xE7, 0x14, 0x00, 0x1C, 0x88, 0x9E,
|
||||
0xDC, 0x01, 0x45, 0x28, 0xA5, 0x14, 0x14, 0x14, 0x02, 0xAA, 0x51, 0x40, 0x01, 0x94, 0x13,
|
||||
0xEE, 0xC0, 0x14, 0x52, 0x8A, 0x51, 0x41, 0x41, 0x40, 0x2A, 0xA5, 0x14, 0x00, 0x12, 0x22,
|
||||
0x7F, 0xDC, 0x01, 0x47, 0x28, 0xA5, 0x1C, 0x14, 0x14, 0x02, 0xAA, 0x51, 0xC0, 0x0E, 0x05,
|
||||
0x0F, 0x3E, 0xC0, 0x1C, 0x02, 0x8A, 0x70, 0x01, 0x41, 0x4E, 0x2A, 0xA7, 0x00, 0x00, 0xC0,
|
||||
0x09, 0xF0, 0xCC, 0x00, 0xFC, 0x38, 0xE3, 0xF0, 0x14, 0x17, 0x82, 0xAA, 0x3F, 0x00, 0x09,
|
||||
0x01, 0x3F, 0x8F, 0xC0, 0x03, 0xE1, 0xFC, 0x0F, 0x81, 0x41, 0x78, 0x2A, 0xA0, 0xF8, 0x01,
|
||||
0x28, 0x27, 0x98, 0xFC, 0x00, 0x07, 0x0D, 0x80, 0x1C, 0x14, 0x14, 0xE2, 0xAA, 0x01, 0xC0,
|
||||
0x28, 0x40, 0xF8, 0x0C, 0xC0, 0x1C, 0x50, 0x50, 0x71, 0x41, 0x41, 0x40, 0x28, 0xA7, 0x14,
|
||||
0x03, 0x02, 0x9F, 0xC0, 0xFC, 0x01, 0x45, 0x05, 0x05, 0x14, 0x14, 0x14, 0x02, 0xAA, 0x51,
|
||||
0x40, 0x32, 0x13, 0xCC, 0x0F, 0xC1, 0x94, 0x50, 0x50, 0x51, 0x41, 0x41, 0x40, 0x28, 0xA5,
|
||||
0x14, 0x01, 0xF2, 0x7C, 0x00, 0xFC, 0x19, 0x47, 0x05, 0x05, 0x1C, 0x14, 0x1C, 0x02, 0x8A,
|
||||
0x51, 0xC0, 0x0E, 0x0F, 0xE0, 0x0F, 0xC1, 0x9C, 0x30, 0x70, 0x70, 0xC1, 0x41, 0x9F, 0x28,
|
||||
0xA7, 0x0C, 0x00, 0x61, 0xE6, 0x00, 0x3F, 0xF8, 0xFE, 0x07, 0x03, 0xF8, 0x1C, 0x0F, 0xE3,
|
||||
0x8E, 0x3F, 0x80, 0x03, 0xBE, 0x00, 0x03, 0xFF, 0x8F, 0xE0, 0xF8, 0x3F, 0x81, 0xC0, 0xFE,
|
||||
0x38, 0xE3, 0xF8, 0x00, 0x1F, 0xF0, 0x0B, 0x0E, 0x00, 0xF3, 0x0B, 0x0E, 0x00, 0x06, 0x00,
|
||||
0x00}};
|
||||
const image_t img_csLogo_FULL = { 124, 40, true, 571, 0x0B, { // orig:620, comp:7.90%
|
||||
0x3F, 0xFF, 0xFE, 0x10, 0x43, 0xF8, 0x7F, 0x0F, 0xE1, 0xFC, 0x0B, 0x05, 0x00, 0x03, 0xFF, 0xFF,
|
||||
0xE3, 0x8E, 0x3F, 0x87, 0xF0, 0xFE, 0x1F, 0xC0, 0x0B, 0x05, 0x00, 0xFC, 0x00, 0x07, 0x38, 0xE6,
|
||||
0x1C, 0xE3, 0x80, 0x73, 0x8E, 0x03, 0xBB, 0x80, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x52, 0x8A, 0x71,
|
||||
0xCE, 0x39, 0xC7, 0x38, 0xA0, 0x22, 0x10, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x05, 0x28, 0xA7, 0x14,
|
||||
0xA2, 0x9C, 0x52, 0x8A, 0x03, 0x39, 0x00, 0x00, 0x00, 0x0C, 0xC0, 0x00, 0x52, 0x8A, 0x51, 0x4A,
|
||||
0x29, 0x45, 0x28, 0xA0, 0x20, 0x90, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x07, 0x28, 0xA5, 0x14, 0xA2,
|
||||
0x94, 0x52, 0x8E, 0x03, 0xB9, 0x40, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x02, 0x8A, 0x51, 0xCA, 0xA9,
|
||||
0x47, 0x28, 0x0B, 0x06, 0x00, 0xCC, 0x00, 0x00, 0x38, 0xE5, 0xF0, 0xA2, 0x97, 0xC2, 0x80, 0x06,
|
||||
0xEE, 0x80, 0x00, 0x00, 0x0E, 0xC3, 0x00, 0x01, 0xFC, 0x5F, 0x0A, 0x29, 0x7C, 0x2B, 0xC0, 0x2A,
|
||||
0xAA, 0x00, 0x00, 0x00, 0xDC, 0x30, 0x00, 0x0D, 0x85, 0x1C, 0xAA, 0x94, 0xE2, 0xBE, 0x02, 0xEE,
|
||||
0xE0, 0x00, 0x00, 0x0E, 0xC0, 0x30, 0x00, 0x50, 0x51, 0x4A, 0x29, 0x4A, 0x28, 0xA0, 0x22, 0xA2,
|
||||
0x00, 0x00, 0x00, 0xDC, 0x04, 0x80, 0x05, 0x05, 0x14, 0xA2, 0x94, 0xA2, 0x8A, 0x07, 0x2E, 0x20,
|
||||
0x00, 0x08, 0x0E, 0xC0, 0x48, 0x00, 0x50, 0x51, 0x4A, 0x29, 0x4A, 0x38, 0xA0, 0x00, 0x00, 0x00,
|
||||
0x01, 0x40, 0xDC, 0x03, 0x00, 0x05, 0x07, 0x1C, 0xE3, 0x94, 0xA3, 0x8A, 0x0B, 0x04, 0x00, 0xE2,
|
||||
0x0C, 0xC0, 0x00, 0x00, 0x70, 0x71, 0xCE, 0x39, 0x4A, 0x30, 0xE0, 0x00, 0x00, 0x00, 0x0C, 0x90,
|
||||
0xCC, 0x00, 0x00, 0x07, 0x03, 0xF8, 0x7F, 0x1C, 0xE1, 0xFC, 0x0B, 0x04, 0x00, 0x94, 0x8C, 0xC0,
|
||||
0x00, 0x00, 0xF8, 0x3F, 0x87, 0xF1, 0xC7, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x72, 0x24, 0xCC, 0x0B,
|
||||
0x0C, 0x00, 0x06, 0x15, 0x2C, 0xC0, 0x0B, 0x0C, 0x00, 0x48, 0x89, 0xCC, 0x00, 0xFE, 0x10, 0x43,
|
||||
0xF8, 0xFF, 0x8F, 0xE1, 0xFC, 0x3F, 0x80, 0x00, 0x39, 0x05, 0x3C, 0xC0, 0x0F, 0xE3, 0x8E, 0x3F,
|
||||
0x8F, 0xF8, 0xFE, 0x1F, 0xC3, 0xF8, 0x00, 0x03, 0x22, 0x27, 0xDC, 0x01, 0x87, 0x38, 0xE6, 0x1C,
|
||||
0xDD, 0x99, 0xF3, 0xFE, 0x61, 0xC0, 0x00, 0x21, 0x50, 0xFE, 0xC0, 0x1C, 0x52, 0x8A, 0x71, 0x41,
|
||||
0x41, 0xC0, 0x3A, 0xE7, 0x14, 0x00, 0x1C, 0x88, 0x9E, 0xDC, 0x01, 0x45, 0x28, 0xA5, 0x14, 0x14,
|
||||
0x14, 0x02, 0xAA, 0x51, 0x40, 0x01, 0x94, 0x13, 0xEE, 0xC0, 0x14, 0x52, 0x8A, 0x51, 0x41, 0x41,
|
||||
0x40, 0x2A, 0xA5, 0x14, 0x00, 0x12, 0x22, 0x7F, 0xDC, 0x01, 0x47, 0x28, 0xA5, 0x1C, 0x14, 0x14,
|
||||
0x02, 0xAA, 0x51, 0xC0, 0x0E, 0x05, 0x0F, 0x3E, 0xC0, 0x1C, 0x02, 0x8A, 0x70, 0x01, 0x41, 0x4E,
|
||||
0x2A, 0xA7, 0x00, 0x00, 0xC0, 0x09, 0xF0, 0xCC, 0x00, 0xFC, 0x38, 0xE3, 0xF0, 0x14, 0x17, 0x82,
|
||||
0xAA, 0x3F, 0x00, 0x09, 0x01, 0x3F, 0x8F, 0xC0, 0x03, 0xE1, 0xFC, 0x0F, 0x81, 0x41, 0x78, 0x2A,
|
||||
0xA0, 0xF8, 0x01, 0x28, 0x27, 0x98, 0xFC, 0x00, 0x07, 0x0D, 0x80, 0x1C, 0x14, 0x14, 0xE2, 0xAA,
|
||||
0x01, 0xC0, 0x28, 0x40, 0xF8, 0x0C, 0xC0, 0x1C, 0x50, 0x50, 0x71, 0x41, 0x41, 0x40, 0x28, 0xA7,
|
||||
0x14, 0x03, 0x02, 0x9F, 0xC0, 0xFC, 0x01, 0x45, 0x05, 0x05, 0x14, 0x14, 0x14, 0x02, 0xAA, 0x51,
|
||||
0x40, 0x32, 0x13, 0xCC, 0x0F, 0xC1, 0x94, 0x50, 0x50, 0x51, 0x41, 0x41, 0x40, 0x28, 0xA5, 0x14,
|
||||
0x01, 0xF2, 0x7C, 0x00, 0xFC, 0x19, 0x47, 0x05, 0x05, 0x1C, 0x14, 0x1C, 0x02, 0x8A, 0x51, 0xC0,
|
||||
0x0E, 0x0F, 0xE0, 0x0F, 0xC1, 0x9C, 0x30, 0x70, 0x70, 0xC1, 0x41, 0x9F, 0x28, 0xA7, 0x0C, 0x00,
|
||||
0x61, 0xE6, 0x00, 0x3F, 0xF8, 0xFE, 0x07, 0x03, 0xF8, 0x1C, 0x0F, 0xE3, 0x8E, 0x3F, 0x80, 0x03,
|
||||
0xBE, 0x00, 0x03, 0xFF, 0x8F, 0xE0, 0xF8, 0x3F, 0x81, 0xC0, 0xFE, 0x38, 0xE3, 0xF8, 0x00, 0x1F,
|
||||
0xF0, 0x0B, 0x0E, 0x00, 0xF3, 0x0B, 0x0E, 0x00, 0x06, 0x00, 0x00
|
||||
}};
|
||||
|
||||
@@ -13,10 +13,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_csLogo_Small = {
|
||||
9,
|
||||
12,
|
||||
false,
|
||||
14,
|
||||
0,
|
||||
{0xFF, 0xFF, 0xF0, 0x78, 0x3D, 0x06, 0x3F, 0x13, 0x88, 0xC7, 0xE0, 0x7D, 0x3E, 0xF0}};
|
||||
const image_t img_csLogo_Small = { 9, 12, false, 14, 0, {
|
||||
0xFF, 0xFF, 0xF0, 0x78, 0x3D, 0x06, 0x3F, 0x13, 0x88, 0xC7, 0xE0, 0x7D, 0x3E, 0xF0
|
||||
}};
|
||||
|
||||
@@ -8,10 +8,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_ecp_SCL = {
|
||||
16,
|
||||
7,
|
||||
false,
|
||||
14,
|
||||
0,
|
||||
{0x3F, 0x8F, 0x3F, 0x8F, 0x31, 0x8C, 0x31, 0x8C, 0x31, 0x8C, 0xF1, 0xFC, 0xF1, 0xFC}};
|
||||
const image_t img_ecp_SCL = { 16, 7, false, 14, 0, {
|
||||
0x3F, 0x8F, 0x3F, 0x8F, 0x31, 0x8C, 0x31, 0x8C, 0x31, 0x8C, 0xF1, 0xFC, 0xF1, 0xFC
|
||||
}};
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_ecp_SDA = {17, 12, false, 26, 0, {0x10, 0x00, 0x18, 0x00, 0x18, 0x00, 0x1F,
|
||||
0xFC, 0x0F, 0xFE, 0x43, 0x00, 0x30, 0xC0,
|
||||
0x0C, 0x27, 0xFF, 0x03, 0xFF, 0x80, 0x01,
|
||||
0x80, 0x01, 0x80, 0x00, 0x80}};
|
||||
const image_t img_ecp_SDA = { 17, 12, false, 26, 0, {
|
||||
0x10, 0x00, 0x18, 0x00, 0x18, 0x00, 0x1F, 0xFC, 0x0F, 0xFE, 0x43, 0x00, 0x30, 0xC0, 0x0C, 0x27,
|
||||
0xFF, 0x03, 0xFF, 0x80, 0x01, 0x80, 0x01, 0x80, 0x00, 0x80
|
||||
}};
|
||||
|
||||
@@ -43,30 +43,24 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_ecp_port = {
|
||||
69,
|
||||
42,
|
||||
true,
|
||||
290,
|
||||
0x04,
|
||||
{// orig:363, comp:20.11%
|
||||
0x00, 0x2A, 0x04, 0x06, 0xAA, 0xA8, 0x02, 0x04, 0x07, 0xAA, 0x80, 0x2A, 0x04, 0x07, 0xAA,
|
||||
0x02, 0x04, 0x07, 0xAA, 0xA0, 0x2A, 0x04, 0x07, 0xAA, 0x82, 0x04, 0x07, 0xAA, 0xA8, 0x2A,
|
||||
0x04, 0x07, 0xAA, 0xA3, 0x04, 0x07, 0xFF, 0xAA, 0x1F, 0x04, 0x06, 0xFF, 0xFE, 0xA8, 0xC0,
|
||||
0x04, 0x06, 0x00, 0x6A, 0x86, 0x04, 0x06, 0x00, 0x03, 0xAA, 0x30, 0x04, 0x06, 0x00, 0x1A,
|
||||
0xA1, 0x80, 0x04, 0x06, 0x00, 0xEA, 0x8C, 0x04, 0x06, 0x00, 0x06, 0xA8, 0x61, 0x04, 0x05,
|
||||
0xFF, 0xFC, 0x3A, 0xA3, 0x0F, 0x04, 0x05, 0xFF, 0xE1, 0xAA, 0x18, 0x61, 0x83, 0x0C, 0x18,
|
||||
0x60, 0xC3, 0x0E, 0xA8, 0xC3, 0x0C, 0x18, 0x60, 0xC3, 0x06, 0x18, 0x6A, 0x86, 0x18, 0x7F,
|
||||
0xC3, 0xFE, 0x1F, 0xF0, 0xC3, 0xAA, 0x30, 0xC3, 0xFE, 0x1F, 0xF0, 0xFF, 0x86, 0x1A, 0xA1,
|
||||
0x86, 0x04, 0x05, 0x00, 0x30, 0xEA, 0xBC, 0x30, 0x04, 0x04, 0x00, 0x01, 0x86, 0xFB, 0xE1,
|
||||
0x80, 0x04, 0x04, 0x00, 0x0C, 0x3F, 0xFF, 0x0C, 0x04, 0x05, 0x00, 0x61, 0xBE, 0x78, 0x60,
|
||||
0x04, 0x04, 0x00, 0x03, 0x0F, 0xF8, 0xC3, 0x0F, 0xF8, 0x00, 0x03, 0xFE, 0x18, 0x6A, 0x86,
|
||||
0x18, 0x7F, 0xC0, 0x00, 0x1F, 0xF0, 0xC3, 0xAA, 0x30, 0xC3, 0x06, 0x1F, 0xF0, 0xC1, 0x86,
|
||||
0x1A, 0xA1, 0x86, 0x18, 0x30, 0x80, 0x86, 0x0C, 0x30, 0xEA, 0x8C, 0x3F, 0x04, 0x05, 0xFF,
|
||||
0x86, 0xA8, 0x61, 0x04, 0x05, 0xFF, 0xFC, 0x3A, 0xA3, 0x04, 0x06, 0x00, 0x01, 0xAA, 0x18,
|
||||
0x04, 0x06, 0x00, 0x0E, 0xA8, 0xC0, 0x04, 0x06, 0x00, 0x6A, 0x86, 0x00, 0x00, 0x7F, 0xFF,
|
||||
0xF0, 0x00, 0x03, 0xAA, 0x30, 0x00, 0x03, 0xFF, 0xFF, 0x80, 0x00, 0x1A, 0xA1, 0x80, 0x00,
|
||||
0x1A, 0xA0, 0x0C, 0x00, 0x00, 0xEA, 0x0C, 0x00, 0x00, 0xEA, 0x00, 0x60, 0x00, 0x06, 0xA0,
|
||||
0x60, 0x00, 0x06, 0xA0, 0x03, 0x00, 0x00, 0x3A, 0x03, 0x00, 0x00, 0x3A, 0x00, 0x18, 0x00,
|
||||
0x01, 0xA0, 0x1F, 0xFF, 0xFF, 0xA0, 0x00, 0xFF, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xFE, 0x00,
|
||||
0x07, 0xFF, 0xFF, 0xE0, 0x00}};
|
||||
const image_t img_ecp_port = { 69, 42, true, 290, 0x04, { // orig:363, comp:20.11%
|
||||
0x00, 0x2A, 0x04, 0x06, 0xAA, 0xA8, 0x02, 0x04, 0x07, 0xAA, 0x80, 0x2A, 0x04, 0x07, 0xAA, 0x02,
|
||||
0x04, 0x07, 0xAA, 0xA0, 0x2A, 0x04, 0x07, 0xAA, 0x82, 0x04, 0x07, 0xAA, 0xA8, 0x2A, 0x04, 0x07,
|
||||
0xAA, 0xA3, 0x04, 0x07, 0xFF, 0xAA, 0x1F, 0x04, 0x06, 0xFF, 0xFE, 0xA8, 0xC0, 0x04, 0x06, 0x00,
|
||||
0x6A, 0x86, 0x04, 0x06, 0x00, 0x03, 0xAA, 0x30, 0x04, 0x06, 0x00, 0x1A, 0xA1, 0x80, 0x04, 0x06,
|
||||
0x00, 0xEA, 0x8C, 0x04, 0x06, 0x00, 0x06, 0xA8, 0x61, 0x04, 0x05, 0xFF, 0xFC, 0x3A, 0xA3, 0x0F,
|
||||
0x04, 0x05, 0xFF, 0xE1, 0xAA, 0x18, 0x61, 0x83, 0x0C, 0x18, 0x60, 0xC3, 0x0E, 0xA8, 0xC3, 0x0C,
|
||||
0x18, 0x60, 0xC3, 0x06, 0x18, 0x6A, 0x86, 0x18, 0x7F, 0xC3, 0xFE, 0x1F, 0xF0, 0xC3, 0xAA, 0x30,
|
||||
0xC3, 0xFE, 0x1F, 0xF0, 0xFF, 0x86, 0x1A, 0xA1, 0x86, 0x04, 0x05, 0x00, 0x30, 0xEA, 0xBC, 0x30,
|
||||
0x04, 0x04, 0x00, 0x01, 0x86, 0xFB, 0xE1, 0x80, 0x04, 0x04, 0x00, 0x0C, 0x3F, 0xFF, 0x0C, 0x04,
|
||||
0x05, 0x00, 0x61, 0xBE, 0x78, 0x60, 0x04, 0x04, 0x00, 0x03, 0x0F, 0xF8, 0xC3, 0x0F, 0xF8, 0x00,
|
||||
0x03, 0xFE, 0x18, 0x6A, 0x86, 0x18, 0x7F, 0xC0, 0x00, 0x1F, 0xF0, 0xC3, 0xAA, 0x30, 0xC3, 0x06,
|
||||
0x1F, 0xF0, 0xC1, 0x86, 0x1A, 0xA1, 0x86, 0x18, 0x30, 0x80, 0x86, 0x0C, 0x30, 0xEA, 0x8C, 0x3F,
|
||||
0x04, 0x05, 0xFF, 0x86, 0xA8, 0x61, 0x04, 0x05, 0xFF, 0xFC, 0x3A, 0xA3, 0x04, 0x06, 0x00, 0x01,
|
||||
0xAA, 0x18, 0x04, 0x06, 0x00, 0x0E, 0xA8, 0xC0, 0x04, 0x06, 0x00, 0x6A, 0x86, 0x00, 0x00, 0x7F,
|
||||
0xFF, 0xF0, 0x00, 0x03, 0xAA, 0x30, 0x00, 0x03, 0xFF, 0xFF, 0x80, 0x00, 0x1A, 0xA1, 0x80, 0x00,
|
||||
0x1A, 0xA0, 0x0C, 0x00, 0x00, 0xEA, 0x0C, 0x00, 0x00, 0xEA, 0x00, 0x60, 0x00, 0x06, 0xA0, 0x60,
|
||||
0x00, 0x06, 0xA0, 0x03, 0x00, 0x00, 0x3A, 0x03, 0x00, 0x00, 0x3A, 0x00, 0x18, 0x00, 0x01, 0xA0,
|
||||
0x1F, 0xFF, 0xFF, 0xA0, 0x00, 0xFF, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xFE, 0x00, 0x07, 0xFF, 0xFF,
|
||||
0xE0, 0x00
|
||||
}};
|
||||
|
||||
@@ -10,5 +10,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_key_Back =
|
||||
{9, 9, false, 11, 0, {0x7F, 0x7F, 0xFB, 0xF8, 0x7E, 0xDF, 0xEF, 0xCF, 0xFF, 0x3F, 0x00}};
|
||||
const image_t img_key_Back = { 9, 9, false, 11, 0, {
|
||||
0x7F, 0x7F, 0xFB, 0xF8, 0x7E, 0xDF, 0xEF, 0xCF, 0xFF, 0x3F, 0x00
|
||||
}};
|
||||
|
||||
@@ -9,5 +9,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_key_D =
|
||||
{9, 8, false, 9, 0, {0x7F, 0x7F, 0xFF, 0xF8, 0x3E, 0x3F, 0xBF, 0xFE, 0xFE}};
|
||||
const image_t img_key_D = { 9, 8, false, 9, 0, {
|
||||
0x7F, 0x7F, 0xFF, 0xF8, 0x3E, 0x3F, 0xBF, 0xFE, 0xFE
|
||||
}};
|
||||
|
||||
@@ -10,5 +10,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_key_L =
|
||||
{8, 9, false, 9, 0, {0x7E, 0xFF, 0xF7, 0xE7, 0xC7, 0xE7, 0xF7, 0xFF, 0x7E}};
|
||||
const image_t img_key_L = { 8, 9, false, 9, 0, {
|
||||
0x7E, 0xFF, 0xF7, 0xE7, 0xC7, 0xE7, 0xF7, 0xFF, 0x7E
|
||||
}};
|
||||
|
||||
@@ -10,5 +10,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_key_OK =
|
||||
{9, 9, false, 11, 0, {0x7F, 0x7F, 0xF8, 0xF8, 0x3C, 0x1E, 0x0F, 0x8F, 0xFF, 0x3F, 0x00}};
|
||||
const image_t img_key_OK = { 9, 9, false, 11, 0, {
|
||||
0x7F, 0x7F, 0xF8, 0xF8, 0x3C, 0x1E, 0x0F, 0x8F, 0xFF, 0x3F, 0x00
|
||||
}};
|
||||
|
||||
@@ -10,5 +10,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_key_OKi =
|
||||
{9, 9, false, 11, 0, {0x7F, 0x60, 0xE7, 0x37, 0xDB, 0xED, 0xF6, 0x73, 0x83, 0x7F, 0x00}};
|
||||
const image_t img_key_OKi = { 9, 9, false, 11, 0, {
|
||||
0x7F, 0x60, 0xE7, 0x37, 0xDB, 0xED, 0xF6, 0x73, 0x83, 0x7F, 0x00
|
||||
}};
|
||||
|
||||
@@ -10,5 +10,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_key_R =
|
||||
{8, 9, false, 9, 0, {0x7E, 0xFF, 0xEF, 0xE7, 0xE3, 0xE7, 0xEF, 0xFF, 0x7E}};
|
||||
const image_t img_key_R = { 8, 9, false, 9, 0, {
|
||||
0x7E, 0xFF, 0xEF, 0xE7, 0xE3, 0xE7, 0xEF, 0xFF, 0x7E
|
||||
}};
|
||||
|
||||
@@ -9,5 +9,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_key_U =
|
||||
{9, 8, false, 9, 0, {0x7F, 0x7F, 0xFD, 0xFC, 0x7C, 0x1F, 0xFF, 0xFE, 0xFE}};
|
||||
const image_t img_key_U = { 9, 8, false, 9, 0, {
|
||||
0x7F, 0x7F, 0xFD, 0xFC, 0x7C, 0x1F, 0xFF, 0xFE, 0xFE
|
||||
}};
|
||||
|
||||
@@ -9,5 +9,6 @@
|
||||
|
||||
#include "images.h"
|
||||
|
||||
const image_t img_key_Ui =
|
||||
{9, 8, false, 9, 0, {0x7F, 0x60, 0xE2, 0x33, 0x9B, 0xEC, 0x07, 0x06, 0xFE}};
|
||||
const image_t img_key_Ui = { 9, 8, false, 9, 0, {
|
||||
0x7F, 0x60, 0xE2, 0x33, 0x9B, 0xEC, 0x07, 0x06, 0xFE
|
||||
}};
|
||||
|
||||
@@ -49,10 +49,9 @@ void furi_hal_i2c_release (FuriHalI2cBusHandle* handle)
|
||||
|
||||
#if ENABLE_WORKAROUND == 1
|
||||
//+============================================================================ ========================================
|
||||
static inline bool furi_hal_Wi2c_is_device_ready(
|
||||
FuriHalI2cBusHandle* const bus,
|
||||
const uint8_t addr,
|
||||
const uint32_t tmo) {
|
||||
static inline
|
||||
bool furi_hal_Wi2c_is_device_ready (FuriHalI2cBusHandle* const bus, const uint8_t addr, const uint32_t tmo)
|
||||
{
|
||||
furi_hal_i2c_acquire(bus);
|
||||
bool rv = furi_hal_i2c_is_device_ready(bus, addr, tmo);
|
||||
furi_hal_i2c_release(bus);
|
||||
@@ -60,12 +59,10 @@ static inline bool furi_hal_Wi2c_is_device_ready(
|
||||
}
|
||||
|
||||
//+============================================================================
|
||||
static inline bool furi_hal_Wi2c_tx(
|
||||
FuriHalI2cBusHandle* const bus,
|
||||
const uint8_t addr,
|
||||
const void* buf,
|
||||
const size_t len,
|
||||
const uint32_t tmo) {
|
||||
static inline
|
||||
bool furi_hal_Wi2c_tx ( FuriHalI2cBusHandle* const bus, const uint8_t addr,
|
||||
const void* buf, const size_t len, const uint32_t tmo )
|
||||
{
|
||||
furi_hal_i2c_acquire(bus);
|
||||
bool rv = furi_hal_i2c_tx(bus, addr, buf, len, tmo);
|
||||
furi_hal_i2c_release(bus);
|
||||
@@ -73,12 +70,10 @@ static inline bool furi_hal_Wi2c_tx(
|
||||
}
|
||||
|
||||
//+============================================================================
|
||||
static inline bool furi_hal_Wi2c_rx(
|
||||
FuriHalI2cBusHandle* const bus,
|
||||
const uint8_t addr,
|
||||
void* buf,
|
||||
const size_t len,
|
||||
const uint32_t tmo) {
|
||||
static inline
|
||||
bool furi_hal_Wi2c_rx ( FuriHalI2cBusHandle* const bus, const uint8_t addr,
|
||||
void* buf, const size_t len, const uint32_t tmo )
|
||||
{
|
||||
furi_hal_i2c_acquire(bus);
|
||||
bool rv = furi_hal_i2c_rx(bus, addr, buf, len, tmo);
|
||||
furi_hal_i2c_release(bus);
|
||||
@@ -86,14 +81,11 @@ static inline bool furi_hal_Wi2c_rx(
|
||||
}
|
||||
|
||||
//+============================================================================
|
||||
static inline bool furi_hal_Wi2c_trx(
|
||||
FuriHalI2cBusHandle* const bus,
|
||||
const uint8_t addr,
|
||||
const void* tx,
|
||||
const size_t txlen,
|
||||
void* rx,
|
||||
const size_t rxlen,
|
||||
const uint32_t tmo) {
|
||||
static inline
|
||||
bool furi_hal_Wi2c_trx ( FuriHalI2cBusHandle* const bus, const uint8_t addr,
|
||||
const void* tx, const size_t txlen,
|
||||
void* rx, const size_t rxlen, const uint32_t tmo )
|
||||
{
|
||||
bool rv = furi_hal_Wi2c_tx(bus, addr, tx, txlen, tmo);
|
||||
if (rv) rv = furi_hal_Wi2c_rx(bus, addr, rx, rxlen, tmo);
|
||||
return rv;
|
||||
@@ -111,15 +103,11 @@ static inline bool furi_hal_Wi2c_trx(
|
||||
// Some devices take a moment to respond to read requests
|
||||
// The puts a delay between the address being set and the data being read
|
||||
//
|
||||
static inline bool furi_hal_i2c_trxd(
|
||||
FuriHalI2cBusHandle* const bus,
|
||||
const uint8_t addr,
|
||||
const void* tx,
|
||||
const size_t txlen,
|
||||
void* rx,
|
||||
const size_t rxlen,
|
||||
const uint32_t tmo,
|
||||
const uint32_t us) {
|
||||
static inline
|
||||
bool furi_hal_i2c_trxd ( FuriHalI2cBusHandle* const bus, const uint8_t addr,
|
||||
const void* tx, const size_t txlen,
|
||||
void* rx, const size_t rxlen, const uint32_t tmo, const uint32_t us )
|
||||
{
|
||||
bool rv = furi_hal_i2c_tx(bus, addr, tx, txlen, tmo);
|
||||
if (rv) {
|
||||
furi_delay_us(us);
|
||||
|
||||
@@ -1,87 +0,0 @@
|
||||
//+============================================================================ ========================================
|
||||
// Select font
|
||||
// A full list of u8g2 fonts can be found here:
|
||||
// https://github.com/olikraus/u8g2/wiki/fntlistall
|
||||
// ...and here are the ones available in FZ (currently: all of them):
|
||||
// grep -P '.*u8g2.*\[[0-9]*\]' lib/u8g2/u8g2_fonts.c | sed 's/.*\(u8g2_.*\)\[.*/\1/'
|
||||
//
|
||||
#if 0 //! Extra fonts is just too memory hungry
|
||||
#include <u8g2.h>
|
||||
void setFont (Canvas* const canvas, const uint8_t* font)
|
||||
{
|
||||
u8g2_SetFontMode(&canvas->fb, 1); // no idea - but canvas.c does it <shrug>
|
||||
u8g2_SetFont(&canvas->fb, font);
|
||||
}
|
||||
#endif
|
||||
|
||||
litui : @BlueChip for posterity, the function to break at is flipper_application_spawn. At that point, you can set new breakpoints in your fap code and continue.
|
||||
|
||||
/*
|
||||
|
||||
This is wrong on quite a few levels!
|
||||
https://training.ti.com/introduction-i2c-reserved-addresses
|
||||
|
||||
void doit (void)
|
||||
{
|
||||
furi_hal_i2c_acquire(&furi_hal_i2c_handle_external);
|
||||
printf("Scanning external i2c on PC0(SCL)/PC1(SDA)\r\n"
|
||||
"Clock: 100khz, 7bit address\r\n"
|
||||
"\r\n");
|
||||
printf(" | 0 1 2 3 4 5 6 7 8 9 A B C D E F\r\n");
|
||||
printf("--+--------------------------------\r\n");
|
||||
for(uint8_t row = 0; row < 0x8; row++) {
|
||||
printf("%x | ", row);
|
||||
for(uint8_t column = 0; column <= 0xF; column++) {
|
||||
bool ret = furi_hal_i2c_is_device_ready(
|
||||
&furi_hal_i2c_handle_external, ((row << 4) + column) << 1, 2);
|
||||
printf("%c ", ret ? '#' : '-');
|
||||
}
|
||||
printf("\r\n");
|
||||
}
|
||||
furi_hal_i2c_release(&furi_hal_i2c_handle_external);
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
region locking : firmware/targets/f7/furi_hal/furi_hal_region.c
|
||||
|
||||
|
||||
# if 0 //! scrolling works beautifully, but the LCD refresh can't keep up :(
|
||||
// Waveform
|
||||
if (cnt) { // start
|
||||
for (int a = ACC_1; a < ACC_N; a++) {
|
||||
canvas_draw_dot(canvas, x,y[a]+v[a][idx]);
|
||||
for (int i = 1; i < aw -cnt; i++) {
|
||||
canvas_draw_line(canvas, x+i,y[a]+v[a][i-1] , x+i,y[a]+v[a][i]);
|
||||
}
|
||||
}
|
||||
} else { // scroll
|
||||
for (int a = ACC_1; a < ACC_N; a++) {
|
||||
for (int i = 0; i < aw; i++) {
|
||||
int off = (idx +i) %aw;
|
||||
int prev = off ? off-1 : aw-1;
|
||||
canvas_draw_line(canvas, x+i,y[a]+v[a][prev] , x+i,y[a]+v[a][off]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# else
|
||||
int end = idx ? idx : aw;
|
||||
for (int a = ACC_1; a < ACC_N; a++) {
|
||||
canvas_draw_dot(canvas, x,y[a]+v[a][idx]);
|
||||
if (state->apause) {
|
||||
for (int i = 1; i < end; i++)
|
||||
canvas_draw_line(canvas, x+i,y[a]+v[a][i-1] , x+i,y[a]+v[a][i]);
|
||||
} else {
|
||||
for (int i = 1; i < end; i++)
|
||||
canvas_draw_line(canvas, x+i,y[a]+v[a][i-1] , x+i,y[a]+v[a][i]);
|
||||
for (int i = end+10; i < aw -cnt; i++)
|
||||
canvas_draw_line(canvas, x+i,y[a]+v[a][i-1] , x+i,y[a]+v[a][i]);
|
||||
}
|
||||
}
|
||||
|
||||
// Wipe bar
|
||||
if (end < aw) canvas_draw_line(canvas, x+end,y[0], x+end,y[2]+ah-1);
|
||||
if (++end < aw) canvas_draw_line(canvas, x+end,y[0], x+end,y[2]+ah-1);
|
||||
if (++end < aw) canvas_draw_line(canvas, x+end,y[0], x+end,y[2]+ah-1);
|
||||
# endif
|
||||
@@ -44,7 +44,9 @@
|
||||
// OS Callback : Timer tick
|
||||
// We register this function to be called when the OS signals a timer 'tick' event
|
||||
//
|
||||
static void cbTimer(FuriMessageQueue* queue) {
|
||||
static
|
||||
void cbTimer (FuriMessageQueue* queue)
|
||||
{
|
||||
ENTER;
|
||||
furi_assert(queue);
|
||||
|
||||
@@ -59,7 +61,9 @@ static void cbTimer(FuriMessageQueue* queue) {
|
||||
// OS Callback : Keypress
|
||||
// We register this function to be called when the OS detects a keypress
|
||||
//
|
||||
static void cbInput(InputEvent* event, FuriMessageQueue* queue) {
|
||||
static
|
||||
void cbInput (InputEvent* event, FuriMessageQueue* queue)
|
||||
{
|
||||
ENTER;
|
||||
furi_assert(queue);
|
||||
furi_assert(event);
|
||||
@@ -75,7 +79,9 @@ static void cbInput(InputEvent* event, FuriMessageQueue* queue) {
|
||||
//+============================================================================
|
||||
// Show version number
|
||||
//
|
||||
static void showVer(Canvas* const canvas) {
|
||||
static
|
||||
void showVer (Canvas* const canvas)
|
||||
{
|
||||
show(canvas, 0,59, &img_3x5_v, SHOW_SET_BLK);
|
||||
show(canvas, 4,59, VER_MAJ, SHOW_SET_BLK);
|
||||
canvas_draw_frame(canvas, 8,62, 2,2);
|
||||
@@ -89,7 +95,9 @@ static void showVer(Canvas* const canvas) {
|
||||
// We actually instruct the OS to perform this request, after we update the interface
|
||||
// I guess it's possible that this instruction may able be issued by other threads !?
|
||||
//
|
||||
static void cbDraw(Canvas* const canvas, void* ctx) {
|
||||
static
|
||||
void cbDraw (Canvas* const canvas, void* ctx)
|
||||
{
|
||||
ENTER;
|
||||
furi_assert(canvas);
|
||||
furi_assert(ctx);
|
||||
@@ -199,7 +207,9 @@ static void cbDraw(Canvas* const canvas, void* ctx) {
|
||||
//+============================================================================ ========================================
|
||||
// Initialise plugin state variables
|
||||
//
|
||||
static inline bool stateInit(state_t* const state) {
|
||||
static inline
|
||||
bool stateInit (state_t* const state)
|
||||
{
|
||||
ENTER;
|
||||
furi_assert(state);
|
||||
|
||||
@@ -260,7 +270,8 @@ static inline bool stateInit(state_t* const state) {
|
||||
//+============================================================================ ========================================
|
||||
// Enable/Disable scanning
|
||||
//
|
||||
void timerEn(state_t* state, bool on) {
|
||||
void timerEn (state_t* state, bool on)
|
||||
{
|
||||
ENTER;
|
||||
furi_assert(state);
|
||||
|
||||
@@ -300,7 +311,8 @@ void timerEn(state_t* state, bool on) {
|
||||
//+============================================================================ ========================================
|
||||
// Plugin entry point
|
||||
//
|
||||
int32_t wii_ec_anal(void) {
|
||||
int32_t wii_ec_anal (void)
|
||||
{
|
||||
ENTER;
|
||||
|
||||
// ===== Variables =====
|
||||
@@ -394,8 +406,7 @@ int32_t wii_ec_anal(void) {
|
||||
status = furi_message_queue_get(queue, &msg, tmo);
|
||||
|
||||
// Clear splash screen
|
||||
if((state->scene == SCENE_SPLASH) &&
|
||||
(state->scenePrev == SCENE_NONE) && // Initial splash
|
||||
if ( (state->scene == SCENE_SPLASH) && (state->scenePrev == SCENE_NONE) && // Initial splash
|
||||
( (status == FuriStatusErrorTimeout) || // timeout
|
||||
((msg.id == EVID_KEY) && (msg.input.type == InputTypeShort)) ) // or <any> key-short
|
||||
) {
|
||||
@@ -409,27 +420,13 @@ int32_t wii_ec_anal(void) {
|
||||
// Check for queue errors
|
||||
if (status != FuriStatusOk) {
|
||||
switch (status) {
|
||||
case FuriStatusErrorTimeout:
|
||||
DEBUG(wii_errs[DEBUG_QUEUE_TIMEOUT]);
|
||||
continue;
|
||||
case FuriStatusError:
|
||||
ERROR(wii_errs[(error = ERR_QUEUE_RTOS)]);
|
||||
goto bail;
|
||||
case FuriStatusErrorResource:
|
||||
ERROR(wii_errs[(error = ERR_QUEUE_RESOURCE)]);
|
||||
goto bail;
|
||||
case FuriStatusErrorParameter:
|
||||
ERROR(wii_errs[(error = ERR_QUEUE_BADPRM)]);
|
||||
goto bail;
|
||||
case FuriStatusErrorNoMemory:
|
||||
ERROR(wii_errs[(error = ERR_QUEUE_NOMEM)]);
|
||||
goto bail;
|
||||
case FuriStatusErrorISR:
|
||||
ERROR(wii_errs[(error = ERR_QUEUE_ISR)]);
|
||||
goto bail;
|
||||
default:
|
||||
ERROR(wii_errs[(error = ERR_QUEUE_UNK)]);
|
||||
goto bail;
|
||||
case FuriStatusErrorTimeout: DEBUG(wii_errs[DEBUG_QUEUE_TIMEOUT]); continue ;
|
||||
case FuriStatusError: ERROR(wii_errs[(error = ERR_QUEUE_RTOS)]); goto bail ;
|
||||
case FuriStatusErrorResource: ERROR(wii_errs[(error = ERR_QUEUE_RESOURCE)]); goto bail ;
|
||||
case FuriStatusErrorParameter: ERROR(wii_errs[(error = ERR_QUEUE_BADPRM)]); goto bail ;
|
||||
case FuriStatusErrorNoMemory: ERROR(wii_errs[(error = ERR_QUEUE_NOMEM)]); goto bail ;
|
||||
case FuriStatusErrorISR: ERROR(wii_errs[(error = ERR_QUEUE_ISR)]); goto bail ;
|
||||
default: ERROR(wii_errs[(error = ERR_QUEUE_UNK)]); goto bail ;
|
||||
}
|
||||
}
|
||||
// Read successful
|
||||
|
||||
@@ -8,7 +8,8 @@
|
||||
//----------------------------------------------------------------------------- ----------------------------------------
|
||||
// GUI scenes
|
||||
//
|
||||
typedef enum scene {
|
||||
typedef
|
||||
enum scene {
|
||||
SCENE_NONE = 0,
|
||||
SCENE_SPLASH = 1,
|
||||
SCENE_RIP = 2,
|
||||
@@ -19,7 +20,8 @@ typedef enum scene {
|
||||
SCENE_CLASSIC_N = 7,
|
||||
SCENE_NUNCHUCK = 8,
|
||||
SCENE_NUNCHUCK_ACC = 9,
|
||||
} scene_t;
|
||||
}
|
||||
scene_t;
|
||||
|
||||
//----------------------------------------------------------------------------- ----------------------------------------
|
||||
#include "wii_i2c.h"
|
||||
@@ -28,7 +30,8 @@ typedef enum scene {
|
||||
//----------------------------------------------------------------------------- ----------------------------------------
|
||||
// A list of event IDs handled by this plugin
|
||||
//
|
||||
typedef enum eventID {
|
||||
typedef
|
||||
enum eventID {
|
||||
EVID_NONE,
|
||||
EVID_UNKNOWN,
|
||||
|
||||
@@ -37,25 +40,29 @@ typedef enum eventID {
|
||||
EVID_KEY, // keypad
|
||||
EVID_TICK, // tick
|
||||
EVID_WIIEC, // wii extension controller
|
||||
} eventID_t;
|
||||
}
|
||||
eventID_t;
|
||||
|
||||
//----------------------------------------------------------------------------- ----------------------------------------
|
||||
// An item in the event message-queue
|
||||
//
|
||||
typedef struct eventMsg {
|
||||
typedef
|
||||
struct eventMsg {
|
||||
eventID_t id;
|
||||
union {
|
||||
InputEvent input; // --> applications/input/input.h
|
||||
wiiEcEvent_t wiiEc; // --> local
|
||||
};
|
||||
} eventMsg_t;
|
||||
}
|
||||
eventMsg_t;
|
||||
|
||||
//----------------------------------------------------------------------------- ----------------------------------------
|
||||
// State variables for this plugin
|
||||
// An instance of this is allocated on the heap, and the pointer is passed back to the OS
|
||||
// Access to this memory is controlled by mutex
|
||||
//
|
||||
typedef struct state {
|
||||
typedef
|
||||
struct state {
|
||||
bool run; // true : plugin is running
|
||||
|
||||
bool timerEn; // controller scanning enabled
|
||||
@@ -79,7 +86,8 @@ typedef struct state {
|
||||
NotificationApp* notify; // OS nitifcation queue (for patting the backlight watchdog timer)
|
||||
|
||||
wiiEC_t ec; // Extension Controller details
|
||||
} state_t;
|
||||
}
|
||||
state_t;
|
||||
|
||||
//============================================================================= ========================================
|
||||
// Function prototypes
|
||||
|
||||
@@ -8,43 +8,24 @@
|
||||
//+============================================================================ ========================================
|
||||
// Handle Wii Extension Controller events
|
||||
//
|
||||
bool evWiiEC(const eventMsg_t* const msg, state_t* const state) {
|
||||
bool evWiiEC (const eventMsg_t* const msg, state_t* const state)
|
||||
{
|
||||
bool redraw = false;
|
||||
|
||||
# if LOG_LEVEL >= 4
|
||||
{
|
||||
const char* s = NULL;
|
||||
switch (msg->wiiEc.type) {
|
||||
case WIIEC_NONE:
|
||||
s = "Error";
|
||||
break;
|
||||
case WIIEC_CONN:
|
||||
s = "Connect";
|
||||
break;
|
||||
case WIIEC_DISCONN:
|
||||
s = "Disconnect";
|
||||
break;
|
||||
case WIIEC_PRESS:
|
||||
s = "Press";
|
||||
break;
|
||||
case WIIEC_RELEASE:
|
||||
s = "Release";
|
||||
break;
|
||||
case WIIEC_ANALOG:
|
||||
s = "Analog";
|
||||
break;
|
||||
case WIIEC_ACCEL:
|
||||
s = "Accel";
|
||||
break;
|
||||
default:
|
||||
s = "Bug";
|
||||
break;
|
||||
case WIIEC_NONE: s = "Error"; break ;
|
||||
case WIIEC_CONN: s = "Connect"; break ;
|
||||
case WIIEC_DISCONN: s = "Disconnect"; break ;
|
||||
case WIIEC_PRESS: s = "Press"; break ;
|
||||
case WIIEC_RELEASE: s = "Release"; break ;
|
||||
case WIIEC_ANALOG: s = "Analog"; break ;
|
||||
case WIIEC_ACCEL: s = "Accel"; break ;
|
||||
default: s = "Bug"; break ;
|
||||
}
|
||||
INFO(
|
||||
"WIIP : %s '%c' = %d",
|
||||
s,
|
||||
(isprint((int)msg->wiiEc.in) ? msg->wiiEc.in : '_'),
|
||||
msg->wiiEc.val);
|
||||
INFO("WIIP : %s '%c' = %d", s, (isprint((int)msg->wiiEc.in) ? msg->wiiEc.in : '_'), msg->wiiEc.val);
|
||||
if ((msg->wiiEc.type == WIIEC_CONN) || (msg->wiiEc.type == WIIEC_DISCONN))
|
||||
INFO("...%d=\"%s\"", msg->wiiEc.val, ecId[msg->wiiEc.val].name);
|
||||
}
|
||||
@@ -61,9 +42,11 @@ bool evWiiEC(const eventMsg_t* const msg, state_t* const state) {
|
||||
#if 1 // Workaround for Classic Controller Pro, which shows 00's for Factory Calibration Data!?
|
||||
if (state->ec.pidx == PID_CLASSIC_PRO) {
|
||||
// Simulate a Long-OK keypress, to start Software Calibration mode
|
||||
eventMsg_t msg = {// .id = EVID_KEY,
|
||||
eventMsg_t msg = {
|
||||
// .id = EVID_KEY,
|
||||
.input.type = InputTypeLong,
|
||||
.input.key = InputKeyOk};
|
||||
.input.key = InputKeyOk
|
||||
};
|
||||
key_calib(&msg, state);
|
||||
}
|
||||
#endif
|
||||
@@ -84,8 +67,7 @@ bool evWiiEC(const eventMsg_t* const msg, state_t* const state) {
|
||||
state->pause = false;
|
||||
state->apause = !state->apause;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
default: break ;
|
||||
}
|
||||
|
||||
#if 1 //! factory calibration method not known for classic triggers - this will set the digital switch point
|
||||
|
||||
@@ -7,7 +7,9 @@
|
||||
//+============================================================================ ========================================
|
||||
// Stop Calibration mode
|
||||
//
|
||||
static void calStop(state_t* const state) {
|
||||
static
|
||||
void calStop (state_t* const state)
|
||||
{
|
||||
state->hold = 0; // stop calibration mode
|
||||
state->calib &= ~(CAL_RANGE | CAL_NOTJOY); // ...
|
||||
}
|
||||
@@ -15,7 +17,8 @@ static void calStop(state_t* const state) {
|
||||
//+============================================================================ ========================================
|
||||
// Change to another scene
|
||||
//
|
||||
void sceneSet(state_t* const state, const scene_t scene) {
|
||||
void sceneSet (state_t* const state, const scene_t scene)
|
||||
{
|
||||
calStop(state); // Stop software calibration
|
||||
state->scenePrev = state->scene; // Remember where we came from
|
||||
state->scene = scene; // Go to new scene
|
||||
@@ -25,7 +28,9 @@ void sceneSet(state_t* const state, const scene_t scene) {
|
||||
//+============================================================================ ========================================
|
||||
// Change to an easter egg scene
|
||||
//
|
||||
static void sceneSetEgg(state_t* const state, const scene_t scene) {
|
||||
static
|
||||
void sceneSetEgg (state_t* const state, const scene_t scene)
|
||||
{
|
||||
calStop(state); // Stop software calibration
|
||||
state->scenePegg = state->scene; // Remember where we came from
|
||||
state->scene = scene; // Go to new scene
|
||||
@@ -37,7 +42,8 @@ static void sceneSetEgg(state_t* const state, const scene_t scene) {
|
||||
// Enabling peak-hold on screen with no peak meters will have no effect
|
||||
// So, to avoid code duplication...
|
||||
//
|
||||
bool key_calib(const eventMsg_t* const msg, state_t* const state) {
|
||||
bool key_calib (const eventMsg_t* const msg, state_t* const state)
|
||||
{
|
||||
int used = false; // assume key is NOT-handled
|
||||
|
||||
switch (msg->input.type) {
|
||||
@@ -54,15 +60,12 @@ bool key_calib(const eventMsg_t* const msg, state_t* const state) {
|
||||
break;
|
||||
|
||||
case InputKeyOk: //# <O [ SHORT-OK ]
|
||||
if(state->calib & CAL_RANGE)
|
||||
calStop(state); // STOP softare calibration
|
||||
else
|
||||
ecCalibrate(&state->ec, CAL_CENTRE); // perform centre calibration
|
||||
if (state->calib & CAL_RANGE) calStop(state) ; // STOP softare calibration
|
||||
else ecCalibrate(&state->ec, CAL_CENTRE) ; // perform centre calibration
|
||||
used = true;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
default: break ;
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -76,13 +79,11 @@ bool key_calib(const eventMsg_t* const msg, state_t* const state) {
|
||||
used = true;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
default: break ;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
default: break ;
|
||||
}
|
||||
|
||||
return used;
|
||||
@@ -91,18 +92,22 @@ bool key_calib(const eventMsg_t* const msg, state_t* const state) {
|
||||
//+============================================================================ ========================================
|
||||
// WAIT screen
|
||||
//
|
||||
static inline bool wait_key(const eventMsg_t* const msg, state_t* const state) {
|
||||
static inline
|
||||
bool wait_key (const eventMsg_t* const msg, state_t* const state)
|
||||
{
|
||||
int used = false; // assume key is NOT-handled
|
||||
|
||||
if (msg->input.type == InputTypeShort) {
|
||||
switch (msg->input.key) {
|
||||
case InputKeyLeft: //# <L [ SHORT-LEFT ]
|
||||
sceneSet(state, SCENE_SPLASH);
|
||||
timerEn(state, false); // Stop the timer
|
||||
sceneSetEgg(state, SCENE_SPLASH);
|
||||
used = true;
|
||||
break;
|
||||
|
||||
case InputKeyUp: //# <U [ SHORT-UP ]
|
||||
sceneSet(state, SCENE_RIP);
|
||||
timerEn(state, false); // Stop the timer
|
||||
sceneSetEgg(state, SCENE_RIP);
|
||||
used = true;
|
||||
break;
|
||||
|
||||
@@ -111,8 +116,7 @@ static inline bool wait_key(const eventMsg_t* const msg, state_t* const state) {
|
||||
used = true;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
default: break ;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -122,15 +126,16 @@ static inline bool wait_key(const eventMsg_t* const msg, state_t* const state) {
|
||||
//+============================================================================ ========================================
|
||||
// DEBUG screen
|
||||
//
|
||||
static inline bool debug_key(const eventMsg_t* const msg, state_t* const state) {
|
||||
static inline
|
||||
bool debug_key (const eventMsg_t* const msg, state_t* const state)
|
||||
{
|
||||
int used = false; // assume key is NOT-handled
|
||||
|
||||
switch (msg->input.type) {
|
||||
case InputTypeShort: //# <! After InputTypeRelease within INPUT_LONG_PRESS interval
|
||||
switch (msg->input.key) {
|
||||
case InputKeyUp: { //# <U [ SHORT-UP ]
|
||||
bool init =
|
||||
ecInit(&state->ec, NULL); // Initialise the controller //! NULL = no encryption
|
||||
bool init = ecInit(&state->ec, NULL); // Initialise the controller //! NULL = no encryption
|
||||
(void)init; // in case INFO is optimised out
|
||||
INFO("%s : %s", __func__, (init ? "init OK" : "init fail"));
|
||||
used = true;
|
||||
@@ -139,15 +144,9 @@ static inline bool debug_key(const eventMsg_t* const msg, state_t* const state)
|
||||
|
||||
case InputKeyOk: //# <O [ SHORT-OK ]
|
||||
if (ecRead(&state->ec) == 0) { // Read the controller
|
||||
INFO(
|
||||
"%s : joy: {%02X,%02X,%02X,%02X,%02X,%02X}",
|
||||
__func__,
|
||||
state->ec.joy[0],
|
||||
state->ec.joy[1],
|
||||
state->ec.joy[2],
|
||||
state->ec.joy[3],
|
||||
state->ec.joy[4],
|
||||
state->ec.joy[5]);
|
||||
INFO( "%s : joy: {%02X,%02X,%02X,%02X,%02X,%02X}", __func__,
|
||||
state->ec.joy[0], state->ec.joy[1], state->ec.joy[2],
|
||||
state->ec.joy[3], state->ec.joy[4], state->ec.joy[5] );
|
||||
}
|
||||
used = true;
|
||||
break;
|
||||
@@ -163,13 +162,11 @@ static inline bool debug_key(const eventMsg_t* const msg, state_t* const state)
|
||||
used = true;
|
||||
break;
|
||||
|
||||
default:
|
||||
break; //# <?
|
||||
default: break ; //# <?
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
default: break ;
|
||||
}
|
||||
|
||||
return used;
|
||||
@@ -178,7 +175,9 @@ static inline bool debug_key(const eventMsg_t* const msg, state_t* const state)
|
||||
//+============================================================================ ========================================
|
||||
// SPLASH and RIP screen
|
||||
//
|
||||
static inline bool splash_key(const eventMsg_t* const msg, state_t* const state) {
|
||||
static inline
|
||||
bool splash_key (const eventMsg_t* const msg, state_t* const state)
|
||||
{
|
||||
// Back key on the initial SPLASH screen (this will catch the InputKeyPress)
|
||||
if ((msg->input.key == InputKeyBack) && (state->scenePrev == SCENE_NONE)) state->run = false ;
|
||||
|
||||
@@ -191,10 +190,13 @@ static inline bool splash_key(const eventMsg_t* const msg, state_t* const state)
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
//+============================================================================ ========================================
|
||||
// "_pre" allows the plugin to use the key before the active scene gets a chance
|
||||
//
|
||||
static inline bool key_pre(const eventMsg_t* const msg, state_t* const state) {
|
||||
static inline
|
||||
bool key_pre (const eventMsg_t* const msg, state_t* const state)
|
||||
{
|
||||
(void)msg;
|
||||
(void)state;
|
||||
|
||||
@@ -204,7 +206,9 @@ static inline bool key_pre(const eventMsg_t* const msg, state_t* const state) {
|
||||
//+============================================================================ ========================================
|
||||
// "_post" allows the plugin to use a key if it was not used by the active scene
|
||||
//
|
||||
static inline bool key_post(const eventMsg_t* const msg, state_t* const state) {
|
||||
static inline
|
||||
bool key_post (const eventMsg_t* const msg, state_t* const state)
|
||||
{
|
||||
int used = false; // assume key is NOT-handled
|
||||
|
||||
if (msg->input.key == InputKeyBack) {
|
||||
@@ -246,8 +250,7 @@ static inline bool key_post(const eventMsg_t* const msg, state_t* const state) {
|
||||
used = true;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
default: break ;
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -259,7 +262,8 @@ static inline bool key_post(const eventMsg_t* const msg, state_t* const state) {
|
||||
//+============================================================================ ========================================
|
||||
// Handle a key press event
|
||||
//
|
||||
bool evKey(const eventMsg_t* const msg, state_t* const state) {
|
||||
bool evKey (const eventMsg_t* const msg, state_t* const state)
|
||||
{
|
||||
furi_assert(msg);
|
||||
furi_assert(state);
|
||||
|
||||
@@ -267,16 +271,10 @@ bool evKey(const eventMsg_t* const msg, state_t* const state) {
|
||||
|
||||
if (!used) switch (state->scene) {
|
||||
case SCENE_SPLASH: //...
|
||||
case SCENE_RIP:
|
||||
used = splash_key(msg, state);
|
||||
break;
|
||||
case SCENE_RIP: used = splash_key(msg, state); break ;
|
||||
|
||||
case SCENE_WAIT:
|
||||
used = wait_key(msg, state);
|
||||
break;
|
||||
case SCENE_DEBUG:
|
||||
used = debug_key(msg, state);
|
||||
break;
|
||||
case SCENE_WAIT: used = wait_key(msg, state); break ;
|
||||
case SCENE_DEBUG: used = debug_key(msg, state); break ;
|
||||
|
||||
default:
|
||||
if (state->ec.pidx >= PID_ERROR) {
|
||||
@@ -289,11 +287,11 @@ bool evKey(const eventMsg_t* const msg, state_t* const state) {
|
||||
}
|
||||
break;
|
||||
|
||||
case SCENE_NONE:
|
||||
break;
|
||||
case SCENE_NONE: break;
|
||||
}
|
||||
|
||||
if (!used) used = key_post(msg, state) ;
|
||||
|
||||
return used;
|
||||
}
|
||||
|
||||
|
||||
@@ -5,41 +5,13 @@
|
||||
// A couple of monospaced hex fonts
|
||||
//
|
||||
const image_t* img_6x8[16] = {
|
||||
&img_6x8_0,
|
||||
&img_6x8_1,
|
||||
&img_6x8_2,
|
||||
&img_6x8_3,
|
||||
&img_6x8_4,
|
||||
&img_6x8_5,
|
||||
&img_6x8_6,
|
||||
&img_6x8_7,
|
||||
&img_6x8_8,
|
||||
&img_6x8_9,
|
||||
&img_6x8_A,
|
||||
&img_6x8_B,
|
||||
&img_6x8_C,
|
||||
&img_6x8_D,
|
||||
&img_6x8_E,
|
||||
&img_6x8_F,
|
||||
&img_6x8_0, &img_6x8_1, &img_6x8_2, &img_6x8_3, &img_6x8_4, &img_6x8_5, &img_6x8_6, &img_6x8_7,
|
||||
&img_6x8_8, &img_6x8_9, &img_6x8_A, &img_6x8_B, &img_6x8_C, &img_6x8_D, &img_6x8_E, &img_6x8_F,
|
||||
};
|
||||
|
||||
const image_t* img_5x7[16] = {
|
||||
&img_5x7_0,
|
||||
&img_5x7_1,
|
||||
&img_5x7_2,
|
||||
&img_5x7_3,
|
||||
&img_5x7_4,
|
||||
&img_5x7_5,
|
||||
&img_5x7_6,
|
||||
&img_5x7_7,
|
||||
&img_5x7_8,
|
||||
&img_5x7_9,
|
||||
&img_5x7_A,
|
||||
&img_5x7_B,
|
||||
&img_5x7_C,
|
||||
&img_5x7_D,
|
||||
&img_5x7_E,
|
||||
&img_5x7_F,
|
||||
&img_5x7_0, &img_5x7_1, &img_5x7_2, &img_5x7_3, &img_5x7_4, &img_5x7_5, &img_5x7_6, &img_5x7_7,
|
||||
&img_5x7_8, &img_5x7_9, &img_5x7_A, &img_5x7_B, &img_5x7_C, &img_5x7_D, &img_5x7_E, &img_5x7_F,
|
||||
};
|
||||
|
||||
//+============================================================================ ========================================
|
||||
@@ -58,20 +30,17 @@ const image_t* img_5x7[16] = {
|
||||
// // Do this ONCE ... at plugin quit
|
||||
// furi_record_close(RECORD_NOTIFICATION);
|
||||
// }
|
||||
void patBacklight(state_t* state) {
|
||||
void patBacklight (state_t* state)
|
||||
{
|
||||
notification_message(state->notify, &sequence_display_backlight_on);
|
||||
}
|
||||
|
||||
//============================================================================= ========================================
|
||||
// Show a hex number in an inverted box (for ananlogue readings)
|
||||
//
|
||||
void showHex(
|
||||
Canvas* const canvas,
|
||||
uint8_t x,
|
||||
uint8_t y,
|
||||
const uint32_t val,
|
||||
const uint8_t cnt,
|
||||
const int b) {
|
||||
void showHex ( Canvas* const canvas, uint8_t x, uint8_t y,
|
||||
const uint32_t val, const uint8_t cnt, const int b )
|
||||
{
|
||||
canvas_set_color(canvas, ColorBlack);
|
||||
canvas_draw_box(canvas, x++,y++, 1 +(cnt *(6 +1)), 10);
|
||||
|
||||
@@ -85,7 +54,8 @@ void showHex(
|
||||
//============================================================================= ========================================
|
||||
// Show the up/down "peak hold" controls in the bottom right
|
||||
//
|
||||
void showPeakHold(state_t* const state, Canvas* const canvas, const int hold) {
|
||||
void showPeakHold (state_t* const state, Canvas* const canvas, const int hold)
|
||||
{
|
||||
switch (hold) {
|
||||
case 0:
|
||||
show(canvas, 119,51, &img_key_U, SHOW_CLR_BLK);
|
||||
@@ -109,10 +79,7 @@ void showPeakHold(state_t* const state, Canvas* const canvas, const int hold) {
|
||||
canvas_draw_frame(canvas, 119,51, 9,13);
|
||||
|
||||
// calibration indicator
|
||||
show(
|
||||
canvas,
|
||||
108,
|
||||
55,
|
||||
show( canvas, 108,55,
|
||||
((state->calib & CAL_RANGE) && (++state->flash &8)) ? &img_key_OKi : &img_key_OK,
|
||||
SHOW_SET_BLK );
|
||||
}
|
||||
@@ -151,19 +118,11 @@ void showPeakHold(state_t* const state, Canvas* const canvas, const int hold) {
|
||||
// Turn and object - this is probably good enough
|
||||
// Start slowly & pick up speed - how about a log or sine curve?
|
||||
//
|
||||
void showJoy(
|
||||
Canvas* const canvas,
|
||||
const uint8_t x,
|
||||
const uint8_t y, // x,y is the CENTRE of the Joystick
|
||||
const uint8_t xMin,
|
||||
const uint8_t xMid,
|
||||
const uint8_t xMax,
|
||||
const uint8_t yMin,
|
||||
const uint8_t yMid,
|
||||
const uint8_t yMax,
|
||||
const uint8_t xPos,
|
||||
const uint8_t yPos,
|
||||
const uint8_t bits) {
|
||||
void showJoy ( Canvas* const canvas, const uint8_t x, const uint8_t y, // x,y is the CENTRE of the Joystick
|
||||
const uint8_t xMin, const uint8_t xMid, const uint8_t xMax,
|
||||
const uint8_t yMin, const uint8_t yMid, const uint8_t yMax,
|
||||
const uint8_t xPos, const uint8_t yPos, const uint8_t bits )
|
||||
{
|
||||
int xOff = 0; // final offset of joystick hat image
|
||||
int yOff = 0;
|
||||
|
||||
@@ -171,12 +130,9 @@ void showJoy(
|
||||
int yDead = xDead;
|
||||
|
||||
// This code is NOT optimised ...and it's still barely readable!
|
||||
if((xPos >= (xMid - xDead)) && (xPos <= (xMid + xDead)))
|
||||
xOff = 0; // centre [most likely]
|
||||
else if(xPos <= (xMin + xDead))
|
||||
xOff = -4; // full left
|
||||
else if(xPos >= (xMax - xDead))
|
||||
xOff = +4; // full right
|
||||
if ((xPos >= (xMid -xDead)) && (xPos <= (xMid +xDead))) xOff = 0 ; // centre [most likely]
|
||||
else if (xPos <= (xMin +xDead)) xOff = -4 ; // full left
|
||||
else if (xPos >= (xMax -xDead)) xOff = +4 ; // full right
|
||||
else if (xPos < (xMid -xDead)) { // part left
|
||||
// very much hard-coded for 3 interim positions
|
||||
int lo = (xMin +xDead) +1; // lowest position
|
||||
@@ -197,12 +153,9 @@ void showJoy(
|
||||
int lo1 = hi -div +1; // (in brevity)
|
||||
int hi3 = hi -div -div -(rem==2); // ...
|
||||
|
||||
if(xPos <= hi3)
|
||||
xOff = -3; // zone #-3
|
||||
else if(xPos >= lo1)
|
||||
xOff = -1; // zone #-1
|
||||
else
|
||||
xOff = -2; // zone #-2
|
||||
if (xPos <= hi3) xOff = -3 ; // zone #-3
|
||||
else if (xPos >= lo1) xOff = -1 ; // zone #-1
|
||||
else xOff = -2 ; // zone #-2
|
||||
|
||||
} else /*if (xPos > (xMid +xDead))*/ { // part right
|
||||
// very much hard-coded for 3 interim positions
|
||||
@@ -223,21 +176,15 @@ void showJoy(
|
||||
int hi1 = lo +div -1; // (in brevity)
|
||||
int lo3 = lo +div +div +(rem==2); // ...
|
||||
|
||||
if(xPos <= hi1)
|
||||
xOff = 1; // zone #1
|
||||
else if(xPos >= lo3)
|
||||
xOff = 3; // zone #3
|
||||
else
|
||||
xOff = 2; // zone #2
|
||||
if (xPos <= hi1) xOff = 1 ; // zone #1
|
||||
else if (xPos >= lo3) xOff = 3 ; // zone #3
|
||||
else xOff = 2 ; // zone #2
|
||||
}
|
||||
|
||||
// All this to print a 3x3 square (in the right place) - LOL!
|
||||
if((yPos >= (yMid - yDead)) && (yPos <= (yMid + yDead)))
|
||||
yOff = 0; // centre [most likely]
|
||||
else if(yPos <= (yMin + yDead))
|
||||
yOff = +4; // full down
|
||||
else if(yPos >= (yMax - yDead))
|
||||
yOff = -4; // full up
|
||||
if ((yPos >= (yMid -yDead)) && (yPos <= (yMid +yDead))) yOff = 0 ; // centre [most likely]
|
||||
else if (yPos <= (yMin +yDead)) yOff = +4 ; // full down
|
||||
else if (yPos >= (yMax -yDead)) yOff = -4 ; // full up
|
||||
else if (yPos < (yMid -yDead)) { // part down
|
||||
int lo = (yMin +yDead) +1; // lowest position
|
||||
int hi = (yMid -yDead) -1; // highest position
|
||||
@@ -249,12 +196,9 @@ void showJoy(
|
||||
int lo1 = hi -div +1; // (in brevity)
|
||||
int hi3 = hi -div -div -(rem==2); // ...
|
||||
|
||||
if(yPos <= hi3)
|
||||
yOff = +3; // zone #3
|
||||
else if(yPos >= lo1)
|
||||
yOff = +1; // zone #1
|
||||
else
|
||||
yOff = +2; // zone #2
|
||||
if (yPos <= hi3) yOff = +3 ; // zone #3
|
||||
else if (yPos >= lo1) yOff = +1 ; // zone #1
|
||||
else yOff = +2 ; // zone #2
|
||||
|
||||
} else /*if (yPos > (yMid +yDead))*/ { // part up
|
||||
int lo = (yMid +yDead) +1; // lowest position
|
||||
@@ -267,12 +211,9 @@ void showJoy(
|
||||
int hi1 = lo +div -1; // (in brevity)
|
||||
int lo3 = lo +div +div +(rem==2); // ...
|
||||
|
||||
if(yPos <= hi1)
|
||||
yOff = -1; // zone #-1
|
||||
else if(yPos >= lo3)
|
||||
yOff = -3; // zone #-3
|
||||
else
|
||||
yOff = -2; // zone #-2
|
||||
if (yPos <= hi1) yOff = -1 ; // zone #-1
|
||||
else if (yPos >= lo3) yOff = -3 ; // zone #-3
|
||||
else yOff = -2 ; // zone #-2
|
||||
}
|
||||
|
||||
show(canvas, x-(img_cc_Joy.w/2),y-(img_cc_Joy.h/2), &img_cc_Joy, SHOW_SET_BLK);
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user