diff --git a/applications/plugins/wii_ec_anal/LICENSE b/applications/plugins/wii_ec_anal/LICENSE deleted file mode 100644 index 95e544a06..000000000 --- a/applications/plugins/wii_ec_anal/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2022 BlueChip - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/applications/plugins/wii_ec_anal/README.md b/applications/plugins/wii_ec_anal/README.md deleted file mode 100644 index 8d439c7e0..000000000 --- a/applications/plugins/wii_ec_anal/README.md +++ /dev/null @@ -1,234 +0,0 @@ -# [FlipperZero] Wii Extension Controller Protocol Analyser -This Protocol Analyser offers a full Test and Calibrate system for Wii Extension Controllers. - -__Disclaimer:__ *Use of this plugin, and notably connecting an Extension Controller to the FlipperZero is performed entirely at your own risk.* - -# Notes -This plugin has (todate) only been tested with official Nintendo Nunchucks and Classic Controllers - namely Nunchucks and Classic Controllers. - -# Encryption -This plugin has SOME code to handle encryption, but it it unused, untested, and some of it is known to un-work. - -This plugin (currently) only works with Extension Controllers which implement the encryption-bypass strategy. IE. `i2c_write(0xf0, 0x55) ; i2c_write(0xfb, 0x00)` - -If you need this functionality, either raise an Issue or, better still, a Pull Request. - -# Screen: SPLASH -
-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 -   

-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)

- - - - - -
WiiChuckNunchucky
- -### ** WARNING ** -Neither the WiiChuck, nor the Nunchucky have a pin polarisation mechanism.
-If you plug the adaptor in the wrong way around you WILL apply voltage to the Controller the wrong way round!!
-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 -+----+ +----+ -``` -
- -...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.
-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
-...This may be as simple as a broken wire. -* The controller board in the Controller is faulty.
-...Repair of which is beyond the scope of this document. - -To get the list of "known" Controllers, run `./info.sh`
-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 -
-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 - -   
- -| 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 - -NB. Code DOES exist to scroll the display, but the LCD refresh rate is too low, and it looks awful - -# Screen: CLASSIC -
-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 -
-The Dump screen will show you the raw readings from the device.
-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 -
- -* __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.
-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.
-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 -
-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]
- -[This is probably irrelevant since the introduction of FAP support]
-If you have memory issues, limiting the messages at compile-time will make the plugin smaller.
-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`] - diff --git a/applications/plugins/wii_ec_anal/README.txt b/applications/plugins/wii_ec_anal/README.txt deleted file mode 100644 index e7ebe7a4c..000000000 --- a/applications/plugins/wii_ec_anal/README.txt +++ /dev/null @@ -1,67 +0,0 @@ - ,-------. ----( Files )--- - `-------' - - README.md - User Manual : Body [github markdown] - _images/ - User Manual : Images - _images/GIMP/ - User Manual : GIMP image masters - - LICENSE - Tech Docs : MIT Licence file - README.txt - Tech Docs : Dev notes - notes.txt - Tech Docs : Random dev notes - info.sh - Tech Docs : Retrieve info from source code - - application.fam - FAP : Header file - WiiEC.png - FAP : Icon {10x10} - - gfx/ - Analyser : Images [generated by bc_image_tool] - wii_anal.c|h - Analyser : Main application - wii_anal_ec.c|h - Analyser : Extension controller actions - wii_anal_keys.c|h - Analyser : Keyboard handling - wii_anal_lcd.c|h - Analyser : LCD handling - - i2c_workaround.h - Temporary workaround for i2c bug in FZ code - err.h - Errors - bc_logging.h - Logging macros - especially LOG_LEVEL - - wii_i2c.c|h - i2c functionality - - wii_ec.c|h - Extension Controller basic functions - wii_ec_macros.h - Bespoke Extension Controller handy-dandy MACROs - wii_ec_classic.c|h - EC: Classic Controller Pro scene - wii_ec_nunchuck.c|h - EC: Nunchuck scene - wii_ec_udraw.c|h - EC: UDraw scene - not written - - ,----------------------------------. ----( Adding a new Extension Controller )--- - `----------------------------------' - -//! I'll finish this when I write the UDraw code - -Create a new Extension Controller called "mydev" - -Create wii_ec_mydev.c and wii_ec_mydev.h - -In wii_ec_mydev.c|h - Create the functions [& prototypes] - bool mydev_init (wiiEC_t* const) ; // Additional initialisation code - void mydev_decode (wiiEC_t* const) ; // Decode controller input data - void mydev_msg (wiiEC_t* const, FuriMessageQueue* const) ; // Put event messages in the event queue - void mydev_calib (wiiEC_t* const, ecCalib_t) ; // Controller calibration function - void mydev_show (Canvas* const, state_t* const) ; // Scene LCD display - bool mydev_key (const eventMsg_t* const, state_t* const) ; // Scene key controls - -In wii_ec.h - Include the new header - #include "wii_ec_mydev.h" - Add a perhipheral id to enum ecPid - PID_MYDEV - -In wii_anal.h - As a scene name to enum scene - SCENE_MYDEV - -In wii_ec.c - Add the device definition to the ecId[] array - [PID_MYDEV] = { {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, "My Device", SCENE_MYDEV, - mydev_init, mydev_decode, mydev_msg, mydev_calib, mydev_show, mydev_key }, diff --git a/applications/plugins/wii_ec_anal/WiiEC.png b/applications/plugins/wii_ec_anal/WiiEC.png deleted file mode 100644 index 6e1afcb0c..000000000 Binary files a/applications/plugins/wii_ec_anal/WiiEC.png and /dev/null differ diff --git a/applications/plugins/wii_ec_anal/_image_tool/_convert.c b/applications/plugins/wii_ec_anal/_image_tool/_convert.c index 57deeb083..267985e8d 100644 --- a/applications/plugins/wii_ec_anal/_image_tool/_convert.c +++ b/applications/plugins/wii_ec_anal/_image_tool/_convert.c @@ -3,146 +3,136 @@ #include #include -int main(int argc, char* argv[]) { - const unsigned char* pp = NULL; - uint32_t pix = 0; - int bit = 0; +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; + uint8_t b = 0; + uint8_t bcnt = 0; - unsigned int lcnt = 0; - static const int lmax = 16; // max hex values per line + 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* 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; + 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; + unsigned int x, y, z; - const char* name = argv[1]; - FILE* fh = fopen(argv[2], "wb"); + const char* name = argv[1]; + FILE* fh = fopen(argv[2], "wb"); - uint32_t white = 0xFF; + uint32_t white = 0xFF; - int rv = 0; // assume success + 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)); + // 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; - } + // 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; + // 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 + // 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; - } - } + // 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++; - } - } + // 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); + // 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" : ", "); + 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" : ", "); - } + } 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); + if (fh) fclose(fh) ; + if (buf) free(buf) ; + if (cmp) free(cmp) ; - return rv; + return rv; } diff --git a/applications/plugins/wii_ec_anal/_image_tool/_convert_images.c b/applications/plugins/wii_ec_anal/_image_tool/_convert_images.c index e8ab899f7..57046e9a3 100644 --- a/applications/plugins/wii_ec_anal/_image_tool/_convert_images.c +++ b/applications/plugins/wii_ec_anal/_image_tool/_convert_images.c @@ -1,49 +1,55 @@ -#include // GUI (screen/keyboard) API +#include // GUI (screen/keyboard) API -#include "images.h" +#include "images.h" //----------------------------------------------------------------------------- ---------------------------------------- -static Canvas* _canvas; -static uint8_t _tlx; -static uint8_t _tly; +static Canvas* _canvas; +static uint8_t _tlx; +static uint8_t _tly; -static uint8_t _x; -static uint8_t _y; +static uint8_t _x; +static uint8_t _y; -static const image_t* _img; +static const image_t* _img; -static bool _blk; -static Color _set; -static Color _clr; +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 _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 _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; - } +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 ; + } } //+============================================================================ @@ -55,83 +61,81 @@ static void _showByteAll(const uint8_t b) { // SHOW_ALL - plot all images pixels as they are // SHOW_ALL_INV - plot all images pixels inverted // -void show( - Canvas* const canvas, - const uint8_t tlx, - const uint8_t tly, - const image_t* img, - const showMode_t mode) { - void (*fnShow)(const uint8_t) = NULL; +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; + const uint8_t* bp = img->data; - // code size optimisation - switch(mode & SHOW_INV_) { - case SHOW_NRM_: - _set = ColorBlack; - _clr = ColorWhite; - break; + // 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_INV_: + _set = ColorWhite; + _clr = ColorBlack; + break; - case SHOW_BLK_: - canvas_set_color(canvas, 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_WHT_: + canvas_set_color(canvas, ColorWhite); + 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); + } + switch (mode & SHOW_INV_) { + case SHOW_NRM_: + case SHOW_INV_: + fnShow = _showByteAll; + canvas_set_color(canvas, ColorWhite); + _blk = 0; + break; - // I want nested functions! - _canvas = canvas; - _img = img; - _tlx = tlx; - _tly = tly; - _x = 0; - _y = 0; + 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); - // 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; + // I want nested functions! + _canvas = canvas; + _img = img; + _tlx = tlx; + _tly = tly; + _x = 0; + _y = 0; - // Uncompressed byte - } else { - fnShow(*bp); - } - } + // 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; - // Not compressed - } else { - for(unsigned int i = 0; i < img->len; i++, bp++) fnShow(*bp); - } + // Uncompressed byte + } else { + fnShow(*bp); + } + } + + // Not compressed + } else { + for (unsigned int i = 0; i < img->len; i++, bp++) fnShow(*bp) ; + } } diff --git a/applications/plugins/wii_ec_anal/_image_tool/_convert_images.h b/applications/plugins/wii_ec_anal/_image_tool/_convert_images.h index 1743cb409..bfc44568e 100644 --- a/applications/plugins/wii_ec_anal/_image_tool/_convert_images.h +++ b/applications/plugins/wii_ec_anal/_image_tool/_convert_images.h @@ -1,53 +1,53 @@ -#ifndef IMAGES_H_ -#define IMAGES_H_ +#ifndef IMAGES_H_ +#define IMAGES_H_ #include #include //----------------------------------------------------------------------------- ---------------------------------------- -typedef enum showMode { - // {INV:--:WHT:BLK::--:--:CLR:SET} - SHOW_SET_ = 0x01, - SHOW_CLR_ = 0x02, - SHOW_ALL_ = SHOW_SET_ | SHOW_CLR_, +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_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_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_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; + 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; +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 -void show( - Canvas* const canvas, - const uint8_t tlx, - const uint8_t tly, - const image_t* img, - const showMode_t mode); +# include + 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_ diff --git a/applications/plugins/wii_ec_anal/_image_tool/_convert_test.c b/applications/plugins/wii_ec_anal/_image_tool/_convert_test.c index fdc2ee946..4bdb531d5 100644 --- a/applications/plugins/wii_ec_anal/_image_tool/_convert_test.c +++ b/applications/plugins/wii_ec_anal/_image_tool/_convert_test.c @@ -1,59 +1,59 @@ -#include -#include +#include +#include -#include "images.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) +#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) +#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; +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; + // 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); - } - } + // Uncompressed byte + } else { + PLOTBYTE(*bp); + } + } - // Not compressed - } else { - for(unsigned int i = 0; i < img->len; i++, bp++) PLOTBYTE(*bp); - } + // Not compressed + } else { + for (unsigned int i = 0; i < img->len; i++, bp++) PLOTBYTE(*bp) ; + } } -#undef PLOTBYTE +#undef PLOTBYTE //+============================================================================ -int main(void) { - show(&img_zzz); - return 0; +int main (void) +{ + show(&img_zzz); + return 0; } diff --git a/applications/plugins/wii_ec_anal/application.fam b/applications/plugins/wii_ec_anal/application.fam index 42ed7e979..8fbf565a2 100644 --- a/applications/plugins/wii_ec_anal/application.fam +++ b/applications/plugins/wii_ec_anal/application.fam @@ -2,7 +2,7 @@ App( # --- App Info - appid="Wii_EC_Analyser", + appid="wii_ec_anal", name="Wii EC Analyser", # --- Entry point @@ -32,5 +32,5 @@ App( # fap_version=(1,0), fap_icon="WiiEC.png", - fap_category="Misc", + fap_category="Cyborg Systems", ) diff --git a/applications/plugins/wii_ec_anal/bc_logging.h b/applications/plugins/wii_ec_anal/bc_logging.h index 73dda80bd..d9bb48c92 100644 --- a/applications/plugins/wii_ec_anal/bc_logging.h +++ b/applications/plugins/wii_ec_anal/bc_logging.h @@ -1,13 +1,13 @@ -#ifndef BC_LOGGING_H_ -#define BC_LOGGING_H_ +#ifndef BC_LOGGING_H_ +#define BC_LOGGING_H_ #include -#include "err.h" // appName +#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 +#define LOG_LEVEL 4 //----------------------------------------------------------------------------- ---------------------------------------- // The FlipperZero Settings->System menu allows you to set the logging level at RUN-time @@ -27,44 +27,44 @@ // 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 +# define LOG_LEVEL 6 // default = full logging #endif -#if(LOG_LEVEL < 2) -#undef FURI_LOG_E -#define FURI_LOG_E(tag, fmt, ...) +#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, ...) +#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, ...) +#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, ...) +#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, ...) +#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 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__) +#define ENTER TRACE("(+) %s", __func__) +#define LEAVE TRACE("(-) %s", __func__) #endif //BC_LOGGING_H_ diff --git a/applications/plugins/wii_ec_anal/err.h b/applications/plugins/wii_ec_anal/err.h index 5a25c93f8..9398a3fb8 100644 --- a/applications/plugins/wii_ec_anal/err.h +++ b/applications/plugins/wii_ec_anal/err.h @@ -1,11 +1,11 @@ // Avoid circular/nested/mulitple inclusion -#ifndef ERR_H_ -#define ERR_H_ +#ifndef ERR_H_ +#define ERR_H_ //----------------------------------------------------------------------------- ---------------------------------------- // Application name // -static const char* const appName = "Wii_i2c"; //$ Name used in log files +static const char* const appName = "Wii_i2c"; //$ Name used in log files //----------------------------------------------------------------------------- ---------------------------------------- // Error codes and messages @@ -13,60 +13,57 @@ static const char* const appName = "Wii_i2c"; //$ Name used in log files // 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] +#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", +#define ES_ENUM(num, ename, string) ename = num, +#define ES_STRING(num, ename, string) string"\r\n", // Build the enum -typedef enum err { FOREACH_ES(ES_ENUM) } err_t; +typedef + enum err { FOREACH_ES(ES_ENUM) } +err_t ; // You need to '#define ERR_C_' in precisely ONE source file #ifdef ERR_C_ -// Build the string list -const char* const wii_errs[] = {FOREACH_ES(ES_STRING)}; + // 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[]; + // 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 +#undef ES_ENUM +#undef ES_STRING +#undef FOREACH_ES #endif // ERR_H_ diff --git a/applications/plugins/wii_ec_anal/gfx/images.c b/applications/plugins/wii_ec_anal/gfx/images.c index e8ab899f7..57046e9a3 100644 --- a/applications/plugins/wii_ec_anal/gfx/images.c +++ b/applications/plugins/wii_ec_anal/gfx/images.c @@ -1,49 +1,55 @@ -#include // GUI (screen/keyboard) API +#include // GUI (screen/keyboard) API -#include "images.h" +#include "images.h" //----------------------------------------------------------------------------- ---------------------------------------- -static Canvas* _canvas; -static uint8_t _tlx; -static uint8_t _tly; +static Canvas* _canvas; +static uint8_t _tlx; +static uint8_t _tly; -static uint8_t _x; -static uint8_t _y; +static uint8_t _x; +static uint8_t _y; -static const image_t* _img; +static const image_t* _img; -static bool _blk; -static Color _set; -static Color _clr; +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 _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 _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; - } +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 ; + } } //+============================================================================ @@ -55,83 +61,81 @@ static void _showByteAll(const uint8_t b) { // SHOW_ALL - plot all images pixels as they are // SHOW_ALL_INV - plot all images pixels inverted // -void show( - Canvas* const canvas, - const uint8_t tlx, - const uint8_t tly, - const image_t* img, - const showMode_t mode) { - void (*fnShow)(const uint8_t) = NULL; +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; + const uint8_t* bp = img->data; - // code size optimisation - switch(mode & SHOW_INV_) { - case SHOW_NRM_: - _set = ColorBlack; - _clr = ColorWhite; - break; + // 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_INV_: + _set = ColorWhite; + _clr = ColorBlack; + break; - case SHOW_BLK_: - canvas_set_color(canvas, 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_WHT_: + canvas_set_color(canvas, ColorWhite); + 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); + } + switch (mode & SHOW_INV_) { + case SHOW_NRM_: + case SHOW_INV_: + fnShow = _showByteAll; + canvas_set_color(canvas, ColorWhite); + _blk = 0; + break; - // I want nested functions! - _canvas = canvas; - _img = img; - _tlx = tlx; - _tly = tly; - _x = 0; - _y = 0; + 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); - // 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; + // I want nested functions! + _canvas = canvas; + _img = img; + _tlx = tlx; + _tly = tly; + _x = 0; + _y = 0; - // Uncompressed byte - } else { - fnShow(*bp); - } - } + // 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; - // Not compressed - } else { - for(unsigned int i = 0; i < img->len; i++, bp++) fnShow(*bp); - } + // Uncompressed byte + } else { + fnShow(*bp); + } + } + + // Not compressed + } else { + for (unsigned int i = 0; i < img->len; i++, bp++) fnShow(*bp) ; + } } diff --git a/applications/plugins/wii_ec_anal/gfx/images.h b/applications/plugins/wii_ec_anal/gfx/images.h index d21909176..87f2b89b7 100644 --- a/applications/plugins/wii_ec_anal/gfx/images.h +++ b/applications/plugins/wii_ec_anal/gfx/images.h @@ -1,134 +1,134 @@ -#ifndef IMAGES_H_ -#define IMAGES_H_ +#ifndef IMAGES_H_ +#define IMAGES_H_ #include #include //----------------------------------------------------------------------------- ---------------------------------------- -typedef enum showMode { - // {INV:--:WHT:BLK::--:--:CLR:SET} - SHOW_SET_ = 0x01, - SHOW_CLR_ = 0x02, - SHOW_ALL_ = SHOW_SET_ | SHOW_CLR_, +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_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_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_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; + 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; +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; +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 -void show( - Canvas* const canvas, - const uint8_t tlx, - const uint8_t tly, - const image_t* img, - const showMode_t mode); +# include + 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_ diff --git a/applications/plugins/wii_ec_anal/gfx/img_3x5_0.c b/applications/plugins/wii_ec_anal/gfx/img_3x5_0.c index 8fc8e0e14..975d98d35 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_3x5_0.c +++ b/applications/plugins/wii_ec_anal/gfx/img_3x5_0.c @@ -6,4 +6,6 @@ #include "images.h" -const image_t img_3x5_0 = {3, 5, false, 2, 0, {0xF6, 0xDE}}; +const image_t img_3x5_0 = { 3, 5, false, 2, 0, { + 0xF6, 0xDE +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_3x5_1.c b/applications/plugins/wii_ec_anal/gfx/img_3x5_1.c index 8b7d4cf80..0d9dc3fe4 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_3x5_1.c +++ b/applications/plugins/wii_ec_anal/gfx/img_3x5_1.c @@ -6,4 +6,6 @@ #include "images.h" -const image_t img_3x5_1 = {3, 5, false, 2, 0, {0xC9, 0x2E}}; +const image_t img_3x5_1 = { 3, 5, false, 2, 0, { + 0xC9, 0x2E +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_3x5_2.c b/applications/plugins/wii_ec_anal/gfx/img_3x5_2.c index 89a81c75e..d98bf4e93 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_3x5_2.c +++ b/applications/plugins/wii_ec_anal/gfx/img_3x5_2.c @@ -6,4 +6,6 @@ #include "images.h" -const image_t img_3x5_2 = {3, 5, false, 2, 0, {0xE7, 0xCE}}; +const image_t img_3x5_2 = { 3, 5, false, 2, 0, { + 0xE7, 0xCE +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_3x5_3.c b/applications/plugins/wii_ec_anal/gfx/img_3x5_3.c index 97ff0478a..8d08ed1b6 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_3x5_3.c +++ b/applications/plugins/wii_ec_anal/gfx/img_3x5_3.c @@ -6,4 +6,6 @@ #include "images.h" -const image_t img_3x5_3 = {3, 5, false, 2, 0, {0xE5, 0x9E}}; +const image_t img_3x5_3 = { 3, 5, false, 2, 0, { + 0xE5, 0x9E +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_3x5_4.c b/applications/plugins/wii_ec_anal/gfx/img_3x5_4.c index 2bbd9ef42..795e9b76f 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_3x5_4.c +++ b/applications/plugins/wii_ec_anal/gfx/img_3x5_4.c @@ -6,4 +6,6 @@ #include "images.h" -const image_t img_3x5_4 = {3, 5, false, 2, 0, {0x97, 0x92}}; +const image_t img_3x5_4 = { 3, 5, false, 2, 0, { + 0x97, 0x92 +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_3x5_5.c b/applications/plugins/wii_ec_anal/gfx/img_3x5_5.c index e0466f37a..377853507 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_3x5_5.c +++ b/applications/plugins/wii_ec_anal/gfx/img_3x5_5.c @@ -6,4 +6,6 @@ #include "images.h" -const image_t img_3x5_5 = {3, 5, false, 2, 0, {0xF3, 0x9E}}; +const image_t img_3x5_5 = { 3, 5, false, 2, 0, { + 0xF3, 0x9E +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_3x5_6.c b/applications/plugins/wii_ec_anal/gfx/img_3x5_6.c index 1b62caf72..d3af64071 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_3x5_6.c +++ b/applications/plugins/wii_ec_anal/gfx/img_3x5_6.c @@ -6,4 +6,6 @@ #include "images.h" -const image_t img_3x5_6 = {3, 5, false, 2, 0, {0xD3, 0xDE}}; +const image_t img_3x5_6 = { 3, 5, false, 2, 0, { + 0xD3, 0xDE +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_3x5_7.c b/applications/plugins/wii_ec_anal/gfx/img_3x5_7.c index acfe57cf8..2c3b1e0b9 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_3x5_7.c +++ b/applications/plugins/wii_ec_anal/gfx/img_3x5_7.c @@ -6,4 +6,6 @@ #include "images.h" -const image_t img_3x5_7 = {3, 5, false, 2, 0, {0xE5, 0x24}}; +const image_t img_3x5_7 = { 3, 5, false, 2, 0, { + 0xE5, 0x24 +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_3x5_8.c b/applications/plugins/wii_ec_anal/gfx/img_3x5_8.c index 31f32af52..5cb6d3354 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_3x5_8.c +++ b/applications/plugins/wii_ec_anal/gfx/img_3x5_8.c @@ -6,4 +6,6 @@ #include "images.h" -const image_t img_3x5_8 = {3, 5, false, 2, 0, {0xF7, 0xDE}}; +const image_t img_3x5_8 = { 3, 5, false, 2, 0, { + 0xF7, 0xDE +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_3x5_9.c b/applications/plugins/wii_ec_anal/gfx/img_3x5_9.c index 4b1ba1e09..ee5e82b87 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_3x5_9.c +++ b/applications/plugins/wii_ec_anal/gfx/img_3x5_9.c @@ -6,4 +6,6 @@ #include "images.h" -const image_t img_3x5_9 = {3, 5, false, 2, 0, {0xF7, 0x96}}; +const image_t img_3x5_9 = { 3, 5, false, 2, 0, { + 0xF7, 0x96 +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_3x5_v.c b/applications/plugins/wii_ec_anal/gfx/img_3x5_v.c index 2282e1697..dcf3f631d 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_3x5_v.c +++ b/applications/plugins/wii_ec_anal/gfx/img_3x5_v.c @@ -6,4 +6,6 @@ #include "images.h" -const image_t img_3x5_v = {3, 5, false, 2, 0, {0x02, 0xD4}}; +const image_t img_3x5_v = { 3, 5, false, 2, 0, { + 0x02, 0xD4 +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_5x7_0.c b/applications/plugins/wii_ec_anal/gfx/img_5x7_0.c index 7ae2186b3..c59852f19 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_5x7_0.c +++ b/applications/plugins/wii_ec_anal/gfx/img_5x7_0.c @@ -8,4 +8,6 @@ #include "images.h" -const image_t img_5x7_0 = {5, 7, false, 5, 0, {0x74, 0x67, 0x5C, 0xC5, 0xC0}}; +const image_t img_5x7_0 = { 5, 7, false, 5, 0, { + 0x74, 0x67, 0x5C, 0xC5, 0xC0 +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_5x7_1.c b/applications/plugins/wii_ec_anal/gfx/img_5x7_1.c index c1a9cec74..4bd08f89c 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_5x7_1.c +++ b/applications/plugins/wii_ec_anal/gfx/img_5x7_1.c @@ -8,4 +8,6 @@ #include "images.h" -const image_t img_5x7_1 = {5, 7, false, 5, 0, {0x65, 0x08, 0x42, 0x13, 0xE0}}; +const image_t img_5x7_1 = { 5, 7, false, 5, 0, { + 0x65, 0x08, 0x42, 0x13, 0xE0 +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_5x7_2.c b/applications/plugins/wii_ec_anal/gfx/img_5x7_2.c index 7fab90010..1270393f7 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_5x7_2.c +++ b/applications/plugins/wii_ec_anal/gfx/img_5x7_2.c @@ -8,4 +8,6 @@ #include "images.h" -const image_t img_5x7_2 = {5, 7, false, 5, 0, {0x74, 0x42, 0x22, 0x23, 0xE0}}; +const image_t img_5x7_2 = { 5, 7, false, 5, 0, { + 0x74, 0x42, 0x22, 0x23, 0xE0 +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_5x7_3.c b/applications/plugins/wii_ec_anal/gfx/img_5x7_3.c index 2099bf795..e26bac523 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_5x7_3.c +++ b/applications/plugins/wii_ec_anal/gfx/img_5x7_3.c @@ -8,4 +8,6 @@ #include "images.h" -const image_t img_5x7_3 = {5, 7, false, 5, 0, {0x74, 0x42, 0x60, 0xC5, 0xC0}}; +const image_t img_5x7_3 = { 5, 7, false, 5, 0, { + 0x74, 0x42, 0x60, 0xC5, 0xC0 +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_5x7_4.c b/applications/plugins/wii_ec_anal/gfx/img_5x7_4.c index 1eee4f07d..e0dc5687f 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_5x7_4.c +++ b/applications/plugins/wii_ec_anal/gfx/img_5x7_4.c @@ -8,4 +8,6 @@ #include "images.h" -const image_t img_5x7_4 = {5, 7, false, 5, 0, {0x84, 0x25, 0x2F, 0x88, 0x40}}; +const image_t img_5x7_4 = { 5, 7, false, 5, 0, { + 0x84, 0x25, 0x2F, 0x88, 0x40 +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_5x7_5.c b/applications/plugins/wii_ec_anal/gfx/img_5x7_5.c index be1e54681..81747376f 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_5x7_5.c +++ b/applications/plugins/wii_ec_anal/gfx/img_5x7_5.c @@ -8,4 +8,6 @@ #include "images.h" -const image_t img_5x7_5 = {5, 7, false, 5, 0, {0xFC, 0x21, 0xE0, 0x87, 0xC0}}; +const image_t img_5x7_5 = { 5, 7, false, 5, 0, { + 0xFC, 0x21, 0xE0, 0x87, 0xC0 +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_5x7_6.c b/applications/plugins/wii_ec_anal/gfx/img_5x7_6.c index da155c1b5..455c874dc 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_5x7_6.c +++ b/applications/plugins/wii_ec_anal/gfx/img_5x7_6.c @@ -8,4 +8,6 @@ #include "images.h" -const image_t img_5x7_6 = {5, 7, false, 5, 0, {0x74, 0x21, 0xE8, 0xC5, 0xC0}}; +const image_t img_5x7_6 = { 5, 7, false, 5, 0, { + 0x74, 0x21, 0xE8, 0xC5, 0xC0 +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_5x7_7.c b/applications/plugins/wii_ec_anal/gfx/img_5x7_7.c index fde7e8ea2..73e813a21 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_5x7_7.c +++ b/applications/plugins/wii_ec_anal/gfx/img_5x7_7.c @@ -8,4 +8,6 @@ #include "images.h" -const image_t img_5x7_7 = {5, 7, false, 5, 0, {0xF8, 0x44, 0x22, 0x10, 0x80}}; +const image_t img_5x7_7 = { 5, 7, false, 5, 0, { + 0xF8, 0x44, 0x22, 0x10, 0x80 +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_5x7_8.c b/applications/plugins/wii_ec_anal/gfx/img_5x7_8.c index aff178282..0f04a48bf 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_5x7_8.c +++ b/applications/plugins/wii_ec_anal/gfx/img_5x7_8.c @@ -8,4 +8,6 @@ #include "images.h" -const image_t img_5x7_8 = {5, 7, false, 5, 0, {0x74, 0x62, 0xE8, 0xC5, 0xC0}}; +const image_t img_5x7_8 = { 5, 7, false, 5, 0, { + 0x74, 0x62, 0xE8, 0xC5, 0xC0 +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_5x7_9.c b/applications/plugins/wii_ec_anal/gfx/img_5x7_9.c index 2417c57e8..2b1e978c6 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_5x7_9.c +++ b/applications/plugins/wii_ec_anal/gfx/img_5x7_9.c @@ -8,4 +8,6 @@ #include "images.h" -const image_t img_5x7_9 = {5, 7, false, 5, 0, {0x74, 0x62, 0xF0, 0x85, 0xC0}}; +const image_t img_5x7_9 = { 5, 7, false, 5, 0, { + 0x74, 0x62, 0xF0, 0x85, 0xC0 +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_5x7_A.c b/applications/plugins/wii_ec_anal/gfx/img_5x7_A.c index 910c034a2..a6b049f01 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_5x7_A.c +++ b/applications/plugins/wii_ec_anal/gfx/img_5x7_A.c @@ -8,4 +8,6 @@ #include "images.h" -const image_t img_5x7_A = {5, 7, false, 5, 0, {0x74, 0x63, 0xF8, 0xC6, 0x20}}; +const image_t img_5x7_A = { 5, 7, false, 5, 0, { + 0x74, 0x63, 0xF8, 0xC6, 0x20 +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_5x7_B.c b/applications/plugins/wii_ec_anal/gfx/img_5x7_B.c index 93808fee2..06b36599c 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_5x7_B.c +++ b/applications/plugins/wii_ec_anal/gfx/img_5x7_B.c @@ -8,4 +8,6 @@ #include "images.h" -const image_t img_5x7_B = {5, 7, false, 5, 0, {0xF4, 0x63, 0x68, 0xC7, 0xC0}}; +const image_t img_5x7_B = { 5, 7, false, 5, 0, { + 0xF4, 0x63, 0x68, 0xC7, 0xC0 +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_5x7_C.c b/applications/plugins/wii_ec_anal/gfx/img_5x7_C.c index 1438eaf44..c058d09a9 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_5x7_C.c +++ b/applications/plugins/wii_ec_anal/gfx/img_5x7_C.c @@ -8,4 +8,6 @@ #include "images.h" -const image_t img_5x7_C = {5, 7, false, 5, 0, {0x74, 0x61, 0x08, 0x45, 0xC0}}; +const image_t img_5x7_C = { 5, 7, false, 5, 0, { + 0x74, 0x61, 0x08, 0x45, 0xC0 +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_5x7_D.c b/applications/plugins/wii_ec_anal/gfx/img_5x7_D.c index 9c6b590ee..3425e3648 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_5x7_D.c +++ b/applications/plugins/wii_ec_anal/gfx/img_5x7_D.c @@ -8,4 +8,6 @@ #include "images.h" -const image_t img_5x7_D = {5, 7, false, 5, 0, {0x75, 0x4A, 0x52, 0xD5, 0xC0}}; +const image_t img_5x7_D = { 5, 7, false, 5, 0, { + 0x75, 0x4A, 0x52, 0xD5, 0xC0 +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_5x7_E.c b/applications/plugins/wii_ec_anal/gfx/img_5x7_E.c index bc15fb240..c7bbc301a 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_5x7_E.c +++ b/applications/plugins/wii_ec_anal/gfx/img_5x7_E.c @@ -8,4 +8,6 @@ #include "images.h" -const image_t img_5x7_E = {5, 7, false, 5, 0, {0xFC, 0x21, 0xC8, 0x43, 0xE0}}; +const image_t img_5x7_E = { 5, 7, false, 5, 0, { + 0xFC, 0x21, 0xC8, 0x43, 0xE0 +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_5x7_F.c b/applications/plugins/wii_ec_anal/gfx/img_5x7_F.c index e4ad0db69..440c37eae 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_5x7_F.c +++ b/applications/plugins/wii_ec_anal/gfx/img_5x7_F.c @@ -8,4 +8,6 @@ #include "images.h" -const image_t img_5x7_F = {5, 7, false, 5, 0, {0xFC, 0x21, 0xC8, 0x42, 0x00}}; +const image_t img_5x7_F = { 5, 7, false, 5, 0, { + 0xFC, 0x21, 0xC8, 0x42, 0x00 +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_6x8_0.c b/applications/plugins/wii_ec_anal/gfx/img_6x8_0.c index 952cf34d8..b8b4c7d9a 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_6x8_0.c +++ b/applications/plugins/wii_ec_anal/gfx/img_6x8_0.c @@ -9,4 +9,6 @@ #include "images.h" -const image_t img_6x8_0 = {6, 8, false, 6, 0, {0x7B, 0xFC, 0xF3, 0xCF, 0x3F, 0xDE}}; +const image_t img_6x8_0 = { 6, 8, false, 6, 0, { + 0x7B, 0xFC, 0xF3, 0xCF, 0x3F, 0xDE +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_6x8_1.c b/applications/plugins/wii_ec_anal/gfx/img_6x8_1.c index 846a6876c..91e2b2cfa 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_6x8_1.c +++ b/applications/plugins/wii_ec_anal/gfx/img_6x8_1.c @@ -9,4 +9,6 @@ #include "images.h" -const image_t img_6x8_1 = {6, 8, false, 6, 0, {0x73, 0xC3, 0x0C, 0x30, 0xCF, 0xFF}}; +const image_t img_6x8_1 = { 6, 8, false, 6, 0, { + 0x73, 0xC3, 0x0C, 0x30, 0xCF, 0xFF +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_6x8_2.c b/applications/plugins/wii_ec_anal/gfx/img_6x8_2.c index 4534bb67c..7d24c64d6 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_6x8_2.c +++ b/applications/plugins/wii_ec_anal/gfx/img_6x8_2.c @@ -9,4 +9,6 @@ #include "images.h" -const image_t img_6x8_2 = {6, 8, false, 6, 0, {0x7B, 0xF0, 0xC7, 0x31, 0x8F, 0xFF}}; +const image_t img_6x8_2 = { 6, 8, false, 6, 0, { + 0x7B, 0xF0, 0xC7, 0x31, 0x8F, 0xFF +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_6x8_3.c b/applications/plugins/wii_ec_anal/gfx/img_6x8_3.c index 7e79eb03a..3a8f9f211 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_6x8_3.c +++ b/applications/plugins/wii_ec_anal/gfx/img_6x8_3.c @@ -9,4 +9,6 @@ #include "images.h" -const image_t img_6x8_3 = {6, 8, false, 6, 0, {0x7B, 0xF0, 0xCF, 0x3C, 0x3F, 0xDE}}; +const image_t img_6x8_3 = { 6, 8, false, 6, 0, { + 0x7B, 0xF0, 0xCF, 0x3C, 0x3F, 0xDE +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_6x8_4.c b/applications/plugins/wii_ec_anal/gfx/img_6x8_4.c index 324b036ce..c5ae9efef 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_6x8_4.c +++ b/applications/plugins/wii_ec_anal/gfx/img_6x8_4.c @@ -9,4 +9,6 @@ #include "images.h" -const image_t img_6x8_4 = {6, 8, false, 6, 0, {0xC3, 0x0D, 0xB6, 0xFF, 0xF1, 0x86}}; +const image_t img_6x8_4 = { 6, 8, false, 6, 0, { + 0xC3, 0x0D, 0xB6, 0xFF, 0xF1, 0x86 +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_6x8_5.c b/applications/plugins/wii_ec_anal/gfx/img_6x8_5.c index cdfda5f2b..787e39ea6 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_6x8_5.c +++ b/applications/plugins/wii_ec_anal/gfx/img_6x8_5.c @@ -9,4 +9,6 @@ #include "images.h" -const image_t img_6x8_5 = {6, 8, false, 6, 0, {0xFF, 0xFC, 0x3E, 0xFC, 0x3F, 0xFE}}; +const image_t img_6x8_5 = { 6, 8, false, 6, 0, { + 0xFF, 0xFC, 0x3E, 0xFC, 0x3F, 0xFE +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_6x8_6.c b/applications/plugins/wii_ec_anal/gfx/img_6x8_6.c index 781a060f1..8f07f1bfc 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_6x8_6.c +++ b/applications/plugins/wii_ec_anal/gfx/img_6x8_6.c @@ -9,4 +9,6 @@ #include "images.h" -const image_t img_6x8_6 = {6, 8, false, 6, 0, {0x7B, 0xEC, 0x3E, 0xFF, 0x3F, 0xDE}}; +const image_t img_6x8_6 = { 6, 8, false, 6, 0, { + 0x7B, 0xEC, 0x3E, 0xFF, 0x3F, 0xDE +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_6x8_7.c b/applications/plugins/wii_ec_anal/gfx/img_6x8_7.c index fec5f4bf4..cad50c65d 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_6x8_7.c +++ b/applications/plugins/wii_ec_anal/gfx/img_6x8_7.c @@ -9,4 +9,6 @@ #include "images.h" -const image_t img_6x8_7 = {6, 8, false, 6, 0, {0xFF, 0xF0, 0xC6, 0x18, 0xC3, 0x0C}}; +const image_t img_6x8_7 = { 6, 8, false, 6, 0, { + 0xFF, 0xF0, 0xC6, 0x18, 0xC3, 0x0C +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_6x8_8.c b/applications/plugins/wii_ec_anal/gfx/img_6x8_8.c index a5b21c375..a38b2110d 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_6x8_8.c +++ b/applications/plugins/wii_ec_anal/gfx/img_6x8_8.c @@ -9,4 +9,6 @@ #include "images.h" -const image_t img_6x8_8 = {6, 8, false, 6, 0, {0x7B, 0xFC, 0xDE, 0xFF, 0x3F, 0xDE}}; +const image_t img_6x8_8 = { 6, 8, false, 6, 0, { + 0x7B, 0xFC, 0xDE, 0xFF, 0x3F, 0xDE +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_6x8_9.c b/applications/plugins/wii_ec_anal/gfx/img_6x8_9.c index f7707c0df..b740c7f90 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_6x8_9.c +++ b/applications/plugins/wii_ec_anal/gfx/img_6x8_9.c @@ -9,4 +9,6 @@ #include "images.h" -const image_t img_6x8_9 = {6, 8, false, 6, 0, {0x7B, 0xFC, 0xFF, 0x7C, 0x37, 0xDE}}; +const image_t img_6x8_9 = { 6, 8, false, 6, 0, { + 0x7B, 0xFC, 0xFF, 0x7C, 0x37, 0xDE +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_6x8_A.c b/applications/plugins/wii_ec_anal/gfx/img_6x8_A.c index 1bb65c902..fa3aed598 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_6x8_A.c +++ b/applications/plugins/wii_ec_anal/gfx/img_6x8_A.c @@ -9,4 +9,6 @@ #include "images.h" -const image_t img_6x8_A = {6, 8, false, 6, 0, {0x7B, 0xFC, 0xF3, 0xFF, 0xFC, 0xF3}}; +const image_t img_6x8_A = { 6, 8, false, 6, 0, { + 0x7B, 0xFC, 0xF3, 0xFF, 0xFC, 0xF3 +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_6x8_B.c b/applications/plugins/wii_ec_anal/gfx/img_6x8_B.c index 00e012d53..14c1e28c6 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_6x8_B.c +++ b/applications/plugins/wii_ec_anal/gfx/img_6x8_B.c @@ -9,4 +9,6 @@ #include "images.h" -const image_t img_6x8_B = {6, 8, false, 6, 0, {0xFB, 0xFC, 0xFE, 0xFB, 0x3F, 0xFE}}; +const image_t img_6x8_B = { 6, 8, false, 6, 0, { + 0xFB, 0xFC, 0xFE, 0xFB, 0x3F, 0xFE +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_6x8_C.c b/applications/plugins/wii_ec_anal/gfx/img_6x8_C.c index 694901009..6d8f7aa32 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_6x8_C.c +++ b/applications/plugins/wii_ec_anal/gfx/img_6x8_C.c @@ -9,4 +9,6 @@ #include "images.h" -const image_t img_6x8_C = {6, 8, false, 6, 0, {0x7F, 0xFC, 0x30, 0xC3, 0x0F, 0xDF}}; +const image_t img_6x8_C = { 6, 8, false, 6, 0, { + 0x7F, 0xFC, 0x30, 0xC3, 0x0F, 0xDF +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_6x8_D.c b/applications/plugins/wii_ec_anal/gfx/img_6x8_D.c index a95e760eb..474e4a235 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_6x8_D.c +++ b/applications/plugins/wii_ec_anal/gfx/img_6x8_D.c @@ -9,4 +9,6 @@ #include "images.h" -const image_t img_6x8_D = {6, 8, false, 6, 0, {0xFB, 0xF6, 0xDB, 0x6D, 0xBF, 0xFE}}; +const image_t img_6x8_D = { 6, 8, false, 6, 0, { + 0xFB, 0xF6, 0xDB, 0x6D, 0xBF, 0xFE +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_6x8_E.c b/applications/plugins/wii_ec_anal/gfx/img_6x8_E.c index f49503f00..00f2cb559 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_6x8_E.c +++ b/applications/plugins/wii_ec_anal/gfx/img_6x8_E.c @@ -9,4 +9,6 @@ #include "images.h" -const image_t img_6x8_E = {6, 8, false, 6, 0, {0xFF, 0xFC, 0x3C, 0xF3, 0x0F, 0xFF}}; +const image_t img_6x8_E = { 6, 8, false, 6, 0, { + 0xFF, 0xFC, 0x3C, 0xF3, 0x0F, 0xFF +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_6x8_F.c b/applications/plugins/wii_ec_anal/gfx/img_6x8_F.c index 0037b2544..8958a0419 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_6x8_F.c +++ b/applications/plugins/wii_ec_anal/gfx/img_6x8_F.c @@ -9,4 +9,6 @@ #include "images.h" -const image_t img_6x8_F = {6, 8, false, 6, 0, {0xFF, 0xFC, 0x3C, 0xF3, 0x0C, 0x30}}; +const image_t img_6x8_F = { 6, 8, false, 6, 0, { + 0xFF, 0xFC, 0x3C, 0xF3, 0x0C, 0x30 +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_6x8_G.c b/applications/plugins/wii_ec_anal/gfx/img_6x8_G.c index f30bc9952..f5e8f03f4 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_6x8_G.c +++ b/applications/plugins/wii_ec_anal/gfx/img_6x8_G.c @@ -9,4 +9,6 @@ #include "images.h" -const image_t img_6x8_G = {6, 8, false, 6, 0, {0x7F, 0xFC, 0x30, 0xDF, 0x3F, 0xDF}}; +const image_t img_6x8_G = { 6, 8, false, 6, 0, { + 0x7F, 0xFC, 0x30, 0xDF, 0x3F, 0xDF +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_6x8_X.c b/applications/plugins/wii_ec_anal/gfx/img_6x8_X.c index 4735e82a1..7b162baf3 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_6x8_X.c +++ b/applications/plugins/wii_ec_anal/gfx/img_6x8_X.c @@ -9,4 +9,6 @@ #include "images.h" -const image_t img_6x8_X = {6, 8, false, 6, 0, {0xCF, 0x36, 0x8E, 0x71, 0x6C, 0xF3}}; +const image_t img_6x8_X = { 6, 8, false, 6, 0, { + 0xCF, 0x36, 0x8E, 0x71, 0x6C, 0xF3 +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_6x8_Y.c b/applications/plugins/wii_ec_anal/gfx/img_6x8_Y.c index 508e786bd..b39392948 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_6x8_Y.c +++ b/applications/plugins/wii_ec_anal/gfx/img_6x8_Y.c @@ -9,4 +9,6 @@ #include "images.h" -const image_t img_6x8_Y = {6, 8, false, 6, 0, {0xCF, 0x3C, 0xF3, 0x78, 0xC3, 0x0C}}; +const image_t img_6x8_Y = { 6, 8, false, 6, 0, { + 0xCF, 0x3C, 0xF3, 0x78, 0xC3, 0x0C +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_6x8_Z.c b/applications/plugins/wii_ec_anal/gfx/img_6x8_Z.c index c42d560ac..9904d08b4 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_6x8_Z.c +++ b/applications/plugins/wii_ec_anal/gfx/img_6x8_Z.c @@ -9,4 +9,6 @@ #include "images.h" -const image_t img_6x8_Z = {6, 8, false, 6, 0, {0xFF, 0xF0, 0xC6, 0x31, 0x8F, 0xFF}}; +const image_t img_6x8_Z = { 6, 8, false, 6, 0, { + 0xFF, 0xF0, 0xC6, 0x31, 0x8F, 0xFF +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_6x8_d_.c b/applications/plugins/wii_ec_anal/gfx/img_6x8_d_.c index 1f8123a6c..2a00713fd 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_6x8_d_.c +++ b/applications/plugins/wii_ec_anal/gfx/img_6x8_d_.c @@ -9,4 +9,6 @@ #include "images.h" -const image_t img_6x8_d = {6, 8, false, 6, 0, {0x0C, 0x30, 0xDF, 0xFF, 0x3F, 0xDF}}; +const image_t img_6x8_d = { 6, 8, false, 6, 0, { + 0x0C, 0x30, 0xDF, 0xFF, 0x3F, 0xDF +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_6x8_n_.c b/applications/plugins/wii_ec_anal/gfx/img_6x8_n_.c index 15d403d28..086bdd2de 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_6x8_n_.c +++ b/applications/plugins/wii_ec_anal/gfx/img_6x8_n_.c @@ -9,4 +9,6 @@ #include "images.h" -const image_t img_6x8_n = {6, 8, false, 6, 0, {0x00, 0x07, 0xBF, 0xCF, 0x3C, 0xF3}}; +const image_t img_6x8_n = { 6, 8, false, 6, 0, { + 0x00, 0x07, 0xBF, 0xCF, 0x3C, 0xF3 +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_6x8_v_.c b/applications/plugins/wii_ec_anal/gfx/img_6x8_v_.c index 1229701a1..c897aadff 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_6x8_v_.c +++ b/applications/plugins/wii_ec_anal/gfx/img_6x8_v_.c @@ -9,4 +9,6 @@ #include "images.h" -const image_t img_6x8_v = {6, 8, false, 6, 0, {0x00, 0x08, 0x73, 0xCF, 0xF7, 0x8C}}; +const image_t img_6x8_v = { 6, 8, false, 6, 0, { + 0x00, 0x08, 0x73, 0xCF, 0xF7, 0x8C +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_RIP.c b/applications/plugins/wii_ec_anal/gfx/img_RIP.c index c20877ef0..55cb7bfc2 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_RIP.c +++ b/applications/plugins/wii_ec_anal/gfx/img_RIP.c @@ -65,66 +65,58 @@ #include "images.h" -const image_t img_RIP = { - 128, - 64, - true, - 837, - 0x06, - {// orig:1024, comp:18.26% - 0x06, 0x20, 0xFF, 0xC0, 0x06, 0x0E, 0x00, 0x03, 0xD4, 0x06, 0x0E, 0x00, 0x2B, 0xC8, 0x01, - 0xFC, 0x1E, 0x1F, 0xF0, 0x00, 0xFE, 0x20, 0x8F, 0xE3, 0xF8, 0xFE, 0x3F, 0x80, 0x13, 0xD4, - 0x01, 0xFC, 0x0E, 0x0F, 0xF0, 0x00, 0xFE, 0x71, 0xCF, 0xE3, 0xF8, 0xFE, 0x3F, 0x80, 0x2B, - 0xC0, 0x00, 0x0E, 0x0A, 0x00, 0x38, 0x01, 0x87, 0x71, 0xD8, 0x77, 0x1C, 0x07, 0x71, 0xC0, - 0x03, 0xC0, 0x03, 0x8E, 0x0A, 0x0E, 0x28, 0x01, 0xC5, 0x51, 0x5C, 0x77, 0x1D, 0xC7, 0x71, - 0x40, 0x03, 0xC0, 0x03, 0x8A, 0x0A, 0x0E, 0x28, 0x01, 0x47, 0x51, 0x5C, 0x55, 0x15, 0xC5, - 0x51, 0x40, 0x03, 0xC0, 0x02, 0x8A, 0x0A, 0x0A, 0x28, 0x01, 0x40, 0x51, 0x54, 0x55, 0x15, - 0x45, 0x51, 0x40, 0x03, 0xC0, 0x02, 0x8A, 0x0A, 0x0A, 0x28, 0x01, 0x40, 0x51, 0x54, 0x55, - 0x15, 0x45, 0x51, 0xC0, 0x03, 0xC0, 0x02, 0x8E, 0x0A, 0x0A, 0x38, 0x01, 0x40, 0x51, 0x54, - 0x75, 0x55, 0x47, 0x50, 0x00, 0x03, 0xC0, 0x02, 0xF8, 0x0A, 0x0B, 0xE0, 0x01, 0x40, 0x71, - 0xD7, 0xC5, 0x15, 0x7C, 0x50, 0x00, 0x03, 0xC0, 0x02, 0xF8, 0x0A, 0x0B, 0xE0, 0x01, 0x40, - 0x3F, 0x97, 0xC5, 0x15, 0x7C, 0x57, 0x80, 0x03, 0xC0, 0x02, 0x9C, 0x0A, 0x0A, 0x00, 0x01, - 0x40, 0x1B, 0x14, 0x75, 0x55, 0x4E, 0x57, 0xC0, 0x03, 0xC0, 0x02, 0x94, 0x0A, 0x0A, 0x00, - 0x01, 0x40, 0x0A, 0x14, 0x55, 0x15, 0x4A, 0x51, 0x40, 0x03, 0xC0, 0x02, 0x94, 0x0A, 0x0A, - 0x00, 0x01, 0x40, 0x0A, 0x14, 0x55, 0x15, 0x4A, 0x51, 0x40, 0x03, 0xC0, 0x02, 0x94, 0x0A, - 0x0A, 0x00, 0x01, 0xC7, 0x0A, 0x14, 0x55, 0x15, 0x4A, 0x71, 0x40, 0x03, 0xC0, 0x02, 0x94, - 0x0A, 0x0A, 0x00, 0x01, 0xC5, 0x0A, 0x1C, 0x77, 0x1D, 0x4A, 0x71, 0x40, 0x03, 0xC0, 0x02, - 0x94, 0x0A, 0x0A, 0x00, 0x01, 0x87, 0x0E, 0x1C, 0x77, 0x1D, 0x4A, 0x61, 0xC0, 0x03, 0xC0, - 0x03, 0x9C, 0xCE, 0xCE, 0xC0, 0x00, 0xFE, 0x0E, 0x0F, 0xE3, 0xF9, 0xCE, 0x3F, 0x80, 0x03, - 0xC0, 0x03, 0x8E, 0xDE, 0xDE, 0xC0, 0x00, 0xFE, 0x1F, 0x0F, 0xE3, 0xF9, 0xC7, 0x3F, 0x80, - 0x03, 0xC0, 0x06, 0x0E, 0x00, 0x03, 0xC0, 0x06, 0x0E, 0x00, 0x03, 0xC0, 0x06, 0x0A, 0x00, - 0x01, 0x8C, 0x07, 0xF0, 0x03, 0xC0, 0x06, 0x07, 0x00, 0x04, 0x00, 0x00, 0x02, 0x52, 0x18, - 0x0C, 0x03, 0xC1, 0xD5, 0xC7, 0x57, 0x77, 0x6D, 0xC4, 0x5D, 0x2B, 0x8E, 0xE0, 0x03, 0x5A, - 0x20, 0x02, 0x03, 0xC0, 0x95, 0x04, 0x54, 0x24, 0x55, 0x04, 0x55, 0xA1, 0x0A, 0x80, 0x01, - 0x8C, 0x47, 0xC1, 0x03, 0xC0, 0x9D, 0x87, 0x27, 0x26, 0x55, 0xC5, 0x55, 0x61, 0x0C, 0xC0, - 0x00, 0x50, 0x88, 0x21, 0x03, 0xC0, 0x95, 0x01, 0x21, 0x24, 0x44, 0x45, 0x55, 0x21, 0x0A, - 0x80, 0x00, 0x20, 0x90, 0x11, 0x03, 0xC0, 0x95, 0xC7, 0x27, 0x27, 0x45, 0xC6, 0xDD, 0x21, - 0x0E, 0xE0, 0x00, 0x70, 0x91, 0x91, 0x03, 0xC0, 0x06, 0x0B, 0x00, 0x88, 0x92, 0x51, 0x03, - 0xC0, 0x06, 0x0A, 0x00, 0x01, 0x08, 0x92, 0x91, 0x03, 0xC0, 0x06, 0x0A, 0x00, 0x01, 0x08, - 0x92, 0x11, 0x03, 0xC1, 0xD5, 0xC7, 0x76, 0xDC, 0x45, 0xDD, 0x5D, 0x5C, 0x57, 0x50, 0x00, - 0x87, 0x11, 0xE2, 0x03, 0xC0, 0x95, 0x04, 0x55, 0x50, 0x44, 0x89, 0x55, 0x48, 0x55, 0x50, - 0x00, 0x80, 0x88, 0x03, 0x03, 0xC0, 0x9D, 0x87, 0x75, 0x58, 0x54, 0x89, 0xD5, 0x48, 0x25, - 0x50, 0x00, 0x40, 0x7C, 0x04, 0x83, 0xC0, 0x95, 0x01, 0x54, 0x50, 0x54, 0x89, 0x55, 0x48, - 0x25, 0x50, 0x00, 0x40, 0x07, 0xF8, 0x43, 0xC0, 0x95, 0xC7, 0x54, 0x5C, 0x6D, 0xC9, 0x5D, - 0xC8, 0x27, 0x70, 0x00, 0x30, 0x00, 0x00, 0x43, 0xC0, 0x06, 0x0B, 0x00, 0x0F, 0xFF, 0xFF, - 0x83, 0xC0, 0x06, 0x0E, 0x00, 0x03, 0xC0, 0x06, 0x0E, 0x00, 0x03, 0xC0, 0x00, 0x07, 0xC7, - 0xF1, 0xFC, 0x7F, 0x00, 0x03, 0xF8, 0xFE, 0x3F, 0x8F, 0xE0, 0x00, 0x03, 0xC0, 0x00, 0x07, - 0xC7, 0xF1, 0xFC, 0x7F, 0x00, 0x03, 0xF8, 0xFE, 0x3F, 0x8F, 0xE0, 0x00, 0x03, 0xC0, 0x00, - 0x05, 0x4E, 0x3B, 0x8E, 0xE3, 0x80, 0x07, 0x1D, 0xC7, 0x71, 0xDC, 0x70, 0x00, 0x03, 0xC0, - 0x00, 0x01, 0x4E, 0x3A, 0x8E, 0xE3, 0x80, 0x05, 0x15, 0xC7, 0x51, 0x54, 0x50, 0x00, 0x03, - 0xC0, 0x00, 0x01, 0x4A, 0x2B, 0x8A, 0xA2, 0x80, 0x07, 0x15, 0x45, 0x71, 0x5C, 0x50, 0x00, - 0x03, 0xC0, 0x00, 0x01, 0x4A, 0x28, 0x0A, 0xA2, 0x80, 0x00, 0x15, 0x45, 0x01, 0x40, 0x50, - 0x00, 0x03, 0xC0, 0x00, 0x01, 0x4A, 0x28, 0x0A, 0xA6, 0x80, 0x00, 0x15, 0x4D, 0x01, 0x40, - 0x50, 0x00, 0x03, 0xC0, 0x00, 0x01, 0x4E, 0x28, 0x0E, 0xA6, 0x80, 0x00, 0x1D, 0x4D, 0x01, - 0xC0, 0x70, 0x00, 0x03, 0xC0, 0x00, 0x01, 0xC3, 0xE8, 0x0E, 0xAA, 0x9F, 0xE1, 0xF9, 0x55, - 0x1F, 0x87, 0xE0, 0x00, 0x03, 0xC0, 0x00, 0x01, 0xC3, 0xE8, 0x38, 0xAA, 0x90, 0x23, 0xF1, - 0x55, 0x3F, 0x0F, 0xC0, 0x00, 0x03, 0xC0, 0x00, 0x01, 0x40, 0x28, 0x38, 0xB2, 0x9F, 0xE7, - 0x01, 0x65, 0x70, 0x1C, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x01, 0x40, 0x28, 0x28, 0xB2, 0x80, - 0x05, 0x01, 0x65, 0x50, 0x14, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x01, 0x40, 0x28, 0x28, 0xA2, - 0x80, 0x05, 0x01, 0x45, 0x50, 0x14, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x01, 0x40, 0x28, 0x28, - 0xA2, 0x80, 0x05, 0x01, 0x45, 0x50, 0x14, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x01, 0x40, 0x38, - 0x28, 0xE3, 0x80, 0x05, 0x01, 0xC7, 0x50, 0x14, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x01, 0x40, - 0x38, 0x28, 0xE3, 0x80, 0x05, 0x0D, 0xC7, 0x50, 0xD4, 0x30, 0x00, 0x03, 0xD4, 0x00, 0x07, - 0xF3, 0xF0, 0x38, 0x7F, 0x00, 0x07, 0xFC, 0xFE, 0x7F, 0xDF, 0xF0, 0x00, 0x2B, 0xC8, 0x00, - 0x0F, 0xFB, 0xF0, 0x38, 0x7F, 0x00, 0x07, 0xFC, 0xFE, 0x7F, 0xDF, 0xF0, 0x00, 0x13, 0xD4, - 0x06, 0x0E, 0x00, 0x2B, 0xC0, 0x06, 0x0E, 0x00, 0x03, 0x06, 0x20, 0xFF}}; +const image_t img_RIP = { 128, 64, true, 837, 0x06, { // orig:1024, comp:18.26% + 0x06, 0x20, 0xFF, 0xC0, 0x06, 0x0E, 0x00, 0x03, 0xD4, 0x06, 0x0E, 0x00, 0x2B, 0xC8, 0x01, 0xFC, + 0x1E, 0x1F, 0xF0, 0x00, 0xFE, 0x20, 0x8F, 0xE3, 0xF8, 0xFE, 0x3F, 0x80, 0x13, 0xD4, 0x01, 0xFC, + 0x0E, 0x0F, 0xF0, 0x00, 0xFE, 0x71, 0xCF, 0xE3, 0xF8, 0xFE, 0x3F, 0x80, 0x2B, 0xC0, 0x00, 0x0E, + 0x0A, 0x00, 0x38, 0x01, 0x87, 0x71, 0xD8, 0x77, 0x1C, 0x07, 0x71, 0xC0, 0x03, 0xC0, 0x03, 0x8E, + 0x0A, 0x0E, 0x28, 0x01, 0xC5, 0x51, 0x5C, 0x77, 0x1D, 0xC7, 0x71, 0x40, 0x03, 0xC0, 0x03, 0x8A, + 0x0A, 0x0E, 0x28, 0x01, 0x47, 0x51, 0x5C, 0x55, 0x15, 0xC5, 0x51, 0x40, 0x03, 0xC0, 0x02, 0x8A, + 0x0A, 0x0A, 0x28, 0x01, 0x40, 0x51, 0x54, 0x55, 0x15, 0x45, 0x51, 0x40, 0x03, 0xC0, 0x02, 0x8A, + 0x0A, 0x0A, 0x28, 0x01, 0x40, 0x51, 0x54, 0x55, 0x15, 0x45, 0x51, 0xC0, 0x03, 0xC0, 0x02, 0x8E, + 0x0A, 0x0A, 0x38, 0x01, 0x40, 0x51, 0x54, 0x75, 0x55, 0x47, 0x50, 0x00, 0x03, 0xC0, 0x02, 0xF8, + 0x0A, 0x0B, 0xE0, 0x01, 0x40, 0x71, 0xD7, 0xC5, 0x15, 0x7C, 0x50, 0x00, 0x03, 0xC0, 0x02, 0xF8, + 0x0A, 0x0B, 0xE0, 0x01, 0x40, 0x3F, 0x97, 0xC5, 0x15, 0x7C, 0x57, 0x80, 0x03, 0xC0, 0x02, 0x9C, + 0x0A, 0x0A, 0x00, 0x01, 0x40, 0x1B, 0x14, 0x75, 0x55, 0x4E, 0x57, 0xC0, 0x03, 0xC0, 0x02, 0x94, + 0x0A, 0x0A, 0x00, 0x01, 0x40, 0x0A, 0x14, 0x55, 0x15, 0x4A, 0x51, 0x40, 0x03, 0xC0, 0x02, 0x94, + 0x0A, 0x0A, 0x00, 0x01, 0x40, 0x0A, 0x14, 0x55, 0x15, 0x4A, 0x51, 0x40, 0x03, 0xC0, 0x02, 0x94, + 0x0A, 0x0A, 0x00, 0x01, 0xC7, 0x0A, 0x14, 0x55, 0x15, 0x4A, 0x71, 0x40, 0x03, 0xC0, 0x02, 0x94, + 0x0A, 0x0A, 0x00, 0x01, 0xC5, 0x0A, 0x1C, 0x77, 0x1D, 0x4A, 0x71, 0x40, 0x03, 0xC0, 0x02, 0x94, + 0x0A, 0x0A, 0x00, 0x01, 0x87, 0x0E, 0x1C, 0x77, 0x1D, 0x4A, 0x61, 0xC0, 0x03, 0xC0, 0x03, 0x9C, + 0xCE, 0xCE, 0xC0, 0x00, 0xFE, 0x0E, 0x0F, 0xE3, 0xF9, 0xCE, 0x3F, 0x80, 0x03, 0xC0, 0x03, 0x8E, + 0xDE, 0xDE, 0xC0, 0x00, 0xFE, 0x1F, 0x0F, 0xE3, 0xF9, 0xC7, 0x3F, 0x80, 0x03, 0xC0, 0x06, 0x0E, + 0x00, 0x03, 0xC0, 0x06, 0x0E, 0x00, 0x03, 0xC0, 0x06, 0x0A, 0x00, 0x01, 0x8C, 0x07, 0xF0, 0x03, + 0xC0, 0x06, 0x07, 0x00, 0x04, 0x00, 0x00, 0x02, 0x52, 0x18, 0x0C, 0x03, 0xC1, 0xD5, 0xC7, 0x57, + 0x77, 0x6D, 0xC4, 0x5D, 0x2B, 0x8E, 0xE0, 0x03, 0x5A, 0x20, 0x02, 0x03, 0xC0, 0x95, 0x04, 0x54, + 0x24, 0x55, 0x04, 0x55, 0xA1, 0x0A, 0x80, 0x01, 0x8C, 0x47, 0xC1, 0x03, 0xC0, 0x9D, 0x87, 0x27, + 0x26, 0x55, 0xC5, 0x55, 0x61, 0x0C, 0xC0, 0x00, 0x50, 0x88, 0x21, 0x03, 0xC0, 0x95, 0x01, 0x21, + 0x24, 0x44, 0x45, 0x55, 0x21, 0x0A, 0x80, 0x00, 0x20, 0x90, 0x11, 0x03, 0xC0, 0x95, 0xC7, 0x27, + 0x27, 0x45, 0xC6, 0xDD, 0x21, 0x0E, 0xE0, 0x00, 0x70, 0x91, 0x91, 0x03, 0xC0, 0x06, 0x0B, 0x00, + 0x88, 0x92, 0x51, 0x03, 0xC0, 0x06, 0x0A, 0x00, 0x01, 0x08, 0x92, 0x91, 0x03, 0xC0, 0x06, 0x0A, + 0x00, 0x01, 0x08, 0x92, 0x11, 0x03, 0xC1, 0xD5, 0xC7, 0x76, 0xDC, 0x45, 0xDD, 0x5D, 0x5C, 0x57, + 0x50, 0x00, 0x87, 0x11, 0xE2, 0x03, 0xC0, 0x95, 0x04, 0x55, 0x50, 0x44, 0x89, 0x55, 0x48, 0x55, + 0x50, 0x00, 0x80, 0x88, 0x03, 0x03, 0xC0, 0x9D, 0x87, 0x75, 0x58, 0x54, 0x89, 0xD5, 0x48, 0x25, + 0x50, 0x00, 0x40, 0x7C, 0x04, 0x83, 0xC0, 0x95, 0x01, 0x54, 0x50, 0x54, 0x89, 0x55, 0x48, 0x25, + 0x50, 0x00, 0x40, 0x07, 0xF8, 0x43, 0xC0, 0x95, 0xC7, 0x54, 0x5C, 0x6D, 0xC9, 0x5D, 0xC8, 0x27, + 0x70, 0x00, 0x30, 0x00, 0x00, 0x43, 0xC0, 0x06, 0x0B, 0x00, 0x0F, 0xFF, 0xFF, 0x83, 0xC0, 0x06, + 0x0E, 0x00, 0x03, 0xC0, 0x06, 0x0E, 0x00, 0x03, 0xC0, 0x00, 0x07, 0xC7, 0xF1, 0xFC, 0x7F, 0x00, + 0x03, 0xF8, 0xFE, 0x3F, 0x8F, 0xE0, 0x00, 0x03, 0xC0, 0x00, 0x07, 0xC7, 0xF1, 0xFC, 0x7F, 0x00, + 0x03, 0xF8, 0xFE, 0x3F, 0x8F, 0xE0, 0x00, 0x03, 0xC0, 0x00, 0x05, 0x4E, 0x3B, 0x8E, 0xE3, 0x80, + 0x07, 0x1D, 0xC7, 0x71, 0xDC, 0x70, 0x00, 0x03, 0xC0, 0x00, 0x01, 0x4E, 0x3A, 0x8E, 0xE3, 0x80, + 0x05, 0x15, 0xC7, 0x51, 0x54, 0x50, 0x00, 0x03, 0xC0, 0x00, 0x01, 0x4A, 0x2B, 0x8A, 0xA2, 0x80, + 0x07, 0x15, 0x45, 0x71, 0x5C, 0x50, 0x00, 0x03, 0xC0, 0x00, 0x01, 0x4A, 0x28, 0x0A, 0xA2, 0x80, + 0x00, 0x15, 0x45, 0x01, 0x40, 0x50, 0x00, 0x03, 0xC0, 0x00, 0x01, 0x4A, 0x28, 0x0A, 0xA6, 0x80, + 0x00, 0x15, 0x4D, 0x01, 0x40, 0x50, 0x00, 0x03, 0xC0, 0x00, 0x01, 0x4E, 0x28, 0x0E, 0xA6, 0x80, + 0x00, 0x1D, 0x4D, 0x01, 0xC0, 0x70, 0x00, 0x03, 0xC0, 0x00, 0x01, 0xC3, 0xE8, 0x0E, 0xAA, 0x9F, + 0xE1, 0xF9, 0x55, 0x1F, 0x87, 0xE0, 0x00, 0x03, 0xC0, 0x00, 0x01, 0xC3, 0xE8, 0x38, 0xAA, 0x90, + 0x23, 0xF1, 0x55, 0x3F, 0x0F, 0xC0, 0x00, 0x03, 0xC0, 0x00, 0x01, 0x40, 0x28, 0x38, 0xB2, 0x9F, + 0xE7, 0x01, 0x65, 0x70, 0x1C, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x01, 0x40, 0x28, 0x28, 0xB2, 0x80, + 0x05, 0x01, 0x65, 0x50, 0x14, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x01, 0x40, 0x28, 0x28, 0xA2, 0x80, + 0x05, 0x01, 0x45, 0x50, 0x14, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x01, 0x40, 0x28, 0x28, 0xA2, 0x80, + 0x05, 0x01, 0x45, 0x50, 0x14, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x01, 0x40, 0x38, 0x28, 0xE3, 0x80, + 0x05, 0x01, 0xC7, 0x50, 0x14, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x01, 0x40, 0x38, 0x28, 0xE3, 0x80, + 0x05, 0x0D, 0xC7, 0x50, 0xD4, 0x30, 0x00, 0x03, 0xD4, 0x00, 0x07, 0xF3, 0xF0, 0x38, 0x7F, 0x00, + 0x07, 0xFC, 0xFE, 0x7F, 0xDF, 0xF0, 0x00, 0x2B, 0xC8, 0x00, 0x0F, 0xFB, 0xF0, 0x38, 0x7F, 0x00, + 0x07, 0xFC, 0xFE, 0x7F, 0xDF, 0xF0, 0x00, 0x13, 0xD4, 0x06, 0x0E, 0x00, 0x2B, 0xC0, 0x06, 0x0E, + 0x00, 0x03, 0x06, 0x20, 0xFF +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_cc_Cable.c b/applications/plugins/wii_ec_anal/gfx/img_cc_Cable.c index f4ac26173..2fc6b5f23 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_cc_Cable.c +++ b/applications/plugins/wii_ec_anal/gfx/img_cc_Cable.c @@ -12,14 +12,6 @@ #include "images.h" -const image_t img_cc_Cable = { - 4, - 11, - true, - 4, - 0x00, - {// orig:6, comp:33.33% - 0x00, - 0x05, - 0xDB, - 0xD0}}; +const image_t img_cc_Cable = { 4, 11, true, 4, 0x00, { // orig:6, comp:33.33% + 0x00, 0x05, 0xDB, 0xD0 +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_cc_Joy.c b/applications/plugins/wii_ec_anal/gfx/img_cc_Joy.c index 5054103b3..dd189cb7e 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_cc_Joy.c +++ b/applications/plugins/wii_ec_anal/gfx/img_cc_Joy.c @@ -18,8 +18,8 @@ #include "images.h" -const image_t img_cc_Joy = {17, 17, false, 37, 0, {0x00, 0x80, 0x01, 0xF0, 0x0F, 0xDF, 0x87, 0x01, - 0xC3, 0x00, 0x61, 0x00, 0x11, 0x80, 0x0C, 0xC0, - 0x06, 0xC0, 0x01, 0xB0, 0x01, 0x98, 0x00, 0xC4, - 0x00, 0x43, 0x00, 0x61, 0xC0, 0x70, 0xFD, 0xF8, - 0x07, 0xC0, 0x00, 0x80, 0x00}}; +const image_t img_cc_Joy = { 17, 17, false, 37, 0, { + 0x00, 0x80, 0x01, 0xF0, 0x0F, 0xDF, 0x87, 0x01, 0xC3, 0x00, 0x61, 0x00, 0x11, 0x80, 0x0C, 0xC0, + 0x06, 0xC0, 0x01, 0xB0, 0x01, 0x98, 0x00, 0xC4, 0x00, 0x43, 0x00, 0x61, 0xC0, 0x70, 0xFD, 0xF8, + 0x07, 0xC0, 0x00, 0x80, 0x00 +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_cc_Main.c b/applications/plugins/wii_ec_anal/gfx/img_cc_Main.c index b29a9ab57..8e7bd5ed9 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_cc_Main.c +++ b/applications/plugins/wii_ec_anal/gfx/img_cc_Main.c @@ -54,47 +54,39 @@ #include "images.h" -const image_t img_cc_Main = { - 116, - 53, - true, - 542, - 0x05, - {// orig:769, comp:29.52% - 0x00, 0x00, 0x00, 0x7F, 0xC0, 0x05, 0x05, 0x00, 0x3F, 0xE0, 0x05, 0x04, 0x00, 0x01, 0xF8, - 0x04, 0x0F, 0x80, 0x00, 0x00, 0x1F, 0x02, 0x01, 0xF8, 0x05, 0x04, 0x00, 0x60, 0x00, 0x41, - 0x04, 0x00, 0x60, 0x02, 0x08, 0x20, 0x00, 0x60, 0x00, 0x00, 0x00, 0x08, 0x00, 0x07, 0xF0, - 0x7F, 0xFF, 0xFF, 0xE0, 0xFE, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x41, 0x04, - 0x00, 0x60, 0x02, 0x08, 0x20, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x50, 0x03, 0xFC, 0x10, 0x40, - 0x06, 0x00, 0x20, 0x83, 0xFC, 0x00, 0xA0, 0x00, 0x00, 0x09, 0x0F, 0xC0, 0x00, 0xF8, 0x00, - 0x00, 0x01, 0xF0, 0x00, 0x3F, 0x09, 0x00, 0x00, 0x01, 0x1F, 0x05, 0x09, 0x00, 0x0F, 0x88, - 0x00, 0x00, 0x20, 0x05, 0x0A, 0xFF, 0xF0, 0x40, 0x00, 0x04, 0x78, 0x05, 0x09, 0x00, 0x01, - 0xE2, 0x00, 0x00, 0x9C, 0x05, 0x0A, 0x00, 0x03, 0x90, 0x00, 0x13, 0x05, 0x0B, 0x00, 0x0C, - 0x80, 0x03, 0xE0, 0x05, 0x0B, 0x00, 0x7C, 0x00, 0x38, 0x05, 0x05, 0x00, 0xC6, 0xD8, 0x05, - 0x04, 0x00, 0x01, 0xC0, 0x07, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x0D, 0x60, 0x00, 0x00, 0x00, - 0x0E, 0x00, 0x0E, 0x00, 0x60, 0x01, 0xFF, 0x00, 0x00, 0x00, 0xD6, 0xD8, 0x00, 0x00, 0x01, - 0xF0, 0x00, 0x60, 0x0C, 0x00, 0x18, 0x30, 0x00, 0x00, 0x0D, 0x6D, 0x80, 0x00, 0x00, 0x31, - 0x80, 0x03, 0x01, 0xC0, 0x01, 0x83, 0x00, 0x00, 0x00, 0x6C, 0xD8, 0x00, 0x00, 0x06, 0x0C, - 0x00, 0x38, 0x18, 0x00, 0x19, 0x30, 0x05, 0x07, 0x00, 0xCA, 0x60, 0x01, 0x81, 0x00, 0x01, - 0x93, 0x05, 0x07, 0x00, 0x0C, 0x46, 0x00, 0x0C, 0x30, 0x00, 0x19, 0x30, 0x05, 0x07, 0x00, - 0xCA, 0x60, 0x00, 0xC2, 0x00, 0xFF, 0x83, 0xFE, 0x05, 0x05, 0x00, 0x07, 0x06, 0x0C, 0x1C, - 0x04, 0x60, 0x0F, 0xF8, 0x3F, 0xE0, 0x05, 0x05, 0x00, 0xF8, 0x31, 0x83, 0xE0, 0x64, 0x00, - 0xC0, 0x00, 0x06, 0x00, 0x0F, 0x0F, 0x0F, 0x00, 0x18, 0xC1, 0xF0, 0x63, 0x02, 0x40, 0x0C, - 0x00, 0x00, 0x60, 0x01, 0x99, 0x99, 0x98, 0x03, 0x06, 0x0E, 0x0C, 0x98, 0x2C, 0x00, 0xCE, - 0x00, 0xE6, 0x00, 0x10, 0x90, 0x90, 0x80, 0x65, 0x30, 0x01, 0x94, 0xC3, 0x80, 0x0C, 0x00, - 0x00, 0x60, 0x01, 0x09, 0x09, 0x08, 0x06, 0x73, 0x00, 0x19, 0xCC, 0x18, 0x00, 0xC0, 0x00, - 0x06, 0x00, 0x19, 0x99, 0x99, 0x80, 0x61, 0x30, 0x01, 0x94, 0xC1, 0x80, 0x0F, 0xF8, 0x3F, - 0xE0, 0x00, 0xF0, 0xF0, 0xF0, 0x03, 0x26, 0x0E, 0x0C, 0x18, 0x18, 0x00, 0xFF, 0x83, 0xFE, - 0x05, 0x05, 0x00, 0x18, 0xC1, 0xF0, 0x63, 0x01, 0x80, 0x00, 0x19, 0x30, 0x05, 0x06, 0x00, - 0xF8, 0x31, 0x83, 0xE0, 0x18, 0x00, 0x01, 0x93, 0x05, 0x06, 0x00, 0x07, 0x06, 0x8C, 0x1C, - 0x01, 0x80, 0x00, 0x19, 0x30, 0x05, 0x07, 0x00, 0xC8, 0x60, 0x00, 0x18, 0x00, 0x01, 0x83, - 0x05, 0x07, 0x00, 0x0C, 0xC6, 0x00, 0x01, 0x80, 0x00, 0x18, 0x30, 0x05, 0x07, 0x00, 0xCA, - 0x60, 0x00, 0x1C, 0x00, 0x01, 0xFF, 0x05, 0x07, 0x00, 0x06, 0x6C, 0x00, 0x03, 0x40, 0x00, - 0x1F, 0xF0, 0x05, 0x07, 0x00, 0x31, 0x80, 0x00, 0x24, 0x05, 0x0A, 0x00, 0x01, 0xF0, 0x00, - 0x02, 0x60, 0x05, 0x0A, 0x00, 0x0E, 0x00, 0x00, 0x62, 0x05, 0x0D, 0x00, 0x04, 0x20, 0x05, - 0x0D, 0x00, 0x43, 0x05, 0x0D, 0x00, 0x0C, 0x10, 0x05, 0x0D, 0x00, 0x81, 0x80, 0x05, 0x0C, - 0x00, 0x18, 0x0C, 0x05, 0x0C, 0x00, 0x03, 0x00, 0x60, 0x05, 0x0C, 0x00, 0x60, 0x03, 0x05, - 0x0C, 0x00, 0x0C, 0x00, 0x18, 0x05, 0x0B, 0x00, 0x01, 0x80, 0x00, 0xE0, 0x05, 0x0B, 0x00, - 0x70, 0x00, 0x03, 0x05, 0x0B, 0x00, 0x0C, 0x00, 0x00, 0x1C, 0x05, 0x0A, 0x00, 0x03, 0x80, - 0x00, 0x00, 0x78, 0x05, 0x09, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x00, 0x05, 0x0A, 0xFF, 0xF0, - 0x00, 0x00}}; +const image_t img_cc_Main = { 116, 53, true, 542, 0x05, { // orig:769, comp:29.52% + 0x00, 0x00, 0x00, 0x7F, 0xC0, 0x05, 0x05, 0x00, 0x3F, 0xE0, 0x05, 0x04, 0x00, 0x01, 0xF8, 0x04, + 0x0F, 0x80, 0x00, 0x00, 0x1F, 0x02, 0x01, 0xF8, 0x05, 0x04, 0x00, 0x60, 0x00, 0x41, 0x04, 0x00, + 0x60, 0x02, 0x08, 0x20, 0x00, 0x60, 0x00, 0x00, 0x00, 0x08, 0x00, 0x07, 0xF0, 0x7F, 0xFF, 0xFF, + 0xE0, 0xFE, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x41, 0x04, 0x00, 0x60, 0x02, 0x08, + 0x20, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x50, 0x03, 0xFC, 0x10, 0x40, 0x06, 0x00, 0x20, 0x83, 0xFC, + 0x00, 0xA0, 0x00, 0x00, 0x09, 0x0F, 0xC0, 0x00, 0xF8, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x3F, 0x09, + 0x00, 0x00, 0x01, 0x1F, 0x05, 0x09, 0x00, 0x0F, 0x88, 0x00, 0x00, 0x20, 0x05, 0x0A, 0xFF, 0xF0, + 0x40, 0x00, 0x04, 0x78, 0x05, 0x09, 0x00, 0x01, 0xE2, 0x00, 0x00, 0x9C, 0x05, 0x0A, 0x00, 0x03, + 0x90, 0x00, 0x13, 0x05, 0x0B, 0x00, 0x0C, 0x80, 0x03, 0xE0, 0x05, 0x0B, 0x00, 0x7C, 0x00, 0x38, + 0x05, 0x05, 0x00, 0xC6, 0xD8, 0x05, 0x04, 0x00, 0x01, 0xC0, 0x07, 0x00, 0x1F, 0xF0, 0x00, 0x00, + 0x0D, 0x60, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x60, 0x01, 0xFF, 0x00, 0x00, 0x00, 0xD6, + 0xD8, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x60, 0x0C, 0x00, 0x18, 0x30, 0x00, 0x00, 0x0D, 0x6D, 0x80, + 0x00, 0x00, 0x31, 0x80, 0x03, 0x01, 0xC0, 0x01, 0x83, 0x00, 0x00, 0x00, 0x6C, 0xD8, 0x00, 0x00, + 0x06, 0x0C, 0x00, 0x38, 0x18, 0x00, 0x19, 0x30, 0x05, 0x07, 0x00, 0xCA, 0x60, 0x01, 0x81, 0x00, + 0x01, 0x93, 0x05, 0x07, 0x00, 0x0C, 0x46, 0x00, 0x0C, 0x30, 0x00, 0x19, 0x30, 0x05, 0x07, 0x00, + 0xCA, 0x60, 0x00, 0xC2, 0x00, 0xFF, 0x83, 0xFE, 0x05, 0x05, 0x00, 0x07, 0x06, 0x0C, 0x1C, 0x04, + 0x60, 0x0F, 0xF8, 0x3F, 0xE0, 0x05, 0x05, 0x00, 0xF8, 0x31, 0x83, 0xE0, 0x64, 0x00, 0xC0, 0x00, + 0x06, 0x00, 0x0F, 0x0F, 0x0F, 0x00, 0x18, 0xC1, 0xF0, 0x63, 0x02, 0x40, 0x0C, 0x00, 0x00, 0x60, + 0x01, 0x99, 0x99, 0x98, 0x03, 0x06, 0x0E, 0x0C, 0x98, 0x2C, 0x00, 0xCE, 0x00, 0xE6, 0x00, 0x10, + 0x90, 0x90, 0x80, 0x65, 0x30, 0x01, 0x94, 0xC3, 0x80, 0x0C, 0x00, 0x00, 0x60, 0x01, 0x09, 0x09, + 0x08, 0x06, 0x73, 0x00, 0x19, 0xCC, 0x18, 0x00, 0xC0, 0x00, 0x06, 0x00, 0x19, 0x99, 0x99, 0x80, + 0x61, 0x30, 0x01, 0x94, 0xC1, 0x80, 0x0F, 0xF8, 0x3F, 0xE0, 0x00, 0xF0, 0xF0, 0xF0, 0x03, 0x26, + 0x0E, 0x0C, 0x18, 0x18, 0x00, 0xFF, 0x83, 0xFE, 0x05, 0x05, 0x00, 0x18, 0xC1, 0xF0, 0x63, 0x01, + 0x80, 0x00, 0x19, 0x30, 0x05, 0x06, 0x00, 0xF8, 0x31, 0x83, 0xE0, 0x18, 0x00, 0x01, 0x93, 0x05, + 0x06, 0x00, 0x07, 0x06, 0x8C, 0x1C, 0x01, 0x80, 0x00, 0x19, 0x30, 0x05, 0x07, 0x00, 0xC8, 0x60, + 0x00, 0x18, 0x00, 0x01, 0x83, 0x05, 0x07, 0x00, 0x0C, 0xC6, 0x00, 0x01, 0x80, 0x00, 0x18, 0x30, + 0x05, 0x07, 0x00, 0xCA, 0x60, 0x00, 0x1C, 0x00, 0x01, 0xFF, 0x05, 0x07, 0x00, 0x06, 0x6C, 0x00, + 0x03, 0x40, 0x00, 0x1F, 0xF0, 0x05, 0x07, 0x00, 0x31, 0x80, 0x00, 0x24, 0x05, 0x0A, 0x00, 0x01, + 0xF0, 0x00, 0x02, 0x60, 0x05, 0x0A, 0x00, 0x0E, 0x00, 0x00, 0x62, 0x05, 0x0D, 0x00, 0x04, 0x20, + 0x05, 0x0D, 0x00, 0x43, 0x05, 0x0D, 0x00, 0x0C, 0x10, 0x05, 0x0D, 0x00, 0x81, 0x80, 0x05, 0x0C, + 0x00, 0x18, 0x0C, 0x05, 0x0C, 0x00, 0x03, 0x00, 0x60, 0x05, 0x0C, 0x00, 0x60, 0x03, 0x05, 0x0C, + 0x00, 0x0C, 0x00, 0x18, 0x05, 0x0B, 0x00, 0x01, 0x80, 0x00, 0xE0, 0x05, 0x0B, 0x00, 0x70, 0x00, + 0x03, 0x05, 0x0B, 0x00, 0x0C, 0x00, 0x00, 0x1C, 0x05, 0x0A, 0x00, 0x03, 0x80, 0x00, 0x00, 0x78, + 0x05, 0x09, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x00, 0x05, 0x0A, 0xFF, 0xF0, 0x00, 0x00 +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_cc_btn_A1.c b/applications/plugins/wii_ec_anal/gfx/img_cc_btn_A1.c index 0889b2a08..4d54cbf22 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_cc_btn_A1.c +++ b/applications/plugins/wii_ec_anal/gfx/img_cc_btn_A1.c @@ -8,4 +8,6 @@ #include "images.h" -const image_t img_cc_btn_A1 = {7, 7, false, 7, 0, {0xFF, 0xDF, 0x5E, 0x3D, 0x7F, 0xFF, 0x80}}; +const image_t img_cc_btn_A1 = { 7, 7, false, 7, 0, { + 0xFF, 0xDF, 0x5E, 0x3D, 0x7F, 0xFF, 0x80 +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_cc_btn_B1.c b/applications/plugins/wii_ec_anal/gfx/img_cc_btn_B1.c index bbf5fba1a..89d357282 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_cc_btn_B1.c +++ b/applications/plugins/wii_ec_anal/gfx/img_cc_btn_B1.c @@ -8,4 +8,6 @@ #include "images.h" -const image_t img_cc_btn_B1 = {7, 7, false, 7, 0, {0xFF, 0xBF, 0x7E, 0x7D, 0x7C, 0xFF, 0x80}}; +const image_t img_cc_btn_B1 = { 7, 7, false, 7, 0, { + 0xFF, 0xBF, 0x7E, 0x7D, 0x7C, 0xFF, 0x80 +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_cc_btn_X1.c b/applications/plugins/wii_ec_anal/gfx/img_cc_btn_X1.c index 2352ba695..a1e7f2876 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_cc_btn_X1.c +++ b/applications/plugins/wii_ec_anal/gfx/img_cc_btn_X1.c @@ -8,4 +8,6 @@ #include "images.h" -const image_t img_cc_btn_X1 = {7, 7, false, 7, 0, {0xFF, 0xFF, 0x5F, 0x7D, 0x7F, 0xFF, 0x80}}; +const image_t img_cc_btn_X1 = { 7, 7, false, 7, 0, { + 0xFF, 0xFF, 0x5F, 0x7D, 0x7F, 0xFF, 0x80 +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_cc_btn_Y1.c b/applications/plugins/wii_ec_anal/gfx/img_cc_btn_Y1.c index d7192e3e7..01f66b4c7 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_cc_btn_Y1.c +++ b/applications/plugins/wii_ec_anal/gfx/img_cc_btn_Y1.c @@ -8,4 +8,6 @@ #include "images.h" -const image_t img_cc_btn_Y1 = {7, 7, false, 7, 0, {0xFF, 0xFF, 0x5E, 0x3F, 0x7D, 0xFF, 0x80}}; +const image_t img_cc_btn_Y1 = { 7, 7, false, 7, 0, { + 0xFF, 0xFF, 0x5E, 0x3F, 0x7D, 0xFF, 0x80 +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_cc_pad_LR1.c b/applications/plugins/wii_ec_anal/gfx/img_cc_pad_LR1.c index 300ed5eee..698fcfdd6 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_cc_pad_LR1.c +++ b/applications/plugins/wii_ec_anal/gfx/img_cc_pad_LR1.c @@ -6,4 +6,6 @@ #include "images.h" -const image_t img_cc_pad_LR1 = {7, 5, false, 5, 0, {0xFF, 0xFF, 0x1F, 0xFF, 0xE0}}; +const image_t img_cc_pad_LR1 = { 7, 5, false, 5, 0, { + 0xFF, 0xFF, 0x1F, 0xFF, 0xE0 +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_cc_pad_UD1.c b/applications/plugins/wii_ec_anal/gfx/img_cc_pad_UD1.c index feb32d283..b7d104ee4 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_cc_pad_UD1.c +++ b/applications/plugins/wii_ec_anal/gfx/img_cc_pad_UD1.c @@ -8,4 +8,6 @@ #include "images.h" -const image_t img_cc_pad_UD1 = {5, 7, false, 5, 0, {0xFF, 0xF7, 0xBD, 0xFF, 0xE0}}; +const image_t img_cc_pad_UD1 = { 5, 7, false, 5, 0, { + 0xFF, 0xF7, 0xBD, 0xFF, 0xE0 +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_cc_trg_L1.c b/applications/plugins/wii_ec_anal/gfx/img_cc_trg_L1.c index c70e35334..cf4d7159b 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_cc_trg_L1.c +++ b/applications/plugins/wii_ec_anal/gfx/img_cc_trg_L1.c @@ -7,10 +7,6 @@ #include "images.h" -const image_t img_cc_trg_L1 = { - 17, - 6, - false, - 13, - 0, - {0x1F, 0xC9, 0x34, 0x92, 0x64, 0x92, 0x54, 0x92, 0x44, 0x93, 0xFC, 0xFE, 0x00}}; +const image_t img_cc_trg_L1 = { 17, 6, false, 13, 0, { + 0x1F, 0xC9, 0x34, 0x92, 0x64, 0x92, 0x54, 0x92, 0x44, 0x93, 0xFC, 0xFE, 0x00 +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_cc_trg_L2.c b/applications/plugins/wii_ec_anal/gfx/img_cc_trg_L2.c index 47561ab98..9e61a64cc 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_cc_trg_L2.c +++ b/applications/plugins/wii_ec_anal/gfx/img_cc_trg_L2.c @@ -7,22 +7,6 @@ #include "images.h" -const image_t img_cc_trg_L2 = { - 17, - 6, - true, - 12, - 0x01, - {// orig:13, comp:7.69% - 0x1F, - 0xD5, - 0x35, - 0x55, - 0x75, - 0x01, - 0x04, - 0x55, - 0x57, - 0xFD, - 0x7E, - 0x00}}; +const image_t img_cc_trg_L2 = { 17, 6, true, 12, 0x01, { // orig:13, comp:7.69% + 0x1F, 0xD5, 0x35, 0x55, 0x75, 0x01, 0x04, 0x55, 0x57, 0xFD, 0x7E, 0x00 +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_cc_trg_L3.c b/applications/plugins/wii_ec_anal/gfx/img_cc_trg_L3.c index 0b51bed35..1b06de5ee 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_cc_trg_L3.c +++ b/applications/plugins/wii_ec_anal/gfx/img_cc_trg_L3.c @@ -7,10 +7,6 @@ #include "images.h" -const image_t img_cc_trg_L3 = { - 17, - 6, - false, - 13, - 0, - {0x1F, 0xB6, 0xBB, 0x6D, 0xBB, 0x6D, 0xBB, 0x6D, 0xBB, 0x6F, 0xFB, 0x7E, 0x00}}; +const image_t img_cc_trg_L3 = { 17, 6, false, 13, 0, { + 0x1F, 0xB6, 0xBB, 0x6D, 0xBB, 0x6D, 0xBB, 0x6D, 0xBB, 0x6F, 0xFB, 0x7E, 0x00 +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_cc_trg_L4.c b/applications/plugins/wii_ec_anal/gfx/img_cc_trg_L4.c index 062caca77..12f877ab1 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_cc_trg_L4.c +++ b/applications/plugins/wii_ec_anal/gfx/img_cc_trg_L4.c @@ -7,18 +7,6 @@ #include "images.h" -const image_t img_cc_trg_L4 = { - 17, - 6, - true, - 8, - 0x01, - {// orig:13, comp:38.46% - 0x1F, - 0xFF, - 0xBF, - 0x01, - 0x08, - 0xFF, - 0xFE, - 0x00}}; +const image_t img_cc_trg_L4 = { 17, 6, true, 8, 0x01, { // orig:13, comp:38.46% + 0x1F, 0xFF, 0xBF, 0x01, 0x08, 0xFF, 0xFE, 0x00 +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_cc_trg_R1.c b/applications/plugins/wii_ec_anal/gfx/img_cc_trg_R1.c index 6f08886d3..a196c0fe1 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_cc_trg_R1.c +++ b/applications/plugins/wii_ec_anal/gfx/img_cc_trg_R1.c @@ -7,10 +7,6 @@ #include "images.h" -const image_t img_cc_trg_R1 = { - 17, - 6, - false, - 13, - 0, - {0x49, 0xFC, 0x49, 0x25, 0x92, 0x49, 0x24, 0x92, 0x5F, 0xE4, 0x90, 0x0F, 0xE4}}; +const image_t img_cc_trg_R1 = { 17, 6, false, 13, 0, { + 0x49, 0xFC, 0x49, 0x25, 0x92, 0x49, 0x24, 0x92, 0x5F, 0xE4, 0x90, 0x0F, 0xE4 +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_cc_trg_R2.c b/applications/plugins/wii_ec_anal/gfx/img_cc_trg_R2.c index d85e45761..ea5458f39 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_cc_trg_R2.c +++ b/applications/plugins/wii_ec_anal/gfx/img_cc_trg_R2.c @@ -7,10 +7,6 @@ #include "images.h" -const image_t img_cc_trg_R2 = { - 17, - 6, - false, - 13, - 0, - {0x55, 0xFC, 0x55, 0x55, 0x95, 0x55, 0x75, 0x55, 0x5F, 0xF5, 0x50, 0x0F, 0xD4}}; +const image_t img_cc_trg_R2 = { 17, 6, false, 13, 0, { + 0x55, 0xFC, 0x55, 0x55, 0x95, 0x55, 0x75, 0x55, 0x5F, 0xF5, 0x50, 0x0F, 0xD4 +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_cc_trg_R3.c b/applications/plugins/wii_ec_anal/gfx/img_cc_trg_R3.c index 082d160e2..94cf02bf0 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_cc_trg_R3.c +++ b/applications/plugins/wii_ec_anal/gfx/img_cc_trg_R3.c @@ -7,10 +7,6 @@ #include "images.h" -const image_t img_cc_trg_R3 = { - 17, - 6, - false, - 13, - 0, - {0xB6, 0xFC, 0x36, 0xDB, 0xAD, 0xB6, 0xFB, 0x6D, 0xBF, 0xFB, 0x68, 0x0F, 0xD8}}; +const image_t img_cc_trg_R3 = { 17, 6, false, 13, 0, { + 0xB6, 0xFC, 0x36, 0xDB, 0xAD, 0xB6, 0xFB, 0x6D, 0xBF, 0xFB, 0x68, 0x0F, 0xD8 +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_cc_trg_R4.c b/applications/plugins/wii_ec_anal/gfx/img_cc_trg_R4.c index 0395058b8..c90fbe20b 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_cc_trg_R4.c +++ b/applications/plugins/wii_ec_anal/gfx/img_cc_trg_R4.c @@ -7,21 +7,6 @@ #include "images.h" -const image_t img_cc_trg_R4 = { - 17, - 6, - true, - 11, - 0x00, - {// orig:13, comp:15.38% - 0xFF, - 0xFC, - 0x7F, - 0xFF, - 0xBF, - 0x00, - 0x05, - 0xFF, - 0xF8, - 0x0F, - 0xFC}}; +const image_t img_cc_trg_R4 = { 17, 6, true, 11, 0x00, { // orig:13, comp:15.38% + 0xFF, 0xFC, 0x7F, 0xFF, 0xBF, 0x00, 0x05, 0xFF, 0xF8, 0x0F, 0xFC +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_csLogo_FULL.c b/applications/plugins/wii_ec_anal/gfx/img_csLogo_FULL.c index a8c030fa2..97f09ac17 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_csLogo_FULL.c +++ b/applications/plugins/wii_ec_anal/gfx/img_csLogo_FULL.c @@ -41,49 +41,41 @@ #include "images.h" -const image_t img_csLogo_FULL = { - 124, - 40, - true, - 571, - 0x0B, - {// orig:620, comp:7.90% - 0x3F, 0xFF, 0xFE, 0x10, 0x43, 0xF8, 0x7F, 0x0F, 0xE1, 0xFC, 0x0B, 0x05, 0x00, 0x03, 0xFF, - 0xFF, 0xE3, 0x8E, 0x3F, 0x87, 0xF0, 0xFE, 0x1F, 0xC0, 0x0B, 0x05, 0x00, 0xFC, 0x00, 0x07, - 0x38, 0xE6, 0x1C, 0xE3, 0x80, 0x73, 0x8E, 0x03, 0xBB, 0x80, 0x00, 0x00, 0x0F, 0xC0, 0x00, - 0x52, 0x8A, 0x71, 0xCE, 0x39, 0xC7, 0x38, 0xA0, 0x22, 0x10, 0x00, 0x00, 0x00, 0xFC, 0x00, - 0x05, 0x28, 0xA7, 0x14, 0xA2, 0x9C, 0x52, 0x8A, 0x03, 0x39, 0x00, 0x00, 0x00, 0x0C, 0xC0, - 0x00, 0x52, 0x8A, 0x51, 0x4A, 0x29, 0x45, 0x28, 0xA0, 0x20, 0x90, 0x00, 0x00, 0x00, 0xFC, - 0x00, 0x07, 0x28, 0xA5, 0x14, 0xA2, 0x94, 0x52, 0x8E, 0x03, 0xB9, 0x40, 0x00, 0x00, 0x0F, - 0xC0, 0x00, 0x02, 0x8A, 0x51, 0xCA, 0xA9, 0x47, 0x28, 0x0B, 0x06, 0x00, 0xCC, 0x00, 0x00, - 0x38, 0xE5, 0xF0, 0xA2, 0x97, 0xC2, 0x80, 0x06, 0xEE, 0x80, 0x00, 0x00, 0x0E, 0xC3, 0x00, - 0x01, 0xFC, 0x5F, 0x0A, 0x29, 0x7C, 0x2B, 0xC0, 0x2A, 0xAA, 0x00, 0x00, 0x00, 0xDC, 0x30, - 0x00, 0x0D, 0x85, 0x1C, 0xAA, 0x94, 0xE2, 0xBE, 0x02, 0xEE, 0xE0, 0x00, 0x00, 0x0E, 0xC0, - 0x30, 0x00, 0x50, 0x51, 0x4A, 0x29, 0x4A, 0x28, 0xA0, 0x22, 0xA2, 0x00, 0x00, 0x00, 0xDC, - 0x04, 0x80, 0x05, 0x05, 0x14, 0xA2, 0x94, 0xA2, 0x8A, 0x07, 0x2E, 0x20, 0x00, 0x08, 0x0E, - 0xC0, 0x48, 0x00, 0x50, 0x51, 0x4A, 0x29, 0x4A, 0x38, 0xA0, 0x00, 0x00, 0x00, 0x01, 0x40, - 0xDC, 0x03, 0x00, 0x05, 0x07, 0x1C, 0xE3, 0x94, 0xA3, 0x8A, 0x0B, 0x04, 0x00, 0xE2, 0x0C, - 0xC0, 0x00, 0x00, 0x70, 0x71, 0xCE, 0x39, 0x4A, 0x30, 0xE0, 0x00, 0x00, 0x00, 0x0C, 0x90, - 0xCC, 0x00, 0x00, 0x07, 0x03, 0xF8, 0x7F, 0x1C, 0xE1, 0xFC, 0x0B, 0x04, 0x00, 0x94, 0x8C, - 0xC0, 0x00, 0x00, 0xF8, 0x3F, 0x87, 0xF1, 0xC7, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x72, 0x24, - 0xCC, 0x0B, 0x0C, 0x00, 0x06, 0x15, 0x2C, 0xC0, 0x0B, 0x0C, 0x00, 0x48, 0x89, 0xCC, 0x00, - 0xFE, 0x10, 0x43, 0xF8, 0xFF, 0x8F, 0xE1, 0xFC, 0x3F, 0x80, 0x00, 0x39, 0x05, 0x3C, 0xC0, - 0x0F, 0xE3, 0x8E, 0x3F, 0x8F, 0xF8, 0xFE, 0x1F, 0xC3, 0xF8, 0x00, 0x03, 0x22, 0x27, 0xDC, - 0x01, 0x87, 0x38, 0xE6, 0x1C, 0xDD, 0x99, 0xF3, 0xFE, 0x61, 0xC0, 0x00, 0x21, 0x50, 0xFE, - 0xC0, 0x1C, 0x52, 0x8A, 0x71, 0x41, 0x41, 0xC0, 0x3A, 0xE7, 0x14, 0x00, 0x1C, 0x88, 0x9E, - 0xDC, 0x01, 0x45, 0x28, 0xA5, 0x14, 0x14, 0x14, 0x02, 0xAA, 0x51, 0x40, 0x01, 0x94, 0x13, - 0xEE, 0xC0, 0x14, 0x52, 0x8A, 0x51, 0x41, 0x41, 0x40, 0x2A, 0xA5, 0x14, 0x00, 0x12, 0x22, - 0x7F, 0xDC, 0x01, 0x47, 0x28, 0xA5, 0x1C, 0x14, 0x14, 0x02, 0xAA, 0x51, 0xC0, 0x0E, 0x05, - 0x0F, 0x3E, 0xC0, 0x1C, 0x02, 0x8A, 0x70, 0x01, 0x41, 0x4E, 0x2A, 0xA7, 0x00, 0x00, 0xC0, - 0x09, 0xF0, 0xCC, 0x00, 0xFC, 0x38, 0xE3, 0xF0, 0x14, 0x17, 0x82, 0xAA, 0x3F, 0x00, 0x09, - 0x01, 0x3F, 0x8F, 0xC0, 0x03, 0xE1, 0xFC, 0x0F, 0x81, 0x41, 0x78, 0x2A, 0xA0, 0xF8, 0x01, - 0x28, 0x27, 0x98, 0xFC, 0x00, 0x07, 0x0D, 0x80, 0x1C, 0x14, 0x14, 0xE2, 0xAA, 0x01, 0xC0, - 0x28, 0x40, 0xF8, 0x0C, 0xC0, 0x1C, 0x50, 0x50, 0x71, 0x41, 0x41, 0x40, 0x28, 0xA7, 0x14, - 0x03, 0x02, 0x9F, 0xC0, 0xFC, 0x01, 0x45, 0x05, 0x05, 0x14, 0x14, 0x14, 0x02, 0xAA, 0x51, - 0x40, 0x32, 0x13, 0xCC, 0x0F, 0xC1, 0x94, 0x50, 0x50, 0x51, 0x41, 0x41, 0x40, 0x28, 0xA5, - 0x14, 0x01, 0xF2, 0x7C, 0x00, 0xFC, 0x19, 0x47, 0x05, 0x05, 0x1C, 0x14, 0x1C, 0x02, 0x8A, - 0x51, 0xC0, 0x0E, 0x0F, 0xE0, 0x0F, 0xC1, 0x9C, 0x30, 0x70, 0x70, 0xC1, 0x41, 0x9F, 0x28, - 0xA7, 0x0C, 0x00, 0x61, 0xE6, 0x00, 0x3F, 0xF8, 0xFE, 0x07, 0x03, 0xF8, 0x1C, 0x0F, 0xE3, - 0x8E, 0x3F, 0x80, 0x03, 0xBE, 0x00, 0x03, 0xFF, 0x8F, 0xE0, 0xF8, 0x3F, 0x81, 0xC0, 0xFE, - 0x38, 0xE3, 0xF8, 0x00, 0x1F, 0xF0, 0x0B, 0x0E, 0x00, 0xF3, 0x0B, 0x0E, 0x00, 0x06, 0x00, - 0x00}}; +const image_t img_csLogo_FULL = { 124, 40, true, 571, 0x0B, { // orig:620, comp:7.90% + 0x3F, 0xFF, 0xFE, 0x10, 0x43, 0xF8, 0x7F, 0x0F, 0xE1, 0xFC, 0x0B, 0x05, 0x00, 0x03, 0xFF, 0xFF, + 0xE3, 0x8E, 0x3F, 0x87, 0xF0, 0xFE, 0x1F, 0xC0, 0x0B, 0x05, 0x00, 0xFC, 0x00, 0x07, 0x38, 0xE6, + 0x1C, 0xE3, 0x80, 0x73, 0x8E, 0x03, 0xBB, 0x80, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x52, 0x8A, 0x71, + 0xCE, 0x39, 0xC7, 0x38, 0xA0, 0x22, 0x10, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x05, 0x28, 0xA7, 0x14, + 0xA2, 0x9C, 0x52, 0x8A, 0x03, 0x39, 0x00, 0x00, 0x00, 0x0C, 0xC0, 0x00, 0x52, 0x8A, 0x51, 0x4A, + 0x29, 0x45, 0x28, 0xA0, 0x20, 0x90, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x07, 0x28, 0xA5, 0x14, 0xA2, + 0x94, 0x52, 0x8E, 0x03, 0xB9, 0x40, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x02, 0x8A, 0x51, 0xCA, 0xA9, + 0x47, 0x28, 0x0B, 0x06, 0x00, 0xCC, 0x00, 0x00, 0x38, 0xE5, 0xF0, 0xA2, 0x97, 0xC2, 0x80, 0x06, + 0xEE, 0x80, 0x00, 0x00, 0x0E, 0xC3, 0x00, 0x01, 0xFC, 0x5F, 0x0A, 0x29, 0x7C, 0x2B, 0xC0, 0x2A, + 0xAA, 0x00, 0x00, 0x00, 0xDC, 0x30, 0x00, 0x0D, 0x85, 0x1C, 0xAA, 0x94, 0xE2, 0xBE, 0x02, 0xEE, + 0xE0, 0x00, 0x00, 0x0E, 0xC0, 0x30, 0x00, 0x50, 0x51, 0x4A, 0x29, 0x4A, 0x28, 0xA0, 0x22, 0xA2, + 0x00, 0x00, 0x00, 0xDC, 0x04, 0x80, 0x05, 0x05, 0x14, 0xA2, 0x94, 0xA2, 0x8A, 0x07, 0x2E, 0x20, + 0x00, 0x08, 0x0E, 0xC0, 0x48, 0x00, 0x50, 0x51, 0x4A, 0x29, 0x4A, 0x38, 0xA0, 0x00, 0x00, 0x00, + 0x01, 0x40, 0xDC, 0x03, 0x00, 0x05, 0x07, 0x1C, 0xE3, 0x94, 0xA3, 0x8A, 0x0B, 0x04, 0x00, 0xE2, + 0x0C, 0xC0, 0x00, 0x00, 0x70, 0x71, 0xCE, 0x39, 0x4A, 0x30, 0xE0, 0x00, 0x00, 0x00, 0x0C, 0x90, + 0xCC, 0x00, 0x00, 0x07, 0x03, 0xF8, 0x7F, 0x1C, 0xE1, 0xFC, 0x0B, 0x04, 0x00, 0x94, 0x8C, 0xC0, + 0x00, 0x00, 0xF8, 0x3F, 0x87, 0xF1, 0xC7, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x72, 0x24, 0xCC, 0x0B, + 0x0C, 0x00, 0x06, 0x15, 0x2C, 0xC0, 0x0B, 0x0C, 0x00, 0x48, 0x89, 0xCC, 0x00, 0xFE, 0x10, 0x43, + 0xF8, 0xFF, 0x8F, 0xE1, 0xFC, 0x3F, 0x80, 0x00, 0x39, 0x05, 0x3C, 0xC0, 0x0F, 0xE3, 0x8E, 0x3F, + 0x8F, 0xF8, 0xFE, 0x1F, 0xC3, 0xF8, 0x00, 0x03, 0x22, 0x27, 0xDC, 0x01, 0x87, 0x38, 0xE6, 0x1C, + 0xDD, 0x99, 0xF3, 0xFE, 0x61, 0xC0, 0x00, 0x21, 0x50, 0xFE, 0xC0, 0x1C, 0x52, 0x8A, 0x71, 0x41, + 0x41, 0xC0, 0x3A, 0xE7, 0x14, 0x00, 0x1C, 0x88, 0x9E, 0xDC, 0x01, 0x45, 0x28, 0xA5, 0x14, 0x14, + 0x14, 0x02, 0xAA, 0x51, 0x40, 0x01, 0x94, 0x13, 0xEE, 0xC0, 0x14, 0x52, 0x8A, 0x51, 0x41, 0x41, + 0x40, 0x2A, 0xA5, 0x14, 0x00, 0x12, 0x22, 0x7F, 0xDC, 0x01, 0x47, 0x28, 0xA5, 0x1C, 0x14, 0x14, + 0x02, 0xAA, 0x51, 0xC0, 0x0E, 0x05, 0x0F, 0x3E, 0xC0, 0x1C, 0x02, 0x8A, 0x70, 0x01, 0x41, 0x4E, + 0x2A, 0xA7, 0x00, 0x00, 0xC0, 0x09, 0xF0, 0xCC, 0x00, 0xFC, 0x38, 0xE3, 0xF0, 0x14, 0x17, 0x82, + 0xAA, 0x3F, 0x00, 0x09, 0x01, 0x3F, 0x8F, 0xC0, 0x03, 0xE1, 0xFC, 0x0F, 0x81, 0x41, 0x78, 0x2A, + 0xA0, 0xF8, 0x01, 0x28, 0x27, 0x98, 0xFC, 0x00, 0x07, 0x0D, 0x80, 0x1C, 0x14, 0x14, 0xE2, 0xAA, + 0x01, 0xC0, 0x28, 0x40, 0xF8, 0x0C, 0xC0, 0x1C, 0x50, 0x50, 0x71, 0x41, 0x41, 0x40, 0x28, 0xA7, + 0x14, 0x03, 0x02, 0x9F, 0xC0, 0xFC, 0x01, 0x45, 0x05, 0x05, 0x14, 0x14, 0x14, 0x02, 0xAA, 0x51, + 0x40, 0x32, 0x13, 0xCC, 0x0F, 0xC1, 0x94, 0x50, 0x50, 0x51, 0x41, 0x41, 0x40, 0x28, 0xA5, 0x14, + 0x01, 0xF2, 0x7C, 0x00, 0xFC, 0x19, 0x47, 0x05, 0x05, 0x1C, 0x14, 0x1C, 0x02, 0x8A, 0x51, 0xC0, + 0x0E, 0x0F, 0xE0, 0x0F, 0xC1, 0x9C, 0x30, 0x70, 0x70, 0xC1, 0x41, 0x9F, 0x28, 0xA7, 0x0C, 0x00, + 0x61, 0xE6, 0x00, 0x3F, 0xF8, 0xFE, 0x07, 0x03, 0xF8, 0x1C, 0x0F, 0xE3, 0x8E, 0x3F, 0x80, 0x03, + 0xBE, 0x00, 0x03, 0xFF, 0x8F, 0xE0, 0xF8, 0x3F, 0x81, 0xC0, 0xFE, 0x38, 0xE3, 0xF8, 0x00, 0x1F, + 0xF0, 0x0B, 0x0E, 0x00, 0xF3, 0x0B, 0x0E, 0x00, 0x06, 0x00, 0x00 +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_csLogo_Small.c b/applications/plugins/wii_ec_anal/gfx/img_csLogo_Small.c index 71debc2ff..5cd2f613f 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_csLogo_Small.c +++ b/applications/plugins/wii_ec_anal/gfx/img_csLogo_Small.c @@ -13,10 +13,6 @@ #include "images.h" -const image_t img_csLogo_Small = { - 9, - 12, - false, - 14, - 0, - {0xFF, 0xFF, 0xF0, 0x78, 0x3D, 0x06, 0x3F, 0x13, 0x88, 0xC7, 0xE0, 0x7D, 0x3E, 0xF0}}; +const image_t img_csLogo_Small = { 9, 12, false, 14, 0, { + 0xFF, 0xFF, 0xF0, 0x78, 0x3D, 0x06, 0x3F, 0x13, 0x88, 0xC7, 0xE0, 0x7D, 0x3E, 0xF0 +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_ecp_SCL.c b/applications/plugins/wii_ec_anal/gfx/img_ecp_SCL.c index e3622a626..533b79c7b 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_ecp_SCL.c +++ b/applications/plugins/wii_ec_anal/gfx/img_ecp_SCL.c @@ -8,10 +8,6 @@ #include "images.h" -const image_t img_ecp_SCL = { - 16, - 7, - false, - 14, - 0, - {0x3F, 0x8F, 0x3F, 0x8F, 0x31, 0x8C, 0x31, 0x8C, 0x31, 0x8C, 0xF1, 0xFC, 0xF1, 0xFC}}; +const image_t img_ecp_SCL = { 16, 7, false, 14, 0, { + 0x3F, 0x8F, 0x3F, 0x8F, 0x31, 0x8C, 0x31, 0x8C, 0x31, 0x8C, 0xF1, 0xFC, 0xF1, 0xFC +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_ecp_SDA.c b/applications/plugins/wii_ec_anal/gfx/img_ecp_SDA.c index 5ce0cbec4..7384fc87c 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_ecp_SDA.c +++ b/applications/plugins/wii_ec_anal/gfx/img_ecp_SDA.c @@ -13,7 +13,7 @@ #include "images.h" -const image_t img_ecp_SDA = {17, 12, false, 26, 0, {0x10, 0x00, 0x18, 0x00, 0x18, 0x00, 0x1F, - 0xFC, 0x0F, 0xFE, 0x43, 0x00, 0x30, 0xC0, - 0x0C, 0x27, 0xFF, 0x03, 0xFF, 0x80, 0x01, - 0x80, 0x01, 0x80, 0x00, 0x80}}; +const image_t img_ecp_SDA = { 17, 12, false, 26, 0, { + 0x10, 0x00, 0x18, 0x00, 0x18, 0x00, 0x1F, 0xFC, 0x0F, 0xFE, 0x43, 0x00, 0x30, 0xC0, 0x0C, 0x27, + 0xFF, 0x03, 0xFF, 0x80, 0x01, 0x80, 0x01, 0x80, 0x00, 0x80 +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_ecp_port.c b/applications/plugins/wii_ec_anal/gfx/img_ecp_port.c index 60f535458..942f0c593 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_ecp_port.c +++ b/applications/plugins/wii_ec_anal/gfx/img_ecp_port.c @@ -43,30 +43,24 @@ #include "images.h" -const image_t img_ecp_port = { - 69, - 42, - true, - 290, - 0x04, - {// orig:363, comp:20.11% - 0x00, 0x2A, 0x04, 0x06, 0xAA, 0xA8, 0x02, 0x04, 0x07, 0xAA, 0x80, 0x2A, 0x04, 0x07, 0xAA, - 0x02, 0x04, 0x07, 0xAA, 0xA0, 0x2A, 0x04, 0x07, 0xAA, 0x82, 0x04, 0x07, 0xAA, 0xA8, 0x2A, - 0x04, 0x07, 0xAA, 0xA3, 0x04, 0x07, 0xFF, 0xAA, 0x1F, 0x04, 0x06, 0xFF, 0xFE, 0xA8, 0xC0, - 0x04, 0x06, 0x00, 0x6A, 0x86, 0x04, 0x06, 0x00, 0x03, 0xAA, 0x30, 0x04, 0x06, 0x00, 0x1A, - 0xA1, 0x80, 0x04, 0x06, 0x00, 0xEA, 0x8C, 0x04, 0x06, 0x00, 0x06, 0xA8, 0x61, 0x04, 0x05, - 0xFF, 0xFC, 0x3A, 0xA3, 0x0F, 0x04, 0x05, 0xFF, 0xE1, 0xAA, 0x18, 0x61, 0x83, 0x0C, 0x18, - 0x60, 0xC3, 0x0E, 0xA8, 0xC3, 0x0C, 0x18, 0x60, 0xC3, 0x06, 0x18, 0x6A, 0x86, 0x18, 0x7F, - 0xC3, 0xFE, 0x1F, 0xF0, 0xC3, 0xAA, 0x30, 0xC3, 0xFE, 0x1F, 0xF0, 0xFF, 0x86, 0x1A, 0xA1, - 0x86, 0x04, 0x05, 0x00, 0x30, 0xEA, 0xBC, 0x30, 0x04, 0x04, 0x00, 0x01, 0x86, 0xFB, 0xE1, - 0x80, 0x04, 0x04, 0x00, 0x0C, 0x3F, 0xFF, 0x0C, 0x04, 0x05, 0x00, 0x61, 0xBE, 0x78, 0x60, - 0x04, 0x04, 0x00, 0x03, 0x0F, 0xF8, 0xC3, 0x0F, 0xF8, 0x00, 0x03, 0xFE, 0x18, 0x6A, 0x86, - 0x18, 0x7F, 0xC0, 0x00, 0x1F, 0xF0, 0xC3, 0xAA, 0x30, 0xC3, 0x06, 0x1F, 0xF0, 0xC1, 0x86, - 0x1A, 0xA1, 0x86, 0x18, 0x30, 0x80, 0x86, 0x0C, 0x30, 0xEA, 0x8C, 0x3F, 0x04, 0x05, 0xFF, - 0x86, 0xA8, 0x61, 0x04, 0x05, 0xFF, 0xFC, 0x3A, 0xA3, 0x04, 0x06, 0x00, 0x01, 0xAA, 0x18, - 0x04, 0x06, 0x00, 0x0E, 0xA8, 0xC0, 0x04, 0x06, 0x00, 0x6A, 0x86, 0x00, 0x00, 0x7F, 0xFF, - 0xF0, 0x00, 0x03, 0xAA, 0x30, 0x00, 0x03, 0xFF, 0xFF, 0x80, 0x00, 0x1A, 0xA1, 0x80, 0x00, - 0x1A, 0xA0, 0x0C, 0x00, 0x00, 0xEA, 0x0C, 0x00, 0x00, 0xEA, 0x00, 0x60, 0x00, 0x06, 0xA0, - 0x60, 0x00, 0x06, 0xA0, 0x03, 0x00, 0x00, 0x3A, 0x03, 0x00, 0x00, 0x3A, 0x00, 0x18, 0x00, - 0x01, 0xA0, 0x1F, 0xFF, 0xFF, 0xA0, 0x00, 0xFF, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xFE, 0x00, - 0x07, 0xFF, 0xFF, 0xE0, 0x00}}; +const image_t img_ecp_port = { 69, 42, true, 290, 0x04, { // orig:363, comp:20.11% + 0x00, 0x2A, 0x04, 0x06, 0xAA, 0xA8, 0x02, 0x04, 0x07, 0xAA, 0x80, 0x2A, 0x04, 0x07, 0xAA, 0x02, + 0x04, 0x07, 0xAA, 0xA0, 0x2A, 0x04, 0x07, 0xAA, 0x82, 0x04, 0x07, 0xAA, 0xA8, 0x2A, 0x04, 0x07, + 0xAA, 0xA3, 0x04, 0x07, 0xFF, 0xAA, 0x1F, 0x04, 0x06, 0xFF, 0xFE, 0xA8, 0xC0, 0x04, 0x06, 0x00, + 0x6A, 0x86, 0x04, 0x06, 0x00, 0x03, 0xAA, 0x30, 0x04, 0x06, 0x00, 0x1A, 0xA1, 0x80, 0x04, 0x06, + 0x00, 0xEA, 0x8C, 0x04, 0x06, 0x00, 0x06, 0xA8, 0x61, 0x04, 0x05, 0xFF, 0xFC, 0x3A, 0xA3, 0x0F, + 0x04, 0x05, 0xFF, 0xE1, 0xAA, 0x18, 0x61, 0x83, 0x0C, 0x18, 0x60, 0xC3, 0x0E, 0xA8, 0xC3, 0x0C, + 0x18, 0x60, 0xC3, 0x06, 0x18, 0x6A, 0x86, 0x18, 0x7F, 0xC3, 0xFE, 0x1F, 0xF0, 0xC3, 0xAA, 0x30, + 0xC3, 0xFE, 0x1F, 0xF0, 0xFF, 0x86, 0x1A, 0xA1, 0x86, 0x04, 0x05, 0x00, 0x30, 0xEA, 0xBC, 0x30, + 0x04, 0x04, 0x00, 0x01, 0x86, 0xFB, 0xE1, 0x80, 0x04, 0x04, 0x00, 0x0C, 0x3F, 0xFF, 0x0C, 0x04, + 0x05, 0x00, 0x61, 0xBE, 0x78, 0x60, 0x04, 0x04, 0x00, 0x03, 0x0F, 0xF8, 0xC3, 0x0F, 0xF8, 0x00, + 0x03, 0xFE, 0x18, 0x6A, 0x86, 0x18, 0x7F, 0xC0, 0x00, 0x1F, 0xF0, 0xC3, 0xAA, 0x30, 0xC3, 0x06, + 0x1F, 0xF0, 0xC1, 0x86, 0x1A, 0xA1, 0x86, 0x18, 0x30, 0x80, 0x86, 0x0C, 0x30, 0xEA, 0x8C, 0x3F, + 0x04, 0x05, 0xFF, 0x86, 0xA8, 0x61, 0x04, 0x05, 0xFF, 0xFC, 0x3A, 0xA3, 0x04, 0x06, 0x00, 0x01, + 0xAA, 0x18, 0x04, 0x06, 0x00, 0x0E, 0xA8, 0xC0, 0x04, 0x06, 0x00, 0x6A, 0x86, 0x00, 0x00, 0x7F, + 0xFF, 0xF0, 0x00, 0x03, 0xAA, 0x30, 0x00, 0x03, 0xFF, 0xFF, 0x80, 0x00, 0x1A, 0xA1, 0x80, 0x00, + 0x1A, 0xA0, 0x0C, 0x00, 0x00, 0xEA, 0x0C, 0x00, 0x00, 0xEA, 0x00, 0x60, 0x00, 0x06, 0xA0, 0x60, + 0x00, 0x06, 0xA0, 0x03, 0x00, 0x00, 0x3A, 0x03, 0x00, 0x00, 0x3A, 0x00, 0x18, 0x00, 0x01, 0xA0, + 0x1F, 0xFF, 0xFF, 0xA0, 0x00, 0xFF, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xFE, 0x00, 0x07, 0xFF, 0xFF, + 0xE0, 0x00 +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_key_Back.c b/applications/plugins/wii_ec_anal/gfx/img_key_Back.c index 23c17fe2b..d13bcf7f2 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_key_Back.c +++ b/applications/plugins/wii_ec_anal/gfx/img_key_Back.c @@ -10,5 +10,6 @@ #include "images.h" -const image_t img_key_Back = - {9, 9, false, 11, 0, {0x7F, 0x7F, 0xFB, 0xF8, 0x7E, 0xDF, 0xEF, 0xCF, 0xFF, 0x3F, 0x00}}; +const image_t img_key_Back = { 9, 9, false, 11, 0, { + 0x7F, 0x7F, 0xFB, 0xF8, 0x7E, 0xDF, 0xEF, 0xCF, 0xFF, 0x3F, 0x00 +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_key_D.c b/applications/plugins/wii_ec_anal/gfx/img_key_D.c index 689b9148c..8d182427c 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_key_D.c +++ b/applications/plugins/wii_ec_anal/gfx/img_key_D.c @@ -9,5 +9,6 @@ #include "images.h" -const image_t img_key_D = - {9, 8, false, 9, 0, {0x7F, 0x7F, 0xFF, 0xF8, 0x3E, 0x3F, 0xBF, 0xFE, 0xFE}}; +const image_t img_key_D = { 9, 8, false, 9, 0, { + 0x7F, 0x7F, 0xFF, 0xF8, 0x3E, 0x3F, 0xBF, 0xFE, 0xFE +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_key_L.c b/applications/plugins/wii_ec_anal/gfx/img_key_L.c index a5fca1a21..1fc5556b1 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_key_L.c +++ b/applications/plugins/wii_ec_anal/gfx/img_key_L.c @@ -10,5 +10,6 @@ #include "images.h" -const image_t img_key_L = - {8, 9, false, 9, 0, {0x7E, 0xFF, 0xF7, 0xE7, 0xC7, 0xE7, 0xF7, 0xFF, 0x7E}}; +const image_t img_key_L = { 8, 9, false, 9, 0, { + 0x7E, 0xFF, 0xF7, 0xE7, 0xC7, 0xE7, 0xF7, 0xFF, 0x7E +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_key_OK.c b/applications/plugins/wii_ec_anal/gfx/img_key_OK.c index 926d91c2e..ef64128f8 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_key_OK.c +++ b/applications/plugins/wii_ec_anal/gfx/img_key_OK.c @@ -10,5 +10,6 @@ #include "images.h" -const image_t img_key_OK = - {9, 9, false, 11, 0, {0x7F, 0x7F, 0xF8, 0xF8, 0x3C, 0x1E, 0x0F, 0x8F, 0xFF, 0x3F, 0x00}}; +const image_t img_key_OK = { 9, 9, false, 11, 0, { + 0x7F, 0x7F, 0xF8, 0xF8, 0x3C, 0x1E, 0x0F, 0x8F, 0xFF, 0x3F, 0x00 +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_key_OKi.c b/applications/plugins/wii_ec_anal/gfx/img_key_OKi.c index aa6f9e692..595f2f431 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_key_OKi.c +++ b/applications/plugins/wii_ec_anal/gfx/img_key_OKi.c @@ -10,5 +10,6 @@ #include "images.h" -const image_t img_key_OKi = - {9, 9, false, 11, 0, {0x7F, 0x60, 0xE7, 0x37, 0xDB, 0xED, 0xF6, 0x73, 0x83, 0x7F, 0x00}}; +const image_t img_key_OKi = { 9, 9, false, 11, 0, { + 0x7F, 0x60, 0xE7, 0x37, 0xDB, 0xED, 0xF6, 0x73, 0x83, 0x7F, 0x00 +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_key_R.c b/applications/plugins/wii_ec_anal/gfx/img_key_R.c index 8b97c7b48..87cc385bc 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_key_R.c +++ b/applications/plugins/wii_ec_anal/gfx/img_key_R.c @@ -10,5 +10,6 @@ #include "images.h" -const image_t img_key_R = - {8, 9, false, 9, 0, {0x7E, 0xFF, 0xEF, 0xE7, 0xE3, 0xE7, 0xEF, 0xFF, 0x7E}}; +const image_t img_key_R = { 8, 9, false, 9, 0, { + 0x7E, 0xFF, 0xEF, 0xE7, 0xE3, 0xE7, 0xEF, 0xFF, 0x7E +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_key_U.c b/applications/plugins/wii_ec_anal/gfx/img_key_U.c index 65f4cd9e0..aca5bb62a 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_key_U.c +++ b/applications/plugins/wii_ec_anal/gfx/img_key_U.c @@ -9,5 +9,6 @@ #include "images.h" -const image_t img_key_U = - {9, 8, false, 9, 0, {0x7F, 0x7F, 0xFD, 0xFC, 0x7C, 0x1F, 0xFF, 0xFE, 0xFE}}; +const image_t img_key_U = { 9, 8, false, 9, 0, { + 0x7F, 0x7F, 0xFD, 0xFC, 0x7C, 0x1F, 0xFF, 0xFE, 0xFE +}}; diff --git a/applications/plugins/wii_ec_anal/gfx/img_key_Ui.c b/applications/plugins/wii_ec_anal/gfx/img_key_Ui.c index 30c60c66e..b740780ad 100644 --- a/applications/plugins/wii_ec_anal/gfx/img_key_Ui.c +++ b/applications/plugins/wii_ec_anal/gfx/img_key_Ui.c @@ -9,5 +9,6 @@ #include "images.h" -const image_t img_key_Ui = - {9, 8, false, 9, 0, {0x7F, 0x60, 0xE2, 0x33, 0x9B, 0xEC, 0x07, 0x06, 0xFE}}; +const image_t img_key_Ui = { 9, 8, false, 9, 0, { + 0x7F, 0x60, 0xE2, 0x33, 0x9B, 0xEC, 0x07, 0x06, 0xFE +}}; diff --git a/applications/plugins/wii_ec_anal/i2c_workaround.h b/applications/plugins/wii_ec_anal/i2c_workaround.h index b24efaf48..de1dbba54 100644 --- a/applications/plugins/wii_ec_anal/i2c_workaround.h +++ b/applications/plugins/wii_ec_anal/i2c_workaround.h @@ -40,70 +40,62 @@ void furi_hal_i2c_release (FuriHalI2cBusHandle* handle) */ -#ifndef I2C_WORKAROUND_H_ -#define I2C_WORKAROUND_H_ +#ifndef I2C_WORKAROUND_H_ +#define I2C_WORKAROUND_H_ -#include +#include #define ENABLE_WORKAROUND 1 #if ENABLE_WORKAROUND == 1 -//+============================================================================ ======================================== -static inline bool furi_hal_Wi2c_is_device_ready( - FuriHalI2cBusHandle* const bus, - const uint8_t addr, - const uint32_t tmo) { - furi_hal_i2c_acquire(bus); - bool rv = furi_hal_i2c_is_device_ready(bus, addr, tmo); - furi_hal_i2c_release(bus); - return rv; -} + //+============================================================================ ======================================== + static inline + bool furi_hal_Wi2c_is_device_ready (FuriHalI2cBusHandle* const bus, const uint8_t addr, const uint32_t tmo) + { + furi_hal_i2c_acquire(bus); + bool rv = furi_hal_i2c_is_device_ready(bus, addr, tmo); + furi_hal_i2c_release(bus); + return rv; + } -//+============================================================================ -static inline bool furi_hal_Wi2c_tx( - FuriHalI2cBusHandle* const bus, - const uint8_t addr, - const void* buf, - const size_t len, - const uint32_t tmo) { - furi_hal_i2c_acquire(bus); - bool rv = furi_hal_i2c_tx(bus, addr, buf, len, tmo); - furi_hal_i2c_release(bus); - return rv; -} + //+============================================================================ + static inline + bool furi_hal_Wi2c_tx ( FuriHalI2cBusHandle* const bus, const uint8_t addr, + const void* buf, const size_t len, const uint32_t tmo ) + { + furi_hal_i2c_acquire(bus); + bool rv = furi_hal_i2c_tx(bus, addr, buf, len, tmo); + furi_hal_i2c_release(bus); + return rv; + } -//+============================================================================ -static inline bool furi_hal_Wi2c_rx( - FuriHalI2cBusHandle* const bus, - const uint8_t addr, - void* buf, - const size_t len, - const uint32_t tmo) { - furi_hal_i2c_acquire(bus); - bool rv = furi_hal_i2c_rx(bus, addr, buf, len, tmo); - furi_hal_i2c_release(bus); - return rv; -} + //+============================================================================ + static inline + bool furi_hal_Wi2c_rx ( FuriHalI2cBusHandle* const bus, const uint8_t addr, + void* buf, const size_t len, const uint32_t tmo ) + { + furi_hal_i2c_acquire(bus); + bool rv = furi_hal_i2c_rx(bus, addr, buf, len, tmo); + furi_hal_i2c_release(bus); + return rv; + } -//+============================================================================ -static inline bool furi_hal_Wi2c_trx( - FuriHalI2cBusHandle* const bus, - const uint8_t addr, - const void* tx, - const size_t txlen, - void* rx, - const size_t rxlen, - const uint32_t tmo) { - bool rv = furi_hal_Wi2c_tx(bus, addr, tx, txlen, tmo); - if(rv) rv = furi_hal_Wi2c_rx(bus, addr, rx, rxlen, tmo); - return rv; -} + //+============================================================================ + static inline + bool furi_hal_Wi2c_trx ( FuriHalI2cBusHandle* const bus, const uint8_t addr, + const void* tx, const size_t txlen, + void* rx, const size_t rxlen, const uint32_t tmo ) + { + bool rv = furi_hal_Wi2c_tx(bus, addr, tx, txlen, tmo); + if (rv) rv = furi_hal_Wi2c_rx(bus, addr, rx, rxlen, tmo); + return rv; + } -//----------------------------------------------------------------------------- ---------------------------------------- -#define furi_hal_i2c_is_device_ready(...) furi_hal_Wi2c_is_device_ready(__VA_ARGS__) -#define furi_hal_i2c_tx(...) furi_hal_Wi2c_tx(__VA_ARGS__) -#define furi_hal_i2c_rx(...) furi_hal_Wi2c_rx(__VA_ARGS__) -#define furi_hal_i2c_trx(...) furi_hal_Wi2c_trx(__VA_ARGS__) + //----------------------------------------------------------------------------- ---------------------------------------- +# define furi_hal_i2c_is_device_ready(...) furi_hal_Wi2c_is_device_ready(__VA_ARGS__) +# define furi_hal_i2c_tx(...) furi_hal_Wi2c_tx(__VA_ARGS__) +# define furi_hal_i2c_rx(...) furi_hal_Wi2c_rx(__VA_ARGS__) +# define furi_hal_i2c_trx(...) furi_hal_Wi2c_trx(__VA_ARGS__) #endif //ENABLE_WORKAROUND @@ -111,21 +103,17 @@ static inline bool furi_hal_Wi2c_trx( // Some devices take a moment to respond to read requests // The puts a delay between the address being set and the data being read // -static inline bool furi_hal_i2c_trxd( - FuriHalI2cBusHandle* const bus, - const uint8_t addr, - const void* tx, - const size_t txlen, - void* rx, - const size_t rxlen, - const uint32_t tmo, - const uint32_t us) { - bool rv = furi_hal_i2c_tx(bus, addr, tx, txlen, tmo); - if(rv) { - furi_delay_us(us); - rv = furi_hal_i2c_rx(bus, addr, rx, rxlen, tmo); - } - return rv; +static inline +bool furi_hal_i2c_trxd ( FuriHalI2cBusHandle* const bus, const uint8_t addr, + const void* tx, const size_t txlen, + void* rx, const size_t rxlen, const uint32_t tmo, const uint32_t us ) +{ + bool rv = furi_hal_i2c_tx(bus, addr, tx, txlen, tmo); + if (rv) { + furi_delay_us(us); + rv = furi_hal_i2c_rx(bus, addr, rx, rxlen, tmo); + } + return rv; } #endif //I2C_WORKAROUND_H_ diff --git a/applications/plugins/wii_ec_anal/notes.txt b/applications/plugins/wii_ec_anal/notes.txt deleted file mode 100644 index 61b6e29af..000000000 --- a/applications/plugins/wii_ec_anal/notes.txt +++ /dev/null @@ -1,87 +0,0 @@ -//+============================================================================ ======================================== -// Select font -// A full list of u8g2 fonts can be found here: -// https://github.com/olikraus/u8g2/wiki/fntlistall -// ...and here are the ones available in FZ (currently: all of them): -// grep -P '.*u8g2.*\[[0-9]*\]' lib/u8g2/u8g2_fonts.c | sed 's/.*\(u8g2_.*\)\[.*/\1/' -// -#if 0 //! Extra fonts is just too memory hungry -#include -void setFont (Canvas* const canvas, const uint8_t* font) -{ - u8g2_SetFontMode(&canvas->fb, 1); // no idea - but canvas.c does it - u8g2_SetFont(&canvas->fb, font); -} -#endif - -litui : @BlueChip for posterity, the function to break at is flipper_application_spawn. At that point, you can set new breakpoints in your fap code and continue. - -/* - -This is wrong on quite a few levels! -https://training.ti.com/introduction-i2c-reserved-addresses - -void doit (void) -{ - furi_hal_i2c_acquire(&furi_hal_i2c_handle_external); - printf("Scanning external i2c on PC0(SCL)/PC1(SDA)\r\n" - "Clock: 100khz, 7bit address\r\n" - "\r\n"); - printf(" | 0 1 2 3 4 5 6 7 8 9 A B C D E F\r\n"); - printf("--+--------------------------------\r\n"); - for(uint8_t row = 0; row < 0x8; row++) { - printf("%x | ", row); - for(uint8_t column = 0; column <= 0xF; column++) { - bool ret = furi_hal_i2c_is_device_ready( - &furi_hal_i2c_handle_external, ((row << 4) + column) << 1, 2); - printf("%c ", ret ? '#' : '-'); - } - printf("\r\n"); - } - furi_hal_i2c_release(&furi_hal_i2c_handle_external); -} -*/ - - -region locking : firmware/targets/f7/furi_hal/furi_hal_region.c - - -# if 0 //! scrolling works beautifully, but the LCD refresh can't keep up :( - // Waveform - if (cnt) { // start - for (int a = ACC_1; a < ACC_N; a++) { - canvas_draw_dot(canvas, x,y[a]+v[a][idx]); - for (int i = 1; i < aw -cnt; i++) { - canvas_draw_line(canvas, x+i,y[a]+v[a][i-1] , x+i,y[a]+v[a][i]); - } - } - } else { // scroll - for (int a = ACC_1; a < ACC_N; a++) { - for (int i = 0; i < aw; i++) { - int off = (idx +i) %aw; - int prev = off ? off-1 : aw-1; - canvas_draw_line(canvas, x+i,y[a]+v[a][prev] , x+i,y[a]+v[a][off]); - } - } - } - -# else - int end = idx ? idx : aw; - for (int a = ACC_1; a < ACC_N; a++) { - canvas_draw_dot(canvas, x,y[a]+v[a][idx]); - if (state->apause) { - for (int i = 1; i < end; i++) - canvas_draw_line(canvas, x+i,y[a]+v[a][i-1] , x+i,y[a]+v[a][i]); - } else { - for (int i = 1; i < end; i++) - canvas_draw_line(canvas, x+i,y[a]+v[a][i-1] , x+i,y[a]+v[a][i]); - for (int i = end+10; i < aw -cnt; i++) - canvas_draw_line(canvas, x+i,y[a]+v[a][i-1] , x+i,y[a]+v[a][i]); - } - } - - // Wipe bar - if (end < aw) canvas_draw_line(canvas, x+end,y[0], x+end,y[2]+ah-1); - if (++end < aw) canvas_draw_line(canvas, x+end,y[0], x+end,y[2]+ah-1); - if (++end < aw) canvas_draw_line(canvas, x+end,y[0], x+end,y[2]+ah-1); -# endif diff --git a/applications/plugins/wii_ec_anal/wii_anal.c b/applications/plugins/wii_ec_anal/wii_anal.c index f0af1c9c5..fdf718b63 100644 --- a/applications/plugins/wii_ec_anal/wii_anal.c +++ b/applications/plugins/wii_ec_anal/wii_anal.c @@ -3,34 +3,34 @@ // // System libs -#include // malloc -#include // uint32_t -#include // __VA_ARGS__ -#include -#include +#include // malloc +#include // uint32_t +#include // __VA_ARGS__ +#include +#include // FlipperZero libs -#include // Core API -#include // GUI (screen/keyboard) API -#include // GUI Input extensions -#include +#include // Core API +#include // GUI (screen/keyboard) API +#include // GUI Input extensions +#include // Do this first! #define ERR_C_ // Do this in precisely ONE file -#include "err.h" // Error numbers & messages +#include "err.h" // Error numbers & messages -#include "bc_logging.h" +#include "bc_logging.h" // Local headers -#include "wii_anal.h" // Various enums and struct declarations -#include "wii_i2c.h" // Wii i2c functions -#include "wii_ec.h" // Wii Extension Controller functions (eg. draw) -#include "wii_anal_keys.h" // key mappings -#include "gfx/images.h" // Images -#include "wii_anal_lcd.h" // Drawing functions -#include "wii_anal_ec.h" // Wii controller events +#include "wii_anal.h" // Various enums and struct declarations +#include "wii_i2c.h" // Wii i2c functions +#include "wii_ec.h" // Wii Extension Controller functions (eg. draw) +#include "wii_anal_keys.h" // key mappings +#include "gfx/images.h" // Images +#include "wii_anal_lcd.h" // Drawing functions +#include "wii_anal_ec.h" // Wii controller events -#include "wii_anal_ver.h" // Version number +#include "wii_anal_ver.h" // Version number //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // OOOOO // SSSSS CCCCC AAA L L BBBB AAA CCCC K K SSSSS @@ -44,42 +44,48 @@ // OS Callback : Timer tick // We register this function to be called when the OS signals a timer 'tick' event // -static void cbTimer(FuriMessageQueue* queue) { - ENTER; - furi_assert(queue); +static +void cbTimer (FuriMessageQueue* queue) +{ + ENTER; + furi_assert(queue); - eventMsg_t message = {.id = EVID_TICK}; - furi_message_queue_put(queue, &message, 0); + eventMsg_t message = {.id = EVID_TICK}; + furi_message_queue_put(queue, &message, 0); - LEAVE; - return; + LEAVE; + return; } //+============================================================================ ======================================== // OS Callback : Keypress // We register this function to be called when the OS detects a keypress // -static void cbInput(InputEvent* event, FuriMessageQueue* queue) { - ENTER; - furi_assert(queue); - furi_assert(event); +static +void cbInput (InputEvent* event, FuriMessageQueue* queue) +{ + ENTER; + furi_assert(queue); + furi_assert(event); - // Put an "input" event message on the message queue - eventMsg_t message = {.id = EVID_KEY, .input = *event}; - furi_message_queue_put(queue, &message, FuriWaitForever); + // Put an "input" event message on the message queue + eventMsg_t message = {.id = EVID_KEY, .input = *event}; + furi_message_queue_put(queue, &message, FuriWaitForever); - LEAVE; - return; + LEAVE; + return; } //+============================================================================ // Show version number // -static void showVer(Canvas* const canvas) { - show(canvas, 0, 59, &img_3x5_v, SHOW_SET_BLK); - show(canvas, 4, 59, VER_MAJ, SHOW_SET_BLK); - canvas_draw_frame(canvas, 8, 62, 2, 2); - show(canvas, 11, 59, VER_MIN, SHOW_SET_BLK); +static +void showVer (Canvas* const canvas) +{ + show(canvas, 0,59, &img_3x5_v, SHOW_SET_BLK); + show(canvas, 4,59, VER_MAJ, SHOW_SET_BLK); + canvas_draw_frame(canvas, 8,62, 2,2); + show(canvas, 11,59, VER_MIN, SHOW_SET_BLK); } //+============================================================================ @@ -89,103 +95,105 @@ static void showVer(Canvas* const canvas) { // We actually instruct the OS to perform this request, after we update the interface // I guess it's possible that this instruction may able be issued by other threads !? // -static void cbDraw(Canvas* const canvas, void* ctx) { - ENTER; - furi_assert(canvas); - furi_assert(ctx); +static +void cbDraw (Canvas* const canvas, void* ctx) +{ + ENTER; + furi_assert(canvas); + furi_assert(ctx); - state_t* state = NULL; + state_t* state = NULL; - // Try to acquire the mutex for the plugin state variables, timeout = 25mS - if(!(state = (state_t*)acquire_mutex((ValueMutex*)ctx, 25))) return; + // Try to acquire the mutex for the plugin state variables, timeout = 25mS + if ( !(state = (state_t*)acquire_mutex((ValueMutex*)ctx, 25)) ) return ; - switch(state->scene) { - //--------------------------------------------------------------------- - case SCENE_SPLASH: - show(canvas, 2, 0, &img_csLogo_FULL, SHOW_SET_BLK); + switch (state->scene) { + //--------------------------------------------------------------------- + case SCENE_SPLASH: + show(canvas, 2,0, &img_csLogo_FULL, SHOW_SET_BLK); - canvas_set_font(canvas, FontSecondary); - canvas_draw_str_aligned(canvas, 64, 43, AlignCenter, AlignTop, "Wii Extension Controller"); - canvas_draw_str_aligned(canvas, 64, 55, AlignCenter, AlignTop, "Protocol Analyser"); + canvas_set_font(canvas, FontSecondary); + canvas_draw_str_aligned(canvas, 64,43, AlignCenter, AlignTop, "Wii Extension Controller"); + canvas_draw_str_aligned(canvas, 64,55, AlignCenter, AlignTop, "Protocol Analyser"); - showVer(canvas); + showVer(canvas); - break; + break; - //--------------------------------------------------------------------- - case SCENE_RIP: - show(canvas, 0, 0, &img_RIP, SHOW_SET_BLK); - break; + //--------------------------------------------------------------------- + case SCENE_RIP: + show(canvas, 0,0, &img_RIP, SHOW_SET_BLK); + break; - //--------------------------------------------------------------------- - case SCENE_WAIT: -#define xo 2 + //--------------------------------------------------------------------- + case SCENE_WAIT: +# define xo 2 - show(canvas, 3 + xo, 10, &img_ecp_port, SHOW_SET_BLK); + show(canvas, 3+xo,10, &img_ecp_port, SHOW_SET_BLK); - BOX_TL(22 + xo, 6, 82 + xo, 23); // 3v3 - BOX_TL(48 + xo, 21, 82 + xo, 23); // C1 - BOX_BL(22 + xo, 41, 82 + xo, 58); // C0 - BOX_BL(48 + xo, 41, 82 + xo, 44); // Gnd + BOX_TL(22+xo, 6, 82+xo,23); // 3v3 + BOX_TL(48+xo,21, 82+xo,23); // C1 + BOX_BL(22+xo,41, 82+xo,58); // C0 + BOX_BL(48+xo,41, 82+xo,44); // Gnd - show(canvas, 90 + xo, 3, &img_6x8_3, SHOW_SET_BLK); // 3v3 - show(canvas, 97 + xo, 3, &img_6x8_v, SHOW_SET_BLK); - show(canvas, 104 + xo, 3, &img_6x8_3, SHOW_SET_BLK); + show(canvas, 90+xo, 3, &img_6x8_3, SHOW_SET_BLK); // 3v3 + show(canvas, 97+xo, 3, &img_6x8_v, SHOW_SET_BLK); + show(canvas, 104+xo, 3, &img_6x8_3, SHOW_SET_BLK); - show(canvas, 90 + xo, 18, &img_6x8_C, SHOW_SET_BLK); // C1 <-> - show(canvas, 98 + xo, 18, &img_6x8_1, SHOW_SET_BLK); - show(canvas, 107 + xo, 16, &img_ecp_SDA, SHOW_SET_BLK); + show(canvas, 90+xo,18, &img_6x8_C, SHOW_SET_BLK); // C1 <-> + show(canvas, 98+xo,18, &img_6x8_1, SHOW_SET_BLK); + show(canvas, 107+xo,16, &img_ecp_SDA, SHOW_SET_BLK); - show(canvas, 90 + xo, 40, &img_6x8_G, SHOW_SET_BLK); // Gnd - show(canvas, 97 + xo, 40, &img_6x8_n, SHOW_SET_BLK); - show(canvas, 104 + xo, 40, &img_6x8_d, SHOW_SET_BLK); + show(canvas, 90+xo,40, &img_6x8_G, SHOW_SET_BLK); // Gnd + show(canvas, 97+xo,40, &img_6x8_n, SHOW_SET_BLK); + show(canvas, 104+xo,40, &img_6x8_d, SHOW_SET_BLK); - show(canvas, 90 + xo, 54, &img_6x8_C, SHOW_SET_BLK); // C0 _-_- - show(canvas, 98 + xo, 54, &img_6x8_0, SHOW_SET_BLK); - show(canvas, 108 + xo, 54, &img_ecp_SCL, SHOW_SET_BLK); + show(canvas, 90+xo,54, &img_6x8_C, SHOW_SET_BLK); // C0 _-_- + show(canvas, 98+xo,54, &img_6x8_0, SHOW_SET_BLK); + show(canvas, 108+xo,54, &img_ecp_SCL, SHOW_SET_BLK); - show(canvas, 0, 0, &img_csLogo_Small, SHOW_SET_BLK); - showVer(canvas); + show(canvas, 0,0, &img_csLogo_Small, SHOW_SET_BLK); + showVer(canvas); -#undef xo - break; +# undef xo + break; - //--------------------------------------------------------------------- - case SCENE_DEBUG: - canvas_set_font(canvas, FontSecondary); + //--------------------------------------------------------------------- + case SCENE_DEBUG: + canvas_set_font(canvas, FontSecondary); - show(canvas, 0, 0, &img_key_U, SHOW_SET_BLK); - canvas_draw_str_aligned(canvas, 11, 0, AlignLeft, AlignTop, "Initialise Perhipheral"); + show(canvas, 0,0, &img_key_U, SHOW_SET_BLK); + canvas_draw_str_aligned(canvas, 11, 0, AlignLeft, AlignTop, "Initialise Perhipheral"); - show(canvas, 0, 11, &img_key_OK, SHOW_SET_BLK); - canvas_draw_str_aligned(canvas, 11, 11, AlignLeft, AlignTop, "Read values [see log]"); + show(canvas, 0,11, &img_key_OK, SHOW_SET_BLK); + canvas_draw_str_aligned(canvas, 11,11, AlignLeft, AlignTop, "Read values [see log]"); - show(canvas, 0, 23, &img_key_D, SHOW_SET_BLK); - canvas_draw_str_aligned(canvas, 11, 22, AlignLeft, AlignTop, "Restart Scanner"); + show(canvas, 0,23, &img_key_D, SHOW_SET_BLK); + canvas_draw_str_aligned(canvas, 11,22, AlignLeft, AlignTop, "Restart Scanner"); - show(canvas, 0, 33, &img_key_Back, SHOW_SET_BLK); - canvas_draw_str_aligned(canvas, 11, 33, AlignLeft, AlignTop, "Exit"); + show(canvas, 0,33, &img_key_Back, SHOW_SET_BLK); + canvas_draw_str_aligned(canvas, 11,33, AlignLeft, AlignTop, "Exit"); - break; + break ; - //--------------------------------------------------------------------- - default: - if(state->ec.pidx >= PID_ERROR) { - ERROR("%s : bad PID = %d", __func__, state->ec.pidx); - } else { - if((state->scene == SCENE_DUMP) || !ecId[state->ec.pidx].show) - ecId[PID_UNKNOWN].show(canvas, state); - else - ecId[state->ec.pidx].show(canvas, state); - } - break; - } + //--------------------------------------------------------------------- + default: + if (state->ec.pidx >= PID_ERROR) { + ERROR("%s : bad PID = %d", __func__, state->ec.pidx); + } else { + if ((state->scene == SCENE_DUMP) || !ecId[state->ec.pidx].show) + ecId[PID_UNKNOWN].show(canvas, state); + else + ecId[state->ec.pidx].show(canvas, state); + } + break; + } - // Release the mutex - release_mutex((ValueMutex*)ctx, state); + // Release the mutex + release_mutex((ValueMutex*)ctx, state); - LEAVE; - return; + LEAVE; + return; } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -199,54 +207,56 @@ static void cbDraw(Canvas* const canvas, void* ctx) { //+============================================================================ ======================================== // Initialise plugin state variables // -static inline bool stateInit(state_t* const state) { - ENTER; - furi_assert(state); +static inline +bool stateInit (state_t* const state) +{ + ENTER; + furi_assert(state); - bool rv = true; // assume success + bool rv = true; // assume success - // Enable the main loop - state->run = true; + // Enable the main loop + state->run = true; - // Timer - state->timerEn = false; - state->timer = NULL; - state->timerHz = furi_kernel_get_tick_frequency(); - state->fps = 30; + // Timer + state->timerEn = false; + state->timer = NULL; + state->timerHz = furi_kernel_get_tick_frequency(); + state->fps = 30; - // Scene - state->scene = SCENE_SPLASH; - state->scenePrev = SCENE_NONE; - state->scenePegg = SCENE_NONE; + // Scene + state->scene = SCENE_SPLASH; + state->scenePrev = SCENE_NONE; + state->scenePegg = SCENE_NONE; - state->hold = 0; // show hold meters (-1=lowest, 0=current, +1=highest} - state->calib = CAL_TRACK; - state->pause = false; // animation running - state->apause = false; // auto-pause animation + state->hold = 0; // show hold meters (-1=lowest, 0=current, +1=highest} + state->calib = CAL_TRACK; + state->pause = false; // animation running + state->apause = false; // auto-pause animation - // Notifications - state->notify = NULL; + // Notifications + state->notify = NULL; - // Perhipheral - state->ec.init = false; - state->ec.pidx = PID_UNKNOWN; - state->ec.sid = ecId[state->ec.pidx].name; + // Perhipheral + state->ec.init = false; + state->ec.pidx = PID_UNKNOWN; + state->ec.sid = ecId[state->ec.pidx].name; - // Controller data - memset(state->ec.pid, 0xC5, PID_LEN); // Cyborg 5ystems - memset(state->ec.calF, 0xC5, CAL_LEN); - memset(state->ec.joy, 0xC5, JOY_LEN); + // Controller data + memset(state->ec.pid, 0xC5, PID_LEN); // Cyborg 5ystems + memset(state->ec.calF, 0xC5, CAL_LEN); + memset(state->ec.joy, 0xC5, JOY_LEN); - // Encryption details - state->ec.encrypt = false; - memset(state->ec.encKey, 0x00, ENC_LEN); + // Encryption details + state->ec.encrypt = false; + memset(state->ec.encKey, 0x00, ENC_LEN); - // Seed the PRNG - // CYCCNT --> lib/STM32CubeWB/Drivers/CMSIS/Include/core_cm7.h - // srand(DWT->CYCCNT); + // Seed the PRNG + // CYCCNT --> lib/STM32CubeWB/Drivers/CMSIS/Include/core_cm7.h +// srand(DWT->CYCCNT); - LEAVE; - return rv; + LEAVE; + return rv; } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -260,284 +270,271 @@ static inline bool stateInit(state_t* const state) { //+============================================================================ ======================================== // Enable/Disable scanning // -void timerEn(state_t* state, bool on) { - ENTER; - furi_assert(state); +void timerEn (state_t* state, bool on) +{ + ENTER; + furi_assert(state); - // ENable scanning - if(on) { - if(state->timerEn) { - WARN(wii_errs[WARN_SCAN_START]); - } else { - // Set the timer to fire at 'fps' times/second - if(furi_timer_start(state->timer, state->timerHz / state->fps) == FuriStatusOk) { - state->timerEn = true; - INFO("%s : monitor started", __func__); - } else { - ERROR(wii_errs[ERR_TIMER_START]); - } - } + // ENable scanning + if (on) { + if (state->timerEn) { + WARN(wii_errs[WARN_SCAN_START]); + } else { + // Set the timer to fire at 'fps' times/second + if (furi_timer_start(state->timer, state->timerHz/state->fps) == FuriStatusOk) { + state->timerEn = true; + INFO("%s : monitor started", __func__); + } else { + ERROR(wii_errs[ERR_TIMER_START]); + } + } - // DISable scanning - } else { - if(!state->timerEn) { - WARN(wii_errs[WARN_SCAN_STOP]); - } else { - // Stop the timer - if(furi_timer_stop(state->timer) == FuriStatusOk) { - state->timerEn = false; - INFO("%s : monitor stopped", __func__); - } else { - ERROR(wii_errs[ERR_TIMER_STOP]); - } - } - } + // DISable scanning + } else { + if (!state->timerEn) { + WARN(wii_errs[WARN_SCAN_STOP]); + } else { + // Stop the timer + if (furi_timer_stop(state->timer) == FuriStatusOk) { + state->timerEn = false; + INFO("%s : monitor stopped", __func__); + } else { + ERROR(wii_errs[ERR_TIMER_STOP]); + } + } + } - LEAVE; - return; + LEAVE; + return; } //+============================================================================ ======================================== // Plugin entry point // -int32_t wii_ec_anal(void) { - ENTER; +int32_t wii_ec_anal (void) +{ + ENTER; - // ===== Variables ===== - err_t error = 0; // assume success - Gui* gui = NULL; - ViewPort* vpp = NULL; - state_t* state = NULL; - ValueMutex mutex = {0}; - FuriMessageQueue* queue = NULL; - const uint32_t queueSz = 20; // maximum messages in queue - uint32_t tmo = (3.5f * 1000); // timeout splash screen after N seconds + // ===== Variables ===== + err_t error = 0; // assume success + Gui* gui = NULL; + ViewPort* vpp = NULL; + state_t* state = NULL; + ValueMutex mutex = {0}; + FuriMessageQueue* queue = NULL; + const uint32_t queueSz = 20; // maximum messages in queue + uint32_t tmo = (3.5f *1000); // timeout splash screen after N seconds - // The queue will contain plugin event-messages - // --> local - eventMsg_t msg = {0}; + // The queue will contain plugin event-messages + // --> local + eventMsg_t msg = {0}; - INFO("BEGIN"); + INFO("BEGIN"); - // ===== Message queue ===== - // 1. Create a message queue (for up to 8 (keyboard) event messages) - if(!(queue = furi_message_queue_alloc(queueSz, sizeof(msg)))) { - ERROR(wii_errs[(error = ERR_MALLOC_QUEUE)]); - goto bail; - } + // ===== Message queue ===== + // 1. Create a message queue (for up to 8 (keyboard) event messages) + if ( !(queue = furi_message_queue_alloc(queueSz, sizeof(msg))) ) { + ERROR(wii_errs[(error = ERR_MALLOC_QUEUE)]); + goto bail; + } - // ===== Create GUI Interface ===== - // 2. Create a GUI interface - if(!(gui = furi_record_open("gui"))) { - ERROR(wii_errs[(error = ERR_NO_GUI)]); - goto bail; - } + // ===== Create GUI Interface ===== + // 2. Create a GUI interface + if ( !(gui = furi_record_open("gui")) ) { + ERROR(wii_errs[(error = ERR_NO_GUI)]); + goto bail; + } - // ===== Plugin state variables ===== - // 3. Allocate space on the heap for the plugin state variables - if(!(state = malloc(sizeof(state_t)))) { - ERROR(wii_errs[(error = ERR_MALLOC_STATE)]); - goto bail; - } - // 4. Initialise the plugin state variables - if(!stateInit(state)) { - // error message(s) is/are output by stateInit() - error = 15; - goto bail; - } - // 5. Create a mutex for (reading/writing) the plugin state variables - if(!init_mutex(&mutex, state, sizeof(state))) { - ERROR(wii_errs[(error = ERR_NO_MUTEX)]); - goto bail; - } + // ===== Plugin state variables ===== + // 3. Allocate space on the heap for the plugin state variables + if ( !(state = malloc(sizeof(state_t))) ) { + ERROR(wii_errs[(error = ERR_MALLOC_STATE)]); + goto bail; + } + // 4. Initialise the plugin state variables + if (!stateInit(state)) { + // error message(s) is/are output by stateInit() + error = 15; + goto bail; + } + // 5. Create a mutex for (reading/writing) the plugin state variables + if (!init_mutex(&mutex, state, sizeof(state))) { + ERROR(wii_errs[(error = ERR_NO_MUTEX)]); + goto bail; + } - // ===== Viewport ===== - // 6. Allocate space on the heap for the viewport - if(!(vpp = view_port_alloc())) { - ERROR(wii_errs[(error = ERR_MALLOC_VIEW)]); - goto bail; - } - // 7a. Register a callback for input events - view_port_input_callback_set(vpp, cbInput, queue); - // 7b. Register a callback for draw events - view_port_draw_callback_set(vpp, cbDraw, &mutex); + // ===== Viewport ===== + // 6. Allocate space on the heap for the viewport + if ( !(vpp = view_port_alloc()) ) { + ERROR(wii_errs[(error = ERR_MALLOC_VIEW)]); + goto bail; + } + // 7a. Register a callback for input events + view_port_input_callback_set(vpp, cbInput, queue); + // 7b. Register a callback for draw events + view_port_draw_callback_set(vpp, cbDraw, &mutex); - // ===== Start GUI Interface ===== - // 8. Attach the viewport to the GUI - gui_add_view_port(gui, vpp, GuiLayerFullscreen); + // ===== Start GUI Interface ===== + // 8. Attach the viewport to the GUI + gui_add_view_port(gui, vpp, GuiLayerFullscreen); - // ===== Timer ===== - // 9. Allocate a timer - if(!(state->timer = furi_timer_alloc(cbTimer, FuriTimerTypePeriodic, queue))) { - ERROR(wii_errs[(error = ERR_NO_TIMER)]); - goto bail; - } + // ===== Timer ===== + // 9. Allocate a timer + if ( !(state->timer = furi_timer_alloc(cbTimer, FuriTimerTypePeriodic, queue)) ) { + ERROR(wii_errs[(error = ERR_NO_TIMER)]); + goto bail; + } - // === System Notifications === - // 10. Acquire a handle for the system notification queue - if(!(state->notify = furi_record_open(RECORD_NOTIFICATION))) { - ERROR(wii_errs[(error = ERR_NO_NOTIFY)]); - goto bail; - } - patBacklight(state); // Turn on the backlight [qv. remote FAP launch] + // === System Notifications === + // 10. Acquire a handle for the system notification queue + if ( !(state->notify = furi_record_open(RECORD_NOTIFICATION)) ) { + ERROR(wii_errs[(error = ERR_NO_NOTIFY)]); + goto bail; + } + patBacklight(state); // Turn on the backlight [qv. remote FAP launch] - INFO("INITIALISED"); + INFO("INITIALISED"); - // ==================== Main event loop ==================== + // ==================== Main event loop ==================== - if(state->run) do { - bool redraw = false; - FuriStatus status = FuriStatusErrorTimeout; + if (state->run) do { + bool redraw = false; + FuriStatus status = FuriStatusErrorTimeout; - // Wait for a message - // while ((status = furi_message_queue_get(queue, &msg, tmo)) == FuriStatusErrorTimeout) ; - status = furi_message_queue_get(queue, &msg, tmo); + // Wait for a message +// while ((status = furi_message_queue_get(queue, &msg, tmo)) == FuriStatusErrorTimeout) ; + status = furi_message_queue_get(queue, &msg, tmo); - // Clear splash screen - if((state->scene == SCENE_SPLASH) && - (state->scenePrev == SCENE_NONE) && // Initial splash - ((status == FuriStatusErrorTimeout) || // timeout - ((msg.id == EVID_KEY) && (msg.input.type == InputTypeShort))) // or key-short - ) { - tmo = 60 * 1000; // increase message-wait timeout to 60secs - timerEn(state, true); // start scanning the i2c bus - status = FuriStatusOk; // pass status check - msg.id = EVID_NONE; // valid msg ID - sceneSet(state, SCENE_WAIT); // move to wait screen - } + // Clear splash screen + if ( (state->scene == SCENE_SPLASH) && (state->scenePrev == SCENE_NONE) && // Initial splash + ( (status == FuriStatusErrorTimeout) || // timeout + ((msg.id == EVID_KEY) && (msg.input.type == InputTypeShort)) ) // or key-short + ) { + tmo = 60 *1000; // increase message-wait timeout to 60secs + timerEn(state, true); // start scanning the i2c bus + status = FuriStatusOk; // pass status check + msg.id = EVID_NONE; // valid msg ID + sceneSet(state, SCENE_WAIT); // move to wait screen + } - // Check for queue errors - if(status != FuriStatusOk) { - switch(status) { - case FuriStatusErrorTimeout: - DEBUG(wii_errs[DEBUG_QUEUE_TIMEOUT]); - continue; - case FuriStatusError: - ERROR(wii_errs[(error = ERR_QUEUE_RTOS)]); - goto bail; - case FuriStatusErrorResource: - ERROR(wii_errs[(error = ERR_QUEUE_RESOURCE)]); - goto bail; - case FuriStatusErrorParameter: - ERROR(wii_errs[(error = ERR_QUEUE_BADPRM)]); - goto bail; - case FuriStatusErrorNoMemory: - ERROR(wii_errs[(error = ERR_QUEUE_NOMEM)]); - goto bail; - case FuriStatusErrorISR: - ERROR(wii_errs[(error = ERR_QUEUE_ISR)]); - goto bail; - default: - ERROR(wii_errs[(error = ERR_QUEUE_UNK)]); - goto bail; - } - } - // Read successful + // Check for queue errors + if (status != FuriStatusOk) { + switch (status) { + case FuriStatusErrorTimeout: DEBUG(wii_errs[DEBUG_QUEUE_TIMEOUT]); continue ; + case FuriStatusError: ERROR(wii_errs[(error = ERR_QUEUE_RTOS)]); goto bail ; + case FuriStatusErrorResource: ERROR(wii_errs[(error = ERR_QUEUE_RESOURCE)]); goto bail ; + case FuriStatusErrorParameter: ERROR(wii_errs[(error = ERR_QUEUE_BADPRM)]); goto bail ; + case FuriStatusErrorNoMemory: ERROR(wii_errs[(error = ERR_QUEUE_NOMEM)]); goto bail ; + case FuriStatusErrorISR: ERROR(wii_errs[(error = ERR_QUEUE_ISR)]); goto bail ; + default: ERROR(wii_errs[(error = ERR_QUEUE_UNK)]); goto bail ; + } + } + // Read successful - // *** Try to lock the plugin state variables *** - if(!(state = (state_t*)acquire_mutex_block(&mutex))) { - ERROR(wii_errs[(error = ERR_MUTEX_BLOCK)]); - goto bail; - } + // *** Try to lock the plugin state variables *** + if ( !(state = (state_t*)acquire_mutex_block(&mutex)) ) { + ERROR(wii_errs[(error = ERR_MUTEX_BLOCK)]); + goto bail; + } - // *** Handle events *** - switch(msg.id) { - //--------------------------------------------- - case EVID_TICK: // Timer events - //! I would prefer to have ecPoll() called by cbTimer() - //! ...but how does cbTimer() get the required access to the state variables? Namely: 'state->ec' - //! So, for now, the timer pushes a message to call ecPoll() - //! which, in turn, will push WIIEC event meesages! - ecPoll(&state->ec, queue); - break; + // *** Handle events *** + switch (msg.id) { + //--------------------------------------------- + case EVID_TICK: // Timer events + //! I would prefer to have ecPoll() called by cbTimer() + //! ...but how does cbTimer() get the required access to the state variables? Namely: 'state->ec' + //! So, for now, the timer pushes a message to call ecPoll() + //! which, in turn, will push WIIEC event meesages! + ecPoll(&state->ec, queue); + break; - //--------------------------------------------- - case EVID_WIIEC: // WiiMote Perhipheral - if(evWiiEC(&msg, state)) redraw = true; - break; + //--------------------------------------------- + case EVID_WIIEC: // WiiMote Perhipheral + if (evWiiEC(&msg, state)) redraw = true ; + break; - //--------------------------------------------- - case EVID_KEY: // Key events - patBacklight(state); - if(evKey(&msg, state)) redraw = true; - break; + //--------------------------------------------- + case EVID_KEY: // Key events + patBacklight(state); + if (evKey(&msg, state)) redraw = true; + break; - //--------------------------------------------- - case EVID_NONE: - break; + //--------------------------------------------- + case EVID_NONE: + break; - //--------------------------------------------- - default: // Unknown event - WARN("Unknown message.ID [%d]", msg.id); - break; - } + //--------------------------------------------- + default: // Unknown event + WARN("Unknown message.ID [%d]", msg.id); + break; + } - // *** Update the GUI screen via the viewport *** - if(redraw) view_port_update(vpp); + // *** Update the GUI screen via the viewport *** + if (redraw) view_port_update(vpp) ; - // *** Try to release the plugin state variables *** - if(!release_mutex(&mutex, state)) { - ERROR(wii_errs[(error = ERR_MUTEX_RELEASE)]); - goto bail; - } - } while(state->run); + // *** Try to release the plugin state variables *** + if ( !release_mutex(&mutex, state) ) { + ERROR(wii_errs[(error = ERR_MUTEX_RELEASE)]); + goto bail; + } + } while (state->run); - // ===== Game Over ===== - INFO("USER EXIT"); + // ===== Game Over ===== + INFO("USER EXIT"); bail: - // 10. Release system notification queue - if(state->notify) { - furi_record_close(RECORD_NOTIFICATION); - state->notify = NULL; - } + // 10. Release system notification queue + if (state->notify) { + furi_record_close(RECORD_NOTIFICATION); + state->notify = NULL; + } - // 9. Stop the timer - if(state->timer) { - (void)furi_timer_stop(state->timer); - furi_timer_free(state->timer); - state->timer = NULL; - state->timerEn = false; - } + // 9. Stop the timer + if (state->timer) { + (void)furi_timer_stop(state->timer); + furi_timer_free(state->timer); + state->timer = NULL; + state->timerEn = false; + } - // 8. Detach the viewport - gui_remove_view_port(gui, vpp); + // 8. Detach the viewport + gui_remove_view_port(gui, vpp); - // 7. No need to unreqgister the callbacks - // ...they will go when the viewport is destroyed + // 7. No need to unreqgister the callbacks + // ...they will go when the viewport is destroyed - // 6. Destroy the viewport - if(vpp) { - view_port_enabled_set(vpp, false); - view_port_free(vpp); - vpp = NULL; - } + // 6. Destroy the viewport + if (vpp) { + view_port_enabled_set(vpp, false); + view_port_free(vpp); + vpp = NULL; + } - // 5. Free the mutex - if(mutex.mutex) { - delete_mutex(&mutex); - mutex.mutex = NULL; - } + // 5. Free the mutex + if (mutex.mutex) { + delete_mutex(&mutex); + mutex.mutex = NULL; + } - // 4. Free up state pointer(s) - // none + // 4. Free up state pointer(s) + // none - // 3. Free the plugin state variables - if(state) { - free(state); - state = NULL; - } + // 3. Free the plugin state variables + if (state) { + free(state); + state = NULL; + } - // 2. Close the GUI - furi_record_close("gui"); + // 2. Close the GUI + furi_record_close("gui"); - // 1. Destroy the message queue - if(queue) { - furi_message_queue_free(queue); - queue = NULL; - } + // 1. Destroy the message queue + if (queue) { + furi_message_queue_free(queue); + queue = NULL; + } - INFO("CLEAN EXIT ... Exit code: %d", error); - LEAVE; - return (int32_t)error; + INFO("CLEAN EXIT ... Exit code: %d", error); + LEAVE; + return (int32_t)error; } diff --git a/applications/plugins/wii_ec_anal/wii_anal.h b/applications/plugins/wii_ec_anal/wii_anal.h index 3aae61fdc..ac7ffddb1 100644 --- a/applications/plugins/wii_ec_anal/wii_anal.h +++ b/applications/plugins/wii_ec_anal/wii_anal.h @@ -1,89 +1,97 @@ -#ifndef WII_ANAL_H_ -#define WII_ANAL_H_ +#ifndef WII_ANAL_H_ +#define WII_ANAL_H_ -#include // Core API -#include // GUI Input extensions -#include +#include // Core API +#include // GUI Input extensions +#include //----------------------------------------------------------------------------- ---------------------------------------- // GUI scenes // -typedef enum scene { - SCENE_NONE = 0, - SCENE_SPLASH = 1, - SCENE_RIP = 2, - SCENE_WAIT = 3, - SCENE_DEBUG = 4, - SCENE_DUMP = 5, - SCENE_CLASSIC = 6, - SCENE_CLASSIC_N = 7, - SCENE_NUNCHUCK = 8, - SCENE_NUNCHUCK_ACC = 9, -} scene_t; +typedef + enum scene { + SCENE_NONE = 0, + SCENE_SPLASH = 1, + SCENE_RIP = 2, + SCENE_WAIT = 3, + SCENE_DEBUG = 4, + SCENE_DUMP = 5, + SCENE_CLASSIC = 6, + SCENE_CLASSIC_N = 7, + SCENE_NUNCHUCK = 8, + SCENE_NUNCHUCK_ACC = 9, + } +scene_t; //----------------------------------------------------------------------------- ---------------------------------------- -#include "wii_i2c.h" -#include "wii_ec.h" +#include "wii_i2c.h" +#include "wii_ec.h" //----------------------------------------------------------------------------- ---------------------------------------- // A list of event IDs handled by this plugin // -typedef enum eventID { - EVID_NONE, - EVID_UNKNOWN, +typedef + enum eventID { + EVID_NONE, + EVID_UNKNOWN, - // A full list of events can be found with: `grep -r --color "void.*set_.*_callback" applications/gui/*` - // ...A free gift to you from the makers of well written code that conforms to a good coding standard - EVID_KEY, // keypad - EVID_TICK, // tick - EVID_WIIEC, // wii extension controller -} eventID_t; + // A full list of events can be found with: `grep -r --color "void.*set_.*_callback" applications/gui/*` + // ...A free gift to you from the makers of well written code that conforms to a good coding standard + EVID_KEY, // keypad + EVID_TICK, // tick + EVID_WIIEC, // wii extension controller + } +eventID_t; //----------------------------------------------------------------------------- ---------------------------------------- // An item in the event message-queue // -typedef struct eventMsg { - eventID_t id; - union { - InputEvent input; // --> applications/input/input.h - wiiEcEvent_t wiiEc; // --> local - }; -} eventMsg_t; +typedef + struct eventMsg { + eventID_t id; + union { + InputEvent input; // --> applications/input/input.h + wiiEcEvent_t wiiEc; // --> local + }; + } +eventMsg_t; //----------------------------------------------------------------------------- ---------------------------------------- // State variables for this plugin // An instance of this is allocated on the heap, and the pointer is passed back to the OS // Access to this memory is controlled by mutex // -typedef struct state { - bool run; // true : plugin is running +typedef + struct state { + bool run; // true : plugin is running - bool timerEn; // controller scanning enabled - FuriTimer* timer; // the timer - uint32_t timerHz; // system ticks per second - int fps; // poll/refresh [frames]-per-second + bool timerEn; // controller scanning enabled + FuriTimer* timer; // the timer + uint32_t timerHz; // system ticks per second + int fps; // poll/refresh [frames]-per-second - int cnvW; // canvas width - int cnvH; // canvas height - scene_t scene; // current scene - scene_t scenePrev; // previous scene - scene_t scenePegg; // previous scene for easter eggs - int flash; // flash counter (flashing icons) + int cnvW; // canvas width + int cnvH; // canvas height + scene_t scene; // current scene + scene_t scenePrev; // previous scene + scene_t scenePegg; // previous scene for easter eggs + int flash; // flash counter (flashing icons) - int hold; // hold type: {-1=tough-peak, 0=none, +1=peak-hold} - ecCalib_t calib; // Software calibration mode + int hold; // hold type: {-1=tough-peak, 0=none, +1=peak-hold} + ecCalib_t calib; // Software calibration mode - bool pause; // Accelerometer animation pause - bool apause; // Accelerometer animation auto-pause + bool pause; // Accelerometer animation pause + bool apause; // Accelerometer animation auto-pause - NotificationApp* notify; // OS nitifcation queue (for patting the backlight watchdog timer) + NotificationApp* notify; // OS nitifcation queue (for patting the backlight watchdog timer) - wiiEC_t ec; // Extension Controller details -} state_t; + wiiEC_t ec; // Extension Controller details + } +state_t; //============================================================================= ======================================== // Function prototypes // -void timerEn(state_t* state, bool on); +void timerEn (state_t* state, bool on) ; #endif //WII_ANAL_H_ diff --git a/applications/plugins/wii_ec_anal/wii_anal_ec.c b/applications/plugins/wii_ec_anal/wii_anal_ec.c index dab167bc0..0bfa47362 100644 --- a/applications/plugins/wii_ec_anal/wii_anal_ec.c +++ b/applications/plugins/wii_ec_anal/wii_anal_ec.c @@ -1,115 +1,97 @@ -#include -#include +#include +#include -#include "wii_anal.h" -#include "wii_anal_lcd.h" -#include "wii_anal_keys.h" +#include "wii_anal.h" +#include "wii_anal_lcd.h" +#include "wii_anal_keys.h" //+============================================================================ ======================================== // Handle Wii Extension Controller events // -bool evWiiEC(const eventMsg_t* const msg, state_t* const state) { - bool redraw = false; +bool evWiiEC (const eventMsg_t* const msg, state_t* const state) +{ + bool redraw = false; -#if LOG_LEVEL >= 4 - { - const char* s = NULL; - switch(msg->wiiEc.type) { - case WIIEC_NONE: - s = "Error"; - break; - case WIIEC_CONN: - s = "Connect"; - break; - case WIIEC_DISCONN: - s = "Disconnect"; - break; - case WIIEC_PRESS: - s = "Press"; - break; - case WIIEC_RELEASE: - s = "Release"; - break; - case WIIEC_ANALOG: - s = "Analog"; - break; - case WIIEC_ACCEL: - s = "Accel"; - break; - default: - s = "Bug"; - break; - } - INFO( - "WIIP : %s '%c' = %d", - s, - (isprint((int)msg->wiiEc.in) ? msg->wiiEc.in : '_'), - msg->wiiEc.val); - if((msg->wiiEc.type == WIIEC_CONN) || (msg->wiiEc.type == WIIEC_DISCONN)) - INFO("...%d=\"%s\"", msg->wiiEc.val, ecId[msg->wiiEc.val].name); - } +# if LOG_LEVEL >= 4 + { + const char* s = NULL; + switch (msg->wiiEc.type) { + case WIIEC_NONE: s = "Error"; break ; + case WIIEC_CONN: s = "Connect"; break ; + case WIIEC_DISCONN: s = "Disconnect"; break ; + case WIIEC_PRESS: s = "Press"; break ; + case WIIEC_RELEASE: s = "Release"; break ; + case WIIEC_ANALOG: s = "Analog"; break ; + case WIIEC_ACCEL: s = "Accel"; break ; + default: s = "Bug"; break ; + } + INFO("WIIP : %s '%c' = %d", s, (isprint((int)msg->wiiEc.in) ? msg->wiiEc.in : '_'), msg->wiiEc.val); + if ((msg->wiiEc.type == WIIEC_CONN) || (msg->wiiEc.type == WIIEC_DISCONN)) + INFO("...%d=\"%s\"", msg->wiiEc.val, ecId[msg->wiiEc.val].name); + } +# endif + + switch (msg->wiiEc.type) { + case WIIEC_CONN: + patBacklight(state); + state->hold = 0; + state->calib = CAL_TRACK; + sceneSet(state, ecId[msg->wiiEc.val].scene); + redraw = true ; + +#if 1 // Workaround for Classic Controller Pro, which shows 00's for Factory Calibration Data!? + if (state->ec.pidx == PID_CLASSIC_PRO) { + // Simulate a Long-OK keypress, to start Software Calibration mode + eventMsg_t msg = { +// .id = EVID_KEY, + .input.type = InputTypeLong, + .input.key = InputKeyOk + }; + key_calib(&msg, state); + } #endif + break; - switch(msg->wiiEc.type) { - case WIIEC_CONN: - patBacklight(state); - state->hold = 0; - state->calib = CAL_TRACK; - sceneSet(state, ecId[msg->wiiEc.val].scene); - redraw = true; + case WIIEC_DISCONN: + patBacklight(state); + sceneSet(state, SCENE_WAIT); + redraw = true; + break; -#if 1 // Workaround for Classic Controller Pro, which shows 00's for Factory Calibration Data!? - if(state->ec.pidx == PID_CLASSIC_PRO) { - // Simulate a Long-OK keypress, to start Software Calibration mode - eventMsg_t msg = {// .id = EVID_KEY, - .input.type = InputTypeLong, - .input.key = InputKeyOk}; - key_calib(&msg, state); - } + case WIIEC_PRESS: + if (state->scene == SCENE_NUNCHUCK_ACC) switch (msg->wiiEc.in) { + case 'z': // un-pause + state->pause = !state->pause; + break; + case 'c': // toggle auto-pause + state->pause = false; + state->apause = !state->apause; + break; + default: break ; + } + +#if 1 //! factory calibration method not known for classic triggers - this will set the digital switch point + if ((state->ec.pidx == PID_CLASSIC) || (state->ec.pidx == PID_CLASSIC_PRO)) { + if (msg->wiiEc.in == 'l') state->ec.calS.classic[2].trgZL = msg->wiiEc.val ; + if (msg->wiiEc.in == 'r') state->ec.calS.classic[2].trgZR = msg->wiiEc.val ; + } #endif - break; + __attribute__ ((fallthrough)); - case WIIEC_DISCONN: - patBacklight(state); - sceneSet(state, SCENE_WAIT); - redraw = true; - break; + case WIIEC_RELEASE: + patBacklight(state); + redraw = true; + break; - case WIIEC_PRESS: - if(state->scene == SCENE_NUNCHUCK_ACC) switch(msg->wiiEc.in) { - case 'z': // un-pause - state->pause = !state->pause; - break; - case 'c': // toggle auto-pause - state->pause = false; - state->apause = !state->apause; - break; - default: - break; - } + case WIIEC_ANALOG: + case WIIEC_ACCEL: + ecCalibrate(&state->ec, state->calib); + redraw = true; + break; -#if 1 //! factory calibration method not known for classic triggers - this will set the digital switch point - if((state->ec.pidx == PID_CLASSIC) || (state->ec.pidx == PID_CLASSIC_PRO)) { - if(msg->wiiEc.in == 'l') state->ec.calS.classic[2].trgZL = msg->wiiEc.val; - if(msg->wiiEc.in == 'r') state->ec.calS.classic[2].trgZR = msg->wiiEc.val; - } -#endif - __attribute__((fallthrough)); + default: + break; + } - case WIIEC_RELEASE: - patBacklight(state); - redraw = true; - break; - - case WIIEC_ANALOG: - case WIIEC_ACCEL: - ecCalibrate(&state->ec, state->calib); - redraw = true; - break; - - default: - break; - } - - return redraw; + return redraw; } diff --git a/applications/plugins/wii_ec_anal/wii_anal_ec.h b/applications/plugins/wii_ec_anal/wii_anal_ec.h index eec6b523c..886b60281 100644 --- a/applications/plugins/wii_ec_anal/wii_anal_ec.h +++ b/applications/plugins/wii_ec_anal/wii_anal_ec.h @@ -1,14 +1,14 @@ -#ifndef WII_ANAL_EC_H_ -#define WII_ANAL_EC_H_ +#ifndef WII_ANAL_EC_H_ +#define WII_ANAL_EC_H_ -#include +#include //============================================================================= ======================================== // Function prototypes // -typedef struct eventMsg eventMsg_t; -typedef struct state state_t; +typedef struct eventMsg eventMsg_t ; +typedef struct state state_t ; -bool evWiiEC(const eventMsg_t* const msg, state_t* const state); +bool evWiiEC (const eventMsg_t* const msg, state_t* const state) ; #endif //WII_ANAL_EC_H_ diff --git a/applications/plugins/wii_ec_anal/wii_anal_keys.c b/applications/plugins/wii_ec_anal/wii_anal_keys.c index 8c5c99b4e..3d2fae14a 100644 --- a/applications/plugins/wii_ec_anal/wii_anal_keys.c +++ b/applications/plugins/wii_ec_anal/wii_anal_keys.c @@ -1,35 +1,40 @@ -#include +#include -#include "bc_logging.h" +#include "bc_logging.h" -#include "wii_anal.h" +#include "wii_anal.h" //+============================================================================ ======================================== // Stop Calibration mode // -static void calStop(state_t* const state) { - state->hold = 0; // stop calibration mode - state->calib &= ~(CAL_RANGE | CAL_NOTJOY); // ... +static +void calStop (state_t* const state) +{ + state->hold = 0; // stop calibration mode + state->calib &= ~(CAL_RANGE | CAL_NOTJOY); // ... } //+============================================================================ ======================================== // Change to another scene // -void sceneSet(state_t* const state, const scene_t scene) { - calStop(state); // Stop software calibration - state->scenePrev = state->scene; // Remember where we came from - state->scene = scene; // Go to new scene - INFO("Scene : %d -> %d", state->scenePrev, state->scene); +void sceneSet (state_t* const state, const scene_t scene) +{ + calStop(state); // Stop software calibration + state->scenePrev = state->scene; // Remember where we came from + state->scene = scene; // Go to new scene + INFO("Scene : %d -> %d", state->scenePrev, state->scene); } //+============================================================================ ======================================== // Change to an easter egg scene // -static void sceneSetEgg(state_t* const state, const scene_t scene) { - calStop(state); // Stop software calibration - state->scenePegg = state->scene; // Remember where we came from - state->scene = scene; // Go to new scene - INFO("Scene* : %d => %d", state->scenePegg, state->scene); +static +void sceneSetEgg (state_t* const state, const scene_t scene) +{ + calStop(state); // Stop software calibration + state->scenePegg = state->scene; // Remember where we came from + state->scene = scene; // Go to new scene + INFO("Scene* : %d => %d", state->scenePegg, state->scene); } //+============================================================================ ======================================== @@ -37,263 +42,256 @@ static void sceneSetEgg(state_t* const state, const scene_t scene) { // Enabling peak-hold on screen with no peak meters will have no effect // So, to avoid code duplication... // -bool key_calib(const eventMsg_t* const msg, state_t* const state) { - int used = false; // assume key is NOT-handled +bool key_calib (const eventMsg_t* const msg, state_t* const state) +{ + int used = false; // assume key is NOT-handled - switch(msg->input.type) { - case InputTypeShort: //# input.key) { - case InputKeyUp: //# hold = (state->hold == +1) ? 0 : +1; // toggle peak hold - used = true; - break; + switch (msg->input.type) { + case InputTypeShort: //# input.key) { + case InputKeyUp: //# hold = (state->hold == +1) ? 0 : +1 ; // toggle peak hold + used = true; + break; - case InputKeyDown: //# hold = (state->hold == -1) ? 0 : -1; // toggle trough hold - used = true; - break; + case InputKeyDown: //# hold = (state->hold == -1) ? 0 : -1 ; // toggle trough hold + used = true; + break; - case InputKeyOk: //# calib & CAL_RANGE) - calStop(state); // STOP softare calibration - else - ecCalibrate(&state->ec, CAL_CENTRE); // perform centre calibration - used = true; - break; + case InputKeyOk: //# calib & CAL_RANGE) calStop(state) ; // STOP softare calibration + else ecCalibrate(&state->ec, CAL_CENTRE) ; // perform centre calibration + used = true; + break; - default: - break; - } - break; + default: break ; + } + break; - case InputTypeLong: //# >! After INPUT_LONG_PRESS interval, asynch to InputTypeRelease - switch(msg->input.key) { - case InputKeyOk: //# >O [ LONG-OK ] - ecCalibrate(&state->ec, CAL_RESET | CAL_CENTRE); // START software calibration - state->hold = 0; - state->calib |= CAL_RANGE; - state->flash = 8; // start with flash ON - used = true; - break; + case InputTypeLong: //# >! After INPUT_LONG_PRESS interval, asynch to InputTypeRelease + switch (msg->input.key) { + case InputKeyOk: //# >O [ LONG-OK ] + ecCalibrate(&state->ec, CAL_RESET | CAL_CENTRE); // START software calibration + state->hold = 0; + state->calib |= CAL_RANGE; + state->flash = 8; // start with flash ON + used = true; + break; - default: - break; - } - break; + default: break ; + } + break; - default: - break; - } + default: break ; + } - return used; + return used; } //+============================================================================ ======================================== // WAIT screen // -static inline bool wait_key(const eventMsg_t* const msg, state_t* const state) { - int used = false; // assume key is NOT-handled +static inline +bool wait_key (const eventMsg_t* const msg, state_t* const state) +{ + int used = false; // assume key is NOT-handled - if(msg->input.type == InputTypeShort) { - switch(msg->input.key) { - case InputKeyLeft: //# input.type == InputTypeShort) { + switch (msg->input.key) { + case InputKeyLeft: //# run = false; - used = true; - break; + case InputKeyBack: //# run = false; + used = true; + break; - default: - break; - } - } + default: break ; + } + } - return used; + return used; } //+============================================================================ ======================================== // DEBUG screen // -static inline bool debug_key(const eventMsg_t* const msg, state_t* const state) { - int used = false; // assume key is NOT-handled +static inline +bool debug_key (const eventMsg_t* const msg, state_t* const state) +{ + int used = false; // assume key is NOT-handled - switch(msg->input.type) { - case InputTypeShort: //# input.key) { - case InputKeyUp: { //# ec, NULL); // Initialise the controller //! NULL = no encryption - (void)init; // in case INFO is optimised out - INFO("%s : %s", __func__, (init ? "init OK" : "init fail")); - used = true; - break; - } + switch (msg->input.type) { + case InputTypeShort: //# input.key) { + case InputKeyUp: { //# ec, NULL); // Initialise the controller //! NULL = no encryption + (void)init; // in case INFO is optimised out + INFO("%s : %s", __func__, (init ? "init OK" : "init fail")); + used = true; + break; + } - case InputKeyOk: //# ec) == 0) { // Read the controller - INFO( - "%s : joy: {%02X,%02X,%02X,%02X,%02X,%02X}", - __func__, - state->ec.joy[0], - state->ec.joy[1], - state->ec.joy[2], - state->ec.joy[3], - state->ec.joy[4], - state->ec.joy[5]); - } - used = true; - break; + case InputKeyOk: //# ec) == 0) { // Read the controller + INFO( "%s : joy: {%02X,%02X,%02X,%02X,%02X,%02X}", __func__, + state->ec.joy[0], state->ec.joy[1], state->ec.joy[2], + state->ec.joy[3], state->ec.joy[4], state->ec.joy[5] ); + } + used = true; + break; - case InputKeyDown: //# scenePrev); - used = true; - break; + case InputKeyDown: //# scenePrev); + used = true; + break; - case InputKeyBack: //# run = false; - used = true; - break; + case InputKeyBack: //# run = false; + used = true; + break; - default: - break; //# input.key == InputKeyBack) && (state->scenePrev == SCENE_NONE)) state->run = false; +static inline +bool splash_key (const eventMsg_t* const msg, state_t* const state) +{ + // Back key on the initial SPLASH screen (this will catch the InputKeyPress) + if ((msg->input.key == InputKeyBack) && (state->scenePrev == SCENE_NONE)) state->run = false ; - // ANY-other-KEY press - if(msg->input.type == InputTypeShort) { - timerEn(state, true); // Restart the timer - state->scene = state->scenePegg; - } + // ANY-other-KEY press + if (msg->input.type == InputTypeShort) { + timerEn(state, true); // Restart the timer + state->scene = state->scenePegg; + } - return true; + return true; } + //+============================================================================ ======================================== // "_pre" allows the plugin to use the key before the active scene gets a chance // -static inline bool key_pre(const eventMsg_t* const msg, state_t* const state) { - (void)msg; - (void)state; +static inline +bool key_pre (const eventMsg_t* const msg, state_t* const state) +{ + (void)msg; + (void)state; - return false; + return false; } //+============================================================================ ======================================== // "_post" allows the plugin to use a key if it was not used by the active scene // -static inline bool key_post(const eventMsg_t* const msg, state_t* const state) { - int used = false; // assume key is NOT-handled +static inline +bool key_post (const eventMsg_t* const msg, state_t* const state) +{ + int used = false; // assume key is NOT-handled - if(msg->input.key == InputKeyBack) { - if(msg->input.type == InputTypeShort) { //# ec.init = false; // reset/disconnect the controller - sceneSet(state, SCENE_WAIT); - used = true; + if (msg->input.key == InputKeyBack) { + if (msg->input.type == InputTypeShort) { //# ec.init = false; // reset/disconnect the controller + sceneSet(state, SCENE_WAIT); + used = true; - } else if(msg->input.type == InputTypeLong) { //# >B [LONG-BACK] - state->run = false; // Signal the plugin to exit - used = true; - } - } + } else if (msg->input.type == InputTypeLong) { //# >B [LONG-BACK] + state->run = false; // Signal the plugin to exit + used = true; + } + } - // Easter eggs - switch(state->scene) { - case SCENE_SPLASH: // Scenes that do NOT offer Easter eggs - case SCENE_RIP: - case SCENE_DEBUG: - break; - default: - if(msg->input.type == InputTypeLong) { - switch(msg->input.key) { - case InputKeyDown: //# >D [LONG-DOWN] - timerEn(state, false); // Stop the timer - sceneSetEgg(state, SCENE_DEBUG); - used = true; - break; + // Easter eggs + switch (state->scene) { + case SCENE_SPLASH: // Scenes that do NOT offer Easter eggs + case SCENE_RIP: + case SCENE_DEBUG: + break; + default: + if (msg->input.type == InputTypeLong) { + switch (msg->input.key) { + case InputKeyDown: //# >D [LONG-DOWN] + timerEn(state, false); // Stop the timer + sceneSetEgg(state, SCENE_DEBUG); + used = true; + break; - case InputKeyLeft: //# >L [ LONG-LEFT ] - timerEn(state, false); // Stop the timer - sceneSetEgg(state, SCENE_SPLASH); - used = true; - break; + case InputKeyLeft: //# >L [ LONG-LEFT ] + timerEn(state, false); // Stop the timer + sceneSetEgg(state, SCENE_SPLASH); + used = true; + break; - case InputKeyUp: //# >U [ LONG-UP ] - timerEn(state, false); // Stop the timer - sceneSetEgg(state, SCENE_RIP); - used = true; - break; + case InputKeyUp: //# >U [ LONG-UP ] + timerEn(state, false); // Stop the timer + sceneSetEgg(state, SCENE_RIP); + used = true; + break; - default: - break; - } - } - break; - } + default: break ; + } + } + break; + } - return used; + return used; } //+============================================================================ ======================================== // Handle a key press event // -bool evKey(const eventMsg_t* const msg, state_t* const state) { - furi_assert(msg); - furi_assert(state); +bool evKey (const eventMsg_t* const msg, state_t* const state) +{ + furi_assert(msg); + furi_assert(state); - bool used = key_pre(msg, state); + bool used = key_pre(msg, state); - if(!used) switch(state->scene) { - case SCENE_SPLASH: //... - case SCENE_RIP: - used = splash_key(msg, state); - break; + if (!used) switch (state->scene) { + case SCENE_SPLASH: //... + case SCENE_RIP: used = splash_key(msg, state); break ; - case SCENE_WAIT: - used = wait_key(msg, state); - break; - case SCENE_DEBUG: - used = debug_key(msg, state); - break; + case SCENE_WAIT: used = wait_key(msg, state); break ; + case SCENE_DEBUG: used = debug_key(msg, state); break ; - default: - if(state->ec.pidx >= PID_ERROR) { - ERROR("%s : bad PID = %d", __func__, state->ec.pidx); - } else { - if((state->scene == SCENE_DUMP) || !ecId[state->ec.pidx].keys) - ecId[PID_UNKNOWN].keys(msg, state); - else - ecId[state->ec.pidx].keys(msg, state); - } - break; + default: + if (state->ec.pidx >= PID_ERROR) { + ERROR("%s : bad PID = %d", __func__, state->ec.pidx); + } else { + if ((state->scene == SCENE_DUMP) || !ecId[state->ec.pidx].keys) + ecId[PID_UNKNOWN].keys(msg, state); + else + ecId[state->ec.pidx].keys(msg, state); + } + break; - case SCENE_NONE: - break; - } + case SCENE_NONE: break; + } - if(!used) used = key_post(msg, state); + if (!used) used = key_post(msg, state) ; - return used; + return used; } + diff --git a/applications/plugins/wii_ec_anal/wii_anal_keys.h b/applications/plugins/wii_ec_anal/wii_anal_keys.h index c10fcd1ef..0ebbd5e8e 100644 --- a/applications/plugins/wii_ec_anal/wii_anal_keys.h +++ b/applications/plugins/wii_ec_anal/wii_anal_keys.h @@ -1,16 +1,16 @@ -#ifndef WII_ANAL_KEYS_H_ -#define WII_ANAL_KEYS_H_ +#ifndef WII_ANAL_KEYS_H_ +#define WII_ANAL_KEYS_H_ //============================================================================= ======================================== // Function prototypes // -#include // bool -typedef struct eventMsg eventMsg_t; -typedef struct state state_t; -typedef enum scene scene_t; +#include // bool +typedef struct eventMsg eventMsg_t ; +typedef struct state state_t ; +typedef enum scene scene_t ; -void sceneSet(state_t* const state, const scene_t scene); -bool key_calib(const eventMsg_t* const msg, state_t* const state); -bool evKey(const eventMsg_t* const msg, state_t* const state); +void sceneSet (state_t* const state, const scene_t scene) ; +bool key_calib (const eventMsg_t* const msg, state_t* const state) ; +bool evKey (const eventMsg_t* const msg, state_t* const state) ; #endif //WII_ANAL_KEYS_H_ diff --git a/applications/plugins/wii_ec_anal/wii_anal_lcd.c b/applications/plugins/wii_ec_anal/wii_anal_lcd.c index 921a3708e..d031bc120 100644 --- a/applications/plugins/wii_ec_anal/wii_anal_lcd.c +++ b/applications/plugins/wii_ec_anal/wii_anal_lcd.c @@ -1,45 +1,17 @@ -#include "wii_anal.h" -#include "gfx/images.h" // Images +#include "wii_anal.h" +#include "gfx/images.h" // Images //----------------------------------------------------------------------------- ---------------------------------------- // A couple of monospaced hex fonts // -const image_t* img_6x8[16] = { - &img_6x8_0, - &img_6x8_1, - &img_6x8_2, - &img_6x8_3, - &img_6x8_4, - &img_6x8_5, - &img_6x8_6, - &img_6x8_7, - &img_6x8_8, - &img_6x8_9, - &img_6x8_A, - &img_6x8_B, - &img_6x8_C, - &img_6x8_D, - &img_6x8_E, - &img_6x8_F, +const image_t* img_6x8[16] = { + &img_6x8_0, &img_6x8_1, &img_6x8_2, &img_6x8_3, &img_6x8_4, &img_6x8_5, &img_6x8_6, &img_6x8_7, + &img_6x8_8, &img_6x8_9, &img_6x8_A, &img_6x8_B, &img_6x8_C, &img_6x8_D, &img_6x8_E, &img_6x8_F, }; -const image_t* img_5x7[16] = { - &img_5x7_0, - &img_5x7_1, - &img_5x7_2, - &img_5x7_3, - &img_5x7_4, - &img_5x7_5, - &img_5x7_6, - &img_5x7_7, - &img_5x7_8, - &img_5x7_9, - &img_5x7_A, - &img_5x7_B, - &img_5x7_C, - &img_5x7_D, - &img_5x7_E, - &img_5x7_F, +const image_t* img_5x7[16] = { + &img_5x7_0, &img_5x7_1, &img_5x7_2, &img_5x7_3, &img_5x7_4, &img_5x7_5, &img_5x7_6, &img_5x7_7, + &img_5x7_8, &img_5x7_9, &img_5x7_A, &img_5x7_B, &img_5x7_C, &img_5x7_D, &img_5x7_E, &img_5x7_F, }; //+============================================================================ ======================================== @@ -58,71 +30,66 @@ const image_t* img_5x7[16] = { // // Do this ONCE ... at plugin quit // furi_record_close(RECORD_NOTIFICATION); // } -void patBacklight(state_t* state) { - notification_message(state->notify, &sequence_display_backlight_on); +void patBacklight (state_t* state) +{ + notification_message(state->notify, &sequence_display_backlight_on); } //============================================================================= ======================================== // Show a hex number in an inverted box (for ananlogue readings) // -void showHex( - Canvas* const canvas, - uint8_t x, - uint8_t y, - const uint32_t val, - const uint8_t cnt, - const int b) { - canvas_set_color(canvas, ColorBlack); - canvas_draw_box(canvas, x++, y++, 1 + (cnt * (6 + 1)), 10); +void showHex ( Canvas* const canvas, uint8_t x, uint8_t y, + const uint32_t val, const uint8_t cnt, const int b ) +{ + canvas_set_color(canvas, ColorBlack); + canvas_draw_box(canvas, x++,y++, 1 +(cnt *(6 +1)), 10); - // thicken border - if(b == 2) canvas_draw_frame(canvas, x - 2, y - 2, 1 + (cnt * (6 + 1)) + 2, 10 + 2); + // thicken border + if (b == 2) canvas_draw_frame(canvas, x-2,y-2, 1 +(cnt *(6 +1))+2, 10+2); - for(int i = (cnt - 1) * 4; i >= 0; i -= 4, x += 6 + 1) - show(canvas, x, y, img_6x8[(val >> i) & 0xF], SHOW_SET_WHT); + for (int i = (cnt -1) *4; i >= 0; i -= 4, x += 6+1) + show(canvas, x,y, img_6x8[(val >>i) &0xF], SHOW_SET_WHT) ; } //============================================================================= ======================================== // Show the up/down "peak hold" controls in the bottom right // -void showPeakHold(state_t* const state, Canvas* const canvas, const int hold) { - switch(hold) { - case 0: - show(canvas, 119, 51, &img_key_U, SHOW_CLR_BLK); - show(canvas, 119, 56, &img_key_D, SHOW_CLR_BLK); - break; - case +1: - canvas_set_color(canvas, ColorBlack); - canvas_draw_box(canvas, 120, 52, 7, 6); - show(canvas, 119, 51, &img_key_U, SHOW_CLR_WHT); - show(canvas, 119, 56, &img_key_D, SHOW_CLR_BLK); - break; - case -1: - show(canvas, 119, 51, &img_key_U, SHOW_CLR_BLK); - canvas_draw_box(canvas, 120, 57, 7, 6); - show(canvas, 119, 56, &img_key_D, SHOW_CLR_WHT); - break; - default: - break; - } - canvas_set_color(canvas, ColorBlack); - canvas_draw_frame(canvas, 119, 51, 9, 13); +void showPeakHold (state_t* const state, Canvas* const canvas, const int hold) +{ + switch (hold) { + case 0: + show(canvas, 119,51, &img_key_U, SHOW_CLR_BLK); + show(canvas, 119,56, &img_key_D, SHOW_CLR_BLK); + break; + case +1: + canvas_set_color(canvas, ColorBlack); + canvas_draw_box(canvas, 120,52, 7,6); + show(canvas, 119,51, &img_key_U, SHOW_CLR_WHT); + show(canvas, 119,56, &img_key_D, SHOW_CLR_BLK); + break; + case -1: + show(canvas, 119,51, &img_key_U, SHOW_CLR_BLK); + canvas_draw_box(canvas, 120,57, 7,6); + show(canvas, 119,56, &img_key_D, SHOW_CLR_WHT); + break; + default: + break; + } + canvas_set_color(canvas, ColorBlack); + canvas_draw_frame(canvas, 119,51, 9,13); - // calibration indicator - show( - canvas, - 108, - 55, - ((state->calib & CAL_RANGE) && (++state->flash & 8)) ? &img_key_OKi : &img_key_OK, - SHOW_SET_BLK); + // calibration indicator + show( canvas, 108,55, + ((state->calib & CAL_RANGE) && (++state->flash &8)) ? &img_key_OKi : &img_key_OK, + SHOW_SET_BLK ); } //============================================================================= ======================================== -// This code performs a FULL calibration on the device EVERY time it draws a joystick +// This code performs a FULL calibration on the device EVERY time it draws a joystick //...This is NOT a good way forward for anything other than a test tool. // // Realistically you would do all the maths when the controller is connected -// or, if you prefer (and it IS a good thing), have a "calibrate controller" menu option +// or, if you prefer (and it IS a good thing), have a "calibrate controller" menu option // ...and then just use a lookup table, or trivial formual // // THIS algorithm chops the joystick in to one of 9 zones @@ -130,12 +97,12 @@ void showPeakHold(state_t* const state, Canvas* const canvas, const int hold) { // FullLeft and FullRight have a deadzone of N [qv. xDead] ..a total of N+1 positions // Middle has a deadzone of N EACH WAY ...a total of 2N+1 positions // -// If the remaining range does not divide evenly in to three zones, +// If the remaining range does not divide evenly in to three zones, // the first remainder is added to zone3, // and the second remainder (if there is one) is added to zone2 // ...giving finer control near the centre of the joystick // -// The value of the deadzone is based on the number of bits in the +// The value of the deadzone is based on the number of bits in the // joystcik {x,y} values - the larger the range, the larger the deadzone. // // 03 15 29 @@ -151,132 +118,106 @@ void showPeakHold(state_t* const state, Canvas* const canvas, const int hold) { // Turn and object - this is probably good enough // Start slowly & pick up speed - how about a log or sine curve? // -void showJoy( - Canvas* const canvas, - const uint8_t x, - const uint8_t y, // x,y is the CENTRE of the Joystick - const uint8_t xMin, - const uint8_t xMid, - const uint8_t xMax, - const uint8_t yMin, - const uint8_t yMid, - const uint8_t yMax, - const uint8_t xPos, - const uint8_t yPos, - const uint8_t bits) { - int xOff = 0; // final offset of joystick hat image - int yOff = 0; +void showJoy ( Canvas* const canvas, const uint8_t x, const uint8_t y, // x,y is the CENTRE of the Joystick + const uint8_t xMin, const uint8_t xMid, const uint8_t xMax, + const uint8_t yMin, const uint8_t yMid, const uint8_t yMax, + const uint8_t xPos, const uint8_t yPos, const uint8_t bits ) +{ + int xOff = 0; // final offset of joystick hat image + int yOff = 0; - int xDead = (bits < 7) ? (1 << 0) : (1 << 3); // dead zone (centre & limits) - int yDead = xDead; + int xDead = (bits < 7) ? (1<<0) : (1<<3); // dead zone (centre & limits) + int yDead = xDead; - // This code is NOT optimised ...and it's still barely readable! - if((xPos >= (xMid - xDead)) && (xPos <= (xMid + xDead))) - xOff = 0; // centre [most likely] - else if(xPos <= (xMin + xDead)) - xOff = -4; // full left - else if(xPos >= (xMax - xDead)) - xOff = +4; // full right - else if(xPos < (xMid - xDead)) { // part left - // very much hard-coded for 3 interim positions - int lo = (xMin + xDead) + 1; // lowest position - int hi = (xMid - xDead) - 1; // highest position + // This code is NOT optimised ...and it's still barely readable! + if ((xPos >= (xMid -xDead)) && (xPos <= (xMid +xDead))) xOff = 0 ; // centre [most likely] + else if (xPos <= (xMin +xDead)) xOff = -4 ; // full left + else if (xPos >= (xMax -xDead)) xOff = +4 ; // full right + else if (xPos < (xMid -xDead)) { // part left + // very much hard-coded for 3 interim positions + int lo = (xMin +xDead) +1; // lowest position + int hi = (xMid -xDead) -1; // highest position - // this is the only duplicated bit of code - int range = (hi - lo) + 1; // range covered - int div = range / 3; // each division (base amount, eg. 17/3==5) - int rem = range - (div * 3); // remainder (ie. range%3) + // this is the only duplicated bit of code + int range = (hi -lo) +1; // range covered + int div = range /3; // each division (base amount, eg. 17/3==5) + int rem = range -(div *3); // remainder (ie. range%3) - // int hi1 = hi; // lowest value for zone #-1 - // int lo1 = hi1 -div +1; // highest value for zone #-1 - // int hi2 = lo1 -1; // lowest value for zone #-2 - // int lo2 = hi2 -div +1 -(rem==2); // highest value for zone #-2 expand out remainder - // int hi3 = lo2 -1; // lowest value for zone #-3 - // int lo3 = hi3 -div +1 -(rem>=1); // highest value for zone #-3 expand out remainder +// int hi1 = hi; // lowest value for zone #-1 +// int lo1 = hi1 -div +1; // highest value for zone #-1 +// int hi2 = lo1 -1; // lowest value for zone #-2 +// int lo2 = hi2 -div +1 -(rem==2); // highest value for zone #-2 expand out remainder +// int hi3 = lo2 -1; // lowest value for zone #-3 +// int lo3 = hi3 -div +1 -(rem>=1); // highest value for zone #-3 expand out remainder - int lo1 = hi - div + 1; // (in brevity) - int hi3 = hi - div - div - (rem == 2); // ... + int lo1 = hi -div +1; // (in brevity) + int hi3 = hi -div -div -(rem==2); // ... - if(xPos <= hi3) - xOff = -3; // zone #-3 - else if(xPos >= lo1) - xOff = -1; // zone #-1 - else - xOff = -2; // zone #-2 + if (xPos <= hi3) xOff = -3 ; // zone #-3 + else if (xPos >= lo1) xOff = -1 ; // zone #-1 + else xOff = -2 ; // zone #-2 - } else /*if (xPos > (xMid +xDead))*/ { // part right - // very much hard-coded for 3 interim positions - int lo = (xMid + xDead) + 1; // lowest position - int hi = (xMax - xDead) - 1; // highest position + } else /*if (xPos > (xMid +xDead))*/ { // part right + // very much hard-coded for 3 interim positions + int lo = (xMid +xDead) +1; // lowest position + int hi = (xMax -xDead) -1; // highest position - int range = (hi - lo) + 1; // range covered - int div = range / 3; // each division (base amount, eg. 17/3==5) - int rem = range - (div * 3); // remainder (ie. range%3) + int range = (hi -lo) +1; // range covered + int div = range /3; // each division (base amount, eg. 17/3==5) + int rem = range -(div *3); // remainder (ie. range%3) - // int lo1 = lo; // lowest value for zone #+1 - // int hi1 = lo +div -1; // highest value for zone #+1 - // int lo2 = hi1 +1; // lowest value for zone #+2 - // int hi2 = lo2 +div -1 +(rem==2); // highest value for zone #+2 expand out remainder - // int lo3 = hi2 +1; // lowest value for zone #+3 - // int hi3 = lo3 +div -1 +(rem>=1); // highest value for zone #+3 expand out remainder +// int lo1 = lo; // lowest value for zone #+1 +// int hi1 = lo +div -1; // highest value for zone #+1 +// int lo2 = hi1 +1; // lowest value for zone #+2 +// int hi2 = lo2 +div -1 +(rem==2); // highest value for zone #+2 expand out remainder +// int lo3 = hi2 +1; // lowest value for zone #+3 +// int hi3 = lo3 +div -1 +(rem>=1); // highest value for zone #+3 expand out remainder - int hi1 = lo + div - 1; // (in brevity) - int lo3 = lo + div + div + (rem == 2); // ... + int hi1 = lo +div -1; // (in brevity) + int lo3 = lo +div +div +(rem==2); // ... - if(xPos <= hi1) - xOff = 1; // zone #1 - else if(xPos >= lo3) - xOff = 3; // zone #3 - else - xOff = 2; // zone #2 - } + if (xPos <= hi1) xOff = 1 ; // zone #1 + else if (xPos >= lo3) xOff = 3 ; // zone #3 + else xOff = 2 ; // zone #2 + } - // All this to print a 3x3 square (in the right place) - LOL! - if((yPos >= (yMid - yDead)) && (yPos <= (yMid + yDead))) - yOff = 0; // centre [most likely] - else if(yPos <= (yMin + yDead)) - yOff = +4; // full down - else if(yPos >= (yMax - yDead)) - yOff = -4; // full up - else if(yPos < (yMid - yDead)) { // part down - int lo = (yMin + yDead) + 1; // lowest position - int hi = (yMid - yDead) - 1; // highest position + // All this to print a 3x3 square (in the right place) - LOL! + if ((yPos >= (yMid -yDead)) && (yPos <= (yMid +yDead))) yOff = 0 ; // centre [most likely] + else if (yPos <= (yMin +yDead)) yOff = +4 ; // full down + else if (yPos >= (yMax -yDead)) yOff = -4 ; // full up + else if (yPos < (yMid -yDead)) { // part down + int lo = (yMin +yDead) +1; // lowest position + int hi = (yMid -yDead) -1; // highest position - int range = (hi - lo) + 1; // range covered - int div = range / 3; // each division (base amount, eg. 17/3==5) - int rem = range - (div * 3); // remainder (ie. range%3) + int range = (hi -lo) +1; // range covered + int div = range /3; // each division (base amount, eg. 17/3==5) + int rem = range -(div *3); // remainder (ie. range%3) - int lo1 = hi - div + 1; // (in brevity) - int hi3 = hi - div - div - (rem == 2); // ... + int lo1 = hi -div +1; // (in brevity) + int hi3 = hi -div -div -(rem==2); // ... - if(yPos <= hi3) - yOff = +3; // zone #3 - else if(yPos >= lo1) - yOff = +1; // zone #1 - else - yOff = +2; // zone #2 + if (yPos <= hi3) yOff = +3 ; // zone #3 + else if (yPos >= lo1) yOff = +1 ; // zone #1 + else yOff = +2 ; // zone #2 - } else /*if (yPos > (yMid +yDead))*/ { // part up - int lo = (yMid + yDead) + 1; // lowest position - int hi = (yMax - yDead) - 1; // highest position + } else /*if (yPos > (yMid +yDead))*/ { // part up + int lo = (yMid +yDead) +1; // lowest position + int hi = (yMax -yDead) -1; // highest position - int range = (hi - lo) + 1; // range covered - int div = range / 3; // each division (base amount, eg. 17/3==5) - int rem = range - (div * 3); // remainder (ie. range%3) + int range = (hi -lo) +1; // range covered + int div = range /3; // each division (base amount, eg. 17/3==5) + int rem = range -(div *3); // remainder (ie. range%3) - int hi1 = lo + div - 1; // (in brevity) - int lo3 = lo + div + div + (rem == 2); // ... + int hi1 = lo +div -1; // (in brevity) + int lo3 = lo +div +div +(rem==2); // ... - if(yPos <= hi1) - yOff = -1; // zone #-1 - else if(yPos >= lo3) - yOff = -3; // zone #-3 - else - yOff = -2; // zone #-2 - } + if (yPos <= hi1) yOff = -1 ; // zone #-1 + else if (yPos >= lo3) yOff = -3 ; // zone #-3 + else yOff = -2 ; // zone #-2 + } - show(canvas, x - (img_cc_Joy.w / 2), y - (img_cc_Joy.h / 2), &img_cc_Joy, SHOW_SET_BLK); + show(canvas, x-(img_cc_Joy.w/2),y-(img_cc_Joy.h/2), &img_cc_Joy, SHOW_SET_BLK); - // All ^that^ for v-this-v - LOL!! - canvas_draw_box(canvas, (x - 1) + xOff, (y - 1) + yOff, 3, 3); + // All ^that^ for v-this-v - LOL!! + canvas_draw_box(canvas, (x-1)+xOff,(y-1)+yOff, 3,3); } diff --git a/applications/plugins/wii_ec_anal/wii_anal_lcd.h b/applications/plugins/wii_ec_anal/wii_anal_lcd.h index e52a3adc6..5258c4de1 100644 --- a/applications/plugins/wii_ec_anal/wii_anal_lcd.h +++ b/applications/plugins/wii_ec_anal/wii_anal_lcd.h @@ -1,57 +1,43 @@ -#ifndef WII_ANAL_LCD_H_ -#define WII_ANAL_LCD_H_ +#ifndef WII_ANAL_LCD_H_ +#define WII_ANAL_LCD_H_ //----------------------------------------------------------------------------- ---------------------------------------- // A couple of monospaced hex fonts // #include "gfx/images.h" -extern const image_t* img_6x8[]; -extern const image_t* img_5x7[]; +extern const image_t* img_6x8[]; +extern const image_t* img_5x7[]; //============================================================================= ======================================== // macros to draw only two sides of a box // these are used for drawing the wires on the WAIT screen // -#define BOX_TL(x1, y1, x2, y2) \ - do { \ - canvas_draw_frame(canvas, x1, y1, x2 - x1 + 1, 2); \ - canvas_draw_frame(canvas, x1, y1 + 2, 2, y2 - y1 + 1 - 2); \ - } while(0) +#define BOX_TL(x1,y1,x2,y2) do { \ + canvas_draw_frame(canvas, x1,y1, x2-x1+1,2); \ + canvas_draw_frame(canvas, x1,y1+2, 2,y2-y1+1-2); \ +}while(0) + +#define BOX_BL(x1,y1,x2,y2) do { \ + canvas_draw_frame(canvas, x1,y2-1, x2-x1+1,2); \ + canvas_draw_frame(canvas, x1,y1, 2,y2-y1+1-2); \ +}while(0) -#define BOX_BL(x1, y1, x2, y2) \ - do { \ - canvas_draw_frame(canvas, x1, y2 - 1, x2 - x1 + 1, 2); \ - canvas_draw_frame(canvas, x1, y1, 2, y2 - y1 + 1 - 2); \ - } while(0) //============================================================================= ======================================== // Function prototypes // -void patBacklight(state_t* state); +void patBacklight (state_t* state) ; -void showHex( - Canvas* const canvas, - uint8_t x, - uint8_t y, - const uint32_t val, - const uint8_t cnt, - const int b); +void showHex ( Canvas* const canvas, uint8_t x, uint8_t y, + const uint32_t val, const uint8_t cnt, const int b ) ; -void showPeakHold(state_t* const state, Canvas* const canvas, const int hold); +void showPeakHold (state_t* const state, Canvas* const canvas, const int hold) ; + +void showJoy ( Canvas* const canvas, const uint8_t x, const uint8_t y, // x,y is the CENTRE of the Joystick + const uint8_t xMin, const uint8_t xMid, const uint8_t xMax, + const uint8_t yMin, const uint8_t yMid, const uint8_t yMax, + const uint8_t xPos, const uint8_t yPos, const uint8_t bits ) ; -void showJoy( - Canvas* const canvas, - const uint8_t x, - const uint8_t y, // x,y is the CENTRE of the Joystick - const uint8_t xMin, - const uint8_t xMid, - const uint8_t xMax, - const uint8_t yMin, - const uint8_t yMid, - const uint8_t yMax, - const uint8_t xPos, - const uint8_t yPos, - const uint8_t bits); #endif //WII_ANAL_LCD_H_ diff --git a/applications/plugins/wii_ec_anal/wii_anal_ver.h b/applications/plugins/wii_ec_anal/wii_anal_ver.h index 3f2c8c0e6..88ed17d19 100644 --- a/applications/plugins/wii_ec_anal/wii_anal_ver.h +++ b/applications/plugins/wii_ec_anal/wii_anal_ver.h @@ -1,9 +1,9 @@ -#ifndef WII_ANAL_VER_H_ -#define WII_ANAL_VER_H_ +#ifndef WII_ANAL_VER_H_ +#define WII_ANAL_VER_H_ -#include "gfx/images.h" +#include "gfx/images.h" -#define VER_MAJ &img_3x5_1 -#define VER_MIN &img_3x5_0 +#define VER_MAJ &img_3x5_1 +#define VER_MIN &img_3x5_0 #endif //WII_ANAL_VER_H_ diff --git a/applications/plugins/wii_ec_anal/wii_ec.c b/applications/plugins/wii_ec_anal/wii_ec.c index 00dcbf922..93b17c67c 100644 --- a/applications/plugins/wii_ec_anal/wii_ec.c +++ b/applications/plugins/wii_ec_anal/wii_ec.c @@ -1,298 +1,220 @@ -#include -#include // Core API +#include +#include // Core API -#include "wii_anal.h" -#include "wii_i2c.h" -#include "wii_ec.h" -#include "bc_logging.h" +#include "wii_anal.h" +#include "wii_i2c.h" +#include "wii_ec.h" +#include "bc_logging.h" -#include "gfx/images.h" // Images -#include "wii_anal_lcd.h" // Drawing functions -#include "wii_anal_keys.h" // key mappings +#include "gfx/images.h" // Images +#include "wii_anal_lcd.h" // Drawing functions +#include "wii_anal_keys.h" // key mappings //----------------------------------------------------------------------------- ---------------------------------------- // List of known perhipherals // // More perhipheral ID codes here: https://wiibrew.org/wiki/Wiimote/Extension_Controllers#The_New_Way // -const ecId_t ecId[PID_CNT] = { - [PID_UNKNOWN] = - {{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - "Unknown Perhipheral", - SCENE_DUMP, - NULL, - NULL, - NULL, - NULL, - ec_show, - ec_key}, +const ecId_t ecId[PID_CNT] = { + [PID_UNKNOWN ] = { {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, "Unknown Perhipheral", SCENE_DUMP, + NULL, NULL, NULL, NULL, ec_show, ec_key}, - // If you're wise, ONLY edit this bit - [PID_NUNCHUCK] = - {{0x00, 0x00, 0xA4, 0x20, 0x00, 0x00}, - "Nunchuck", - SCENE_NUNCHUCK, - NULL, - nunchuck_decode, - nunchuck_msg, - nunchuck_calib, - nunchuck_show, - nunchuck_key}, + // If you're wise, ONLY edit this bit + [PID_NUNCHUCK ] = { {0x00, 0x00, 0xA4, 0x20, 0x00, 0x00}, "Nunchuck", SCENE_NUNCHUCK, + NULL, nunchuck_decode, nunchuck_msg, nunchuck_calib, nunchuck_show, nunchuck_key }, - [PID_NUNCHUCK_R2] = - {{0xFF, 0x00, 0xA4, 0x20, 0x00, 0x00}, - "Nunchuck (rev2)", - SCENE_NUNCHUCK, - NULL, - nunchuck_decode, - nunchuck_msg, - nunchuck_calib, - nunchuck_show, - nunchuck_key}, + [PID_NUNCHUCK_R2] = { {0xFF, 0x00, 0xA4, 0x20, 0x00, 0x00}, "Nunchuck (rev2)", SCENE_NUNCHUCK, + NULL, nunchuck_decode, nunchuck_msg, nunchuck_calib, nunchuck_show, nunchuck_key }, - [PID_CLASSIC] = - {{0x00, 0x00, 0xA4, 0x20, 0x01, 0x01}, - "Classic Controller", - SCENE_CLASSIC, - NULL, - classic_decode, - classic_msg, - classic_calib, - classic_show, - classic_key}, + [PID_CLASSIC ] = { {0x00, 0x00, 0xA4, 0x20, 0x01, 0x01}, "Classic Controller", SCENE_CLASSIC, + NULL, classic_decode, classic_msg, classic_calib, classic_show, classic_key }, - [PID_CLASSIC_PRO] = - {{0x01, 0x00, 0xA4, 0x20, 0x01, 0x01}, - "Classic Controller Pro", - SCENE_CLASSIC, - NULL, - classic_decode, - classic_msg, - classic_calib, - classic_show, - classic_key}, + [PID_CLASSIC_PRO] = { {0x01, 0x00, 0xA4, 0x20, 0x01, 0x01}, "Classic Controller Pro", SCENE_CLASSIC, + NULL, classic_decode, classic_msg, classic_calib, classic_show, classic_key }, - [PID_BALANCE] = - {{0x00, 0x00, 0xA4, 0x20, 0x04, 0x02}, - "Balance Board", - SCENE_DUMP, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL}, + [PID_BALANCE ] = { {0x00, 0x00, 0xA4, 0x20, 0x04, 0x02}, "Balance Board", SCENE_DUMP, + NULL, NULL, NULL, NULL, NULL, NULL }, - [PID_GH_GUITAR] = - {{0x00, 0x00, 0xA4, 0x20, 0x01, 0x03}, - "Guitar Hero Guitar", - SCENE_DUMP, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL}, + [PID_GH_GUITAR ] = { {0x00, 0x00, 0xA4, 0x20, 0x01, 0x03}, "Guitar Hero Guitar", SCENE_DUMP, + NULL, NULL, NULL, NULL, NULL, NULL }, - [PID_GH_DRUMS] = - {{0x01, 0x00, 0xA4, 0x20, 0x01, 0x03}, - "Guitar Hero World Tour Drums", - SCENE_DUMP, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL}, + [PID_GH_DRUMS ] = { {0x01, 0x00, 0xA4, 0x20, 0x01, 0x03}, "Guitar Hero World Tour Drums", SCENE_DUMP, + NULL, NULL, NULL, NULL, NULL, NULL }, - [PID_TURNTABLE] = - {{0x03, 0x00, 0xA4, 0x20, 0x01, 0x03}, - "DJ Hero Turntable", - SCENE_DUMP, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL}, + [PID_TURNTABLE ] = { {0x03, 0x00, 0xA4, 0x20, 0x01, 0x03}, "DJ Hero Turntable", SCENE_DUMP, + NULL, NULL, NULL, NULL, NULL, NULL }, - [PID_TAIKO_DRUMS] = - {{0x00, 0x00, 0xA4, 0x20, 0x01, 0x11}, - "Taiko Drum Controller)", - SCENE_DUMP, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL}, // Taiko no Tatsujin TaTaCon (Drum controller) + [PID_TAIKO_DRUMS] = { {0x00, 0x00, 0xA4, 0x20, 0x01, 0x11}, "Taiko Drum Controller)", SCENE_DUMP, + NULL, NULL, NULL, NULL, NULL, NULL }, // Taiko no Tatsujin TaTaCon (Drum controller) - [PID_UDRAW] = - {{0xFF, 0x00, 0xA4, 0x20, 0x00, 0x13}, - "uDraw Tablet", - SCENE_DUMP, - udraw_init, - NULL, - NULL, - NULL, - NULL, - NULL}, //! same as drawsome? - // ----- + [PID_UDRAW ] = { {0xFF, 0x00, 0xA4, 0x20, 0x00, 0x13}, "uDraw Tablet", SCENE_DUMP, + udraw_init, NULL, NULL, NULL, NULL, NULL }, //! same as drawsome? + // ----- - [PID_ERROR] = - {{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, - "Read Error", - SCENE_NONE, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL}, + [PID_ERROR ] = { {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, "Read Error", SCENE_NONE, + NULL, NULL, NULL, NULL, NULL, NULL }, - [PID_NULL] = {{0}, NULL, SCENE_NONE, NULL, NULL, NULL, NULL, NULL, NULL} // last entry + [PID_NULL ] = { {0}, NULL, SCENE_NONE, NULL, NULL, NULL, NULL, NULL, NULL } // last entry }; //+============================================================================ ======================================== -void ecDecode(wiiEC_t* pec) { - if(ecId[pec->pidx].decode) ecId[pec->pidx].decode(pec); +void ecDecode (wiiEC_t* pec) +{ + if (ecId[pec->pidx].decode) ecId[pec->pidx].decode(pec) ; } //+============================================================================ ======================================== -void ecCalibrate(wiiEC_t* const pec, ecCalib_t c) { - if(ecId[pec->pidx].calib) ecId[pec->pidx].calib(pec, c); +void ecCalibrate (wiiEC_t* const pec, ecCalib_t c) +{ + if (ecId[pec->pidx].calib) ecId[pec->pidx].calib(pec, c) ; } //+============================================================================ ======================================== -void ecPoll(wiiEC_t* const pec, FuriMessageQueue* const queue) { - ENTER; - furi_assert(queue); +void ecPoll (wiiEC_t* const pec, FuriMessageQueue* const queue) +{ + ENTER; + furi_assert(queue); - if(!pec->init) { - // Attempt to initialise - if(ecInit(pec, NULL)) { //! need a way to auto-start with encryption enabled - eventMsg_t msg = { - .id = EVID_WIIEC, .wiiEc = {.type = WIIEC_CONN, .in = '<', .val = pec->pidx}}; - furi_message_queue_put(queue, &msg, 0); - } + if (!pec->init) { + // Attempt to initialise + if (ecInit(pec, NULL)) { //! need a way to auto-start with encryption enabled + eventMsg_t msg = { + .id = EVID_WIIEC, + .wiiEc = { + .type = WIIEC_CONN, + .in = '<', + .val = pec->pidx + } + }; + furi_message_queue_put(queue, &msg, 0); + } - } else { - // Attempt to read - switch(ecRead(pec)) { - case 2: { // device gone - eventMsg_t msg = { - .id = EVID_WIIEC, .wiiEc = {.type = WIIEC_DISCONN, .in = '>', .val = pec->pidx}}; - furi_message_queue_put(queue, &msg, 0); - break; - } + } else { + // Attempt to read + switch (ecRead(pec)) { + case 2: { // device gone + eventMsg_t msg = { + .id = EVID_WIIEC, + .wiiEc = { + .type = WIIEC_DISCONN, + .in = '>', + .val = pec->pidx + } + }; + furi_message_queue_put(queue, &msg, 0); + break; + } - case 0: { // read OK - void (*fn)(wiiEC_t*, FuriMessageQueue*) = ecId[pec->pidx].check; - if(fn) fn(pec, queue); - break; - } + case 0: { // read OK + void (*fn)(wiiEC_t*, FuriMessageQueue*) = ecId[pec->pidx].check; + if (fn) fn(pec, queue); + break; + } - case 3: // read fail - // this is probably temporary just ignore it - break; + case 3: // read fail + // this is probably temporary just ignore it + break; - default: // bug: unknown - case 1: // bug: not initialised - should never happen - ERROR("%s : read bug", __func__); - break; - } - } + default: // bug: unknown + case 1: // bug: not initialised - should never happen + ERROR("%s : read bug", __func__); + break; + } + } - LEAVE; - return; + LEAVE; + return; } //+============================================================================ ======================================== // This is the screen drawn for an unknown controller // It is also available by pressing LEFT (at least once) on a "known controller" screen // -void ec_show(Canvas* const canvas, state_t* const state) { - wiiEC_t* pec = &state->ec; - int h = 11; // line height - int x = 1; // (initial) offset for bits - int y = -h; // previous y value - int yb = 0; // y for bit patterns - int c2 = 17; // column 2 +void ec_show (Canvas* const canvas, state_t* const state) +{ + wiiEC_t* pec = &state->ec; + int h = 11; // line height + int x = 1; // (initial) offset for bits + int y = -h; // previous y value + int yb = 0; // y for bit patterns + int c2 = 17; // column 2 - // Headings - canvas_set_font(canvas, FontSecondary); - canvas_set_color(canvas, ColorBlack); + // Headings + canvas_set_font(canvas, FontSecondary); + canvas_set_color(canvas, ColorBlack); - canvas_draw_str_aligned(canvas, 0, 0, AlignLeft, AlignTop, "SID:"); - canvas_draw_str_aligned(canvas, c2, 0, AlignLeft, AlignTop, pec->sid); + canvas_draw_str_aligned(canvas, 0 ,0, AlignLeft, AlignTop, "SID:"); + canvas_draw_str_aligned(canvas, c2,0, AlignLeft, AlignTop, pec->sid); - canvas_draw_str_aligned(canvas, 0, 11, AlignLeft, AlignTop, "PID:"); - canvas_draw_str_aligned(canvas, 0, 22, AlignLeft, AlignTop, "Cal:"); + canvas_draw_str_aligned(canvas, 0 ,11, AlignLeft, AlignTop, "PID:"); + canvas_draw_str_aligned(canvas, 0 ,22, AlignLeft, AlignTop, "Cal:"); - // PID - x = c2; - for(int i = 0; i < 6; i++) { - show(canvas, x, 11, img_5x7[pec->pid[i] >> 4], SHOW_SET_BLK); - x += 5 + 1; - show(canvas, x, 11, img_5x7[pec->pid[i] & 0xF], SHOW_SET_BLK); - x += 5 + 1 + 2; - } + // PID + x = c2; + for (int i = 0; i < 6; i++) { + show(canvas, x,11, img_5x7[pec->pid[i]>>4], SHOW_SET_BLK); + x += 5+1; + show(canvas, x,11, img_5x7[pec->pid[i]&0xF], SHOW_SET_BLK); + x += 5+1+2; + } - // Calibrations data - y = 11; - for(int j = 0; j <= 8; j += 8) { - x = c2; - y += 11; - for(int i = 0; i < 8; i++) { - show(canvas, x, y, img_5x7[pec->calF[i + j] >> 4], SHOW_SET_BLK); - x += 5 + 1; - show(canvas, x, y, img_5x7[pec->calF[i + j] & 0xF], SHOW_SET_BLK); - x += 5 + 1 + 2; - } - } + // Calibrations data + y = 11; + for (int j = 0; j <= 8; j += 8) { + x = c2; + y += 11; + for (int i = 0; i < 8; i++) { + show(canvas, x,y, img_5x7[pec->calF[i+j]>>4], SHOW_SET_BLK); + x += 5+1; + show(canvas, x,y, img_5x7[pec->calF[i+j]&0xF], SHOW_SET_BLK); + x += 5+1+2; + } + } - // Reading - x = 1; - y++; - yb = (y += h) + h + 2; + // Reading + x = 1; + y++; + yb = (y+=h) +h +2; - canvas_draw_line(canvas, x, y - 1, x, yb + 4); - x += 2; + canvas_draw_line(canvas, x,y-1, x,yb+4); + x += 2; - for(int i = 0; i < JOY_LEN; i++) { - show(canvas, x + 1, y, img_6x8[pec->joy[i] >> 4], SHOW_SET_BLK); - show(canvas, x + 11, y, img_6x8[pec->joy[i] & 0xF], SHOW_SET_BLK); + for (int i = 0; i < JOY_LEN; i++) { + show(canvas, x+ 1,y, img_6x8[pec->joy[i]>>4], SHOW_SET_BLK); + show(canvas, x+11,y, img_6x8[pec->joy[i]&0xF], SHOW_SET_BLK); - // bits - for(int m = 0x80; m; m >>= 1) { - x += 2 * !!(m & 0x08); // nybble step - canvas_draw_box(canvas, x, yb + (2 * !(pec->joy[i] & m)), 2, 2); - x += 2; // bit step - } + // bits + for (int m = 0x80; m; m >>= 1) { + x += 2 * !!(m & 0x08) ; // nybble step + canvas_draw_box(canvas, x,yb +(2*!(pec->joy[i] & m)), 2,2) ; + x += 2; // bit step + } - // byte step - x += 1; - canvas_draw_line(canvas, x, y - 1, x, yb + 4); - x += 2; - } + // byte step + x += 1; + canvas_draw_line(canvas, x,y-1, x,yb+4); + x += 2; + } - // Scene navigation - if(state->scenePrev != SCENE_WAIT) show(canvas, 120, 0, &img_key_R, SHOW_SET_BLK); + // Scene navigation + if (state->scenePrev != SCENE_WAIT) + show(canvas, 120,0, &img_key_R, SHOW_SET_BLK); } //+============================================================================ ======================================== -// The DUMP screen is +// The DUMP screen is // -bool ec_key(const eventMsg_t* const msg, state_t* const state) { - int used = false; // assume key is NOT-handled +bool ec_key (const eventMsg_t* const msg, state_t* const state) +{ + int used = false; // assume key is NOT-handled - if(state->scenePrev != SCENE_WAIT) { - //# input.type == InputTypeShort) && (msg->input.key == InputKeyRight)) { - sceneSet(state, state->scenePrev); - used = true; - } - } + if (state->scenePrev != SCENE_WAIT) { + //# input.type == InputTypeShort) && (msg->input.key == InputKeyRight)) { + sceneSet(state, state->scenePrev); + used = true; + } + } - return used; + return used; } diff --git a/applications/plugins/wii_ec_anal/wii_ec.h b/applications/plugins/wii_ec_anal/wii_ec.h index a28453740..e8745ba13 100644 --- a/applications/plugins/wii_ec_anal/wii_ec.h +++ b/applications/plugins/wii_ec_anal/wii_ec.h @@ -1,142 +1,158 @@ -#ifndef WII_EC_H_ -#define WII_EC_H_ +#ifndef WII_EC_H_ +#define WII_EC_H_ -#include +#include -#include +#include -#include "wii_ec_nunchuck.h" -#include "wii_ec_classic.h" -#include "wii_ec_udraw.h" +#include "wii_ec_nunchuck.h" +#include "wii_ec_classic.h" +#include "wii_ec_udraw.h" //----------------------------------------------------------------------------- ---------------------------------------- // Crypto key (PSK), base register : {0x40..0x4F}[2][8] -#define ENC_LEN (2 * 8) +#define ENC_LEN (2*8) // Controller State data, base register : {0x00..0x05}[6] -#define JOY_LEN (6) +#define JOY_LEN (6) // Calibration data, base register : {0x20..0x2F}[16] -#define CAL_LEN (16) +#define CAL_LEN (16) // Controller ID, base register : {0xFA..0xFF}[6] -#define PID_LEN (6) +#define PID_LEN (6) //----------------------------------------------------------------------------- ---------------------------------------- // Perhipheral specific parameters union // -typedef union ecDec { - ecDecNunchuck_t nunchuck; - ecDecClassic_t classic; -} ecDec_t; +typedef + union ecDec { + ecDecNunchuck_t nunchuck; + ecDecClassic_t classic; + } +ecDec_t; //----------------------------------------------------------------------------- -typedef union ecCal { - // 0=lowest seen ; 1=min ; 2=mid ; 3=max ; 4=highest seen - ecCalNunchuck_t nunchuck[5]; - ecCalClassic_t classic[5]; -} ecCal_t; +typedef + union ecCal { + // 0=lowest seen ; 1=min ; 2=mid ; 3=max ; 4=highest seen + ecCalNunchuck_t nunchuck[5]; + ecCalClassic_t classic[5]; + } +ecCal_t; //----------------------------------------------------------------------------- ---------------------------------------- // Wii Extension Controller events // -typedef enum wiiEcEventType { - WIIEC_NONE, - WIIEC_CONN, // Connect - WIIEC_DISCONN, // Disconnect - WIIEC_PRESS, // Press button - WIIEC_RELEASE, // Release button - WIIEC_ANALOG, // Analogue change (Joystick/Trigger) - WIIEC_ACCEL, // Accelerometer change -} wiiEcEventType_t; +typedef + enum wiiEcEventType { + WIIEC_NONE, + WIIEC_CONN, // Connect + WIIEC_DISCONN, // Disconnect + WIIEC_PRESS, // Press button + WIIEC_RELEASE, // Release button + WIIEC_ANALOG, // Analogue change (Joystick/Trigger) + WIIEC_ACCEL, // Accelerometer change + } +wiiEcEventType_t; //----------------------------------------------------------------------------- -typedef struct wiiEcEvent { - wiiEcEventType_t type; // event type - char in; // input (see device specific options) - uint32_t val; // new value - meaningless for digital button presses -} wiiEcEvent_t; +typedef + struct wiiEcEvent { + wiiEcEventType_t type; // event type + char in; // input (see device specific options) + uint32_t val; // new value - meaningless for digital button presses + } +wiiEcEvent_t; //----------------------------------------------------------------------------- ---------------------------------------- // Known perhipheral types // -typedef enum ecPid { - PID_UNKNOWN = 0, - PID_FIRST = 1, - PID_NUNCHUCK = PID_FIRST, +typedef + enum ecPid { + PID_UNKNOWN = 0, + PID_FIRST = 1, + PID_NUNCHUCK = PID_FIRST, - // If you're wise, ONLY edit this section - PID_NUNCHUCK_R2, - PID_CLASSIC, - PID_CLASSIC_PRO, - PID_BALANCE, - PID_GH_GUITAR, - PID_GH_DRUMS, - PID_TURNTABLE, - PID_TAIKO_DRUMS, - PID_UDRAW, //! same as drawsome? - // ----- + // If you're wise, ONLY edit this section + PID_NUNCHUCK_R2, + PID_CLASSIC, + PID_CLASSIC_PRO, + PID_BALANCE, + PID_GH_GUITAR, + PID_GH_DRUMS, + PID_TURNTABLE, + PID_TAIKO_DRUMS, + PID_UDRAW, //! same as drawsome? + // ----- - PID_ERROR, - PID_NULL, - PID_CNT, -} ecPid_t; + PID_ERROR, + PID_NULL, + PID_CNT, + } +ecPid_t; //----------------------------------------------------------------------------- // Calibration strategies // -typedef enum ecCalib { - CAL_FACTORY = 0x01, // (re)set to factory defaults - CAL_TRACK = 0x02, // track maximum and minimum values seen - CAL_RESET = 0x04, // initialise ready for software calibration - CAL_RANGE = 0x08, // perform software calibration step - CAL_CENTRE = 0x10, // reset centre point of joystick - CAL_NOTJOY = 0x20, // do NOT calibrate the joystick -} ecCalib_t; +typedef + enum ecCalib { + CAL_FACTORY = 0x01, // (re)set to factory defaults + CAL_TRACK = 0x02, // track maximum and minimum values seen + CAL_RESET = 0x04, // initialise ready for software calibration + CAL_RANGE = 0x08, // perform software calibration step + CAL_CENTRE = 0x10, // reset centre point of joystick + CAL_NOTJOY = 0x20, // do NOT calibrate the joystick + } +ecCalib_t; //----------------------------------------------------------------------------- // ecId table entry // -typedef struct ecId { - uint8_t id[6]; // 6 byte ID string returned by Extension Controller - char* name; // Friendly name - scene_t scene; // Default scene - bool (*init)(wiiEC_t*); // Additional initialisation code - void (*decode)(wiiEC_t*); // Decode function - void (*check)(wiiEC_t*, FuriMessageQueue*); // check (for action) function - void (*calib)(wiiEC_t*, ecCalib_t); // calibrate analogue controllers [SOFTWARE] - void (*show)(Canvas* const, state_t* const); // Draw scene - bool (*keys)(const eventMsg_t* const, state_t* const); // Interpret keys -} ecId_t; +typedef + struct ecId { + uint8_t id[6]; // 6 byte ID string returned by Extension Controller + char* name; // Friendly name + scene_t scene; // Default scene + bool (*init)(wiiEC_t*); // Additional initialisation code + void (*decode)(wiiEC_t*); // Decode function + void (*check)(wiiEC_t*, FuriMessageQueue*); // check (for action) function + void (*calib)(wiiEC_t*, ecCalib_t); // calibrate analogue controllers [SOFTWARE] + void (*show)(Canvas* const, state_t* const); // Draw scene + bool (*keys)(const eventMsg_t* const, state_t* const); // Interpret keys + } +ecId_t; //----------------------------------------------------------------------------- // List of known perhipherals // // More perhipheral ID codes here: https://wiibrew.org/wiki/Wiimote/Extension_Controllers#The_New_Way // -extern const ecId_t ecId[PID_CNT]; +extern const ecId_t ecId[PID_CNT] ; //----------------------------------------------------------------------------- ---------------------------------------- // Data pertaining to a single Perhipheral instance // -typedef struct wiiEC { - // Perhipheral state - bool init; // Initialised? +typedef + struct wiiEC { + // Perhipheral state + bool init; // Initialised? - uint8_t pid[PID_LEN]; // PID string - eg. {0x00, 0x00, 0xA4, 0x20, 0x00, 0x00} - ecPid_t pidx; // Index in to ecId table - const char* sid; // just for convenience + uint8_t pid[PID_LEN]; // PID string - eg. {0x00, 0x00, 0xA4, 0x20, 0x00, 0x00} + ecPid_t pidx; // Index in to ecId table + const char* sid; // just for convenience - bool encrypt; // encryption enabled? - uint8_t encKey[ENC_LEN]; // encryption key + bool encrypt; // encryption enabled? + uint8_t encKey[ENC_LEN]; // encryption key - uint8_t calF[CAL_LEN]; // factory calibration data (not software) - uint8_t joy[JOY_LEN]; // Perhipheral raw data + uint8_t calF[CAL_LEN]; // factory calibration data (not software) + uint8_t joy[JOY_LEN]; // Perhipheral raw data - ecDec_t dec[2]; // device specific decode (two, so we can spot changes) - int decN; // which decode set is most recent {0, 1} - ecCal_t calS; // software calibration data -} wiiEC_t; + ecDec_t dec[2]; // device specific decode (two, so we can spot changes) + int decN; // which decode set is most recent {0, 1} + ecCal_t calS; // software calibration data + } +wiiEC_t; //----------------------------------------------------------------------------- ---------------------------------------- // Function prototypes @@ -145,17 +161,17 @@ typedef struct wiiEC { // top level check() function will handle connect/disconnect messages // -#include // Canvas -typedef struct wiiEC wiiEC_t; -typedef enum ecCalib ecCalib_t; -typedef struct state state_t; -typedef struct eventMsg eventMsg_t; +#include // Canvas +typedef struct wiiEC wiiEC_t ; +typedef enum ecCalib ecCalib_t ; +typedef struct state state_t ; +typedef struct eventMsg eventMsg_t ; -void ecDecode(wiiEC_t* const pec); -void ecPoll(wiiEC_t* const pec, FuriMessageQueue* const queue); -void ecCalibrate(wiiEC_t* const pec, ecCalib_t c); +void ecDecode (wiiEC_t* const pec) ; +void ecPoll (wiiEC_t* const pec, FuriMessageQueue* const queue) ; +void ecCalibrate (wiiEC_t* const pec, ecCalib_t c) ; -void ec_show(Canvas* const canvas, state_t* const state); -bool ec_key(const eventMsg_t* const msg, state_t* const state); +void ec_show ( Canvas* const canvas, state_t* const state) ; +bool ec_key (const eventMsg_t* const msg, state_t* const state) ; #endif //WII_EC_H_ diff --git a/applications/plugins/wii_ec_anal/wii_ec_classic.c b/applications/plugins/wii_ec_anal/wii_ec_classic.c index 5bd3398ca..91393ba07 100644 --- a/applications/plugins/wii_ec_anal/wii_ec_classic.c +++ b/applications/plugins/wii_ec_anal/wii_ec_classic.c @@ -1,17 +1,17 @@ -#include -#include // Core API +#include +#include // Core API -#include "wii_anal.h" -#include "wii_ec.h" -#include "bc_logging.h" +#include "wii_anal.h" +#include "wii_ec.h" +#include "bc_logging.h" //#include "gfx/images.h" // Images -#include "wii_anal_lcd.h" // Drawing functions -#include "wii_anal_keys.h" // key mappings +#include "wii_anal_lcd.h" // Drawing functions +#include "wii_anal_keys.h" // key mappings // ** If you want to see what this source code looks like with all the MACROs expanded // ** grep -v '#include ' wii_i2c_classic.c | gcc -E -o /dev/stdout -xc - -#include "wii_ec_macros.h" +# include "wii_ec_macros.h" //----------------------------------------------------------------------------- ---------------------------------------- // Classic Controller ... Classic Controller Pro is electronically the same @@ -36,115 +36,102 @@ // ...And yes, the left-joystick has an extra 'bit' of precision! // ...Also: trgZ{L|R} WILL continue to increase after btnZ{L|R} has gone active // -void classic_decode(wiiEC_t* const pec) { - ecDecClassic_t* p = &pec->dec[(pec->decN = !pec->decN)].classic; - uint8_t* joy = pec->joy; +void classic_decode (wiiEC_t* const pec) +{ + ecDecClassic_t* p = &pec->dec[(pec->decN = !pec->decN)].classic; + uint8_t* joy = pec->joy; - p->trgZL = ((joy[2] >> 2) & 0x18) | ((joy[3] >> 5) & 0x07); // {5} - p->btnZL = !(joy[4] & 0x20); // !{1} + p->trgZL = ((joy[2] >>2) &0x18) | ((joy[3] >>5) &0x07); // {5} + p->btnZL = !(joy[4] & 0x20); // !{1} - p->trgZR = joy[3] & 0x1F; // {5} - p->btnZR = !(joy[4] & 0x02); // !{1} + p->trgZR = joy[3] & 0x1F; // {5} + p->btnZR = !(joy[4] & 0x02); // !{1} - p->btnL = !(joy[5] & 0x80); // !{1} - p->btnR = !(joy[5] & 0x04); // !{1} + p->btnL = !(joy[5] & 0x80); // !{1} + p->btnR = !(joy[5] & 0x04); // !{1} - p->padU = !(joy[5] & 0x01); // !{1} - p->padD = !(joy[4] & 0x40); // !{1} - p->padL = !(joy[5] & 0x02); // !{1} - p->padR = !(joy[4] & 0x80); // !{1} + p->padU = !(joy[5] & 0x01); // !{1} + p->padD = !(joy[4] & 0x40); // !{1} + p->padL = !(joy[5] & 0x02); // !{1} + p->padR = !(joy[4] & 0x80); // !{1} - p->btnM = !(joy[4] & 0x10); // !{1} - p->btnH = !(joy[4] & 0x08); // !{1} - p->btnP = !(joy[4] & 0x04); // !{1} + p->btnM = !(joy[4] & 0x10); // !{1} + p->btnH = !(joy[4] & 0x08); // !{1} + p->btnP = !(joy[4] & 0x04); // !{1} - p->btnX = !(joy[5] & 0x08); // !{1} - p->btnY = !(joy[5] & 0x20); // !{1} + p->btnX = !(joy[5] & 0x08); // !{1} + p->btnY = !(joy[5] & 0x20); // !{1} - p->btnA = !(joy[5] & 0x10); // !{1} - p->btnB = !(joy[5] & 0x40); // !{1} + p->btnA = !(joy[5] & 0x10); // !{1} + p->btnB = !(joy[5] & 0x40); // !{1} - p->joyLX = joy[0] & 0x3F; // {6} - p->joyLY = joy[1] & 0x3F; // {6} + p->joyLX = joy[0] & 0x3F; // {6} + p->joyLY = joy[1] & 0x3F; // {6} - p->joyRX = ((joy[0] >> 3) & 0x18) | ((joy[1] >> 5) & 0x06) | ((joy[2] >> 7) & 0x01); // {5} - p->joyRY = joy[2] & 0x1F; // {5} + p->joyRX = ((joy[0] >>3) &0x18) | ((joy[1] >>5) &0x06) | ((joy[2] >>7) &0x01); // {5} + p->joyRY = joy[2] & 0x1F; // {5} - DEBUG( - ">%d> ZL{%02X}%c, L:%c, R:%c, ZR{%02X}%c", - pec->decN, - p->trgZL, - (p->btnZL ? '#' : '.'), - (p->btnL ? '#' : '.'), - (p->btnR ? '#' : '.'), - p->trgZR, - (p->btnZR ? '#' : '.')); - DEBUG( - ">%d> D:{%c,%c,%c,%c}, H:{%c,%c,%c}, B:{%c,%c,%c,%c}", - pec->decN, - (p->padU ? 'U' : '.'), - (p->padD ? 'D' : '.'), - (p->padL ? 'L' : '.'), - (p->padR ? 'R' : '.'), - (p->btnM ? '-' : '.'), - (p->btnH ? 'H' : '.'), - (p->btnP ? '+' : '.'), - (p->btnX ? 'X' : '.'), - (p->btnY ? 'Y' : '.'), - (p->btnA ? 'A' : '.'), - (p->btnB ? 'B' : '.')); - DEBUG( - ">%d> JoyL{x:%02X, y:%02X}, JoyR{x:%02X, y:%02X}", - pec->decN, - p->joyLX, - p->joyLY, - p->joyRX, - p->joyRY); + DEBUG( ">%d> ZL{%02X}%c, L:%c, R:%c, ZR{%02X}%c", pec->decN, + p->trgZL, (p->btnZL ? '#' : '.'), + (p->btnL ? '#' : '.'), + (p->btnR ? '#' : '.'), + p->trgZR, (p->btnZR ? '#' : '.') + ); + DEBUG( ">%d> D:{%c,%c,%c,%c}, H:{%c,%c,%c}, B:{%c,%c,%c,%c}", pec->decN, + (p->padU ? 'U' : '.'), (p->padD ? 'D' : '.'), (p->padL ? 'L' : '.'), (p->padR ? 'R' : '.'), + (p->btnM ? '-' : '.'), (p->btnH ? 'H' : '.'), (p->btnP ? '+' : '.'), + (p->btnX ? 'X' : '.'), (p->btnY ? 'Y' : '.'), (p->btnA ? 'A' : '.'), (p->btnB ? 'B' : '.') + ); + DEBUG( ">%d> JoyL{x:%02X, y:%02X}, JoyR{x:%02X, y:%02X}", pec->decN, + p->joyLX, p->joyLY, p->joyRX, p->joyRY + ); } //+============================================================================ ======================================== // Give each button a unique character identifier // -void classic_msg(wiiEC_t* const pec, FuriMessageQueue* const queue) { - ecDecClassic_t* new = &pec->dec[pec->decN].classic; - ecDecClassic_t* old = &pec->dec[!pec->decN].classic; +void classic_msg (wiiEC_t* const pec, FuriMessageQueue* const queue) +{ + ecDecClassic_t* new = &pec->dec[pec->decN].classic; + ecDecClassic_t* old = &pec->dec[!pec->decN].classic; - eventMsg_t msg = { - .id = EVID_WIIEC, - .wiiEc = { - .type = WIIEC_NONE, - .in = ' ', - .val = 0, - }}; + eventMsg_t msg = { + .id = EVID_WIIEC, + .wiiEc = { + .type = WIIEC_NONE, + .in = ' ', + .val = 0, + } + }; - ANALOG(trgZL, 'l'); // FIVE bit value - ANABTN(btnZL, trgZL, 'l'); + ANALOG(trgZL, 'l'); // FIVE bit value + ANABTN(btnZL, trgZL, 'l'); - BUTTON(btnL, 'L'); - BUTTON(btnR, 'R'); + BUTTON(btnL, 'L'); + BUTTON(btnR, 'R'); - ANALOG(trgZR, 'r'); // FIVE bit value - ANABTN(btnZR, trgZR, 'r'); + ANALOG(trgZR, 'r'); // FIVE bit value + ANABTN(btnZR, trgZR, 'r'); - BUTTON(padU, 'W'); - BUTTON(padL, 'A'); - BUTTON(padD, 'S'); - BUTTON(padR, 'D'); + BUTTON(padU, 'W'); + BUTTON(padL, 'A'); + BUTTON(padD, 'S'); + BUTTON(padR, 'D'); - BUTTON(btnM, '-'); - BUTTON(btnH, 'h'); - BUTTON(btnP, '+'); + BUTTON(btnM, '-'); + BUTTON(btnH, 'h'); + BUTTON(btnP, '+'); - BUTTON(btnX, 'x'); - BUTTON(btnY, 'y'); - BUTTON(btnA, 'a'); - BUTTON(btnB, 'b'); + BUTTON(btnX, 'x'); + BUTTON(btnY, 'y'); + BUTTON(btnA, 'a'); + BUTTON(btnB, 'b'); - ANALOG(joyLX, 'x'); // SIX bit values - ANALOG(joyLY, 'y'); + ANALOG(joyLX, 'x'); // SIX bit values + ANALOG(joyLY, 'y'); - ANALOG(joyRX, 'X'); // FIVE bit values - ANALOG(joyRY, 'Y'); + ANALOG(joyRX, 'X'); // FIVE bit values + ANALOG(joyRY, 'Y'); } //+============================================================================ ======================================== @@ -157,283 +144,255 @@ void classic_msg(wiiEC_t* const pec, FuriMessageQueue* const queue) { // 9..11 right analog stick Y axis {maximum, minimum, center} ... JoyR is 5bits, so >>3 to compare to readings // 12..15 somehow describe the shoulder {5bit} button values!? // -void classic_calib(wiiEC_t* const pec, ecCalib_t c) { - ecDecClassic_t* src = &pec->dec[pec->decN].classic; // from input - ecCalClassic_t* dst = pec->calS.classic; // to calibration data +void classic_calib (wiiEC_t* const pec, ecCalib_t c) +{ + ecDecClassic_t* src = &pec->dec[pec->decN].classic; // from input + ecCalClassic_t* dst = pec->calS.classic; // to calibration data - if(c & CAL_RESET) { // initialise ready for software calibration - // LO is set to the MAXIMUM value (so it can be reduced) - // HI is set to ZERO (so it can be increased) - RESET_LO_HI(trgZL, 5); // 5bit value - RESET_LO_HI(trgZR, 5); // 5bit value + if (c & CAL_RESET) { // initialise ready for software calibration + // LO is set to the MAXIMUM value (so it can be reduced) + // HI is set to ZERO (so it can be increased) + RESET_LO_HI(trgZL, 5); // 5bit value + RESET_LO_HI(trgZR, 5); // 5bit value - RESET_LO_MID_HI(joyLX, 6); // 6bit value - RESET_LO_MID_HI(joyLY, 6); // 6bit value + RESET_LO_MID_HI(joyLX, 6); // 6bit value + RESET_LO_MID_HI(joyLY, 6); // 6bit value - RESET_LO_MID_HI(joyRX, 5); // 5bit value - RESET_LO_MID_HI(joyRY, 5); // 5bit value - } - if(c & CAL_FACTORY) { // (re)set to factory defaults - //! strategy for factory calibration for classic controller [pro] triggers is (currently) unknown - //! FACTORY_LO( trgZL, pec->calF[12..15]); - //! FACTORY_MID(trgZL, pec->calF[12..15]); - //! FACTORY_HI( trgZL, pec->calF[12..15]); + RESET_LO_MID_HI(joyRX, 5); // 5bit value + RESET_LO_MID_HI(joyRY, 5); // 5bit value + } + if (c & CAL_FACTORY) { // (re)set to factory defaults +//! strategy for factory calibration for classic controller [pro] triggers is (currently) unknown +//! FACTORY_LO( trgZL, pec->calF[12..15]); +//! FACTORY_MID(trgZL, pec->calF[12..15]); +//! FACTORY_HI( trgZL, pec->calF[12..15]); - //! FACTORY_LO( trgZR, pec->calF[12..15]); - //! FACTORY_MID(trgZR, pec->calF[12..15]); - //! FACTORY_HI( trgZR, pec->calF[12..15]); +//! FACTORY_LO( trgZR, pec->calF[12..15]); +//! FACTORY_MID(trgZR, pec->calF[12..15]); +//! FACTORY_HI( trgZR, pec->calF[12..15]); #if 1 - FACTORY_LO(trgZL, 0x03); - FACTORY_LO(trgZR, 0x03); + FACTORY_LO(trgZL, 0x03); + FACTORY_LO(trgZR, 0x03); - FACTORY_MID(trgZL, 0x1B); //! these will be set every time the digital switch changes to ON - FACTORY_MID(trgZR, 0x1B); + FACTORY_MID(trgZL, 0x1B); //! these will be set every time the digital switch changes to ON + FACTORY_MID(trgZR, 0x1B); #endif - FACTORY_LO(joyLX, pec->calF[1] >> 2); - FACTORY_MID(joyLX, pec->calF[2] >> 2); - FACTORY_HI(joyLX, pec->calF[0] >> 2); + FACTORY_LO( joyLX, pec->calF[ 1] >>2); + FACTORY_MID(joyLX, pec->calF[ 2] >>2); + FACTORY_HI( joyLX, pec->calF[ 0] >>2); - FACTORY_LO(joyLY, pec->calF[4] >> 2); - FACTORY_MID(joyLY, pec->calF[5] >> 2); - FACTORY_HI(joyLY, pec->calF[3] >> 2); + FACTORY_LO( joyLY, pec->calF[ 4] >>2); + FACTORY_MID(joyLY, pec->calF[ 5] >>2); + FACTORY_HI( joyLY, pec->calF[ 3] >>2); - FACTORY_LO(joyRX, pec->calF[7] >> 3); - FACTORY_MID(joyRX, pec->calF[8] >> 3); - FACTORY_HI(joyRX, pec->calF[6] >> 3); + FACTORY_LO( joyRX, pec->calF[ 7] >>3); + FACTORY_MID(joyRX, pec->calF[ 8] >>3); + FACTORY_HI( joyRX, pec->calF[ 6] >>3); - FACTORY_LO(joyRY, pec->calF[10] >> 3); - FACTORY_MID(joyRY, pec->calF[11] >> 3); - FACTORY_HI(joyRY, pec->calF[9] >> 3); - } - if(c & CAL_TRACK) { // track maximum and minimum values seen - TRACK_LO_HI(trgZL); - TRACK_LO_HI(trgZR); + FACTORY_LO( joyRY, pec->calF[10] >>3); + FACTORY_MID(joyRY, pec->calF[11] >>3); + FACTORY_HI( joyRY, pec->calF[ 9] >>3); + } + if (c & CAL_TRACK) { // track maximum and minimum values seen + TRACK_LO_HI(trgZL); + TRACK_LO_HI(trgZR); - TRACK_LO_HI(joyLX); - TRACK_LO_HI(joyLY); + TRACK_LO_HI(joyLX); + TRACK_LO_HI(joyLY); - TRACK_LO_HI(joyRX); - TRACK_LO_HI(joyRY); - } - if(c & CAL_RANGE) { // perform software calibration step - RANGE_LO_HI(trgZL); - RANGE_LO_HI(trgZR); + TRACK_LO_HI(joyRX); + TRACK_LO_HI(joyRY); + } + if (c & CAL_RANGE) { // perform software calibration step + RANGE_LO_HI(trgZL); + RANGE_LO_HI(trgZR); - RANGE_LO_HI(joyLX); - RANGE_LO_HI(joyLY); + RANGE_LO_HI(joyLX); + RANGE_LO_HI(joyLY); - RANGE_LO_HI(joyRX); - RANGE_LO_HI(joyRY); - } - if(c & CAL_CENTRE) { // reset centre point of joystick - CENTRE(joyLX); - CENTRE(joyLY); + RANGE_LO_HI(joyRX); + RANGE_LO_HI(joyRY); + } + if (c & CAL_CENTRE) { // reset centre point of joystick + CENTRE(joyLX); + CENTRE(joyLY); - CENTRE(joyRX); - CENTRE(joyRY); - } + CENTRE(joyRX); + CENTRE(joyRY); + } } //+============================================================================ ======================================== // bits that are common to both screens // -static void classic_show_(Canvas* const canvas, state_t* const state) { - ecDecClassic_t* d = &state->ec.dec[state->ec.decN].classic; - ecCalClassic_t* js = state->ec.calS.classic; +static +void classic_show_ (Canvas* const canvas, state_t* const state) +{ + ecDecClassic_t* d = &state->ec.dec[state->ec.decN].classic; + ecCalClassic_t* js = state->ec.calS.classic; - static const int dead = 1; // trigger deadzone - const image_t* img = NULL; // trigger image + static const int dead = 1; // trigger deadzone + const image_t* img = NULL; // trigger image - show(canvas, 6, 0, &img_cc_Main, SHOW_SET_BLK); - show(canvas, 62, 53, &img_cc_Cable, SHOW_SET_BLK); + show(canvas, 6, 0, &img_cc_Main , SHOW_SET_BLK); + show(canvas, 62,53, &img_cc_Cable, SHOW_SET_BLK); - // classic triggers - if(d->trgZL >= js[2].trgZL) - img = &img_cc_trg_L4; - else if(d->trgZL <= js[1].trgZL + dead) - img = NULL; - else { - // copied from the joystick calibration code - int lo = js[1].trgZL + dead + 1; - int hi = js[2].trgZL - 1; - int range = hi - lo + 1; - int div = range / 3; // each division (base amount, eg. 17/3==5) - int rem = range - (div * 3); // remainder (ie. range%3) - int hi1 = lo + div - 1; // (in brevity) - int lo3 = lo + div + div + (rem == 2); // ... + // classic triggers + if (d->trgZL >= js[2].trgZL ) img = &img_cc_trg_L4; + else if (d->trgZL <= js[1].trgZL +dead) img = NULL; + else { + // copied from the joystick calibration code + int lo = js[1].trgZL +dead +1; + int hi = js[2].trgZL -1; + int range = hi -lo +1; + int div = range /3; // each division (base amount, eg. 17/3==5) + int rem = range -(div *3); // remainder (ie. range%3) + int hi1 = lo +div -1; // (in brevity) + int lo3 = lo +div +div +(rem==2); // ... - if(d->trgZL <= hi1) - img = &img_cc_trg_L1; // zone #1 - else if(d->trgZL >= lo3) - img = &img_cc_trg_L3; // zone #3 - else - img = &img_cc_trg_L2; // zone #2 - } - if(img) show(canvas, 22, 1, img, SHOW_SET_BLK); + if (d->trgZL <= hi1) img = &img_cc_trg_L1 ; // zone #1 + else if (d->trgZL >= lo3) img = &img_cc_trg_L3 ; // zone #3 + else img = &img_cc_trg_L2 ; // zone #2 + } + if (img) show(canvas, 22,1, img, SHOW_SET_BLK) ; - if(d->trgZR >= js[2].trgZR) - img = &img_cc_trg_R4; - else if(d->trgZR <= js[1].trgZR + dead) - img = NULL; - else { - // copied from the joystick calibration code - int lo = js[1].trgZR + dead + 1; - int hi = js[2].trgZR - 1; - int range = hi - lo + 1; - int div = range / 3; // each division (base amount, eg. 17/3==5) - int rem = range - (div * 3); // remainder (ie. range%3) - int hi1 = lo + div - 1; // (in brevity) - int lo3 = lo + div + div + (rem == 2); // ... + if (d->trgZR >= js[2].trgZR ) img = &img_cc_trg_R4; + else if (d->trgZR <= js[1].trgZR +dead) img = NULL; + else { + // copied from the joystick calibration code + int lo = js[1].trgZR +dead +1; + int hi = js[2].trgZR -1; + int range = hi -lo +1; + int div = range /3; // each division (base amount, eg. 17/3==5) + int rem = range -(div *3); // remainder (ie. range%3) + int hi1 = lo +div -1; // (in brevity) + int lo3 = lo +div +div +(rem==2); // ... - if(d->trgZR <= hi1) - img = &img_cc_trg_R1; // zone #1 - else if(d->trgZR >= lo3) - img = &img_cc_trg_R3; // zone #3 - else - img = &img_cc_trg_R2; // zone #2 - } - if(img) show(canvas, 89, 1, img, SHOW_SET_BLK); + if (d->trgZR <= hi1) img = &img_cc_trg_R1 ; // zone #1 + else if (d->trgZR >= lo3) img = &img_cc_trg_R3 ; // zone #3 + else img = &img_cc_trg_R2 ; // zone #2 + } + if (img) show(canvas, 89,1, img, SHOW_SET_BLK) ; - if(d->padU) show(canvas, 27, 16, &img_cc_pad_UD1, SHOW_ALL); - if(d->padL) show(canvas, 20, 23, &img_cc_pad_LR1, SHOW_ALL); - if(d->padD) show(canvas, 27, 28, &img_cc_pad_UD1, SHOW_ALL); - if(d->padR) show(canvas, 32, 23, &img_cc_pad_LR1, SHOW_ALL); + if (d->padU ) show(canvas, 27,16, &img_cc_pad_UD1, SHOW_ALL) ; + if (d->padL ) show(canvas, 20,23, &img_cc_pad_LR1, SHOW_ALL) ; + if (d->padD ) show(canvas, 27,28, &img_cc_pad_UD1, SHOW_ALL) ; + if (d->padR ) show(canvas, 32,23, &img_cc_pad_LR1, SHOW_ALL) ; - if(d->btnX) show(canvas, 96, 16, &img_cc_btn_X1, SHOW_ALL); - if(d->btnY) show(canvas, 85, 23, &img_cc_btn_Y1, SHOW_ALL); - if(d->btnA) show(canvas, 107, 23, &img_cc_btn_A1, SHOW_ALL); - if(d->btnB) show(canvas, 96, 30, &img_cc_btn_B1, SHOW_ALL); + if (d->btnX ) show(canvas, 96,16, &img_cc_btn_X1, SHOW_ALL) ; + if (d->btnY ) show(canvas, 85,23, &img_cc_btn_Y1, SHOW_ALL) ; + if (d->btnA ) show(canvas, 107,23, &img_cc_btn_A1, SHOW_ALL) ; + if (d->btnB ) show(canvas, 96,30, &img_cc_btn_B1, SHOW_ALL) ; - canvas_set_color(canvas, ColorBlack); - if(d->btnL) canvas_draw_box(canvas, 46, 2, 5, 4); - if(d->btnR) canvas_draw_box(canvas, 77, 2, 5, 4); + canvas_set_color(canvas, ColorBlack); + if (d->btnL ) canvas_draw_box(canvas, 46,2, 5,4) ; + if (d->btnR ) canvas_draw_box(canvas, 77,2, 5,4) ; - if(d->btnM) canvas_draw_box(canvas, 54, 24, 4, 4); - if(d->btnH) canvas_draw_box(canvas, 62, 24, 4, 4); - if(d->btnP) canvas_draw_box(canvas, 70, 24, 4, 4); + if (d->btnM ) canvas_draw_box(canvas, 54,24, 4,4) ; + if (d->btnH ) canvas_draw_box(canvas, 62,24, 4,4) ; + if (d->btnP ) canvas_draw_box(canvas, 70,24, 4,4) ; - // Show joysticks - showJoy( - canvas, - 48, - 42, - js[1].joyLX, - js[2].joyLX, - js[3].joyLX, - js[1].joyLY, - js[2].joyLY, - js[3].joyLY, - d->joyLX, - d->joyLY, - 6); - showJoy( - canvas, - 78, - 42, - js[1].joyRX, - js[2].joyRX, - js[3].joyRX, - js[1].joyRY, - js[2].joyRY, - js[3].joyRY, - d->joyRX, - d->joyRY, - 5); + // Show joysticks + showJoy(canvas, 48,42, js[1].joyLX,js[2].joyLX, js[3].joyLX, + js[1].joyLY,js[2].joyLY, js[3].joyLY, d->joyLX,d->joyLY, 6); + showJoy(canvas, 78,42, js[1].joyRX,js[2].joyRX, js[3].joyRX, + js[1].joyRY,js[2].joyRY, js[3].joyRY, d->joyRX,d->joyRY, 5); - show(canvas, 0, 55, &img_key_L, SHOW_SET_BLK); + show(canvas, 0,55, &img_key_L, SHOW_SET_BLK); } //+============================================================================ ======================================== -static void classic_showN(Canvas* const canvas, state_t* const state) { - ecCalClassic_t* c = (state->hold) ? - &state->ec.calS.classic[(state->hold < 0) ? 0 : 4] : - (ecCalClassic_t*)(&state->ec.dec[state->ec.decN].classic); //! danger +static +void classic_showN (Canvas* const canvas, state_t* const state) +{ + ecCalClassic_t* c = (state->hold) ? &state->ec.calS.classic[(state->hold < 0) ? 0 : 4] + : (ecCalClassic_t*)(&state->ec.dec[state->ec.decN].classic) ; //! danger - classic_show_(canvas, state); + classic_show_(canvas, state); - showHex(canvas, 0, 0, c->trgZL, 2, 1); // 5bits - showHex(canvas, 113, 0, c->trgZR, 2, 1); // 5bits + showHex(canvas, 0, 0, c->trgZL, 2,1); // 5bits + showHex(canvas, 113, 0, c->trgZR, 2,1); // 5bits - showHex(canvas, 24, 41, c->joyLX, 2, 1); // 6bits - showHex(canvas, 41, 54, c->joyLY, 2, 1); // 6bits + showHex(canvas, 24,41, c->joyLX, 2,1); // 6bits + showHex(canvas, 41,54, c->joyLY, 2,1); // 6bits - showHex(canvas, 88, 41, c->joyRX, 2, 1); // 5bits - showHex(canvas, 71, 54, c->joyRY, 2, 1); // 5bits + showHex(canvas, 88,41, c->joyRX, 2,1); // 5bits + showHex(canvas, 71,54, c->joyRY, 2,1); // 5bits - showPeakHold(state, canvas, state->hold); // peak keys + showPeakHold(state, canvas, state->hold); // peak keys } //+============================================================================ ======================================== -void classic_show(Canvas* const canvas, state_t* const state) { - // Classic controllers have TWO scenes - if(state->scene == SCENE_CLASSIC_N) return classic_showN(canvas, state); +void classic_show (Canvas* const canvas, state_t* const state) +{ + // Classic controllers have TWO scenes + if (state->scene == SCENE_CLASSIC_N) return classic_showN(canvas, state) ; - // Default scene - classic_show_(canvas, state); - show(canvas, 9, 55, &img_key_R, SHOW_SET_BLK); + // Default scene + classic_show_(canvas, state); + show(canvas, 9,55, &img_key_R, SHOW_SET_BLK); - show( - canvas, - 119, - 55, - ((state->calib & CAL_RANGE) && (++state->flash & 8)) ? &img_key_OKi : &img_key_OK, - SHOW_SET_BLK); + show( canvas, 119,55, + ((state->calib & CAL_RANGE) && (++state->flash &8)) ? &img_key_OKi : &img_key_OK, + SHOW_SET_BLK ); } //+============================================================================ ======================================== -static bool classic_keyN(const eventMsg_t* const msg, state_t* const state) { - int used = false; // assume key is NOT-handled +static +bool classic_keyN (const eventMsg_t* const msg, state_t* const state) +{ + int used = false; // assume key is NOT-handled - if((msg->input.type == InputTypeShort) && (msg->input.key == InputKeyLeft)) { - sceneSet(state, SCENE_CLASSIC); - used = true; - } + if ((msg->input.type == InputTypeShort) && (msg->input.key == InputKeyLeft)) { + sceneSet(state, SCENE_CLASSIC); + used = true; + } - // Calibration keys - if(!used) used = key_calib(msg, state); + // Calibration keys + if (!used) used = key_calib(msg, state) ; - return used; + return used; } //+============================================================================ ======================================== -bool classic_key(const eventMsg_t* const msg, state_t* const state) { - // Classic controllers have TWO scenes - if(state->scene == SCENE_CLASSIC_N) return classic_keyN(msg, state); +bool classic_key (const eventMsg_t* const msg, state_t* const state) +{ + // Classic controllers have TWO scenes + if (state->scene == SCENE_CLASSIC_N) return classic_keyN(msg, state) ; - // Default scene - int used = false; // assume key is NOT-handled + // Default scene + int used = false; // assume key is NOT-handled - switch(msg->input.type) { - case InputTypeShort: //# input.key) { - case InputKeyUp: //# input.type) { + case InputTypeShort: //# input.key) { + case InputKeyUp: //# -#include +#include +#include //----------------------------------------------------------------------------- ---------------------------------------- // Classic Controller ... Classic Controller Pro is electronically the same @@ -25,55 +25,60 @@ //----------------------------------------------------------------------------- ---------------------------------------- // Controllers which have calibration must have their calibratable controls here //! Is there a better way to get the start of the decode struct to match the calibration struct ? -#define CLASSIC_ANALOGUE \ - uint8_t trgZL, trgZR; /* ANA{l, l} lowercase=trigger 5bit values {5} */ \ - uint8_t joyLX, joyLY; /* ANA{x, y} left=lowercase 6bit values {6}<-- */ \ - uint8_t joyRX, joyRY; /* ANA{X, Y} 5bit values {5} */ +#define CLASSIC_ANALOGUE \ + uint8_t trgZL, trgZR; /* ANA{l, l} lowercase=trigger 5bit values {5} */ \ + uint8_t joyLX, joyLY; /* ANA{x, y} left=lowercase 6bit values {6}<-- */ \ + uint8_t joyRX, joyRY; /* ANA{X, Y} 5bit values {5} */ //----------------------------------------------------------------------------- // Calibratable controls // -typedef struct ecCalClassic { - CLASSIC_ANALOGUE -} ecCalClassic_t; +typedef + struct ecCalClassic + { + CLASSIC_ANALOGUE + } +ecCalClassic_t; //----------------------------------------------------------------------------- // All controls // -typedef struct ecDecClassic { - CLASSIC_ANALOGUE // MUST be first +typedef + struct ecDecClassic + { + CLASSIC_ANALOGUE // MUST be first - // Digital controls - bool btnZL, - btnZR; // BTN{l, l} + // Digital controls + bool btnZL, btnZR; // BTN{l, l} - bool btnL, btnR; // BTN{L, R} upperrcase=shoulder + bool btnL, btnR; // BTN{L, R} upperrcase=shoulder - bool padU, padL, padD, padR; // BTN{W, A, S, D} + bool padU, padL, padD, padR; // BTN{W, A, S, D} - bool btnM, btnH, btnP; // BTN{-, h, +} + bool btnM, btnH, btnP; // BTN{-, h, +} - bool btnX, btnY; // BTN{x, y} - bool btnA, btnB; // BTN{a, b} + bool btnX, btnY; // BTN{x, y} + bool btnA, btnB; // BTN{a, b} -} ecDecClassic_t; + } +ecDecClassic_t; #undef CLASSIC_ANALOGUE //============================================================================= ======================================== // Function prototypes // -#include // Canvas -typedef struct wiiEC wiiEC_t; -typedef enum ecCalib ecCalib_t; -typedef struct state state_t; -typedef struct eventMsg eventMsg_t; +#include // Canvas +typedef struct wiiEC wiiEC_t ; +typedef enum ecCalib ecCalib_t ; +typedef struct state state_t ; +typedef struct eventMsg eventMsg_t ; -void classic_decode(wiiEC_t* const pec); -void classic_msg(wiiEC_t* const pec, FuriMessageQueue* const queue); -void classic_calib(wiiEC_t* const pec, ecCalib_t c); +void classic_decode (wiiEC_t* const pec) ; +void classic_msg (wiiEC_t* const pec, FuriMessageQueue* const queue) ; +void classic_calib (wiiEC_t* const pec, ecCalib_t c) ; -void classic_show(Canvas* const canvas, state_t* const state); -bool classic_key(const eventMsg_t* const msg, state_t* const state); +void classic_show (Canvas* const canvas, state_t* const state) ; +bool classic_key (const eventMsg_t* const msg, state_t* const state) ; #endif //WII_EC_CLASSIC_H_ diff --git a/applications/plugins/wii_ec_anal/wii_ec_macros.h b/applications/plugins/wii_ec_anal/wii_ec_macros.h index 00ab9825b..33daf944d 100644 --- a/applications/plugins/wii_ec_anal/wii_ec_macros.h +++ b/applications/plugins/wii_ec_anal/wii_ec_macros.h @@ -9,53 +9,49 @@ // //if (furi_message_queue_get_count(queue) > 18) WARN("queue high %d", furi_message_queue_get_count(queue)); -#define MSGQ(lbl) \ - do { \ - msg.wiiEc.in = lbl; \ - furi_message_queue_put(queue, &msg, 0); \ - } while(0) +#define MSGQ(lbl) do { \ + msg.wiiEc.in = lbl; \ + furi_message_queue_put(queue, &msg, 0); \ +}while(0) + // A 'standard' "button" is an independent SPST switch // Eg. Nunchuck 'Z' button // The "value" will always be 0 -#define BUTTON(btn, lbl) \ - do { \ - if(new->btn != old->btn) { \ - msg.wiiEc.type = (new->btn) ? WIIEC_PRESS : WIIEC_RELEASE; \ - msg.wiiEc.val = 0; \ - MSGQ(lbl); \ - } \ - } while(0) +#define BUTTON(btn,lbl) do { \ + if (new->btn != old->btn) { \ + msg.wiiEc.type = (new->btn) ? WIIEC_PRESS : WIIEC_RELEASE; \ + msg.wiiEc.val = 0; \ + MSGQ(lbl); \ + } \ +}while(0) // An "analogue button" is an SPST coupled with an ananlogue 'switch' // Eg. The "bottom out" switches on the triggers of the classic controller // The "value" will be the value of the associated analogue controller -#define ANABTN(btn, ana, lbl) \ - do { \ - if(new->btn != old->btn) { \ - msg.wiiEc.type = (new->btn) ? WIIEC_PRESS : WIIEC_RELEASE; \ - msg.wiiEc.val = new->ana; \ - MSGQ(lbl); \ - } \ - } while(0) +#define ANABTN(btn,ana,lbl) do { \ + if (new->btn != old->btn) { \ + msg.wiiEc.type = (new->btn) ? WIIEC_PRESS : WIIEC_RELEASE; \ + msg.wiiEc.val = new->ana; \ + MSGQ(lbl); \ + } \ +}while(0) -#define ANALOG(ana, lbl) \ - do { \ - if(new->ana != old->ana) { \ - msg.wiiEc.type = WIIEC_ANALOG; \ - msg.wiiEc.val = new->ana; \ - MSGQ(lbl); \ - } \ - } while(0) +#define ANALOG(ana,lbl) do { \ + if (new->ana != old->ana) { \ + msg.wiiEc.type = WIIEC_ANALOG; \ + msg.wiiEc.val = new->ana; \ + MSGQ(lbl); \ + } \ +}while(0) -#define ACCEL(acc, lbl) \ - do { \ - if(new->acc != old->acc) { \ - msg.wiiEc.type = WIIEC_ACCEL; \ - msg.wiiEc.val = new->acc; \ - MSGQ(lbl); \ - } \ - } while(0) +#define ACCEL(acc,lbl) do { \ + if (new->acc != old->acc) { \ + msg.wiiEc.type = WIIEC_ACCEL; \ + msg.wiiEc.val = new->acc; \ + MSGQ(lbl); \ + } \ +}while(0) //----------------------------------------------------------------------------- ---------------------------------------- // CALIBRATION MACROS @@ -65,74 +61,24 @@ // // ... v=variable, n=number // -#define FACTORY_LO(v, n) \ - do { \ - (dst[1].v) = n; \ - } while(0) -#define FACTORY_MID(v, n) \ - do { \ - (dst[2].v) = n; \ - } while(0) -#define FACTORY_HI(v, n) \ - do { \ - (dst[3].v) = n; \ - } while(0) +#define FACTORY_LO(v,n) do{ (dst[1]. v) = n; }while(0) +#define FACTORY_MID(v,n) do{ (dst[2]. v) = n; }while(0) +#define FACTORY_HI(v,n) do{ (dst[3]. v) = n; }while(0) -#define TRACK_LO(v) \ - do { \ - if((src->v) < (dst[0].v)) (dst[0].v) = (src->v); \ - } while(0) -#define TRACK_HI(v) \ - do { \ - if((src->v) > (dst[4].v)) (dst[4].v) = (src->v); \ - } while(0) -#define TRACK_LO_HI(v) \ - do { \ - TRACK_LO(v); \ - TRACK_HI(v); \ - } while(0) +#define TRACK_LO(v) do{ if ((src-> v) < (dst[0]. v)) (dst[0]. v) = (src-> v); }while(0) +#define TRACK_HI(v) do{ if ((src-> v) > (dst[4]. v)) (dst[4]. v) = (src-> v); }while(0) +#define TRACK_LO_HI(v) do{ TRACK_LO(v); TRACK_HI(v); }while(0) -#define RESET_LO(v, b) \ - do { \ - (dst[0].v) = (dst[1].v) = ((1 << (b)) - 1); \ - } while(0) -#define RESET_HI(v) \ - do { \ - (dst[4].v) = (dst[3].v) = 0; \ - } while(0) -#define RESET_MID(v) \ - do { \ - (dst[2].v) = (src->v); \ - } while(0) -#define RESET_LO_HI(v, b) \ - do { \ - RESET_LO(v, b); \ - RESET_HI(v); \ - } while(0) -#define RESET_LO_MID_HI(v, b) \ - do { \ - RESET_LO(v, b); \ - RESET_MID(v); \ - RESET_HI(v); \ - } while(0) +#define RESET_LO(v,b) do{ (dst[0]. v) = (dst[1]. v) = ((1<<(b))-1); }while(0) +#define RESET_HI(v) do{ (dst[4]. v) = (dst[3]. v) = 0; }while(0) +#define RESET_MID(v) do{ (dst[2]. v) = (src-> v); }while(0) +#define RESET_LO_HI(v,b) do{ RESET_LO(v,b); RESET_HI(v); }while(0) +#define RESET_LO_MID_HI(v,b) do{ RESET_LO(v,b); RESET_MID(v); RESET_HI(v); }while(0) -#define RANGE_LO(v) \ - do { \ - if((src->v) < (dst[1].v)) (dst[1].v) = (src->v); \ - } while(0) -#define RANGE_HI(v) \ - do { \ - if((src->v) > (dst[3].v)) (dst[3].v) = (src->v); \ - } while(0) -#define RANGE_LO_HI(v) \ - do { \ - RANGE_LO(v); \ - RANGE_HI(v); \ - } while(0) +#define RANGE_LO(v) do{ if ((src-> v) < (dst[1]. v)) (dst[1]. v) = (src-> v); }while(0) +#define RANGE_HI(v) do{ if ((src-> v) > (dst[3]. v)) (dst[3]. v) = (src-> v); }while(0) +#define RANGE_LO_HI(v) do{ RANGE_LO(v); RANGE_HI(v); }while(0) -#define CENTRE(v) \ - do { \ - (dst[2].v) = (src->v); \ - } while(0) +#define CENTRE(v) do{ (dst[2]. v) = (src-> v); } while(0) #endif //WII_EC_MACROS_H_ diff --git a/applications/plugins/wii_ec_anal/wii_ec_nunchuck.c b/applications/plugins/wii_ec_anal/wii_ec_nunchuck.c index d88d535b6..81c32a243 100644 --- a/applications/plugins/wii_ec_anal/wii_ec_nunchuck.c +++ b/applications/plugins/wii_ec_anal/wii_ec_nunchuck.c @@ -1,144 +1,142 @@ -#include -#include // Core API +#include +#include // Core API -#include "wii_anal.h" -#include "wii_i2c.h" -#include "bc_logging.h" +#include "wii_anal.h" +#include "wii_i2c.h" +#include "bc_logging.h" -#include "gfx/images.h" // Images -#include "wii_anal_lcd.h" // Drawing functions -#include "wii_anal_keys.h" // key mappings +#include "gfx/images.h" // Images +#include "wii_anal_lcd.h" // Drawing functions +#include "wii_anal_keys.h" // key mappings // ** If you want to see what this source code looks like with all the MACROs expanded // ** grep -v '#include ' wii_ec_nunchuck.c | gcc -E -o /dev/stdout -xc - -#include "wii_ec_macros.h" +# include "wii_ec_macros.h" //+============================================================================ ======================================== // Standard Nunchuck : 2 buttons, 1 analogue joystick, 1 3-axis accelerometer -// -void nunchuck_decode(wiiEC_t* const pec) { - ecDecNunchuck_t* p = &pec->dec[(pec->decN = !pec->decN)].nunchuck; - uint8_t* joy = pec->joy; +// +void nunchuck_decode (wiiEC_t* const pec) +{ + ecDecNunchuck_t* p = &pec->dec[(pec->decN = !pec->decN)].nunchuck; + uint8_t* joy = pec->joy; - p->btnC = !(joy[5] & 0x02); // !{1} - p->btnZ = !(joy[5] & 0x01); // !{1} + p->btnC = !(joy[5] & 0x02); // !{1} + p->btnZ = !(joy[5] & 0x01); // !{1} - p->joyX = joy[0]; // {8} - p->joyY = joy[1]; // {8} + p->joyX = joy[0]; // {8} + p->joyY = joy[1]; // {8} - p->accX = ((uint16_t)joy[2] << 2) | ((joy[5] >> 2) & 0x03); // {10} - p->accY = ((uint16_t)joy[3] << 2) | ((joy[5] >> 4) & 0x03); // {10} - p->accZ = ((uint16_t)joy[4] << 2) | ((joy[5] >> 6) & 0x03); // {10} + p->accX = ((uint16_t)joy[2] << 2) | ((joy[5] >>2) & 0x03); // {10} + p->accY = ((uint16_t)joy[3] << 2) | ((joy[5] >>4) & 0x03); // {10} + p->accZ = ((uint16_t)joy[4] << 2) | ((joy[5] >>6) & 0x03); // {10} - DEBUG( - ">%d> C:%c, Z:%c, Joy{x:%02X, y:%02X}, Acc{x:%03X, y:%03X, z:%03X}", - pec->decN, - (p->btnC ? '#' : '.'), - (p->btnZ ? '#' : '.'), - p->joyX, - p->joyY, - p->accX, - p->accY, - p->accZ); + DEBUG(">%d> C:%c, Z:%c, Joy{x:%02X, y:%02X}, Acc{x:%03X, y:%03X, z:%03X}", pec->decN, + (p->btnC ? '#' : '.'), (p->btnZ ? '#' : '.'), + p->joyX, p->joyY, p->accX, p->accY, p->accZ + ); } //+============================================================================ ======================================== // Give each button a unique character identifier // -void nunchuck_msg(wiiEC_t* const pec, FuriMessageQueue* const queue) { - ecDecNunchuck_t* new = &pec->dec[pec->decN].nunchuck; - ecDecNunchuck_t* old = &pec->dec[!pec->decN].nunchuck; +void nunchuck_msg (wiiEC_t* const pec, FuriMessageQueue* const queue) +{ + ecDecNunchuck_t* new = &pec->dec[pec->decN].nunchuck; + ecDecNunchuck_t* old = &pec->dec[!pec->decN].nunchuck; - eventMsg_t msg = { - .id = EVID_WIIEC, - .wiiEc = { - .type = WIIEC_NONE, - .in = ' ', - .val = 0, - }}; + eventMsg_t msg = { + .id = EVID_WIIEC, + .wiiEc = { + .type = WIIEC_NONE, + .in = ' ', + .val = 0, + } + }; - BUTTON(btnC, 'c'); - BUTTON(btnZ, 'z'); + BUTTON(btnC, 'c'); + BUTTON(btnZ, 'z'); - ANALOG(joyX, 'x'); - ANALOG(joyY, 'y'); + ANALOG(joyX, 'x'); + ANALOG(joyY, 'y'); - ACCEL(accX, 'x'); - ACCEL(accY, 'y'); - ACCEL(accZ, 'z'); + ACCEL(accX, 'x'); + ACCEL(accY, 'y'); + ACCEL(accZ, 'z'); } //+============================================================================ ======================================== // https://www.hackster.io/infusion/using-a-wii-nunchuk-with-arduino-597254#toc-5--read-actual-calibration-data-from-the-device-14 // -void nunchuck_calib(wiiEC_t* const pec, ecCalib_t c) { - ecDecNunchuck_t* src = &pec->dec[pec->decN].nunchuck; // from input - ecCalNunchuck_t* dst = pec->calS.nunchuck; // to calibration data +void nunchuck_calib (wiiEC_t* const pec, ecCalib_t c) +{ + ecDecNunchuck_t* src = &pec->dec[pec->decN].nunchuck; // from input + ecCalNunchuck_t* dst = pec->calS.nunchuck; // to calibration data - if(c & CAL_RESET) { // initialise ready for software calibration - // LO is set to the MAXIMUM value (so it can be reduced) - // HI is set to ZERO (so it can be increased) - RESET_LO_HI(accX, 10); // 10bit value - RESET_LO_HI(accY, 10); // 10bit value - RESET_LO_HI(accZ, 10); // 10bit value + if (c & CAL_RESET) { // initialise ready for software calibration + // LO is set to the MAXIMUM value (so it can be reduced) + // HI is set to ZERO (so it can be increased) + RESET_LO_HI(accX, 10); // 10bit value + RESET_LO_HI(accY, 10); // 10bit value + RESET_LO_HI(accZ, 10); // 10bit value - RESET_LO_HI(joyX, 8); // 8bit value - RESET_LO_HI(joyY, 8); // 8bit value - } - if(c & CAL_FACTORY) { // (re)set to factory defaults - //! "[4] LSB of Zero value of X,Y,Z axes" ...helpful! - //! ...Well, my test nunchuck has bits set in the bottom 6 bits, so let's guess ;) + RESET_LO_HI(joyX, 8); // 8bit value + RESET_LO_HI(joyY, 8); // 8bit value + } + if (c & CAL_FACTORY) { // (re)set to factory defaults + //! "[4] LSB of Zero value of X,Y,Z axes" ...helpful! + //! ...Well, my test nunchuck has bits set in the bottom 6 bits, so let's guess ;) - // No value available - annecdotal tests suggest 8 is reasonable - FACTORY_LO(accX, 8); - FACTORY_LO(accY, 8); - FACTORY_LO(accZ, 8); + // No value available - annecdotal tests suggest 8 is reasonable + FACTORY_LO( accX, 8); + FACTORY_LO( accY, 8); + FACTORY_LO( accZ, 8); - // @ 0G - FACTORY_MID(accX, ((pec->calF[0] << 2) | ((pec->calF[3] >> 4) & 0x3))); - FACTORY_MID(accY, ((pec->calF[1] << 2) | ((pec->calF[3] >> 2) & 0x3))); - FACTORY_MID(accZ, ((pec->calF[2] << 2) | ((pec->calF[3]) & 0x3))); + // @ 0G + FACTORY_MID( accX, ((pec->calF[0] <<2) | ((pec->calF[3] >>4) &0x3)) ) ; + FACTORY_MID( accY, ((pec->calF[1] <<2) | ((pec->calF[3] >>2) &0x3)) ) ; + FACTORY_MID( accZ, ((pec->calF[2] <<2) | ((pec->calF[3] ) &0x3)) ) ; - // @ 1G - FACTORY_HI(accX, ((pec->calF[4] << 2) | ((pec->calF[7] >> 4) & 0x3))); - FACTORY_HI(accY, ((pec->calF[5] << 2) | ((pec->calF[7] >> 2) & 0x3))); - FACTORY_HI(accZ, ((pec->calF[6] << 2) | ((pec->calF[7]) & 0x3))); + // @ 1G + FACTORY_HI( accX, ((pec->calF[4] <<2) | ((pec->calF[7] >>4) &0x3)) ) ; + FACTORY_HI( accY, ((pec->calF[5] <<2) | ((pec->calF[7] >>2) &0x3)) ) ; + FACTORY_HI( accZ, ((pec->calF[6] <<2) | ((pec->calF[7] ) &0x3)) ) ; - // Joysticks - FACTORY_LO(joyX, pec->calF[9]); - FACTORY_MID(joyX, pec->calF[10]); - FACTORY_HI(joyX, pec->calF[8]); + // Joysticks + FACTORY_LO( joyX, pec->calF[ 9] ) ; + FACTORY_MID(joyX, pec->calF[10] ) ; + FACTORY_HI( joyX, pec->calF[ 8] ) ; - FACTORY_LO(joyY, pec->calF[12]); - FACTORY_MID(joyY, pec->calF[13]); - FACTORY_HI(joyY, pec->calF[11]); - } - if(c & CAL_TRACK) { // track maximum and minimum values seen - TRACK_LO_HI(accX); - TRACK_LO_HI(accY); - TRACK_LO_HI(accZ); + FACTORY_LO( joyY, pec->calF[12] ) ; + FACTORY_MID(joyY, pec->calF[13] ) ; + FACTORY_HI( joyY, pec->calF[11] ) ; + } + if (c & CAL_TRACK) { // track maximum and minimum values seen + TRACK_LO_HI(accX); + TRACK_LO_HI(accY); + TRACK_LO_HI(accZ); - TRACK_LO_HI(joyX); - TRACK_LO_HI(joyY); - } - if(c & CAL_RANGE) { // perform software calibration step - RANGE_LO_HI(accX); - RANGE_LO_HI(accY); - RANGE_LO_HI(accZ); + TRACK_LO_HI(joyX); + TRACK_LO_HI(joyY); + } + if (c & CAL_RANGE) { // perform software calibration step + RANGE_LO_HI(accX); + RANGE_LO_HI(accY); + RANGE_LO_HI(accZ); - if(!(c & CAL_NOTJOY)) { // double negative! - RANGE_LO_HI(joyX); - RANGE_LO_HI(joyY); - } - } - if(c & CAL_CENTRE) { // reset centre point of joystick - CENTRE(accX); - CENTRE(accY); - CENTRE(accZ); + if (!(c & CAL_NOTJOY)) { // double negative! + RANGE_LO_HI(joyX); + RANGE_LO_HI(joyY); + } + } + if (c & CAL_CENTRE) { // reset centre point of joystick + CENTRE(accX); + CENTRE(accY); + CENTRE(accZ); - CENTRE(joyX); - CENTRE(joyY); - } + CENTRE(joyX); + CENTRE(joyY); + } } //============================================================================= ======================================== @@ -154,323 +152,308 @@ void nunchuck_calib(wiiEC_t* const pec, ecCalib_t c) { // // EG. Move left will effect X ; turn left will effect Y & Z // -#define aw 110 // axis width -#define ah 15 // height {0......7......14} -#define am 7 // midpoint { 7 } -#define ar 7 // range {1234567 1234567} +#define aw 110 // axis width +#define ah 15 // height {0......7......14} +#define am 7 // midpoint { 7 } +#define ar 7 // range {1234567 1234567} enum { - ACC_X = 0, - ACC_Y = 1, - ACC_Z = 2, - ACC_CNT = 3, - ACC_1 = ACC_X, // first - ACC_N = ACC_Z, // last + ACC_X = 0, + ACC_Y = 1, + ACC_Z = 2, + ACC_CNT = 3, + ACC_1 = ACC_X, // first + ACC_N = ACC_Z, // last }; //+============================================================================ -static void nunchuck_showAcc(Canvas* const canvas, state_t* const state) { - ecDecNunchuck_t* d = &state->ec.dec[state->ec.decN].nunchuck; - ecCalNunchuck_t* lo = &state->ec.calS.nunchuck[1]; - ecCalNunchuck_t* mid = &state->ec.calS.nunchuck[2]; - ecCalNunchuck_t* hi = &state->ec.calS.nunchuck[3]; +static +void nunchuck_showAcc (Canvas* const canvas, state_t* const state) +{ + ecDecNunchuck_t* d = &state->ec.dec[state->ec.decN].nunchuck; + ecCalNunchuck_t* lo = &state->ec.calS.nunchuck[1]; + ecCalNunchuck_t* mid = &state->ec.calS.nunchuck[2]; + ecCalNunchuck_t* hi = &state->ec.calS.nunchuck[3]; - int y[ACC_CNT] = {0, 0 + (ah + 4), 0 + ((ah + 4) * 2)}; - int x = 10; + int y[ACC_CNT] = {0, 0+(ah+4), 0+((ah+4)*2)}; + int x = 10; - static uint16_t v[ACC_CNT][aw] = {0}; - // static uint16_t tv[ACC_CNT][aw] = {0}; + static uint16_t v[ACC_CNT][aw] = {0}; +// static uint16_t tv[ACC_CNT][aw] = {0}; - static uint16_t idx = 0; - static uint16_t cnt = aw - 1; + static uint16_t idx = 0; + static uint16_t cnt = aw -1; - // Only record when scanner NOT-paused - if(!state->pause) { - uint16_t dead = (1 << 5); + // Only record when scanner NOT-paused + if (!state->pause) { + uint16_t dead = (1<<5); - // Find axes y-offsets - for(int a = ACC_1; a <= ACC_N; a++) { - uint16_t* dp = NULL; // data value (current reading) - uint16_t* lp = NULL; // lo value - uint16_t* mp = NULL; // mid value - uint16_t* hp = NULL; // hi value - uint16_t* vp = NULL; // value (result) + // Find axes y-offsets + for (int a = ACC_1; a <= ACC_N; a++) { + uint16_t* dp = NULL; // data value (current reading) + uint16_t* lp = NULL; // lo value + uint16_t* mp = NULL; // mid value + uint16_t* hp = NULL; // hi value + uint16_t* vp = NULL; // value (result) - switch(a) { - case ACC_X: - dp = &d->accX; // data (input) - lp = &lo->accX; // low \. - mp = &mid->accX; // mid > calibration - hp = &hi->accX; // high / - vp = &v[ACC_X][idx]; // value (where to store the result) - break; - case ACC_Y: - dp = &d->accY; - lp = &lo->accY; - mp = &mid->accY; - hp = &hi->accY; - vp = &v[ACC_Y][idx]; - break; - case ACC_Z: - dp = &d->accZ; - lp = &lo->accZ; - mp = &mid->accZ; - hp = &hi->accZ; - vp = &v[ACC_Z][idx]; - break; - default: - break; - } + switch (a) { + case ACC_X: + dp = & d->accX; // data (input) + lp = & lo->accX; // low \. + mp = &mid->accX; // mid > calibration + hp = & hi->accX; // high / + vp = &v[ ACC_X][idx]; // value (where to store the result) + break; + case ACC_Y: + dp = & d->accY; + lp = & lo->accY; + mp = &mid->accY; + hp = & hi->accY; + vp = &v[ ACC_Y][idx]; + break; + case ACC_Z: + dp = & d->accZ; + lp = & lo->accZ; + mp = &mid->accZ; + hp = & hi->accZ; + vp = &v[ ACC_Z][idx]; + break; + default: break ; + } - // Again - qv. the joysick calibration: - // This is not the "right way" to do this, it is just "one way" to do it - // ...mid point and extreme zones have a deadzone - // ...the rest is evenly divided by the amount of space on the graph - if((*dp >= (*mp - dead)) && (*dp <= (*mp + dead))) - *vp = ar; - else if(*dp >= (*hp - dead)) - *vp = ah - 1; - else if(*dp <= (*lp + dead)) - *vp = 0; - else if(*dp < *mp) { - uint16_t min = ((*lp + dead) + 1); - uint16_t max = ((*mp - dead) - 1); - float range = (max - min) + 1; - float m = range / (ar - 1); // 6 evenly(/fairly) divided zones - *vp = ((int)((*dp - min) / m)) + 1; + // Again - qv. the joysick calibration: + // This is not the "right way" to do this, it is just "one way" to do it + // ...mid point and extreme zones have a deadzone + // ...the rest is evenly divided by the amount of space on the graph + if ((*dp >= (*mp -dead)) && (*dp <= (*mp +dead))) *vp = ar ; + else if (*dp >= (*hp -dead)) *vp = ah-1 ; + else if (*dp <= (*lp +dead)) *vp = 0 ; + else if (*dp < *mp) { + uint16_t min = ((*lp +dead) +1); + uint16_t max = ((*mp -dead) -1); + float range = (max -min) +1; + float m = range /(ar-1); // 6 evenly(/fairly) divided zones + *vp = ((int)((*dp -min) /m)) +1; - } else { //if (*dp > *mp) - uint16_t min = ((*mp + dead) + 1); - uint16_t max = ((*hp - dead) - 1); - float range = (max - min) + 1; - float m = range / (ar - 1); // 6 evenly(/fairly) divided zones - *vp = ((int)((*dp - min) / m)) + 1 + ar; - } - } + } else {//if (*dp > *mp) + uint16_t min = ((*mp +dead) +1); + uint16_t max = ((*hp -dead) -1); + float range = (max -min) +1; + float m = range /(ar-1); // 6 evenly(/fairly) divided zones + *vp = ((int)((*dp -min) /m)) +1 +ar; + } + } - //! If we decide to offer "export to CSV" - //! I suggest we keep a second array of true-values, rather than do all the maths every time - //! Also - the data will need to me moved to the 'state' table - so a.n.other function can save it off - // tv[ACC_X][idx] = d->accX; - // tv[ACC_Y][idx] = d->accY; - // tv[ACC_Z][idx] = d->accZ; +//! If we decide to offer "export to CSV" +//! I suggest we keep a second array of true-values, rather than do all the maths every time +//! Also - the data will need to me moved to the 'state' table - so a.n.other function can save it off +// tv[ACC_X][idx] = d->accX; +// tv[ACC_Y][idx] = d->accY; +// tv[ACC_Z][idx] = d->accZ; - // Prepare for the next datapoint - if(++idx >= aw) idx = 0; - if(cnt) cnt--; - } + // Prepare for the next datapoint + if (++idx >= aw) idx = 0 ; + if (cnt) cnt-- ; + } - // Auto-pause - if(state->apause && !idx) state->pause = true; + // Auto-pause + if (state->apause && !idx) state->pause = true ; - // *** Draw axes *** - show(canvas, 0, y[ACC_X] + ((ah - img_6x8_X.h) / 2), &img_6x8_X, SHOW_SET_BLK); - show(canvas, 0, y[ACC_Y] + ((ah - img_6x8_Y.h) / 2), &img_6x8_Y, SHOW_SET_BLK); - show(canvas, 0, y[ACC_Z] + ((ah - img_6x8_Z.h) / 2), &img_6x8_Z, SHOW_SET_BLK); + // *** Draw axes *** + show(canvas, 0,y[ACC_X] +((ah -img_6x8_X.h) /2), &img_6x8_X, SHOW_SET_BLK); + show(canvas, 0,y[ACC_Y] +((ah -img_6x8_Y.h) /2), &img_6x8_Y, SHOW_SET_BLK); + show(canvas, 0,y[ACC_Z] +((ah -img_6x8_Z.h) /2), &img_6x8_Z, SHOW_SET_BLK); - canvas_set_color(canvas, ColorBlack); - for(int a = ACC_1; a <= ACC_N; a++) { - canvas_draw_line(canvas, x - 1, y[a], x - 1, y[a] + ah); - canvas_draw_line(canvas, x, y[a] + ah, x + aw - 1, y[a] + ah); + canvas_set_color(canvas, ColorBlack); + for (int a = ACC_1; a <= ACC_N; a++) { + canvas_draw_line(canvas, x-1,y[a] , x -1,y[a]+ah); + canvas_draw_line(canvas, x ,y[a]+ah, x+aw-1,y[a]+ah); - // Mid & Peak lines - for(int i = 1; i < aw; i += 3) { - canvas_draw_dot(canvas, x + i, y[a]); - canvas_draw_dot(canvas, x + i, y[a] + (ah / 2)); - } - } + // Mid & Peak lines + for (int i = 1; i < aw; i += 3) { + canvas_draw_dot(canvas, x+i,y[a]); + canvas_draw_dot(canvas, x+i,y[a] +(ah /2)); + } + } - // Data (wiper display - see notes.txt for scrolling algorithm) - int end = idx ? idx : aw; - for(int a = ACC_1; a <= ACC_N; a++) { - canvas_draw_dot(canvas, x, y[a] + v[a][idx]); - for(int i = 1; i < end; i++) - canvas_draw_line(canvas, x + i, y[a] + v[a][i - 1], x + i, y[a] + v[a][i]); - if(!state->apause) - for(int i = end + 10; i < aw - cnt; i++) - canvas_draw_line(canvas, x + i, y[a] + v[a][i - 1], x + i, y[a] + v[a][i]); - } - // Wipe bar - if(end < aw) canvas_draw_line(canvas, x + end, y[0], x + end, y[2] + ah - 1); - if(++end < aw) canvas_draw_line(canvas, x + end, y[0], x + end, y[2] + ah - 1); - if(++end < aw) canvas_draw_line(canvas, x + end, y[0], x + end, y[2] + ah - 1); + // Data (wiper display - see notes.txt for scrolling algorithm) + int end = idx ? idx : aw; + for (int a = ACC_1; a <= ACC_N; a++) { + canvas_draw_dot(canvas, x,y[a]+v[a][idx]); + for (int i = 1; i < end; i++) + canvas_draw_line(canvas, x+i,y[a]+v[a][i-1] , x+i,y[a]+v[a][i]); + if (!state->apause) + for (int i = end+10; i < aw -cnt; i++) + canvas_draw_line(canvas, x+i,y[a]+v[a][i-1] , x+i,y[a]+v[a][i]); + } + // Wipe bar + if (end < aw) canvas_draw_line(canvas, x+end,y[0], x+end,y[2]+ah-1); + if (++end < aw) canvas_draw_line(canvas, x+end,y[0], x+end,y[2]+ah-1); + if (++end < aw) canvas_draw_line(canvas, x+end,y[0], x+end,y[2]+ah-1); - // *** Mode buttons *** - show(canvas, 0, 55, &img_key_L, SHOW_SET_BLK); // mode key + // *** Mode buttons *** + show(canvas, 0,55, &img_key_L, SHOW_SET_BLK); // mode key - if((state->calib & CAL_RANGE) || state->pause) state->flash++; + if ((state->calib & CAL_RANGE) || state->pause) state->flash++ ; - // -pause- ...yeah, this got a little out of hand! LOL! - if(state->pause || state->apause) { - if(state->pause && state->apause && !idx) { - if(state->flash & 8) { - show(canvas, 108, 56, &img_key_U, SHOW_SET_BLK); - } else { - show(canvas, 108, 56, &img_key_Ui, SHOW_SET_BLK); - canvas_draw_line(canvas, x + aw, y[0], x + aw, y[2] + ah - 1); - } - } else { - show(canvas, 108, 56, &img_key_Ui, SHOW_SET_BLK); - } - } else { - show(canvas, 108, 56, &img_key_U, SHOW_SET_BLK); // pause - } + // -pause- ...yeah, this got a little out of hand! LOL! + if (state->pause || state->apause) { + if (state->pause && state->apause && !idx) { + if (state->flash &8) { + show(canvas, 108,56, &img_key_U, SHOW_SET_BLK); + } else { + show(canvas, 108,56, &img_key_Ui, SHOW_SET_BLK); + canvas_draw_line(canvas, x+aw,y[0], x+aw,y[2]+ah-1); + } + } else { + show(canvas, 108,56, &img_key_Ui, SHOW_SET_BLK); + } + } else { + show(canvas, 108,56, &img_key_U, SHOW_SET_BLK); // pause + } - // -calibration- - if(state->calib & CAL_RANGE) { - show(canvas, 119, 55, (state->flash & 8) ? &img_key_OKi : &img_key_OK, SHOW_SET_BLK); - } else { - show(canvas, 119, 55, &img_key_OK, SHOW_SET_BLK); - } + // -calibration- + if (state->calib & CAL_RANGE) { + show(canvas, 119,55, (state->flash &8) ? &img_key_OKi : &img_key_OK, SHOW_SET_BLK); + } else { + show(canvas, 119,55, &img_key_OK, SHOW_SET_BLK); + } } -#undef aw -#undef ah -#undef am -#undef ar +# undef aw +# undef ah +# undef am +# undef ar //+============================================================================ ======================================== // Default nunchuck screen // -void nunchuck_show(Canvas* const canvas, state_t* const state) { - // Nunchucks have TWO scenes - if(state->scene == SCENE_NUNCHUCK_ACC) return nunchuck_showAcc(canvas, state); +void nunchuck_show (Canvas* const canvas, state_t* const state) +{ + // Nunchucks have TWO scenes + if (state->scene == SCENE_NUNCHUCK_ACC) return nunchuck_showAcc(canvas, state) ; - // Default scene - ecDecNunchuck_t* d = &state->ec.dec[state->ec.decN].nunchuck; - ecCalNunchuck_t* c = (state->hold) ? &state->ec.calS.nunchuck[(state->hold < 0) ? 0 : 4] : - (ecCalNunchuck_t*)d; //! danger will robinson! - ecCalNunchuck_t* js = state->ec.calS.nunchuck; + // Default scene + ecDecNunchuck_t* d = &state->ec.dec[state->ec.decN].nunchuck; + ecCalNunchuck_t* c = (state->hold) ? &state->ec.calS.nunchuck[(state->hold < 0) ? 0 : 4] + : (ecCalNunchuck_t*)d ; //! danger will robinson! + ecCalNunchuck_t* js = state->ec.calS.nunchuck; - // X, Y, Z - show(canvas, 42, 0, &img_6x8_X, SHOW_SET_BLK); - show(canvas, 73, 0, &img_6x8_Y, SHOW_SET_BLK); - show(canvas, 104, 0, &img_6x8_Z, SHOW_SET_BLK); + // X, Y, Z + show(canvas, 42,0, &img_6x8_X, SHOW_SET_BLK); + show(canvas, 73,0, &img_6x8_Y, SHOW_SET_BLK); + show(canvas, 104,0, &img_6x8_Z, SHOW_SET_BLK); - canvas_draw_str_aligned(canvas, 0, 14, AlignLeft, AlignTop, "Accel"); - canvas_draw_str_aligned(canvas, 0, 28, AlignLeft, AlignTop, "Joy"); + canvas_draw_str_aligned(canvas, 0,14, AlignLeft, AlignTop, "Accel"); + canvas_draw_str_aligned(canvas, 0,28, AlignLeft, AlignTop, "Joy"); - // accel values - showHex(canvas, 34, 12, c->accX, 3, 2); - showHex(canvas, 65, 12, c->accY, 3, 2); - showHex(canvas, 96, 12, c->accZ, 3, 2); - // Joy values - showHex(canvas, 38, 27, c->joyX, 2, 2); - showHex(canvas, 69, 27, c->joyY, 2, 2); + // accel values + showHex(canvas, 34,12, c->accX, 3,2); + showHex(canvas, 65,12, c->accY, 3,2); + showHex(canvas, 96,12, c->accZ, 3,2); + // Joy values + showHex(canvas, 38,27, c->joyX, 2,2); + showHex(canvas, 69,27, c->joyY, 2,2); - showJoy( - canvas, - 103, - 32, - js[1].joyX, - js[2].joyX, - js[3].joyX, - js[1].joyY, - js[2].joyY, - js[3].joyY, - d->joyX, - d->joyY, - 8); + showJoy(canvas, 103,32, js[1].joyX, js[2].joyX, js[3].joyX, + js[1].joyY, js[2].joyY, js[3].joyY, d->joyX,d->joyY, 8); - // buttons - canvas_set_color(canvas, ColorBlack); - canvas_draw_str_aligned(canvas, 0, 44, AlignLeft, AlignTop, "Button"); + // buttons + canvas_set_color(canvas, ColorBlack); + canvas_draw_str_aligned(canvas, 0,44, AlignLeft, AlignTop, "Button"); - if(!d->btnC) { - canvas_draw_rframe(canvas, 36, 42, 18, 12, 6); - show(canvas, 42, 44, &img_6x8_C, SHOW_SET_BLK); - } else { - canvas_draw_rbox(canvas, 36, 42, 18, 12, 6); - show(canvas, 42, 44, &img_6x8_C, SHOW_SET_WHT); - canvas_set_color(canvas, ColorBlack); - } + if (!d->btnC) { + canvas_draw_rframe(canvas, 36,42, 18,12, 6); + show(canvas, 42,44, &img_6x8_C, SHOW_SET_BLK); + } else { + canvas_draw_rbox(canvas, 36,42, 18,12, 6); + show(canvas, 42,44, &img_6x8_C, SHOW_SET_WHT); + canvas_set_color(canvas, ColorBlack); + } - if(!d->btnZ) { - canvas_draw_rframe(canvas, 64, 40, 24, 16, 2); - show(canvas, 73, 44, &img_6x8_Z, SHOW_SET_BLK); - } else { - canvas_draw_rbox(canvas, 64, 40, 24, 16, 2); - show(canvas, 73, 44, &img_6x8_Z, SHOW_SET_WHT); - } + if (!d->btnZ) { + canvas_draw_rframe(canvas, 64,40, 24,16, 2); + show(canvas, 73,44, &img_6x8_Z, SHOW_SET_BLK); + } else { + canvas_draw_rbox(canvas, 64,40, 24,16, 2); + show(canvas, 73,44, &img_6x8_Z, SHOW_SET_WHT); + } - // Navigation - showPeakHold(state, canvas, state->hold); // peak keys - show(canvas, 0, 55, &img_key_L, SHOW_SET_BLK); // mode keys - show(canvas, 9, 55, &img_key_R, SHOW_SET_BLK); + // Navigation + showPeakHold(state, canvas, state->hold); // peak keys + show(canvas, 0,55, &img_key_L, SHOW_SET_BLK); // mode keys + show(canvas, 9,55, &img_key_R, SHOW_SET_BLK); } //+============================================================================ ======================================== -static bool nunchuck_keyAcc(const eventMsg_t* const msg, state_t* const state) { - int used = false; // assume key is NOT-handled +static +bool nunchuck_keyAcc (const eventMsg_t* const msg, state_t* const state) +{ + int used = false; // assume key is NOT-handled - switch(msg->input.type) { - case InputTypeShort: //# input.key) { - case InputKeyDown: //# input.type) { + case InputTypeShort: //# input.key) { + case InputKeyDown: //# pause) - state->pause = false; // Paused? Restart - else - state->apause = !state->apause; // No? toggle auto-pause - used = true; - break; + case InputKeyUp: //# pause) state->pause = false ; // Paused? Restart + else state->apause = !state->apause ; // No? toggle auto-pause + used = true; + break; - case InputKeyLeft: //# calib &= ~CAL_NOTJOY; // DO calibrate joystick in NUNCHUCK mode - used = true; - break; + case InputKeyLeft: //# calib &= ~CAL_NOTJOY; // DO calibrate joystick in NUNCHUCK mode + used = true; + break; - default: - break; //# scene == SCENE_NUNCHUCK_ACC) return nunchuck_keyAcc(msg, state); +bool nunchuck_key (const eventMsg_t* const msg, state_t* const state) +{ + // Nunchucks have TWO scenes + if (state->scene == SCENE_NUNCHUCK_ACC) return nunchuck_keyAcc(msg, state) ; - // Default scene - int used = false; // assume key is NOT-handled + // Default scene + int used = false; // assume key is NOT-handled - switch(msg->input.type) { - case InputTypeShort: //# input.key) { - case InputKeyLeft: //# input.type) { + case InputTypeShort: //# input.key) { + case InputKeyLeft: //# calib |= CAL_NOTJOY; // do NOT calibrate joystick in _ACC mode - used = true; - break; - default: - break; //# calib |= CAL_NOTJOY; // do NOT calibrate joystick in _ACC mode + used = true; + break; + default: break ; //# -#include +#include +#include //----------------------------------------------------------------------------- // Controllers which have calibration must have their calibratable controls here //! Is there a better way to get the start of the decode struct to match the calibration struct ? #define NUNCHUCK_ANALOGUE \ - uint8_t joyX, joyY; \ - uint16_t accX, accY, accZ; + uint8_t joyX, joyY; \ + uint16_t accX, accY, accZ; //----------------------------------------------------------------------------- // Calibratable controls // -typedef struct ecCalNunchuck { - NUNCHUCK_ANALOGUE -} ecCalNunchuck_t; +typedef + struct ecCalNunchuck { + NUNCHUCK_ANALOGUE + } +ecCalNunchuck_t; //----------------------------------------------------------------------------- // All controls // -typedef struct ecDecNunchuck { - NUNCHUCK_ANALOGUE // MUST be first +typedef + struct ecDecNunchuck { + NUNCHUCK_ANALOGUE // MUST be first - // Digital controls - bool btnC, - btnZ; // BTN{c, z} -} ecDecNunchuck_t; + // Digital controls + bool btnC, btnZ; // BTN{c, z} + } +ecDecNunchuck_t; #undef NUNCHUCK_ANALOGUE //============================================================================= // Function prototypes // -#include // Canvas -typedef struct wiiEC wiiEC_t; -typedef enum ecCalib ecCalib_t; -typedef struct state state_t; -typedef struct eventMsg eventMsg_t; +#include // Canvas +typedef struct wiiEC wiiEC_t ; +typedef enum ecCalib ecCalib_t ; +typedef struct state state_t ; +typedef struct eventMsg eventMsg_t ; -void nunchuck_decode(wiiEC_t* const pec); -void nunchuck_msg(wiiEC_t* const pec, FuriMessageQueue* const queue); -void nunchuck_calib(wiiEC_t* const pec, ecCalib_t c); +void nunchuck_decode (wiiEC_t* const pec) ; +void nunchuck_msg (wiiEC_t* const pec, FuriMessageQueue* const queue) ; +void nunchuck_calib (wiiEC_t* const pec, ecCalib_t c) ; -void nunchuck_show(Canvas* const canvas, state_t* const state); -bool nunchuck_key(const eventMsg_t* const msg, state_t* const state); +void nunchuck_show (Canvas* const canvas, state_t* const state) ; +bool nunchuck_key (const eventMsg_t* const msg, state_t* const state) ; #endif //WII_EC_NUNCHUCK_H_ diff --git a/applications/plugins/wii_ec_anal/wii_ec_udraw.c b/applications/plugins/wii_ec_anal/wii_ec_udraw.c index 82987b205..babbc92ab 100644 --- a/applications/plugins/wii_ec_anal/wii_ec_udraw.c +++ b/applications/plugins/wii_ec_anal/wii_ec_udraw.c @@ -1,16 +1,16 @@ //! udraw support is NOT written - this is just notes about the init function -#include -#include // Core API +#include +#include // Core API -#include "wii_anal.h" -#include "wii_ec.h" -#include "bc_logging.h" +#include "wii_anal.h" +#include "wii_ec.h" +#include "bc_logging.h" -#include "i2c_workaround.h" //! temporary workaround for a bug in furi i2c [see header] +#include "i2c_workaround.h" //! temporary workaround for a bug in furi i2c [see header] // ** If you want to see what this source code looks like with all the MACROs expanded // ** grep -v '#include ' wii_ec_udraw.c | gcc -E -o /dev/stdout -xc - -#include "wii_ec_macros.h" +# include "wii_ec_macros.h" //+============================================================================ ======================================== // https://github.com/madhephaestus/WiiChuck/blob/master/src/Drawsome.cpp#L3 @@ -27,12 +27,13 @@ // read 6 bytes starting from 0x00 (#3) // read 6 bytes starting from 0x00 (#4) // -bool udraw_init(wiiEC_t* const pec) { - ENTER; - bool rv = true; +bool udraw_init (wiiEC_t* const pec) +{ + ENTER; + bool rv = true; - (void)pec; - /* +(void)pec; +/* //! this is the Drawsome code, NOT the uDraw code !! static const uint8_t reg[9] = {0x20, 0x28, 0x30, 0x38, 0x00, 0x00, 0xFB, 0x00, 0x00}; // 0..8 const uint8_t* p = reg; @@ -71,79 +72,74 @@ fail: done: */ - LEAVE; - return rv; + LEAVE; + return rv; } //+============================================================================ ======================================== -bool udraw_key(const eventMsg_t* const msg, state_t* const state) { - (void)state; - bool run = true; +bool udraw_key (const eventMsg_t* const msg, state_t* const state) +{ +(void)state; + bool run = true; - switch(msg->input.type) { - case InputTypeShort: //# input.key) { - case InputKeyUp: //# ! After INPUT_LONG_PRESS interval, asynch to InputTypeRelease - switch(msg->input.key) { - case InputKeyUp: //# >U [ LONG-UP ] - case InputKeyDown: //# >D [ LONG-DOWN ] - case InputKeyLeft: //# >L [ LONG-LEFT ] - case InputKeyRight: //# >R [ LONG-RIGHT ] - case InputKeyOk: //# >O [ LONG-OK ] - case InputKeyBack: //# >B [ LONG-BACK ] - default: - break; //# >? - } - break; - case InputTypePress: //# +! After debounce - switch(msg->input.key) { - case InputKeyUp: //# +U [ SHORT-UP ] - case InputKeyDown: //# +D [ SHORT-DOWN ] - case InputKeyLeft: //# +L [ SHORT-LEFT ] - case InputKeyRight: //# +R [ SHORT-RIGHT ] - case InputKeyOk: //# +O [ SHORT-OK ] - case InputKeyBack: //# +B [ SHORT-BACK ] - default: - break; //# +? - } - break; - case InputTypeRepeat: //# *! With INPUT_REPEATE_PRESS period after InputTypeLong event - switch(msg->input.key) { - case InputKeyUp: //# *U [ REPEAT-UP ] - case InputKeyDown: //# *D [ REPEAT-DOWN ] - case InputKeyLeft: //# *L [ REPEAT-LEFT ] - case InputKeyRight: //# *R [ REPEAT-RIGHT ] - case InputKeyOk: //# *O [ REPEAT-OK ] - case InputKeyBack: //# *B [ REPEAT-BACK ] - default: - break; //# *? - } - break; - case InputTypeRelease: //# -! After debounce - switch(msg->input.key) { - case InputKeyUp: //# -U [ RELEASE-UP ] - case InputKeyDown: //# -D [ RELEASE-DOWN ] - case InputKeyLeft: //# -L [ RELEASE-LEFT ] - case InputKeyRight: //# -R [ RELEASE-RIGHT ] - case InputKeyOk: //# -O [ RELEASE-OK ] - case InputKeyBack: //# -B [ RELEASE-BACK ] - default: - break; //# -? - } - break; - default: - return true; - } + switch (msg->input.type) { + case InputTypeShort: //# input.key) { + case InputKeyUp: //# ! After INPUT_LONG_PRESS interval, asynch to InputTypeRelease + switch (msg->input.key) { + case InputKeyUp: //# >U [ LONG-UP ] + case InputKeyDown: //# >D [ LONG-DOWN ] + case InputKeyLeft: //# >L [ LONG-LEFT ] + case InputKeyRight: //# >R [ LONG-RIGHT ] + case InputKeyOk: //# >O [ LONG-OK ] + case InputKeyBack: //# >B [ LONG-BACK ] + default: break ; //# >? + } + break; + case InputTypePress: //# +! After debounce + switch (msg->input.key) { + case InputKeyUp: //# +U [ SHORT-UP ] + case InputKeyDown: //# +D [ SHORT-DOWN ] + case InputKeyLeft: //# +L [ SHORT-LEFT ] + case InputKeyRight: //# +R [ SHORT-RIGHT ] + case InputKeyOk: //# +O [ SHORT-OK ] + case InputKeyBack: //# +B [ SHORT-BACK ] + default: break ; //# +? + } + break; + case InputTypeRepeat: //# *! With INPUT_REPEATE_PRESS period after InputTypeLong event + switch (msg->input.key) { + case InputKeyUp: //# *U [ REPEAT-UP ] + case InputKeyDown: //# *D [ REPEAT-DOWN ] + case InputKeyLeft: //# *L [ REPEAT-LEFT ] + case InputKeyRight: //# *R [ REPEAT-RIGHT ] + case InputKeyOk: //# *O [ REPEAT-OK ] + case InputKeyBack: //# *B [ REPEAT-BACK ] + default: break ; //# *? + } + break; + case InputTypeRelease: //# -! After debounce + switch (msg->input.key) { + case InputKeyUp: //# -U [ RELEASE-UP ] + case InputKeyDown: //# -D [ RELEASE-DOWN ] + case InputKeyLeft: //# -L [ RELEASE-LEFT ] + case InputKeyRight: //# -R [ RELEASE-RIGHT ] + case InputKeyOk: //# -O [ RELEASE-OK ] + case InputKeyBack: //# -B [ RELEASE-BACK ] + default: break ; //# -? + } + break; + default: return true ; + } - return run; + return run; } diff --git a/applications/plugins/wii_ec_anal/wii_ec_udraw.h b/applications/plugins/wii_ec_anal/wii_ec_udraw.h index 9283fd95d..1721894e5 100644 --- a/applications/plugins/wii_ec_anal/wii_ec_udraw.h +++ b/applications/plugins/wii_ec_anal/wii_ec_udraw.h @@ -1,18 +1,18 @@ -#ifndef WII_EC_UDRAW_H_ -#define WII_EC_UDRAW_H_ +#ifndef WII_EC_UDRAW_H_ +#define WII_EC_UDRAW_H_ -#include -#include +#include +#include //============================================================================= ======================================= // Function prototypes // -typedef struct wiiEC wiiEC_t; -typedef enum ecCalib ecCalib_t; -typedef struct eventMsg eventMsg_t; -typedef struct state state_t; +typedef struct wiiEC wiiEC_t ; +typedef enum ecCalib ecCalib_t ; +typedef struct eventMsg eventMsg_t ; +typedef struct state state_t ; -bool udraw_init(wiiEC_t* const pec); -bool udraw_key(const eventMsg_t* const msg, state_t* const state); +bool udraw_init (wiiEC_t* const pec) ; +bool udraw_key (const eventMsg_t* const msg, state_t* const state) ; #endif //WII_EC_UDRAW_H_ diff --git a/applications/plugins/wii_ec_anal/wii_i2c.c b/applications/plugins/wii_ec_anal/wii_i2c.c index f5d6840d9..90fe22163 100644 --- a/applications/plugins/wii_ec_anal/wii_i2c.c +++ b/applications/plugins/wii_ec_anal/wii_i2c.c @@ -17,98 +17,103 @@ // 0xFA..0xFF ( 6 bytes) ... [r] Perhipheral ID //----------------------------------------------------------------------------- ---------------------------------------- -#include -#include -#include +#include +#include +#include -#include -#include -#include +#include +#include +#include -#include "i2c_workaround.h" //! temporary workaround for a bug in furi i2c [see header] +#include "i2c_workaround.h" //! temporary workaround for a bug in furi i2c [see header] -#include "wii_anal.h" -#include "wii_i2c.h" -#include "wii_ec.h" +#include "wii_anal.h" +#include "wii_i2c.h" +#include "wii_ec.h" -#include "bc_logging.h" +#include "bc_logging.h" //----------------------------------------------------------------------------- ---------------------------------------- // Wii Extension Controller i2c Bus address -static const uint8_t ec_i2cAddr = 0x52; +static const uint8_t ec_i2cAddr = 0x52; // Initialise for UNencrypted comms -static const uint8_t regInit1 = 0xF0; -static const uint8_t regInit2 = 0xFB; -static const uint8_t cmdInit1[] = {regInit1, 0x55}; -static const uint8_t cmdInit2[] = {regInit2, 0x00}; +static const uint8_t regInit1 = 0xF0; +static const uint8_t regInit2 = 0xFB; +static const uint8_t cmdInit1[] = {regInit1, 0x55}; +static const uint8_t cmdInit2[] = {regInit2, 0x00}; // Initialise for ENcrypted comms -static const uint8_t regInitEnc = 0x40; -static const uint8_t cmdInitEnc[] = {regInitEnc, 0x00}; +static const uint8_t regInitEnc = 0x40; +static const uint8_t cmdInitEnc[] = {regInitEnc, 0x00}; // Crypto key (PSK), base register : {0x40..0x4F}[2][8] -static const uint8_t regEnc = 0x40; // ENC_LEN +static const uint8_t regEnc = 0x40; // ENC_LEN // Controller State data, base register : {0x00..0x05}[6] -static const uint8_t regJoy = 0x00; // JOY_LEN +static const uint8_t regJoy = 0x00; // JOY_LEN // Calibration data, base register : {0x20..0x2F}[16] -static const uint8_t regCal = 0x20; // CAL_LEN +static const uint8_t regCal = 0x20; // CAL_LEN // Controller ID, base register : {0xFA..0xFF}[6] -static const uint8_t regPid = 0xFA; // PID_LEN +static const uint8_t regPid = 0xFA; // PID_LEN //+============================================================================ ======================================== // Hexdump a buffer to the logfile // #if LOG_LEVEL >= 4 // INFO -static void dump(const uint8_t* buf, const unsigned int len, const char* id) { - // snprintf() would be useful! - char s[128] = {0}; - char* p = NULL; +static +void dump (const uint8_t* buf, const unsigned int len, const char* id) +{ + // snprintf() would be useful! + char s[128] = {0}; + char* p = NULL; - strcpy(s, id); - p = s + strlen(s); - *p++ = ':'; - *p++ = ' '; - *p++ = '{'; + strcpy(s, id); + p = s +strlen(s); + *p++ = ':'; + *p++ = ' '; + *p++ = '{'; - for(unsigned int i = 0; i < len; i++) { - uint8_t hi = (buf[i] & 0xF0) >> 4; - uint8_t lo = (buf[i] & 0x0F); + for (unsigned int i = 0; i < len; i++) { + uint8_t hi = (buf[i] &0xF0) >>4; + uint8_t lo = (buf[i] &0x0F); - hi = hi + ((hi > 9) ? ('A' - 10) : '0'); - lo = lo + ((lo > 9) ? ('A' - 10) : '0'); + hi = hi + ((hi > 9) ? ('A' -10) : '0'); + lo = lo + ((lo > 9) ? ('A' -10) : '0'); - *p++ = (char)hi; - *p++ = (char)lo; - *p++ = ','; - } - *p = '\0'; - *--p = '}'; - INFO(s); + *p++ = (char)hi; + *p++ = (char)lo; + *p++ = ','; + } + *p = '\0'; + *--p = '}'; + INFO(s); } #else -#define dump(...) +# define dump(...) #endif //+============================================================================ ======================================== // //! -W-A-R-N-I-N-G- : THIS ENCRYPTION CODE SHOULD NEVER BE REQUIRED ... AS SUCH, I'VE NEVER TESTED IT // -static void decrypt(uint8_t* buf, const uint8_t* encKey, const uint8_t reg, unsigned int len) { -#if 1 // Use standard algorithm - // decrypted_byte = (encrypted_byte XOR encKey[1][address%8]) + encKey[2][address%8] - for(uint8_t* p = buf; p < buf + len; p++) - *p = (*p ^ encKey[(reg + (p - buf)) % 8]) + encKey[8 + ((reg + (p - buf)) % 8)]; +static +void decrypt (uint8_t* buf, const uint8_t* encKey, const uint8_t reg, unsigned int len) +{ +#if 1 // Use standard algorithm + // decrypted_byte = (encrypted_byte XOR encKey[1][address%8]) + encKey[2][address%8] + for (uint8_t* p = buf; p < buf+len; p++) + *p = (*p ^ encKey[(reg +(p -buf)) %8]) + encKey[8 +((reg +(p -buf)) %8)]; -#else //! This is (I think) a shortcut for an all-zero key [not tested] - (void)encKey; - (void)reg; - for(uint8_t* p = buf; p < buf + len; p++) *p = (*p ^ 0x17) + 0x17; +#else //! This is (I think) a shortcut for an all-zero key [not tested] + (void)encKey; + (void)reg; + for (uint8_t* p = buf; p < buf+len; p++) + *p = (*p ^ 0x17) + 0x17; #endif } @@ -118,38 +123,38 @@ static void decrypt(uint8_t* buf, const uint8_t* encKey, const uint8_t reg, unsi // // Returns: {0:OK, >0:Error} // -int ecRead(wiiEC_t* pec) { - ENTER; - int rv = 0; // assume success +int ecRead (wiiEC_t* pec) +{ + ENTER; + int rv = 0; // assume success - if(!pec->init) { - WARN("%s : device not initialised", __func__); - rv = 1; - goto bail; - } + if (!pec->init) { + WARN("%s : device not initialised", __func__); + rv = 1; + goto bail; + } - if(!furi_hal_i2c_is_device_ready(i2cBus, i2cAddr, i2cTimeout)) { - INFO("%s : device disconnected", __func__); - pec->init = false; - rv = 2; - goto bail; - } + if (!furi_hal_i2c_is_device_ready(i2cBus,i2cAddr, i2cTimeout)) { + INFO("%s : device disconnected", __func__); + pec->init = false; + rv = 2; + goto bail; + } - if(!furi_hal_i2c_trxd( - i2cBus, i2cAddr, ®Joy, 1, pec->joy, JOY_LEN, i2cTimeout, i2cReadWait)) { - ERROR("%s : trxd fail", __func__); - rv = 3; - goto bail; - } + if (!furi_hal_i2c_trxd(i2cBus,i2cAddr, ®Joy,1, pec->joy,JOY_LEN, i2cTimeout,i2cReadWait)) { + ERROR("%s : trxd fail", __func__); + rv = 3; + goto bail; + } - if(pec->encrypt) decrypt(pec->joy, pec->encKey, regJoy, JOY_LEN); + if (pec->encrypt) decrypt(pec->joy, pec->encKey, regJoy, JOY_LEN) ; - // Decode the readings (according to Controller type) - ecDecode(pec); + // Decode the readings (according to Controller type) + ecDecode(pec); bail: - LEAVE; - return rv; + LEAVE; + return rv; } //+============================================================================ ======================================== @@ -157,145 +162,148 @@ bail: // //! To disable encryption, pass a NULL encryption key <-- this is currently ALWAYS the case // -bool ecInit(wiiEC_t* pec, const uint8_t* encKey) { - ENTER; +bool ecInit (wiiEC_t* pec, const uint8_t* encKey) +{ + ENTER; - bool rv = false; // assume failure + bool rv = false; // assume failure -#if 0 //! i2c workaround +#if 0 //! i2c workaround //! I think this is done during OS startup - long before the plugin starts furi_hal_i2c_init(); #endif -#if 0 //! i2c workaround +#if 0 //! i2c workaround // May become relevant when the i2c issues are resolved // Take control of the i2c bus [which returns void !?] // --> firmware/targets/f7/furi_hal/furi_hal_i2c.c furi_hal_i2c_acquire(i2cBus); #endif - pec->init = false; // assume failure + pec->init = false; // assume failure - // === See if the device is alive === - if(!furi_hal_i2c_is_device_ready(i2cBus, i2cAddr, i2cTimeout)) { - TRACE("%s : waiting for device", __func__); - goto bail; - } - INFO("%s : device connected", __func__); + // === See if the device is alive === + if (!furi_hal_i2c_is_device_ready(i2cBus,i2cAddr, i2cTimeout)) { + TRACE("%s : waiting for device", __func__); + goto bail; + } + INFO("%s : device connected", __func__); - // === Initialise the device === - pec->init = false; // This goes true AFTER the (optional) controller-specific init code + // === Initialise the device === + pec->init = false; // This goes true AFTER the (optional) controller-specific init code - // === Start the Extension Controller === - if(encKey) { //! start in encrypted mode + // === Start the Extension Controller === + if (encKey) { //! start in encrypted mode - //! todo - should this happen here, or AFTER we've got the ID ? + //! todo - should this happen here, or AFTER we've got the ID ? - } else { - if(!furi_hal_i2c_tx(i2cBus, i2cAddr, cmdInit1, sizeof(cmdInit1), i2cTimeout)) { - ERROR("%s : init fail (dec1)", __func__); - goto bail; - } - TRACE("%s : init OK1", __func__); + } else { - if(!furi_hal_i2c_tx(i2cBus, i2cAddr, cmdInit2, sizeof(cmdInit2), i2cTimeout)) { - ERROR("%s : init fail (dec2)", __func__); - goto bail; - } - TRACE("%s : init OK2", __func__); - } + if ( !furi_hal_i2c_tx(i2cBus,i2cAddr, cmdInit1,sizeof(cmdInit1), i2cTimeout) ) { + ERROR("%s : init fail (dec1)", __func__); + goto bail; + } + TRACE("%s : init OK1", __func__); - // === Retrieve the Extension Controller ID === - if(!furi_hal_i2c_trx(i2cBus, i2cAddr, ®Pid, 1, pec->pid, PID_LEN, i2cTimeout)) { - ERROR("%s : T(R)x fail (pid)", __func__); - goto bail; - } - if(pec->encrypt) decrypt(pec->joy, pec->encKey, regJoy, JOY_LEN); - dump(pec->pid, PID_LEN, "pid"); // debug INFO + if ( !furi_hal_i2c_tx(i2cBus,i2cAddr, cmdInit2,sizeof(cmdInit2), i2cTimeout) ) { + ERROR("%s : init fail (dec2)", __func__); + goto bail; + } + TRACE("%s : init OK2", __func__); + } - // Find the StringID in the lookup table - for(pec->pidx = PID_FIRST; pec->pidx < PID_ERROR; pec->pidx++) - if(memcmp(pec->pid, ecId[pec->pidx].id, PID_LEN) == 0) break; - if(pec->pidx == PID_ERROR) pec->pidx = PID_UNKNOWN; - pec->sid = ecId[pec->pidx].name; - INFO("sid: %s", pec->sid); + // === Retrieve the Extension Controller ID === + if (!furi_hal_i2c_trx(i2cBus,i2cAddr, ®Pid,1, pec->pid,PID_LEN, i2cTimeout)) { + ERROR("%s : T(R)x fail (pid)", __func__); + goto bail; + } + if (pec->encrypt) decrypt(pec->joy, pec->encKey, regJoy, JOY_LEN); + dump(pec->pid, PID_LEN, "pid"); // debug INFO - // === (optionally) Enable encryption === - if(!encKey) { - pec->encrypt = false; + // Find the StringID in the lookup table + for (pec->pidx = PID_FIRST; pec->pidx < PID_ERROR; pec->pidx++) + if (memcmp(pec->pid, ecId[pec->pidx].id, PID_LEN) == 0) break ; + if (pec->pidx == PID_ERROR) pec->pidx = PID_UNKNOWN ; + pec->sid = ecId[pec->pidx].name; + INFO("sid: %s", pec->sid); - } else { // Controller WILL encrypt ALL tranmissions - //! this encryption code fails - should it be done earlier? - //! as it is probably never of any use, I'm kinda loathed to spend time on it - //! https://github.com/madhephaestus/WiiChuck/blob/master/src/Accessory.cpp#L138 - uint8_t encTx[1 + ENC_LEN] = {0}; - uint8_t* ep = encTx; + // === (optionally) Enable encryption === + if (!encKey) { + pec->encrypt = false; - pec->encrypt = true; + } else { // Controller WILL encrypt ALL tranmissions +//! this encryption code fails - should it be done earlier? +//! as it is probably never of any use, I'm kinda loathed to spend time on it +//! https://github.com/madhephaestus/WiiChuck/blob/master/src/Accessory.cpp#L138 + uint8_t encTx[1+ENC_LEN] = {0}; + uint8_t* ep = encTx; - // ** Start the Controller in ENcrytped mode - if(!furi_hal_i2c_tx(i2cBus, i2cAddr, cmdInitEnc, sizeof(cmdInitEnc), i2cTimeout)) { - ERROR("%s : init fail (enc)", __func__); - goto bail; - } + pec->encrypt = true; - // Copy the (symmetric) encryption key to the controller state table - if(pec->encKey != encKey) memcpy(pec->encKey, encKey, ENC_LEN); + // ** Start the Controller in ENcrytped mode + if ( !furi_hal_i2c_tx(i2cBus,i2cAddr, cmdInitEnc,sizeof(cmdInitEnc), i2cTimeout) ) { + ERROR("%s : init fail (enc)", __func__); + goto bail; + } - // Build the encryption key packet - *ep++ = regEnc; - memcpy(ep, pec->encKey, ENC_LEN); + // Copy the (symmetric) encryption key to the controller state table + if (pec->encKey != encKey) + memcpy(pec->encKey, encKey, ENC_LEN); - // ** Send encryption key (PSK) - if(!furi_hal_i2c_tx(i2cBus, i2cAddr, encTx, (1 + ENC_LEN), i2cTimeout)) { - ERROR("%s : key fail", __func__); - goto bail; - } + // Build the encryption key packet + *ep++ = regEnc; + memcpy(ep, pec->encKey, ENC_LEN); - TRACE("%s : init OK (enc)", __func__); - } + // ** Send encryption key (PSK) + if ( !furi_hal_i2c_tx(i2cBus,i2cAddr, encTx,(1+ENC_LEN), i2cTimeout) ) { + ERROR("%s : key fail", __func__); + goto bail; + } - // === Some devices [eg. Drawsome/uDraw] require additional init code === - if(ecId[pec->init].init && (ecId[pec->init].init(pec) == false)) goto bail; - pec->init = true; + TRACE("%s : init OK (enc)", __func__); + } - // === Read calibration data === - if(!furi_hal_i2c_trx(i2cBus, i2cAddr, ®Cal, 1, pec->calF, CAL_LEN, i2cTimeout)) { - ERROR("%s : trx fail (cal)", __func__); - goto bail; - } - if(pec->encrypt) decrypt(pec->joy, pec->encKey, regJoy, JOY_LEN); - dump(pec->calF, CAL_LEN, "cal"); + // === Some devices [eg. Drawsome/uDraw] require additional init code === + if ( ecId[pec->init].init && (ecId[pec->init].init(pec) == false) ) goto bail ; + pec->init = true; - ecCalibrate(pec, CAL_RESET | CAL_FACTORY); // Load factory default calibration + // === Read calibration data === + if (!furi_hal_i2c_trx(i2cBus,i2cAddr, ®Cal,1, pec->calF,CAL_LEN, i2cTimeout)) { + ERROR("%s : trx fail (cal)", __func__); + goto bail; + } + if (pec->encrypt) decrypt(pec->joy, pec->encKey, regJoy, JOY_LEN); + dump(pec->calF, CAL_LEN, "cal"); - // === Initialise decode buffers === - pec->decN = 0; // read in to decode[1] (yes, N=0 -> read in to dec[1]) - switch(ecRead(pec)) { - case 0: // read OK - memcpy(&pec->dec[0], &pec->dec[1], sizeof(pec->dec[0])); - dump(pec->joy, JOY_LEN, "joy"); - break; + ecCalibrate(pec, CAL_RESET | CAL_FACTORY); // Load factory default calibration - default: // bug: unknown - case 1: // bug: not initialised - should never happen - ERROR("%s : read bug", __func__); - break; + // === Initialise decode buffers === + pec->decN = 0; // read in to decode[1] (yes, N=0 -> read in to dec[1]) + switch (ecRead(pec)) { + case 0: // read OK + memcpy(&pec->dec[0], &pec->dec[1], sizeof(pec->dec[0])); + dump(pec->joy, JOY_LEN, "joy"); + break; - case 2: // device gone - case 3: // read fail - // Logging done by ecRead() - pec->init = false; - goto bail; - } + default: // bug: unknown + case 1: // bug: not initialised - should never happen + ERROR("%s : read bug", __func__); + break; - rv = true; // yay :) + case 2: // device gone + case 3: // read fail + // Logging done by ecRead() + pec->init = false; + goto bail; + } + + rv = true; // yay :) bail: #if 0 //! i2c workaround furi_hal_i2c_release(i2cBus); #endif - LEAVE; - return rv; + LEAVE; + return rv; } diff --git a/applications/plugins/wii_ec_anal/wii_i2c.h b/applications/plugins/wii_ec_anal/wii_i2c.h index efebefcf9..18cb5ee9b 100644 --- a/applications/plugins/wii_ec_anal/wii_i2c.h +++ b/applications/plugins/wii_ec_anal/wii_i2c.h @@ -1,7 +1,7 @@ -#ifndef WII_I2C_H_ -#define WII_I2C_H_ +#ifndef WII_I2C_H_ +#define WII_I2C_H_ -#include +#include //#include "wii_ec.h" @@ -14,11 +14,11 @@ // // After the (special) START "bit"... // the first 8bits (byte) of i2c data are the 7bit i2c Address, -// FOLLOWED by 1bit to signify a READ or WRITE {0=write, 1=read} +// FOLLOWED by 1bit to signify a READ or WRITE {0=write, 1=read} // The data is transmitted BIG-Endian, IE. MSb first [human readable] // So the address actually lives in the TOP (MSb's) of the first "byte", (with bit0 being used as the read/write flag) // -// The read() and write() functions on the FZ will set the LSb appropriately, +// The read() and write() functions on the FZ will set the LSb appropriately, // BUT they do NOT shift the address left to make room for it! // So the address you give to read/write() MUST be given as (7bitAddress << 1) // @@ -26,17 +26,17 @@ // // firmware/targets/f7/furi_hal/furi_hal_i2c_types.h -#define i2cBus (&furi_hal_i2c_handle_external) // FZ external i2c bus -#define i2cAddr (ec_i2cAddr << 1) -#define i2cTimeout (3) // in mS -#define i2cReadWait (300) //! 300uS: how low can we take this? +#define i2cBus (&furi_hal_i2c_handle_external) // FZ external i2c bus +#define i2cAddr (ec_i2cAddr << 1) +#define i2cTimeout (3) // in mS +#define i2cReadWait (300) //! 300uS: how low can we take this? //----------------------------------------------------------------------------- ---------------------------------------- // public functions // -typedef struct wiiEC wiiEC_t; +typedef struct wiiEC wiiEC_t ; -bool ecInit(wiiEC_t* const pec, const uint8_t* encKey); -int ecRead(wiiEC_t* const pec); +bool ecInit (wiiEC_t* const pec, const uint8_t* encKey) ; +int ecRead (wiiEC_t* const pec) ; #endif //WII_I2C_H_