wii_ec_anal
21
applications/plugins/wii_ec_anal/LICENSE
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
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.
|
||||||
234
applications/plugins/wii_ec_anal/README.md
Normal file
@@ -0,0 +1,234 @@
|
|||||||
|
# [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`]
|
||||||
|
|
||||||
67
applications/plugins/wii_ec_anal/README.txt
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
,-------.
|
||||||
|
---( 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 },
|
||||||
BIN
applications/plugins/wii_ec_anal/WiiEC.png
Normal file
|
After Width: | Height: | Size: 116 B |
21
applications/plugins/wii_ec_anal/_image_tool/LICENSE
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
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.
|
||||||
30
applications/plugins/wii_ec_anal/_image_tool/README
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
1. Prepare the image
|
||||||
|
a. Open your *black and white* image in GIMP
|
||||||
|
b. File -> Export As
|
||||||
|
filename: EXAMPLE.c
|
||||||
|
Type : "C source code"
|
||||||
|
[Export]
|
||||||
|
prefixed name: gimp_image
|
||||||
|
Comment : <any>
|
||||||
|
[x] Use GLib types
|
||||||
|
[ ] <<all other options>>
|
||||||
|
Opacity : 100%
|
||||||
|
[Export]
|
||||||
|
|
||||||
|
2. Prepare conversion tool [stored in (eg.) /path/]
|
||||||
|
a. cp _convert*.* /path/
|
||||||
|
b. cp EXAMPLE.c /path/
|
||||||
|
|
||||||
|
3. Run the conversion tool
|
||||||
|
a. cd /path/
|
||||||
|
b. ./_convert.sh EXAMPLE.c
|
||||||
|
|
||||||
|
4. All being well, you will see an ascii version of your image.
|
||||||
|
If not, then you're gonna have to submit a bug report <shrug>
|
||||||
|
|
||||||
|
5. You should now have a directory called img_/
|
||||||
|
In that directory should be
|
||||||
|
img_EXAMPLE.c - The data for your new image
|
||||||
|
img_*.c - The data for other images
|
||||||
|
images.h - A header for ALL images that have been created in this directory
|
||||||
|
images.c - A sample FlipperZero show() function [not optimised]
|
||||||
138
applications/plugins/wii_ec_anal/_image_tool/_convert.c
Normal file
@@ -0,0 +1,138 @@
|
|||||||
|
#include <stdint.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
int main (int argc, char* argv[])
|
||||||
|
{
|
||||||
|
const unsigned char* pp = NULL;
|
||||||
|
uint32_t pix = 0;
|
||||||
|
int bit = 0;
|
||||||
|
|
||||||
|
uint8_t b = 0;
|
||||||
|
uint8_t bcnt = 0;
|
||||||
|
|
||||||
|
unsigned int lcnt = 0;
|
||||||
|
static const int lmax = 16; // max hex values per line
|
||||||
|
|
||||||
|
uint8_t* buf = NULL;
|
||||||
|
uint8_t* bp = NULL;
|
||||||
|
unsigned int blen = 0;
|
||||||
|
|
||||||
|
uint8_t* cmp = NULL;
|
||||||
|
uint8_t* cp = NULL;
|
||||||
|
unsigned int clen = 0;
|
||||||
|
uint8_t ctag = 0xFF;
|
||||||
|
uint32_t tag[256] = {0};
|
||||||
|
uint32_t tmax = UINT32_MAX;
|
||||||
|
|
||||||
|
unsigned int x, y, z;
|
||||||
|
|
||||||
|
const char* name = argv[1];
|
||||||
|
FILE* fh = fopen(argv[2], "wb");
|
||||||
|
|
||||||
|
uint32_t white = 0xFF;
|
||||||
|
|
||||||
|
int rv = 0; // assume success
|
||||||
|
|
||||||
|
// allocate buffers
|
||||||
|
blen = ((img.w * img.h) +0x7) >>3;
|
||||||
|
bp = (buf = calloc(blen +1, 1));
|
||||||
|
cp = (cmp = calloc(blen +4, 1));
|
||||||
|
|
||||||
|
// sanity check
|
||||||
|
if (!fh || !buf || !cmp) {
|
||||||
|
printf("! fopen() or malloc() fail.\n");
|
||||||
|
rv = 255;
|
||||||
|
goto bail;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Find white value
|
||||||
|
for (x = 1; x < img.bpp; x++)
|
||||||
|
white = (white << 8) | 0xFF ;
|
||||||
|
|
||||||
|
// build bit pattern
|
||||||
|
// create the comment as we go
|
||||||
|
for (pp = img.b, y = 0; y < img.h; y++) {
|
||||||
|
fprintf(fh, "// ");
|
||||||
|
for (x = 0; x < img.w; x++) {
|
||||||
|
// read pixel
|
||||||
|
for (pix = 0, z = 0; z < img.bpp; pix = (pix << 8) | *pp++, z++) ;
|
||||||
|
// get bit and draw
|
||||||
|
if (pix < white) {
|
||||||
|
b = (b << 1) | 1;
|
||||||
|
fprintf(fh, "##");
|
||||||
|
} else {
|
||||||
|
b <<= 1;
|
||||||
|
fprintf(fh, "..");
|
||||||
|
}
|
||||||
|
// got byte
|
||||||
|
if ((++bcnt) == 8) {
|
||||||
|
*bp++ = b;
|
||||||
|
tag[b]++;
|
||||||
|
bcnt = (b = 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fprintf(fh, "\n");
|
||||||
|
}
|
||||||
|
fprintf(fh, "\n");
|
||||||
|
// padding
|
||||||
|
if (bcnt) {
|
||||||
|
b <<= (bcnt = 8 - bcnt);
|
||||||
|
*bp++ = b;
|
||||||
|
tag[b]++;
|
||||||
|
}
|
||||||
|
// Kill the compression
|
||||||
|
*bp = ~bp[-1]; // https://youtube.com/clip/Ugkx-JZIr16hETy7hz_H6yIdKPtxVe8C5w_V
|
||||||
|
|
||||||
|
// Byte run length compression
|
||||||
|
// Find a good tag
|
||||||
|
for (x = 0; tmax && (x < 256); x++) {
|
||||||
|
if (tag[x] < tmax) {
|
||||||
|
tmax = tag[x];
|
||||||
|
ctag = x;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// compress the data
|
||||||
|
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++) ;
|
||||||
|
*cp++ = ctag; // tag
|
||||||
|
*cp++ = y; // length
|
||||||
|
*cp++ = bp[x]; // byte
|
||||||
|
x += y -1;
|
||||||
|
clen += 3;
|
||||||
|
} else {
|
||||||
|
*cp++ = bp[x];
|
||||||
|
clen++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// create struct
|
||||||
|
fprintf(fh, "#include \"images.h\"\n\n");
|
||||||
|
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));
|
||||||
|
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" : ", ") ;
|
||||||
|
|
||||||
|
} 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" : ", ") ;
|
||||||
|
}
|
||||||
|
|
||||||
|
bail:
|
||||||
|
if (fh) fclose(fh) ;
|
||||||
|
if (buf) free(buf) ;
|
||||||
|
if (cmp) free(cmp) ;
|
||||||
|
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
79
applications/plugins/wii_ec_anal/_image_tool/_convert.sh
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
[ -z $1 ] && {
|
||||||
|
echo "Specify an image"
|
||||||
|
echo "gimp -> export -> c source file -> [x] gunit names"
|
||||||
|
exit 2
|
||||||
|
}
|
||||||
|
|
||||||
|
echo $*
|
||||||
|
|
||||||
|
for N in $* ; do
|
||||||
|
|
||||||
|
[ ! -f $N ] && {
|
||||||
|
echo "!! File missing $N"
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
# filename (sans extension)
|
||||||
|
FN=$(basename -- "$N")
|
||||||
|
EXT="${FN##*.}"
|
||||||
|
NAME="${FN%.*}"
|
||||||
|
|
||||||
|
OUTDIR=img_/
|
||||||
|
mkdir -p ${OUTDIR}
|
||||||
|
|
||||||
|
HDR=${OUTDIR}/images.h
|
||||||
|
SRC=${OUTDIR}/images.c
|
||||||
|
|
||||||
|
OUT=${OUTDIR}/img_${NAME}.c
|
||||||
|
|
||||||
|
echo -e "\n¦${N}¦ == ¦${NAME}¦ -> ¦${OUT}¦"
|
||||||
|
|
||||||
|
TESTX=test_${NAME}
|
||||||
|
TESTC=test_${NAME}.c
|
||||||
|
|
||||||
|
# compile name
|
||||||
|
CONV=${NAME}_
|
||||||
|
|
||||||
|
# clean up gimp output
|
||||||
|
sed -e "s/gimp_image/img/g" \
|
||||||
|
-e 's/guint8/unsigned char/g' \
|
||||||
|
-e 's/width/w/g' \
|
||||||
|
-e 's/height/h/g' \
|
||||||
|
-e 's/bytes_per_pixel/bpp/g' \
|
||||||
|
-e 's/pixel_data/b/g' \
|
||||||
|
-e 's/guint/unsigned int/g' \
|
||||||
|
$N \
|
||||||
|
| grep -v ^/ \
|
||||||
|
| grep -v ^$ \
|
||||||
|
> ${CONV}.c
|
||||||
|
|
||||||
|
# append conversion code
|
||||||
|
cat _convert.c >> ${CONV}.c
|
||||||
|
|
||||||
|
# compile & run converter
|
||||||
|
rm -f ${CONV}
|
||||||
|
gcc ${CONV}.c -DIMGTEST -o ${CONV}
|
||||||
|
./${CONV} ${NAME} ${OUT}
|
||||||
|
rm -f ${CONV} ${CONV}.c
|
||||||
|
|
||||||
|
# (create &) update header
|
||||||
|
[[ ! -f ${HDR} ]] && cp _convert_images.h ${HDR}
|
||||||
|
sed -i "/ img_${NAME};/d" ${HDR}
|
||||||
|
sed -i "s#//\[TAG\]#//\[TAG\]\nextern const image_t img_${NAME};#" ${HDR}
|
||||||
|
|
||||||
|
# sample FZ code
|
||||||
|
[[ ! -f images.c ]] && cp _convert_images.c ${SRC}
|
||||||
|
|
||||||
|
# test
|
||||||
|
ROOT=${PWD}
|
||||||
|
pushd ${OUTDIR} >/dev/null
|
||||||
|
sed "s/zzz/${NAME}/" ${ROOT}/_convert_test.c > ${TESTC}
|
||||||
|
rm -f ${TESTX}
|
||||||
|
gcc ${TESTC} ${OUT##*/} -DIMGTEST -o ${TESTX}
|
||||||
|
./${TESTX}
|
||||||
|
rm -f ${TESTX} ${TESTC}
|
||||||
|
popd >/dev/null
|
||||||
|
|
||||||
|
done
|
||||||
141
applications/plugins/wii_ec_anal/_image_tool/_convert_images.c
Normal file
@@ -0,0 +1,141 @@
|
|||||||
|
#include <gui/gui.h> // GUI (screen/keyboard) API
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------- ----------------------------------------
|
||||||
|
static Canvas* _canvas;
|
||||||
|
static uint8_t _tlx;
|
||||||
|
static uint8_t _tly;
|
||||||
|
|
||||||
|
static uint8_t _x;
|
||||||
|
static uint8_t _y;
|
||||||
|
|
||||||
|
static const image_t* _img;
|
||||||
|
|
||||||
|
static bool _blk;
|
||||||
|
static Color _set;
|
||||||
|
static Color _clr;
|
||||||
|
|
||||||
|
//+============================================================================
|
||||||
|
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)) ;
|
||||||
|
if ( ((++_x) == _img->w) && !(_x = 0) && ((++_y) == _img->h) ) break ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//+============================================================================
|
||||||
|
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)) ;
|
||||||
|
if ( ((++_x) == _img->w) && !(_x = 0) && ((++_y) == _img->h) ) break ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//+============================================================================
|
||||||
|
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));
|
||||||
|
_blk = !_blk;
|
||||||
|
}
|
||||||
|
canvas_draw_dot(_canvas, (_tlx +_x), (_tly +_y)) ;
|
||||||
|
if ( ((++_x) == _img->w) && !(_x = 0) && ((++_y) == _img->h) ) break ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//+============================================================================
|
||||||
|
// available modes are SHOW_SET_BLK - plot image pixels that are SET in BLACK
|
||||||
|
// SHOW_XOR - same as SET_BLACK
|
||||||
|
// SHOW_SET_WHT - plot image pixels that are SET in WHITE
|
||||||
|
// SHOW_CLR_BLK - plot image pixels that are CLEAR in BLACK
|
||||||
|
// SHOW_CLR_WHT - plot image pixels that are CLEAR in WHITE
|
||||||
|
// 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(*fnShow)(const uint8_t) = NULL;
|
||||||
|
|
||||||
|
const uint8_t* bp = img->data;
|
||||||
|
|
||||||
|
// code size optimisation
|
||||||
|
switch (mode & SHOW_INV_) {
|
||||||
|
case SHOW_NRM_:
|
||||||
|
_set = ColorBlack;
|
||||||
|
_clr = ColorWhite;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SHOW_INV_:
|
||||||
|
_set = ColorWhite;
|
||||||
|
_clr = ColorBlack;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SHOW_BLK_:
|
||||||
|
canvas_set_color(canvas, ColorBlack);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SHOW_WHT_:
|
||||||
|
canvas_set_color(canvas, ColorWhite);
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
switch (mode & SHOW_INV_) {
|
||||||
|
case SHOW_NRM_:
|
||||||
|
case SHOW_INV_:
|
||||||
|
fnShow = _showByteAll;
|
||||||
|
canvas_set_color(canvas, ColorWhite);
|
||||||
|
_blk = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SHOW_BLK_:
|
||||||
|
case SHOW_WHT_:
|
||||||
|
switch (mode & SHOW_ALL_) {
|
||||||
|
case SHOW_SET_:
|
||||||
|
fnShow = _showByteSet;
|
||||||
|
break;
|
||||||
|
case SHOW_CLR_:
|
||||||
|
fnShow = _showByteClr;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
furi_check(fnShow);
|
||||||
|
|
||||||
|
// I want nested functions!
|
||||||
|
_canvas = canvas;
|
||||||
|
_img = img;
|
||||||
|
_tlx = tlx;
|
||||||
|
_tly = tly;
|
||||||
|
_x = 0;
|
||||||
|
_y = 0;
|
||||||
|
|
||||||
|
// Compressed
|
||||||
|
if (img->c) {
|
||||||
|
for (unsigned int i = 0; i < img->len; i++, bp++) {
|
||||||
|
// Compressed data? {tag, length, value}
|
||||||
|
if (*bp == img->tag) {
|
||||||
|
for (uint16_t c = 0; c < bp[1]; c++) fnShow(bp[2]) ;
|
||||||
|
bp += 3 -1;
|
||||||
|
i += 3 -1;
|
||||||
|
|
||||||
|
// Uncompressed byte
|
||||||
|
} else {
|
||||||
|
fnShow(*bp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Not compressed
|
||||||
|
} else {
|
||||||
|
for (unsigned int i = 0; i < img->len; i++, bp++) fnShow(*bp) ;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
#ifndef IMAGES_H_
|
||||||
|
#define IMAGES_H_
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------- ----------------------------------------
|
||||||
|
typedef
|
||||||
|
enum showMode {
|
||||||
|
// {INV:--:WHT:BLK::--:--:CLR:SET}
|
||||||
|
SHOW_SET_ = 0x01,
|
||||||
|
SHOW_CLR_ = 0x02,
|
||||||
|
SHOW_ALL_ = SHOW_SET_ | SHOW_CLR_,
|
||||||
|
|
||||||
|
SHOW_BLK_ = 0x10,
|
||||||
|
SHOW_WHT_ = 0x20,
|
||||||
|
SHOW_NRM_ = 0x00,
|
||||||
|
SHOW_INV_ = SHOW_BLK_ | SHOW_WHT_,
|
||||||
|
|
||||||
|
SHOW_SET_BLK = SHOW_SET_ | SHOW_BLK_,
|
||||||
|
SHOW_SET_WHT = SHOW_SET_ | SHOW_WHT_,
|
||||||
|
|
||||||
|
SHOW_CLR_BLK = SHOW_CLR_ | SHOW_BLK_,
|
||||||
|
SHOW_CLR_WHT = SHOW_CLR_ | SHOW_WHT_,
|
||||||
|
|
||||||
|
SHOW_ALL = SHOW_ALL_ | SHOW_NRM_,
|
||||||
|
SHOW_ALL_INV = SHOW_ALL_ | SHOW_INV_,
|
||||||
|
}
|
||||||
|
showMode_t;
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------- ----------------------------------------
|
||||||
|
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;
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------- ----------------------------------------
|
||||||
|
//[TAG]
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------- ----------------------------------------
|
||||||
|
#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) ;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif //IMAGES_H_
|
||||||
59
applications/plugins/wii_ec_anal/_image_tool/_convert_test.c
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
#include <stdint.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// This will be the plot function out of your graphics library
|
||||||
|
//
|
||||||
|
#define PLOT(x,y,c) do { \
|
||||||
|
printf("%s", (c ? "#" : ".")); \
|
||||||
|
if (x == img->w -1) printf("\n") ; \
|
||||||
|
}while(0)
|
||||||
|
|
||||||
|
//+============================================================================
|
||||||
|
// The pain we endure to avoid code duplication cleanly
|
||||||
|
//
|
||||||
|
#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)
|
||||||
|
{
|
||||||
|
// Some variables
|
||||||
|
const uint8_t* bp = img->data;
|
||||||
|
unsigned int x = 0;
|
||||||
|
unsigned int y = 0;
|
||||||
|
|
||||||
|
// Compressed
|
||||||
|
if (img->c) {
|
||||||
|
for (unsigned int i = 0; i < img->len; i++, bp++) {
|
||||||
|
// Compressed data? {tag, length, value}
|
||||||
|
if (*bp == img->tag) {
|
||||||
|
for (uint16_t c = 0; c < bp[1]; c++) PLOTBYTE(bp[2]) ;
|
||||||
|
bp += 3 -1;
|
||||||
|
i += 3 -1;
|
||||||
|
|
||||||
|
// Uncompressed byte
|
||||||
|
} else {
|
||||||
|
PLOTBYTE(*bp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Not compressed
|
||||||
|
} else {
|
||||||
|
for (unsigned int i = 0; i < img->len; i++, bp++) PLOTBYTE(*bp) ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#undef PLOTBYTE
|
||||||
|
|
||||||
|
//+============================================================================
|
||||||
|
int main (void)
|
||||||
|
{
|
||||||
|
show(&img_zzz);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
BIN
applications/plugins/wii_ec_anal/_images/CLASSIC.png
Normal file
|
After Width: | Height: | Size: 4.3 KiB |
BIN
applications/plugins/wii_ec_anal/_images/CLASSIC_N.png
Normal file
|
After Width: | Height: | Size: 5.0 KiB |
BIN
applications/plugins/wii_ec_anal/_images/DEBUG.png
Normal file
|
After Width: | Height: | Size: 3.8 KiB |
BIN
applications/plugins/wii_ec_anal/_images/DUMP.png
Normal file
|
After Width: | Height: | Size: 4.7 KiB |
BIN
applications/plugins/wii_ec_anal/_images/GIMP/Nunchuck_acc.xcf
Normal file
BIN
applications/plugins/wii_ec_anal/_images/GIMP/RIP.xcf
Normal file
BIN
applications/plugins/wii_ec_anal/_images/GIMP/Wiring.xcf
Normal file
BIN
applications/plugins/wii_ec_anal/_images/GIMP/classic.xcf
Normal file
BIN
applications/plugins/wii_ec_anal/_images/GIMP/csLogo.xcf
Normal file
BIN
applications/plugins/wii_ec_anal/_images/GIMP/fonts.xcf
Normal file
BIN
applications/plugins/wii_ec_anal/_images/GIMP/frame.xcf
Normal file
BIN
applications/plugins/wii_ec_anal/_images/GIMP/port.xcf
Normal file
BIN
applications/plugins/wii_ec_anal/_images/GIMP/social.xcf
Normal file
BIN
applications/plugins/wii_ec_anal/_images/NUNCHUCK.png
Normal file
|
After Width: | Height: | Size: 4.4 KiB |
BIN
applications/plugins/wii_ec_anal/_images/NUNCHUCK_acc.png
Normal file
|
After Width: | Height: | Size: 80 KiB |
BIN
applications/plugins/wii_ec_anal/_images/NUNCHUCK_anal.png
Normal file
|
After Width: | Height: | Size: 4.3 KiB |
BIN
applications/plugins/wii_ec_anal/_images/NUNCHUCK_cal.gif
Normal file
|
After Width: | Height: | Size: 5.7 KiB |
BIN
applications/plugins/wii_ec_anal/_images/NUNCHUCK_cal.png
Normal file
|
After Width: | Height: | Size: 4.3 KiB |
BIN
applications/plugins/wii_ec_anal/_images/Nunchucky.png
Normal file
|
After Width: | Height: | Size: 312 KiB |
BIN
applications/plugins/wii_ec_anal/_images/RIP.png
Normal file
|
After Width: | Height: | Size: 4.9 KiB |
BIN
applications/plugins/wii_ec_anal/_images/SPLASH.png
Normal file
|
After Width: | Height: | Size: 5.1 KiB |
BIN
applications/plugins/wii_ec_anal/_images/WAIT.png
Normal file
|
After Width: | Height: | Size: 3.9 KiB |
BIN
applications/plugins/wii_ec_anal/_images/WiiChuck.png
Normal file
|
After Width: | Height: | Size: 99 KiB |
BIN
applications/plugins/wii_ec_anal/_images/Wiring.png
Normal file
|
After Width: | Height: | Size: 339 KiB |
BIN
applications/plugins/wii_ec_anal/_images/plug.png
Normal file
|
After Width: | Height: | Size: 74 KiB |
BIN
applications/plugins/wii_ec_anal/_images/social.png
Normal file
|
After Width: | Height: | Size: 702 KiB |
36
applications/plugins/wii_ec_anal/application.fam
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
# qv. https://github.com/flipperdevices/flipperzero-firmware/blob/dev/documentation/AppManifests.md
|
||||||
|
|
||||||
|
App(
|
||||||
|
# --- App Info
|
||||||
|
appid="wii_ec_anal",
|
||||||
|
name="Wii EC Analyser",
|
||||||
|
|
||||||
|
# --- Entry point
|
||||||
|
apptype=FlipperAppType.EXTERNAL,
|
||||||
|
entry_point="wii_ec_anal",
|
||||||
|
|
||||||
|
# --- Interaction
|
||||||
|
cdefines=["APP_WII_EC_ANAL"],
|
||||||
|
requires=[
|
||||||
|
"gui",
|
||||||
|
],
|
||||||
|
|
||||||
|
# conflicts="",
|
||||||
|
# sdk_headers="",
|
||||||
|
|
||||||
|
# --- Run-time info
|
||||||
|
stack_size=2 * 1024,
|
||||||
|
order=20,
|
||||||
|
|
||||||
|
# --- FAP details
|
||||||
|
sources=["wii_*.c", "gfx/*.c"],
|
||||||
|
|
||||||
|
# fap_weburl="https://github.com/csBlueChip/FlipperZero_plugin_WiiChuck/",
|
||||||
|
# fap_author="BlueChip",
|
||||||
|
|
||||||
|
# fap_description="Wii Extension Controller Protocol Analyser",
|
||||||
|
# fap_version=(1,0),
|
||||||
|
|
||||||
|
fap_icon="WiiEC.png",
|
||||||
|
fap_category="Misc",
|
||||||
|
)
|
||||||
70
applications/plugins/wii_ec_anal/bc_logging.h
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
#ifndef BC_LOGGING_H_
|
||||||
|
#define BC_LOGGING_H_
|
||||||
|
|
||||||
|
#include <furi.h>
|
||||||
|
#include "err.h" // appName
|
||||||
|
|
||||||
|
//! WARNING: There is a bug in Furi such that if you crank LOG_LEVEL up to 6=TRACE
|
||||||
|
//! AND you have menu->settings->system->logLevel = trace
|
||||||
|
//! THEN this program will cause the FZ to crash when the plugin exits!
|
||||||
|
#define LOG_LEVEL 4
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------- ----------------------------------------
|
||||||
|
// The FlipperZero Settings->System menu allows you to set the logging level at RUN-time
|
||||||
|
// ... LOG_LEVEL lets you limit it at COMPILE-time
|
||||||
|
//
|
||||||
|
// FURI logging has 6 levels (numbered 1 thru 6}
|
||||||
|
// 1. None
|
||||||
|
// 2. Errors FURI_LOG_E
|
||||||
|
// 3. Warnings FURI_LOG_W
|
||||||
|
// 4. Information FURI_LOG_I
|
||||||
|
// 5. Debug FURI_LOG_D
|
||||||
|
// 6. Trace FURI_LOG_T
|
||||||
|
//
|
||||||
|
// --> furi/core/log.h
|
||||||
|
//
|
||||||
|
|
||||||
|
// The FlipperZero Settings->System menu allows you to set the logging level at RUN-time
|
||||||
|
// This lets you limit it at COMPILE-time
|
||||||
|
#ifndef LOG_LEVEL
|
||||||
|
# define LOG_LEVEL 6 // default = full logging
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if (LOG_LEVEL < 2)
|
||||||
|
# undef FURI_LOG_E
|
||||||
|
# define FURI_LOG_E(tag, fmt, ...)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if (LOG_LEVEL < 3)
|
||||||
|
# undef FURI_LOG_W
|
||||||
|
# define FURI_LOG_W(tag, fmt, ...)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if (LOG_LEVEL < 4)
|
||||||
|
# undef FURI_LOG_I
|
||||||
|
# define FURI_LOG_I(tag, fmt, ...)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if (LOG_LEVEL < 5)
|
||||||
|
# undef FURI_LOG_D
|
||||||
|
# define FURI_LOG_D(tag, fmt, ...)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if (LOG_LEVEL < 6)
|
||||||
|
# undef FURI_LOG_T
|
||||||
|
# define FURI_LOG_T(tag, fmt, ...)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//----------------------------------------------------------
|
||||||
|
// Logging helper macros
|
||||||
|
//
|
||||||
|
#define ERROR(fmt, ...) FURI_LOG_E(appName, fmt __VA_OPT__(,) __VA_ARGS__)
|
||||||
|
#define WARN(fmt, ...) FURI_LOG_W(appName, fmt __VA_OPT__(,) __VA_ARGS__)
|
||||||
|
#define INFO(fmt, ...) FURI_LOG_I(appName, fmt __VA_OPT__(,) __VA_ARGS__)
|
||||||
|
#define DEBUG(fmt, ...) FURI_LOG_D(appName, fmt __VA_OPT__(,) __VA_ARGS__)
|
||||||
|
#define TRACE(fmt, ...) FURI_LOG_T(appName, fmt __VA_OPT__(,) __VA_ARGS__)
|
||||||
|
|
||||||
|
#define ENTER TRACE("(+) %s", __func__)
|
||||||
|
#define LEAVE TRACE("(-) %s", __func__)
|
||||||
|
|
||||||
|
#endif //BC_LOGGING_H_
|
||||||
69
applications/plugins/wii_ec_anal/err.h
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
// Avoid circular/nested/mulitple inclusion
|
||||||
|
#ifndef ERR_H_
|
||||||
|
#define ERR_H_
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------- ----------------------------------------
|
||||||
|
// Application name
|
||||||
|
//
|
||||||
|
static const char* const appName = "Wii_i2c"; //$ Name used in log files
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------- ----------------------------------------
|
||||||
|
// Error codes and messages
|
||||||
|
//
|
||||||
|
|
||||||
|
// You should only ever (need to) edit this list
|
||||||
|
// ...Watch out for extraneous whitespace after the terminating backslashes
|
||||||
|
#define FOREACH_ES(esPrial) \
|
||||||
|
/* 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(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(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]
|
||||||
|
|
||||||
|
// 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 ;
|
||||||
|
|
||||||
|
// You need to '#define ERR_C_' in precisely ONE source file
|
||||||
|
#ifdef ERR_C_
|
||||||
|
// Build the string list
|
||||||
|
const char* const wii_errs[] = { FOREACH_ES(ES_STRING) };
|
||||||
|
#else
|
||||||
|
// Give access to string list
|
||||||
|
extern const char* const wii_errs[];
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// This is a header file, clean up
|
||||||
|
#undef ES_ENUM
|
||||||
|
#undef ES_STRING
|
||||||
|
#undef FOREACH_ES
|
||||||
|
|
||||||
|
#endif // ERR_H_
|
||||||
141
applications/plugins/wii_ec_anal/gfx/images.c
Normal file
@@ -0,0 +1,141 @@
|
|||||||
|
#include <gui/gui.h> // GUI (screen/keyboard) API
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------- ----------------------------------------
|
||||||
|
static Canvas* _canvas;
|
||||||
|
static uint8_t _tlx;
|
||||||
|
static uint8_t _tly;
|
||||||
|
|
||||||
|
static uint8_t _x;
|
||||||
|
static uint8_t _y;
|
||||||
|
|
||||||
|
static const image_t* _img;
|
||||||
|
|
||||||
|
static bool _blk;
|
||||||
|
static Color _set;
|
||||||
|
static Color _clr;
|
||||||
|
|
||||||
|
//+============================================================================
|
||||||
|
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)) ;
|
||||||
|
if ( ((++_x) == _img->w) && !(_x = 0) && ((++_y) == _img->h) ) break ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//+============================================================================
|
||||||
|
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)) ;
|
||||||
|
if ( ((++_x) == _img->w) && !(_x = 0) && ((++_y) == _img->h) ) break ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//+============================================================================
|
||||||
|
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));
|
||||||
|
_blk = !_blk;
|
||||||
|
}
|
||||||
|
canvas_draw_dot(_canvas, (_tlx +_x), (_tly +_y)) ;
|
||||||
|
if ( ((++_x) == _img->w) && !(_x = 0) && ((++_y) == _img->h) ) break ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//+============================================================================
|
||||||
|
// available modes are SHOW_SET_BLK - plot image pixels that are SET in BLACK
|
||||||
|
// SHOW_XOR - same as SET_BLACK
|
||||||
|
// SHOW_SET_WHT - plot image pixels that are SET in WHITE
|
||||||
|
// SHOW_CLR_BLK - plot image pixels that are CLEAR in BLACK
|
||||||
|
// SHOW_CLR_WHT - plot image pixels that are CLEAR in WHITE
|
||||||
|
// 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(*fnShow)(const uint8_t) = NULL;
|
||||||
|
|
||||||
|
const uint8_t* bp = img->data;
|
||||||
|
|
||||||
|
// code size optimisation
|
||||||
|
switch (mode & SHOW_INV_) {
|
||||||
|
case SHOW_NRM_:
|
||||||
|
_set = ColorBlack;
|
||||||
|
_clr = ColorWhite;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SHOW_INV_:
|
||||||
|
_set = ColorWhite;
|
||||||
|
_clr = ColorBlack;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SHOW_BLK_:
|
||||||
|
canvas_set_color(canvas, ColorBlack);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SHOW_WHT_:
|
||||||
|
canvas_set_color(canvas, ColorWhite);
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
switch (mode & SHOW_INV_) {
|
||||||
|
case SHOW_NRM_:
|
||||||
|
case SHOW_INV_:
|
||||||
|
fnShow = _showByteAll;
|
||||||
|
canvas_set_color(canvas, ColorWhite);
|
||||||
|
_blk = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SHOW_BLK_:
|
||||||
|
case SHOW_WHT_:
|
||||||
|
switch (mode & SHOW_ALL_) {
|
||||||
|
case SHOW_SET_:
|
||||||
|
fnShow = _showByteSet;
|
||||||
|
break;
|
||||||
|
case SHOW_CLR_:
|
||||||
|
fnShow = _showByteClr;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
furi_check(fnShow);
|
||||||
|
|
||||||
|
// I want nested functions!
|
||||||
|
_canvas = canvas;
|
||||||
|
_img = img;
|
||||||
|
_tlx = tlx;
|
||||||
|
_tly = tly;
|
||||||
|
_x = 0;
|
||||||
|
_y = 0;
|
||||||
|
|
||||||
|
// Compressed
|
||||||
|
if (img->c) {
|
||||||
|
for (unsigned int i = 0; i < img->len; i++, bp++) {
|
||||||
|
// Compressed data? {tag, length, value}
|
||||||
|
if (*bp == img->tag) {
|
||||||
|
for (uint16_t c = 0; c < bp[1]; c++) fnShow(bp[2]) ;
|
||||||
|
bp += 3 -1;
|
||||||
|
i += 3 -1;
|
||||||
|
|
||||||
|
// Uncompressed byte
|
||||||
|
} else {
|
||||||
|
fnShow(*bp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Not compressed
|
||||||
|
} else {
|
||||||
|
for (unsigned int i = 0; i < img->len; i++, bp++) fnShow(*bp) ;
|
||||||
|
}
|
||||||
|
}
|
||||||
134
applications/plugins/wii_ec_anal/gfx/images.h
Normal file
@@ -0,0 +1,134 @@
|
|||||||
|
#ifndef IMAGES_H_
|
||||||
|
#define IMAGES_H_
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------- ----------------------------------------
|
||||||
|
typedef
|
||||||
|
enum showMode {
|
||||||
|
// {INV:--:WHT:BLK::--:--:CLR:SET}
|
||||||
|
SHOW_SET_ = 0x01,
|
||||||
|
SHOW_CLR_ = 0x02,
|
||||||
|
SHOW_ALL_ = SHOW_SET_ | SHOW_CLR_,
|
||||||
|
|
||||||
|
SHOW_BLK_ = 0x10,
|
||||||
|
SHOW_WHT_ = 0x20,
|
||||||
|
SHOW_NRM_ = 0x00,
|
||||||
|
SHOW_INV_ = SHOW_BLK_ | SHOW_WHT_,
|
||||||
|
|
||||||
|
SHOW_SET_BLK = SHOW_SET_ | SHOW_BLK_,
|
||||||
|
SHOW_SET_WHT = SHOW_SET_ | SHOW_WHT_,
|
||||||
|
|
||||||
|
SHOW_CLR_BLK = SHOW_CLR_ | SHOW_BLK_,
|
||||||
|
SHOW_CLR_WHT = SHOW_CLR_ | SHOW_WHT_,
|
||||||
|
|
||||||
|
SHOW_ALL = SHOW_ALL_ | SHOW_NRM_,
|
||||||
|
SHOW_ALL_INV = SHOW_ALL_ | SHOW_INV_,
|
||||||
|
}
|
||||||
|
showMode_t;
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------- ----------------------------------------
|
||||||
|
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;
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------- ----------------------------------------
|
||||||
|
//[TAG]
|
||||||
|
extern const image_t img_csLogo_Small;
|
||||||
|
extern const image_t img_3x5_v;
|
||||||
|
extern const image_t img_3x5_9;
|
||||||
|
extern const image_t img_3x5_8;
|
||||||
|
extern const image_t img_3x5_7;
|
||||||
|
extern const image_t img_3x5_6;
|
||||||
|
extern const image_t img_3x5_5;
|
||||||
|
extern const image_t img_3x5_4;
|
||||||
|
extern const image_t img_3x5_3;
|
||||||
|
extern const image_t img_3x5_2;
|
||||||
|
extern const image_t img_3x5_1;
|
||||||
|
extern const image_t img_3x5_0;
|
||||||
|
extern const image_t img_key_Ui;
|
||||||
|
extern const image_t img_key_OKi;
|
||||||
|
extern const image_t img_RIP;
|
||||||
|
extern const image_t img_cc_trg_R4;
|
||||||
|
extern const image_t img_cc_trg_R3;
|
||||||
|
extern const image_t img_cc_trg_R2;
|
||||||
|
extern const image_t img_cc_trg_R1;
|
||||||
|
extern const image_t img_cc_trg_L4;
|
||||||
|
extern const image_t img_cc_trg_L3;
|
||||||
|
extern const image_t img_cc_trg_L2;
|
||||||
|
extern const image_t img_cc_trg_L1;
|
||||||
|
extern const image_t img_cc_Joy;
|
||||||
|
extern const image_t img_cc_Main;
|
||||||
|
extern const image_t img_cc_Cable;
|
||||||
|
extern const image_t img_key_Back;
|
||||||
|
extern const image_t img_key_OK;
|
||||||
|
extern const image_t img_6x8_Z;
|
||||||
|
extern const image_t img_6x8_Y;
|
||||||
|
extern const image_t img_6x8_X;
|
||||||
|
extern const image_t img_key_U;
|
||||||
|
extern const image_t img_key_D;
|
||||||
|
extern const image_t img_csLogo_FULL;
|
||||||
|
extern const image_t img_6x8_7;
|
||||||
|
extern const image_t img_key_R;
|
||||||
|
extern const image_t img_key_L;
|
||||||
|
extern const image_t img_5x7_7;
|
||||||
|
extern const image_t img_5x7_F;
|
||||||
|
extern const image_t img_5x7_E;
|
||||||
|
extern const image_t img_5x7_D;
|
||||||
|
extern const image_t img_5x7_C;
|
||||||
|
extern const image_t img_5x7_B;
|
||||||
|
extern const image_t img_5x7_A;
|
||||||
|
extern const image_t img_5x7_9;
|
||||||
|
extern const image_t img_5x7_8;
|
||||||
|
extern const image_t img_5x7_6;
|
||||||
|
extern const image_t img_5x7_5;
|
||||||
|
extern const image_t img_5x7_4;
|
||||||
|
extern const image_t img_5x7_3;
|
||||||
|
extern const image_t img_5x7_2;
|
||||||
|
extern const image_t img_5x7_1;
|
||||||
|
extern const image_t img_5x7_0;
|
||||||
|
extern const image_t img_6x8_v;
|
||||||
|
extern const image_t img_6x8_n;
|
||||||
|
extern const image_t img_6x8_G;
|
||||||
|
extern const image_t img_6x8_F;
|
||||||
|
extern const image_t img_6x8_E;
|
||||||
|
extern const image_t img_6x8_d;
|
||||||
|
extern const image_t img_6x8_C;
|
||||||
|
extern const image_t img_6x8_B;
|
||||||
|
extern const image_t img_6x8_A;
|
||||||
|
extern const image_t img_6x8_9;
|
||||||
|
extern const image_t img_6x8_8;
|
||||||
|
extern const image_t img_6x8_6;
|
||||||
|
extern const image_t img_6x8_5;
|
||||||
|
extern const image_t img_6x8_4;
|
||||||
|
extern const image_t img_6x8_3;
|
||||||
|
extern const image_t img_6x8_2;
|
||||||
|
extern const image_t img_6x8_1;
|
||||||
|
extern const image_t img_6x8_0;
|
||||||
|
extern const image_t img_ecp_SDA;
|
||||||
|
extern const image_t img_ecp_SCL;
|
||||||
|
extern const image_t img_ecp_port;
|
||||||
|
extern const image_t img_cc_pad_UD1;
|
||||||
|
extern const image_t img_cc_pad_LR1;
|
||||||
|
extern const image_t img_cc_btn_Y1;
|
||||||
|
extern const image_t img_cc_btn_X1;
|
||||||
|
extern const image_t img_cc_btn_B1;
|
||||||
|
extern const image_t img_cc_btn_A1;
|
||||||
|
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) ;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif //IMAGES_H_
|
||||||
11
applications/plugins/wii_ec_anal/gfx/img_3x5_0.c
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
// ######
|
||||||
|
// ##..##
|
||||||
|
// ##..##
|
||||||
|
// ##..##
|
||||||
|
// ######
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
const image_t img_3x5_0 = { 3, 5, false, 2, 0, {
|
||||||
|
0xF6, 0xDE
|
||||||
|
}};
|
||||||
11
applications/plugins/wii_ec_anal/gfx/img_3x5_1.c
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
// ####..
|
||||||
|
// ..##..
|
||||||
|
// ..##..
|
||||||
|
// ..##..
|
||||||
|
// ######
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
const image_t img_3x5_1 = { 3, 5, false, 2, 0, {
|
||||||
|
0xC9, 0x2E
|
||||||
|
}};
|
||||||
11
applications/plugins/wii_ec_anal/gfx/img_3x5_2.c
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
// ######
|
||||||
|
// ....##
|
||||||
|
// ######
|
||||||
|
// ##....
|
||||||
|
// ######
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
const image_t img_3x5_2 = { 3, 5, false, 2, 0, {
|
||||||
|
0xE7, 0xCE
|
||||||
|
}};
|
||||||
11
applications/plugins/wii_ec_anal/gfx/img_3x5_3.c
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
// ######
|
||||||
|
// ....##
|
||||||
|
// ..####
|
||||||
|
// ....##
|
||||||
|
// ######
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
const image_t img_3x5_3 = { 3, 5, false, 2, 0, {
|
||||||
|
0xE5, 0x9E
|
||||||
|
}};
|
||||||
11
applications/plugins/wii_ec_anal/gfx/img_3x5_4.c
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
// ##....
|
||||||
|
// ##..##
|
||||||
|
// ######
|
||||||
|
// ....##
|
||||||
|
// ....##
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
const image_t img_3x5_4 = { 3, 5, false, 2, 0, {
|
||||||
|
0x97, 0x92
|
||||||
|
}};
|
||||||
11
applications/plugins/wii_ec_anal/gfx/img_3x5_5.c
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
// ######
|
||||||
|
// ##....
|
||||||
|
// ######
|
||||||
|
// ....##
|
||||||
|
// ######
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
const image_t img_3x5_5 = { 3, 5, false, 2, 0, {
|
||||||
|
0xF3, 0x9E
|
||||||
|
}};
|
||||||
11
applications/plugins/wii_ec_anal/gfx/img_3x5_6.c
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
// ####..
|
||||||
|
// ##....
|
||||||
|
// ######
|
||||||
|
// ##..##
|
||||||
|
// ######
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
const image_t img_3x5_6 = { 3, 5, false, 2, 0, {
|
||||||
|
0xD3, 0xDE
|
||||||
|
}};
|
||||||
11
applications/plugins/wii_ec_anal/gfx/img_3x5_7.c
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
// ######
|
||||||
|
// ....##
|
||||||
|
// ..##..
|
||||||
|
// ..##..
|
||||||
|
// ..##..
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
const image_t img_3x5_7 = { 3, 5, false, 2, 0, {
|
||||||
|
0xE5, 0x24
|
||||||
|
}};
|
||||||
11
applications/plugins/wii_ec_anal/gfx/img_3x5_8.c
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
// ######
|
||||||
|
// ##..##
|
||||||
|
// ######
|
||||||
|
// ##..##
|
||||||
|
// ######
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
const image_t img_3x5_8 = { 3, 5, false, 2, 0, {
|
||||||
|
0xF7, 0xDE
|
||||||
|
}};
|
||||||
11
applications/plugins/wii_ec_anal/gfx/img_3x5_9.c
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
// ######
|
||||||
|
// ##..##
|
||||||
|
// ######
|
||||||
|
// ....##
|
||||||
|
// ..####
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
const image_t img_3x5_9 = { 3, 5, false, 2, 0, {
|
||||||
|
0xF7, 0x96
|
||||||
|
}};
|
||||||
11
applications/plugins/wii_ec_anal/gfx/img_3x5_v.c
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
// ......
|
||||||
|
// ......
|
||||||
|
// ##..##
|
||||||
|
// ##..##
|
||||||
|
// ..##..
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
const image_t img_3x5_v = { 3, 5, false, 2, 0, {
|
||||||
|
0x02, 0xD4
|
||||||
|
}};
|
||||||
13
applications/plugins/wii_ec_anal/gfx/img_5x7_0.c
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
// ..######..
|
||||||
|
// ##......##
|
||||||
|
// ##....####
|
||||||
|
// ##..##..##
|
||||||
|
// ####....##
|
||||||
|
// ##......##
|
||||||
|
// ..######..
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
const image_t img_5x7_0 = { 5, 7, false, 5, 0, {
|
||||||
|
0x74, 0x67, 0x5C, 0xC5, 0xC0
|
||||||
|
}};
|
||||||
13
applications/plugins/wii_ec_anal/gfx/img_5x7_1.c
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
// ..####....
|
||||||
|
// ##..##....
|
||||||
|
// ....##....
|
||||||
|
// ....##....
|
||||||
|
// ....##....
|
||||||
|
// ....##....
|
||||||
|
// ##########
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
const image_t img_5x7_1 = { 5, 7, false, 5, 0, {
|
||||||
|
0x65, 0x08, 0x42, 0x13, 0xE0
|
||||||
|
}};
|
||||||
13
applications/plugins/wii_ec_anal/gfx/img_5x7_2.c
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
// ..######..
|
||||||
|
// ##......##
|
||||||
|
// ........##
|
||||||
|
// ......##..
|
||||||
|
// ....##....
|
||||||
|
// ..##......
|
||||||
|
// ##########
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
const image_t img_5x7_2 = { 5, 7, false, 5, 0, {
|
||||||
|
0x74, 0x42, 0x22, 0x23, 0xE0
|
||||||
|
}};
|
||||||
13
applications/plugins/wii_ec_anal/gfx/img_5x7_3.c
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
// ..######..
|
||||||
|
// ##......##
|
||||||
|
// ........##
|
||||||
|
// ....####..
|
||||||
|
// ........##
|
||||||
|
// ##......##
|
||||||
|
// ..######..
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
const image_t img_5x7_3 = { 5, 7, false, 5, 0, {
|
||||||
|
0x74, 0x42, 0x60, 0xC5, 0xC0
|
||||||
|
}};
|
||||||
13
applications/plugins/wii_ec_anal/gfx/img_5x7_4.c
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
// ##........
|
||||||
|
// ##........
|
||||||
|
// ##....##..
|
||||||
|
// ##....##..
|
||||||
|
// ##########
|
||||||
|
// ......##..
|
||||||
|
// ......##..
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
const image_t img_5x7_4 = { 5, 7, false, 5, 0, {
|
||||||
|
0x84, 0x25, 0x2F, 0x88, 0x40
|
||||||
|
}};
|
||||||
13
applications/plugins/wii_ec_anal/gfx/img_5x7_5.c
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
// ##########
|
||||||
|
// ##........
|
||||||
|
// ##........
|
||||||
|
// ########..
|
||||||
|
// ........##
|
||||||
|
// ........##
|
||||||
|
// ########..
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
const image_t img_5x7_5 = { 5, 7, false, 5, 0, {
|
||||||
|
0xFC, 0x21, 0xE0, 0x87, 0xC0
|
||||||
|
}};
|
||||||
13
applications/plugins/wii_ec_anal/gfx/img_5x7_6.c
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
// ..######..
|
||||||
|
// ##........
|
||||||
|
// ##........
|
||||||
|
// ########..
|
||||||
|
// ##......##
|
||||||
|
// ##......##
|
||||||
|
// ..######..
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
const image_t img_5x7_6 = { 5, 7, false, 5, 0, {
|
||||||
|
0x74, 0x21, 0xE8, 0xC5, 0xC0
|
||||||
|
}};
|
||||||
13
applications/plugins/wii_ec_anal/gfx/img_5x7_7.c
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
// ##########
|
||||||
|
// ........##
|
||||||
|
// ......##..
|
||||||
|
// ......##..
|
||||||
|
// ....##....
|
||||||
|
// ....##....
|
||||||
|
// ....##....
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
const image_t img_5x7_7 = { 5, 7, false, 5, 0, {
|
||||||
|
0xF8, 0x44, 0x22, 0x10, 0x80
|
||||||
|
}};
|
||||||
13
applications/plugins/wii_ec_anal/gfx/img_5x7_8.c
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
// ..######..
|
||||||
|
// ##......##
|
||||||
|
// ##......##
|
||||||
|
// ..######..
|
||||||
|
// ##......##
|
||||||
|
// ##......##
|
||||||
|
// ..######..
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
const image_t img_5x7_8 = { 5, 7, false, 5, 0, {
|
||||||
|
0x74, 0x62, 0xE8, 0xC5, 0xC0
|
||||||
|
}};
|
||||||
13
applications/plugins/wii_ec_anal/gfx/img_5x7_9.c
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
// ..######..
|
||||||
|
// ##......##
|
||||||
|
// ##......##
|
||||||
|
// ..########
|
||||||
|
// ........##
|
||||||
|
// ........##
|
||||||
|
// ..######..
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
const image_t img_5x7_9 = { 5, 7, false, 5, 0, {
|
||||||
|
0x74, 0x62, 0xF0, 0x85, 0xC0
|
||||||
|
}};
|
||||||
13
applications/plugins/wii_ec_anal/gfx/img_5x7_A.c
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
// ..######..
|
||||||
|
// ##......##
|
||||||
|
// ##......##
|
||||||
|
// ##########
|
||||||
|
// ##......##
|
||||||
|
// ##......##
|
||||||
|
// ##......##
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
const image_t img_5x7_A = { 5, 7, false, 5, 0, {
|
||||||
|
0x74, 0x63, 0xF8, 0xC6, 0x20
|
||||||
|
}};
|
||||||
13
applications/plugins/wii_ec_anal/gfx/img_5x7_B.c
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
// ########..
|
||||||
|
// ##......##
|
||||||
|
// ##......##
|
||||||
|
// ##..####..
|
||||||
|
// ##......##
|
||||||
|
// ##......##
|
||||||
|
// ########..
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
const image_t img_5x7_B = { 5, 7, false, 5, 0, {
|
||||||
|
0xF4, 0x63, 0x68, 0xC7, 0xC0
|
||||||
|
}};
|
||||||
13
applications/plugins/wii_ec_anal/gfx/img_5x7_C.c
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
// ..######..
|
||||||
|
// ##......##
|
||||||
|
// ##........
|
||||||
|
// ##........
|
||||||
|
// ##........
|
||||||
|
// ##......##
|
||||||
|
// ..######..
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
const image_t img_5x7_C = { 5, 7, false, 5, 0, {
|
||||||
|
0x74, 0x61, 0x08, 0x45, 0xC0
|
||||||
|
}};
|
||||||
13
applications/plugins/wii_ec_anal/gfx/img_5x7_D.c
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
// ..######..
|
||||||
|
// ##..##..##
|
||||||
|
// ....##..##
|
||||||
|
// ....##..##
|
||||||
|
// ....##..##
|
||||||
|
// ##..##..##
|
||||||
|
// ..######..
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
const image_t img_5x7_D = { 5, 7, false, 5, 0, {
|
||||||
|
0x75, 0x4A, 0x52, 0xD5, 0xC0
|
||||||
|
}};
|
||||||
13
applications/plugins/wii_ec_anal/gfx/img_5x7_E.c
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
// ##########
|
||||||
|
// ##........
|
||||||
|
// ##........
|
||||||
|
// ######....
|
||||||
|
// ##........
|
||||||
|
// ##........
|
||||||
|
// ##########
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
const image_t img_5x7_E = { 5, 7, false, 5, 0, {
|
||||||
|
0xFC, 0x21, 0xC8, 0x43, 0xE0
|
||||||
|
}};
|
||||||
13
applications/plugins/wii_ec_anal/gfx/img_5x7_F.c
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
// ##########
|
||||||
|
// ##........
|
||||||
|
// ##........
|
||||||
|
// ######....
|
||||||
|
// ##........
|
||||||
|
// ##........
|
||||||
|
// ##........
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
const image_t img_5x7_F = { 5, 7, false, 5, 0, {
|
||||||
|
0xFC, 0x21, 0xC8, 0x42, 0x00
|
||||||
|
}};
|
||||||
14
applications/plugins/wii_ec_anal/gfx/img_6x8_0.c
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
// ..########..
|
||||||
|
// ############
|
||||||
|
// ####....####
|
||||||
|
// ####....####
|
||||||
|
// ####....####
|
||||||
|
// ####....####
|
||||||
|
// ############
|
||||||
|
// ..########..
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
const image_t img_6x8_0 = { 6, 8, false, 6, 0, {
|
||||||
|
0x7B, 0xFC, 0xF3, 0xCF, 0x3F, 0xDE
|
||||||
|
}};
|
||||||
14
applications/plugins/wii_ec_anal/gfx/img_6x8_1.c
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
// ..######....
|
||||||
|
// ########....
|
||||||
|
// ....####....
|
||||||
|
// ....####....
|
||||||
|
// ....####....
|
||||||
|
// ....####....
|
||||||
|
// ############
|
||||||
|
// ############
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
const image_t img_6x8_1 = { 6, 8, false, 6, 0, {
|
||||||
|
0x73, 0xC3, 0x0C, 0x30, 0xCF, 0xFF
|
||||||
|
}};
|
||||||
14
applications/plugins/wii_ec_anal/gfx/img_6x8_2.c
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
// ..########..
|
||||||
|
// ############
|
||||||
|
// ........####
|
||||||
|
// ......######
|
||||||
|
// ....####....
|
||||||
|
// ..####......
|
||||||
|
// ############
|
||||||
|
// ############
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
const image_t img_6x8_2 = { 6, 8, false, 6, 0, {
|
||||||
|
0x7B, 0xF0, 0xC7, 0x31, 0x8F, 0xFF
|
||||||
|
}};
|
||||||
14
applications/plugins/wii_ec_anal/gfx/img_6x8_3.c
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
// ..########..
|
||||||
|
// ############
|
||||||
|
// ........####
|
||||||
|
// ....########
|
||||||
|
// ....########
|
||||||
|
// ........####
|
||||||
|
// ############
|
||||||
|
// ..########..
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
const image_t img_6x8_3 = { 6, 8, false, 6, 0, {
|
||||||
|
0x7B, 0xF0, 0xCF, 0x3C, 0x3F, 0xDE
|
||||||
|
}};
|
||||||
14
applications/plugins/wii_ec_anal/gfx/img_6x8_4.c
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
// ####........
|
||||||
|
// ####........
|
||||||
|
// ####..####..
|
||||||
|
// ####..####..
|
||||||
|
// ############
|
||||||
|
// ############
|
||||||
|
// ......####..
|
||||||
|
// ......####..
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
const image_t img_6x8_4 = { 6, 8, false, 6, 0, {
|
||||||
|
0xC3, 0x0D, 0xB6, 0xFF, 0xF1, 0x86
|
||||||
|
}};
|
||||||
14
applications/plugins/wii_ec_anal/gfx/img_6x8_5.c
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
// ############
|
||||||
|
// ############
|
||||||
|
// ####........
|
||||||
|
// ##########..
|
||||||
|
// ############
|
||||||
|
// ........####
|
||||||
|
// ############
|
||||||
|
// ##########..
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
const image_t img_6x8_5 = { 6, 8, false, 6, 0, {
|
||||||
|
0xFF, 0xFC, 0x3E, 0xFC, 0x3F, 0xFE
|
||||||
|
}};
|
||||||
14
applications/plugins/wii_ec_anal/gfx/img_6x8_6.c
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
// ..########..
|
||||||
|
// ##########..
|
||||||
|
// ####........
|
||||||
|
// ##########..
|
||||||
|
// ############
|
||||||
|
// ####....####
|
||||||
|
// ############
|
||||||
|
// ..########..
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
const image_t img_6x8_6 = { 6, 8, false, 6, 0, {
|
||||||
|
0x7B, 0xEC, 0x3E, 0xFF, 0x3F, 0xDE
|
||||||
|
}};
|
||||||
14
applications/plugins/wii_ec_anal/gfx/img_6x8_7.c
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
// ############
|
||||||
|
// ############
|
||||||
|
// ........####
|
||||||
|
// ......####..
|
||||||
|
// ......####..
|
||||||
|
// ....####....
|
||||||
|
// ....####....
|
||||||
|
// ....####....
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
const image_t img_6x8_7 = { 6, 8, false, 6, 0, {
|
||||||
|
0xFF, 0xF0, 0xC6, 0x18, 0xC3, 0x0C
|
||||||
|
}};
|
||||||
14
applications/plugins/wii_ec_anal/gfx/img_6x8_8.c
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
// ..########..
|
||||||
|
// ############
|
||||||
|
// ####....####
|
||||||
|
// ..########..
|
||||||
|
// ############
|
||||||
|
// ####....####
|
||||||
|
// ############
|
||||||
|
// ..########..
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
const image_t img_6x8_8 = { 6, 8, false, 6, 0, {
|
||||||
|
0x7B, 0xFC, 0xDE, 0xFF, 0x3F, 0xDE
|
||||||
|
}};
|
||||||
14
applications/plugins/wii_ec_anal/gfx/img_6x8_9.c
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
// ..########..
|
||||||
|
// ############
|
||||||
|
// ####....####
|
||||||
|
// ############
|
||||||
|
// ..##########
|
||||||
|
// ........####
|
||||||
|
// ..##########
|
||||||
|
// ..########..
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
const image_t img_6x8_9 = { 6, 8, false, 6, 0, {
|
||||||
|
0x7B, 0xFC, 0xFF, 0x7C, 0x37, 0xDE
|
||||||
|
}};
|
||||||
14
applications/plugins/wii_ec_anal/gfx/img_6x8_A.c
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
// ..########..
|
||||||
|
// ############
|
||||||
|
// ####....####
|
||||||
|
// ####....####
|
||||||
|
// ############
|
||||||
|
// ############
|
||||||
|
// ####....####
|
||||||
|
// ####....####
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
const image_t img_6x8_A = { 6, 8, false, 6, 0, {
|
||||||
|
0x7B, 0xFC, 0xF3, 0xFF, 0xFC, 0xF3
|
||||||
|
}};
|
||||||
14
applications/plugins/wii_ec_anal/gfx/img_6x8_B.c
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
// ##########..
|
||||||
|
// ############
|
||||||
|
// ####....####
|
||||||
|
// ##########..
|
||||||
|
// ##########..
|
||||||
|
// ####....####
|
||||||
|
// ############
|
||||||
|
// ##########..
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
const image_t img_6x8_B = { 6, 8, false, 6, 0, {
|
||||||
|
0xFB, 0xFC, 0xFE, 0xFB, 0x3F, 0xFE
|
||||||
|
}};
|
||||||
14
applications/plugins/wii_ec_anal/gfx/img_6x8_C.c
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
// ..##########
|
||||||
|
// ############
|
||||||
|
// ####........
|
||||||
|
// ####........
|
||||||
|
// ####........
|
||||||
|
// ####........
|
||||||
|
// ############
|
||||||
|
// ..##########
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
const image_t img_6x8_C = { 6, 8, false, 6, 0, {
|
||||||
|
0x7F, 0xFC, 0x30, 0xC3, 0x0F, 0xDF
|
||||||
|
}};
|
||||||
14
applications/plugins/wii_ec_anal/gfx/img_6x8_D.c
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
// ##########..
|
||||||
|
// ############
|
||||||
|
// ..####..####
|
||||||
|
// ..####..####
|
||||||
|
// ..####..####
|
||||||
|
// ..####..####
|
||||||
|
// ############
|
||||||
|
// ##########..
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
const image_t img_6x8_D = { 6, 8, false, 6, 0, {
|
||||||
|
0xFB, 0xF6, 0xDB, 0x6D, 0xBF, 0xFE
|
||||||
|
}};
|
||||||
14
applications/plugins/wii_ec_anal/gfx/img_6x8_E.c
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
// ############
|
||||||
|
// ############
|
||||||
|
// ####........
|
||||||
|
// ########....
|
||||||
|
// ########....
|
||||||
|
// ####........
|
||||||
|
// ############
|
||||||
|
// ############
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
const image_t img_6x8_E = { 6, 8, false, 6, 0, {
|
||||||
|
0xFF, 0xFC, 0x3C, 0xF3, 0x0F, 0xFF
|
||||||
|
}};
|
||||||
14
applications/plugins/wii_ec_anal/gfx/img_6x8_F.c
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
// ############
|
||||||
|
// ############
|
||||||
|
// ####........
|
||||||
|
// ########....
|
||||||
|
// ########....
|
||||||
|
// ####........
|
||||||
|
// ####........
|
||||||
|
// ####........
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
const image_t img_6x8_F = { 6, 8, false, 6, 0, {
|
||||||
|
0xFF, 0xFC, 0x3C, 0xF3, 0x0C, 0x30
|
||||||
|
}};
|
||||||
14
applications/plugins/wii_ec_anal/gfx/img_6x8_G.c
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
// ..##########
|
||||||
|
// ############
|
||||||
|
// ####........
|
||||||
|
// ####........
|
||||||
|
// ####..######
|
||||||
|
// ####....####
|
||||||
|
// ############
|
||||||
|
// ..##########
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
const image_t img_6x8_G = { 6, 8, false, 6, 0, {
|
||||||
|
0x7F, 0xFC, 0x30, 0xDF, 0x3F, 0xDF
|
||||||
|
}};
|
||||||
14
applications/plugins/wii_ec_anal/gfx/img_6x8_X.c
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
// ####....####
|
||||||
|
// ####....####
|
||||||
|
// ..####..##..
|
||||||
|
// ....######..
|
||||||
|
// ..######....
|
||||||
|
// ..##..####..
|
||||||
|
// ####....####
|
||||||
|
// ####....####
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
const image_t img_6x8_X = { 6, 8, false, 6, 0, {
|
||||||
|
0xCF, 0x36, 0x8E, 0x71, 0x6C, 0xF3
|
||||||
|
}};
|
||||||
14
applications/plugins/wii_ec_anal/gfx/img_6x8_Y.c
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
// ####....####
|
||||||
|
// ####....####
|
||||||
|
// ####....####
|
||||||
|
// ####....####
|
||||||
|
// ..########..
|
||||||
|
// ....####....
|
||||||
|
// ....####....
|
||||||
|
// ....####....
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
const image_t img_6x8_Y = { 6, 8, false, 6, 0, {
|
||||||
|
0xCF, 0x3C, 0xF3, 0x78, 0xC3, 0x0C
|
||||||
|
}};
|
||||||
14
applications/plugins/wii_ec_anal/gfx/img_6x8_Z.c
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
// ############
|
||||||
|
// ############
|
||||||
|
// ........####
|
||||||
|
// ......####..
|
||||||
|
// ....####....
|
||||||
|
// ..####......
|
||||||
|
// ############
|
||||||
|
// ############
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
const image_t img_6x8_Z = { 6, 8, false, 6, 0, {
|
||||||
|
0xFF, 0xF0, 0xC6, 0x31, 0x8F, 0xFF
|
||||||
|
}};
|
||||||
14
applications/plugins/wii_ec_anal/gfx/img_6x8_d_.c
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
// ........####
|
||||||
|
// ........####
|
||||||
|
// ........####
|
||||||
|
// ..##########
|
||||||
|
// ############
|
||||||
|
// ####....####
|
||||||
|
// ############
|
||||||
|
// ..##########
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
const image_t img_6x8_d = { 6, 8, false, 6, 0, {
|
||||||
|
0x0C, 0x30, 0xDF, 0xFF, 0x3F, 0xDF
|
||||||
|
}};
|
||||||
14
applications/plugins/wii_ec_anal/gfx/img_6x8_n_.c
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
// ............
|
||||||
|
// ............
|
||||||
|
// ..########..
|
||||||
|
// ############
|
||||||
|
// ####....####
|
||||||
|
// ####....####
|
||||||
|
// ####....####
|
||||||
|
// ####....####
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
const image_t img_6x8_n = { 6, 8, false, 6, 0, {
|
||||||
|
0x00, 0x07, 0xBF, 0xCF, 0x3C, 0xF3
|
||||||
|
}};
|
||||||
14
applications/plugins/wii_ec_anal/gfx/img_6x8_v_.c
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
// ............
|
||||||
|
// ............
|
||||||
|
// ##........##
|
||||||
|
// ####....####
|
||||||
|
// ####....####
|
||||||
|
// ############
|
||||||
|
// ..########..
|
||||||
|
// ....####....
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
const image_t img_6x8_v = { 6, 8, false, 6, 0, {
|
||||||
|
0x00, 0x08, 0x73, 0xCF, 0xF7, 0x8C
|
||||||
|
}};
|
||||||
122
applications/plugins/wii_ec_anal/gfx/img_RIP.c
Normal file
@@ -0,0 +1,122 @@
|
|||||||
|
// ################################################################################################################################################################################################################################################################
|
||||||
|
// ################################################################################################################################################################################################################################################################
|
||||||
|
// ####........................................................................................................................................................................................................................................................####
|
||||||
|
// ####..##..##........................................................................................................................................................................................................................................##..##..####
|
||||||
|
// ####....##....................##############..........########........##################........................##############......##..........##......##############......##############......##############......##############....................##....####
|
||||||
|
// ####..##..##..................##############............######..........################........................##############....######......######....##############......##############......##############......##############..................##..##..####
|
||||||
|
// ####....................................######..........##..##......................######....................####........######..######......######..####........######..######......######..............######..######......######........................####
|
||||||
|
// ####........................######......######..........##..##..........######......##..##....................######......##..##..##..##......##..##..######......######..######......######..######......######..######......##..##........................####
|
||||||
|
// ####........................######......##..##..........##..##..........######......##..##....................##..##......######..##..##......##..##..######......##..##..##..##......##..##..######......##..##..##..##......##..##........................####
|
||||||
|
// ####........................##..##......##..##..........##..##..........##..##......##..##....................##..##..............##..##......##..##..##..##......##..##..##..##......##..##..##..##......##..##..##..##......##..##........................####
|
||||||
|
// ####........................##..##......##..##..........##..##..........##..##......##..##....................##..##..............##..##......##..##..##..##......##..##..##..##......##..##..##..##......##..##..##..##......######........................####
|
||||||
|
// ####........................##..##......######..........##..##..........##..##......######....................##..##..............##..##......##..##..##..##......######..##..##..##..##..##..##..##......######..##..##....................................####
|
||||||
|
// ####........................##..##########..............##..##..........##..##########........................##..##..............######......######..##..##########......##..##......##..##..##..##########......##..##....................................####
|
||||||
|
// ####........................##..##########..............##..##..........##..##########........................##..##................##############....##..##########......##..##......##..##..##..##########......##..##..########..........................####
|
||||||
|
// ####........................##..##....######............##..##..........##..##................................##..##..................####..####......##..##......######..##..##..##..##..##..##..##....######....##..##..##########........................####
|
||||||
|
// ####........................##..##....##..##............##..##..........##..##................................##..##....................##..##........##..##......##..##..##..##......##..##..##..##....##..##....##..##......##..##........................####
|
||||||
|
// ####........................##..##....##..##............##..##..........##..##................................##..##....................##..##........##..##......##..##..##..##......##..##..##..##....##..##....##..##......##..##........................####
|
||||||
|
// ####........................##..##....##..##............##..##..........##..##................................######......######........##..##........##..##......##..##..##..##......##..##..##..##....##..##....######......##..##........................####
|
||||||
|
// ####........................##..##....##..##............##..##..........##..##................................######......##..##........##..##........######......######..######......######..##..##....##..##....######......##..##........................####
|
||||||
|
// ####........................##..##....##..##............##..##..........##..##................................####........######........######........######......######..######......######..##..##....##..##....####........######........................####
|
||||||
|
// ####........................######....######....####....######..####....######..####............................##############..........######..........##############......##############....######....######......##############..........................####
|
||||||
|
// ####........................######......######..####..########..####..########..####............................##############........##########........##############......##############....######......######....##############..........................####
|
||||||
|
// ####........................................................................................................................................................................................................................................................####
|
||||||
|
// ####........................................................................................................................................................................................................................................................####
|
||||||
|
// ####..........................................................................................................................................................................................####......####..............##############....................####
|
||||||
|
// ####......................................................................................................................................##................................................##....##..##....##........####..............####................####
|
||||||
|
// ####..........######..##..##..######......######..##..##..######..######..######..####..####..######......##......##..######..##....##..##..######......######..######......................####..##..####..##......##......................##..............####
|
||||||
|
// ####............##....##..##..##..........##......##..##..##........##....##......##..##..##..##..........##......##..##..##..####..##........##........##..##..##............................####......####......##......##########..........##............####
|
||||||
|
// ####............##....######..####........######....##....######....##....####....##..##..##..######......##..##..##..##..##..##..####........##........####....####..............................##..##........##......##..........##........##............####
|
||||||
|
// ####............##....##..##..##..............##....##........##....##....##......##......##......##......##..##..##..##..##..##....##........##........##..##..##..................................##..........##....##..............##......##............####
|
||||||
|
// ####............##....##..##..######......######....##....######....##....######..##......##..######......####..####..######..##....##........##........######..######............................######........##....##......####....##......##............####
|
||||||
|
// ####............................................................................................................................................................................................##......##......##....##....##....##..##......##............####
|
||||||
|
// ####..........................................................................................................................................................................................##........##......##....##....##..##....##......##............####
|
||||||
|
// ####..........................................................................................................................................................................................##........##......##....##....##........##......##............####
|
||||||
|
// ####..........######..##..##..######......######..######..####..####..######......##......##..######..######..##..##..######..##..##..######......##..##..######..##..##........................##........######......##......########......##..............####
|
||||||
|
// ####............##....##..##..##..........##......##..##..##..##..##..##..........##......##....##......##....##..##..##..##..##..##....##........##..##..##..##..##..##........................##..............##......##..................####............####
|
||||||
|
// ####............##....######..####........######..######..##..##..##..####........##..##..##....##......##....######..##..##..##..##....##..........##....##..##..##..##..........................##..............##########..............##....##..........####
|
||||||
|
// ####............##....##..##..##..............##..##..##..##......##..##..........##..##..##....##......##....##..##..##..##..##..##....##..........##....##..##..##..##..........................##......................################........##........####
|
||||||
|
// ####............##....##..##..######......######..##..##..##......##..######......####..####..######....##....##..##..######..######....##..........##....######..######............................####..........................................##........####
|
||||||
|
// ####....................................................................................................................................................................................................##########################################..........####
|
||||||
|
// ####........................................................................................................................................................................................................................................................####
|
||||||
|
// ####........................................................................................................................................................................................................................................................####
|
||||||
|
// ####......................................##########......##############......##############......##############............................##############......##############......##############......##############......................................####
|
||||||
|
// ####......................................##########......##############......##############......##############............................##############......##############......##############......##############......................................####
|
||||||
|
// ####......................................##..##..##....######......######..######......######..######......######........................######......######..######......######..######......######..######......######....................................####
|
||||||
|
// ####..........................................##..##....######......######..##..##......######..######......######........................##..##......##..##..######......######..##..##......##..##..##..##......##..##....................................####
|
||||||
|
// ####..........................................##..##....##..##......##..##..######......##..##..##..##......##..##........................######......##..##..##..##......##..##..######......##..##..######......##..##....................................####
|
||||||
|
// ####..........................................##..##....##..##......##..##..............##..##..##..##......##..##....................................##..##..##..##......##..##..............##..##..............##..##....................................####
|
||||||
|
// ####..........................................##..##....##..##......##..##..............##..##..##..##....####..##....................................##..##..##..##....####..##..............##..##..............##..##....................................####
|
||||||
|
// ####..........................................##..##....######......##..##..............######..##..##....####..##....................................######..##..##....####..##..............######..............######....................................####
|
||||||
|
// ####..........................................######........##########..##..............######..##..##..##..##..##....################........############....##..##..##..##..##......############........############......................................####
|
||||||
|
// ####..........................................######........##########..##..........######......##..##..##..##..##....##............##......############......##..##..##..##..##....############........############........................................####
|
||||||
|
// ####..........................................##..##................##..##..........######......##..####....##..##....################....######..............##..####....##..##..######..............######................................................####
|
||||||
|
// ####..........................................##..##................##..##..........##..##......##..####....##..##........................##..##..............##..####....##..##..##..##..............##..##................................................####
|
||||||
|
// ####..........................................##..##................##..##..........##..##......##..##......##..##........................##..##..............##..##......##..##..##..##..............##..##................................................####
|
||||||
|
// ####..........................................##..##................##..##..........##..##......##..##......##..##........................##..##..............##..##......##..##..##..##..............##..##................................................####
|
||||||
|
// ####..........................................##..##................######..........##..##......######......######........................##..##..............######......######..##..##..............##..##................................................####
|
||||||
|
// ####..........................................##..##................######..........##..##......######......######........................##..##........####..######......######..##..##........####..##..##........####....................................####
|
||||||
|
// ####..##..##..............................##############....############............######........##############..........................##################....##############....##################..##################............................##..##..####
|
||||||
|
// ####....##..............................##################..############............######........##############..........................##################....##############....##################..##################..............................##....####
|
||||||
|
// ####..##..##........................................................................................................................................................................................................................................##..##..####
|
||||||
|
// ####........................................................................................................................................................................................................................................................####
|
||||||
|
// ################################################################################################################################################################################################################################################################
|
||||||
|
// ################################################################################################################################################################################################################################################################
|
||||||
|
|
||||||
|
#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
|
||||||
|
}};
|
||||||
17
applications/plugins/wii_ec_anal/gfx/img_cc_Cable.c
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
// ####..##
|
||||||
|
// ##..####
|
||||||
|
// ####..##
|
||||||
|
// ##..####
|
||||||
|
// ####..##
|
||||||
|
// ##..####
|
||||||
|
// ####..##
|
||||||
|
// ##..####
|
||||||
|
// ####..##
|
||||||
|
// ##..####
|
||||||
|
// ####..##
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
const image_t img_cc_Cable = { 4, 11, true, 4, 0x00, { // orig:6, comp:33.33%
|
||||||
|
0x00, 0x05, 0xDB, 0xD0
|
||||||
|
}};
|
||||||
25
applications/plugins/wii_ec_anal/gfx/img_cc_Joy.c
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
// ................##................
|
||||||
|
// ............##########............
|
||||||
|
// ....############..############....
|
||||||
|
// ....######..............######....
|
||||||
|
// ....####..................####....
|
||||||
|
// ....##......................##....
|
||||||
|
// ..####......................####..
|
||||||
|
// ..####......................####..
|
||||||
|
// ####..........................####
|
||||||
|
// ..####......................####..
|
||||||
|
// ..####......................####..
|
||||||
|
// ....##......................##....
|
||||||
|
// ....####..................####....
|
||||||
|
// ....######..............######....
|
||||||
|
// ....############..############....
|
||||||
|
// ............##########............
|
||||||
|
// ................##................
|
||||||
|
|
||||||
|
#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
|
||||||
|
}};
|
||||||
92
applications/plugins/wii_ec_anal/gfx/img_cc_Main.c
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
// ..................................................##################................................................................................................##################..................................................
|
||||||
|
// ......................................############................##............##########....................................................##########............##................############......................................
|
||||||
|
// ..................................####............................##..........##..........##......................####......................##..........##..........##............................####..................................
|
||||||
|
// ................................##................................##############..........####################################################..........##############................................##................................
|
||||||
|
// ............................######................................##..........##..........##......................####......................##..........##..........##................................######............................
|
||||||
|
// ..........................##..##....................################..........##..........##......................####......................##..........##..........################....................##..##..........................
|
||||||
|
// ........................##....##........############............................##########....................................................##########............................############........##....##........................
|
||||||
|
// ......................##......##########........................................................................................................................................................##########......##......................
|
||||||
|
// ....................##..........########################################################################################################################################################################..........##....................
|
||||||
|
// ..................##......########....................................................................................................................................................................########......##..................
|
||||||
|
// ................##....######................................................................................................................................................................................######....##................
|
||||||
|
// ..............##....####........................................................................................................................................................................................####....##..............
|
||||||
|
// ............##########............................................................................................................................................................................................##########............
|
||||||
|
// ............######......................................................................................####......####..####..####....................................................................................######............
|
||||||
|
// ..........######......................##################................................................####..##..####..................................................................######..........................######..........
|
||||||
|
// ..........####........................##################................................................####..##..####..####..####....................................................##########..........................####..........
|
||||||
|
// ........####..........................####..........####................................................####..##..####..####..####..................................................####......####..........................####........
|
||||||
|
// ......######..........................####..........####..................................................####..####....####..####................................................####..........####........................######......
|
||||||
|
// ......####............................####....##....####........................................................................................................................####....##..##....####........................####......
|
||||||
|
// ......##..............................####....##....####........................................................................................................................####......##......####..........................####....
|
||||||
|
// ....####..............................####....##....####........................................................................................................................####....##..##....####..........................####....
|
||||||
|
// ....##..................##################..........##################............................................................................................######..........####..........####..........######..............##....
|
||||||
|
// ..####..................##################..........##################..........................................................................................##########..........####......####..........##########............####..
|
||||||
|
// ..##....................####......................................####..........................########........########........########......................####......####..........##########..........####......####............##..
|
||||||
|
// ..##....................####......................................####........................####....####....####....####....####....####..................####..........####..........######..........####....##....####..........##..
|
||||||
|
// ####....................####....######..................######....####........................##........##....##........##....##........##................####....##..##....####......................####....##..##....####........####
|
||||||
|
// ##......................####......................................####........................##........##....##........##....##........##................####....######....####......................####....######....####..........##
|
||||||
|
// ##......................####......................................####........................####....####....####....####....####....####................####........##....####......................####....##..##....####..........##
|
||||||
|
// ##......................##################..........##################..........................########........########........########....................####....##....####..........######..........####..........####............##
|
||||||
|
// ##......................##################..........##################........................................................................................####......####..........##########..........####......####..............##
|
||||||
|
// ##....................................####....##....####........................................................................................................##########..........####......####..........##########................##
|
||||||
|
// ##....................................####....##....####..........................................................................................................######..........####..##......####..........######..................##
|
||||||
|
// ##....................................####....##....####........................................................................................................................####....##........####................................##
|
||||||
|
// ##....................................####..........####........................................................................................................................####....####......####................................##
|
||||||
|
// ##....................................####..........####........................................................................................................................####....##..##....####................................##
|
||||||
|
// ####..................................##################..........................................................................................................................####....####..####................................####
|
||||||
|
// ..##..................................##################............................................................................................................................####......####..................................##..
|
||||||
|
// ..##..................................................................................................................................................................................##########....................................##..
|
||||||
|
// ..####..................................................................................................................................................................................######....................................####..
|
||||||
|
// ....##............................................................................................................................................................................................................................##....
|
||||||
|
// ....##............................................................................................................................................................................................................................##....
|
||||||
|
// ....####........................................................................................................................................................................................................................####....
|
||||||
|
// ......##........................................................................................................................................................................................................................##......
|
||||||
|
// ......####....................................................................................................................................................................................................................####......
|
||||||
|
// ........####................................................................................................................................................................................................................####........
|
||||||
|
// ..........####............................................................................................................................................................................................................####..........
|
||||||
|
// ............####........................................................................................................................................................................................................####............
|
||||||
|
// ..............####....................................................................................................................................................................................................####..............
|
||||||
|
// ................######............................................................................................................................................................................................######................
|
||||||
|
// ....................####........................................................................................................................................................................................####....................
|
||||||
|
// ......................######................................................................................................................................................................................######......................
|
||||||
|
// ..........................########....................................................................................................................................................................########..........................
|
||||||
|
// ................................########################################################################################################################################################################................................
|
||||||
|
|
||||||
|
#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
|
||||||
|
}};
|
||||||
13
applications/plugins/wii_ec_anal/gfx/img_cc_btn_A1.c
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
// ##############
|
||||||
|
// ######..######
|
||||||
|
// ####..##..####
|
||||||
|
// ####......####
|
||||||
|
// ####..##..####
|
||||||
|
// ##############
|
||||||
|
// ##############
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
const image_t img_cc_btn_A1 = { 7, 7, false, 7, 0, {
|
||||||
|
0xFF, 0xDF, 0x5E, 0x3D, 0x7F, 0xFF, 0x80
|
||||||
|
}};
|
||||||
13
applications/plugins/wii_ec_anal/gfx/img_cc_btn_B1.c
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
// ##############
|
||||||
|
// ####..########
|
||||||
|
// ####..########
|
||||||
|
// ####....######
|
||||||
|
// ####..##..####
|
||||||
|
// ######....####
|
||||||
|
// ##############
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
const image_t img_cc_btn_B1 = { 7, 7, false, 7, 0, {
|
||||||
|
0xFF, 0xBF, 0x7E, 0x7D, 0x7C, 0xFF, 0x80
|
||||||
|
}};
|
||||||
13
applications/plugins/wii_ec_anal/gfx/img_cc_btn_X1.c
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
// ##############
|
||||||
|
// ##############
|
||||||
|
// ####..##..####
|
||||||
|
// ######..######
|
||||||
|
// ####..##..####
|
||||||
|
// ##############
|
||||||
|
// ##############
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
const image_t img_cc_btn_X1 = { 7, 7, false, 7, 0, {
|
||||||
|
0xFF, 0xFF, 0x5F, 0x7D, 0x7F, 0xFF, 0x80
|
||||||
|
}};
|
||||||
13
applications/plugins/wii_ec_anal/gfx/img_cc_btn_Y1.c
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
// ##############
|
||||||
|
// ##############
|
||||||
|
// ####..##..####
|
||||||
|
// ####......####
|
||||||
|
// ########..####
|
||||||
|
// ######..######
|
||||||
|
// ##############
|
||||||
|
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
|
const image_t img_cc_btn_Y1 = { 7, 7, false, 7, 0, {
|
||||||
|
0xFF, 0xFF, 0x5E, 0x3F, 0x7D, 0xFF, 0x80
|
||||||
|
}};
|
||||||