21 Commits

Author SHA1 Message Date
Ivan Zorin
474fc5923b Make -m MODEL argument compatible with the main IronOS project build files & configs (+unify code style a bit) (#40)
* Add model name input argument compatibility with main IronOS project

* Fix var name according to PEP8 / code review
2023-10-27 04:44:33 +00:00
Ben V. Brown
b5e55ee1f1 Update README.md 2023-10-18 21:07:25 +11:00
Federico Di Lorenzo
5ec3a16c3f Add files via upload (#39)
* Add files via upload

* Update README.md
2023-08-21 09:11:45 +10:00
@MJerich MJerich
b313a84e10 new hack_the_planet image (#38)
* added hack_the_planet.png

* changed image url to match in the original repo
2023-08-06 23:03:35 +00:00
Ben V. Brown
3b02e3ea6f Expanding supported devices (#35) 2023-08-01 22:02:03 +10:00
Ben V. Brown
c10a130329 -j to zip 2022-08-21 15:42:15 +10:00
Ben V. Brown
6e9ed602a2 Update release.yml 2022-08-20 23:53:10 +10:00
Ben V. Brown
d39d58d79a Update release.yml 2022-08-20 23:52:26 +10:00
Ben V. Brown
248b2b5806 Test auto release 2022-08-20 23:51:06 +10:00
discip
9eed4b2dd4 removed some redundant entries (#28) 2022-08-20 23:24:59 +10:00
Ben V. Brown
1a5c7ac5f6 Update to generate nicer flipped logo file names (#29)
* Update img2logo.py

* Update img2logo.py
2022-08-20 23:03:45 +10:00
River B
92f4d50a73 add preview images and install instructions (#25)
* Add files via upload

* Create Install_Logo

* Update README.md

* Update README.md

* Update README.md

* Update README.md

* Update README.md

* Update README.md

* Update README.md

* Update README.md

* Update README.md

* Update README.md

* Update README.md
2022-08-20 11:21:25 +10:00
discip
c252b67c9a updated IronOS.gif (#27) 2022-08-10 11:08:02 +10:00
discip
2dd99ff5aa removed deprecated notes (#26) 2022-08-07 11:56:42 +10:00
Ben V. Brown
bd70b17cd6 Correct rotation for animations 2022-08-06 21:59:46 +10:00
Ben V. Brown
2942212437 Always make normal and flipped 2022-08-06 21:55:41 +10:00
Ben V. Brown
3c62bb7fe1 Remove _L files 2022-08-06 21:40:22 +10:00
Ben V. Brown
32e4db09ac Build flipped images in CI 2022-08-06 21:35:34 +10:00
Ben V. Brown
fbf0a8ac63 Add command line argument to rotate image 180 deg 2022-08-06 21:33:15 +10:00
Ben V. Brown
f4e5717e34 Print what file is being converted 2022-08-06 21:21:18 +10:00
River B
466022c12f Add files via upload (#19)
Adding extra logo's
2022-08-03 19:15:48 +10:00
20 changed files with 195 additions and 29 deletions

View File

@@ -10,17 +10,19 @@ jobs:
strategy:
matrix:
include:
- args: "-m"
model: "miniware"
- args: "-p"
model: "pinecil"
- model: "miniware"
- model: "pinecilv1"
- model: "pinecilv2"
- model: "mhp30"
- model: "ts101"
- model: "s60"
fail-fast: true
steps:
- name: Install dependencies (apk)
run: apk add --no-cache git python3 py3-pip zlib py3-pillow
- uses: actions/checkout@v2
- uses: actions/checkout@v3
with:
submodules: true
@@ -28,13 +30,13 @@ jobs:
run: mkdir -p /tmp/${{ matrix.model }}
- name: build all files for the device
run: cd Bootup\ Logos && ./run.sh /tmp/${{ matrix.model }}/ ${{matrix.args}}
run: cd Bootup\ Logos && ./run.sh /tmp/${{ matrix.model }}/ -m ${{matrix.model}}
- name: build logo erase file
run: cd Bootup\ Logos && python3 img2logo.py -E erase_stored_image /tmp/${{ matrix.model }}/ ${{matrix.args}}
run: cd Bootup\ Logos && python3 img2logo.py -E erase_stored_image /tmp/${{ matrix.model }}/ -m ${{matrix.model}}
- name: Archive artifacts
uses: actions/upload-artifact@v2
uses: actions/upload-artifact@v3
with:
name: ${{ matrix.model }}
path: |

69
.github/workflows/release.yml vendored Normal file
View File

@@ -0,0 +1,69 @@
---
name: "release"
on:
push:
branches:
- "main"
jobs:
release:
name: "Release"
runs-on: "ubuntu-22.04"
steps:
- name: Install dependencies (apk)
run: sudo apt update && sudo apt-get install -y git python3 python3-pillow
- uses: actions/checkout@v3
with:
submodules: true
- name: prep
run: |
mkdir -p /tmp/pinecilv1 && \
mkdir -p /tmp/pinecilv2 && \
mkdir -p /tmp/miniware && \
mkdir -p /tmp/ts101 && \
mkdir -p /tmp/mhp30 && \
mkdir -p /tmp/s60
- name: build all files for the device
run: |
cd Bootup\ Logos && \
./run.sh /tmp/pinecilv1/ -m pinecilv1 && \
./run.sh /tmp/pinecilv2/ -m pinecilv2 && \
./run.sh /tmp/miniware/ -m miniware && \
./run.sh /tmp/ts101/ -m ts101 && \
./run.sh /tmp/mhp30/ -m mhp30 && \
./run.sh /tmp/s60/ -m s60
- name: build logo erase file
run: |
cd Bootup\ Logos && \
python3 img2logo.py -E erase_stored_image /tmp/pinecilv1/ -m pinecilv1 && \
python3 img2logo.py -E erase_stored_image /tmp/pinecilv2/ -m pinecilv2 && \
python3 img2logo.py -E erase_stored_image /tmp/miniware/ -m miniware && \
python3 img2logo.py -E erase_stored_image /tmp/ts101/ -m ts101 && \
python3 img2logo.py -E erase_stored_image /tmp/mhp30/ -m mhp30 && \
python3 img2logo.py -E erase_stored_image /tmp/s60/ -m s60
- name: compress logo files
run: |
zip -rj pinecilv1.zip /tmp/pinecilv1/* && \
zip -rj miniware.zip /tmp/miniware/* && \
zip -rj pinecilv2.zip /tmp/pinecilv2/* && \
zip -rj ts101.zip /tmp/ts101/* && \
zip -rj mhp30.zip /tmp/mhp30/* && \
zip -rj s60.zip /tmp/s60/*
- uses: "marvinpinto/action-automatic-releases@latest"
with:
repo_token: "${{ secrets.GITHUB_TOKEN }}"
automatic_release_tag: "latest"
prerelease: false
title: "Release"
files: |
*.zip

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 300 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 269 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 259 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 245 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 263 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 262 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 876 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 302 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@@ -1,3 +1,5 @@
# Boot up Logos
## Boot up logo's are logos or animations shown on boot of IronOS
These are programmed into the device just like the normal firmware.
@@ -33,25 +35,31 @@ This just overwrites individual bytes in the output buffer.
|![Alt text](https://github.com/Ralim/IronOS-Meta/blob/main/Bootup%20Logos/Images/arcade_galaga.png)|arcade_galaga.png||
|![Alt text](https://github.com/Ralim/IronOS-Meta/blob/main/Bootup%20Logos/Images/arcade_pac_man.png)|arcade_pac_man.png||
|![Alt text](https://github.com/Ralim/IronOS-Meta/blob/main/Bootup%20Logos/Images/bender.png)|bender.png||
|![Alt text](https://github.com/Ralim/IronOS-Meta/blob/main/Bootup%20Logos/Images/doggie_bone.png)|doggie_bone.png||
|![Alt text](https://github.com/Ralim/IronOS-Meta/blob/main/Bootup%20Logos/Images/f1.png)|f1.png||
|![Alt text](https://github.com/Ralim/IronOS-Meta/blob/main/Bootup%20Logos/Images/halo_master_chief_helmet.png)|halo_master_chief_helmet.png||
|![Alt text](https://github.com/Ralim/IronOS-Meta/blob/main/Bootup%20Logos/Images/horror_vacui_IronOS.png)|horror_vacui_IronOS.png||
|![IronOS](https://github.com/Ralim/IronOS-Meta/blob/main/Bootup%20Logos/Images/IronOS.png)|IronOS.png|lefty-version available|
|![IronOS](https://github.com/Ralim/IronOS-Meta/blob/main/Bootup%20Logos/Images/IronOS.png)|IronOS.png||
|![Alt text](https://github.com/Ralim/IronOS-Meta/blob/main/Bootup%20Logos/Images/Logo1b.png)|Logo1b.png||
|![Alt text](https://github.com/Ralim/IronOS-Meta/blob/main/Bootup%20Logos/Images/lot_of_tin_is_too_few_tin_IT.png)|lot_of_tin_is_too_few_tin_IT.png|English: "A lot of tin is too few tin"|
|![Alt text](https://github.com/Ralim/IronOS-Meta/blob/main/Bootup%20Logos/Images/majorTom.png)|majorTom.png||
|![Alt text](https://github.com/Ralim/IronOS-Meta/blob/main/Bootup%20Logos/Images/open_sw_hw_IronOS_logos.png)|open_sw_hw_IronOS_logos.png||
|![Pinecil](https://github.com/Ralim/IronOS-Meta/blob/main/Bootup%20Logos/Images/Pinecil.png)|Pinecil.png|lefty-version available|
|![Pinecil](https://github.com/Ralim/IronOS-Meta/blob/main/Bootup%20Logos/Images/Pinecil.png)|Pinecil.png||
|![Alt text](https://github.com/Ralim/IronOS-Meta/blob/main/Bootup%20Logos/Images/science.png)|science.png||
|![Alt text](https://github.com/Ralim/IronOS-Meta/blob/main/Bootup%20Logos/Images/skulls.png)|skulls.png||
|![TS100](https://github.com/Ralim/IronOS-Meta/blob/main/Bootup%20Logos/Images/TS100.png)|TS100.png|lefty-version available|
|![TS80](https://github.com/Ralim/IronOS-Meta/blob/main/Bootup%20Logos/Images/TS80.png)|TS80.png|lefty-version available|
|![TS80P](https://github.com/Ralim/IronOS-Meta/blob/main/Bootup%20Logos/Images/TS80P.png)|TS80P.png|lefty-version available|
|![TS100](https://github.com/Ralim/IronOS-Meta/blob/main/Bootup%20Logos/Images/TS100.png)|TS100.png||
|![TS80](https://github.com/Ralim/IronOS-Meta/blob/main/Bootup%20Logos/Images/TS80.png)|TS80.png||
|![TS80P](https://github.com/Ralim/IronOS-Meta/blob/main/Bootup%20Logos/Images/TS80P.png)|TS80P.png||
|![Alt text](https://github.com/Ralim/IronOS-Meta/blob/main/Bootup%20Logos/Images/wh_40k.png)|wh_40k.png||
|![Alt text](https://github.com/Ralim/IronOS-Meta/blob/main/Bootup%20Logos/Images/wwii_kilroy.png)|wwii_kilroy.png||
|![Alt text](https://github.com/Ralim/IronOS-Meta/blob/main/Bootup%20Logos/Images/hack_the_planet.png)|hack_the_planet.png||
**Animated logos**
|Logo \* |Filename |Note |
|:-------------:|:-------------:|:-----:|
|![Alt text](https://github.com/Ralim/IronOS-Meta/blob/main/Bootup%20Logos/Images/CRT_horror_vacui.gif) |CRT_horror_vacui.gif||
|![IronOS](https://github.com/Ralim/IronOS-Meta/blob/main/Bootup%20Logos/Images/IronOS.gif)|IronOS.gif|lefty-version available|
|![IronOS](https://github.com/Ralim/IronOS-Meta/blob/main/Bootup%20Logos/Images/IronOS.gif)|IronOS.gif||
|![Alt text](https://github.com/Ralim/IronOS-Meta/blob/main/Bootup%20Logos/Images/terminal.gif)|terminal.gif||
|![Alt text](https://github.com/Ralim/IronOS-Meta/blob/main/Bootup%20Logos/Images/hack_the_planet.gif)|hack_the_planet.gif||
_* Click the individual logo to see its animation, if you missed it here._

View File

@@ -32,6 +32,26 @@ class MiniwareSettings:
DFU_PINECIL_VENDOR = 0x1209
DFU_PINECIL_PRODUCT = 0xDB42
class S60Settings:
IMAGE_ADDRESS = 0x08000000 + (62 * 1024)
DFU_TARGET_NAME = b"IronOS-dfu"
DFU_PINECIL_ALT = 0
DFU_PINECIL_VENDOR = 0x1209
DFU_PINECIL_PRODUCT = 0xDB42
class TS101Settings:
IMAGE_ADDRESS = 0x08000000 + (126 * 1024)
DFU_TARGET_NAME = b"IronOS-dfu"
DFU_PINECIL_ALT = 0
DFU_PINECIL_VENDOR = 0x1209
DFU_PINECIL_PRODUCT = 0xDB42
class MHP30Settings:
IMAGE_ADDRESS = 0x08000000 + (126 * 1024)
DFU_TARGET_NAME = b"IronOS-dfu"
DFU_PINECIL_ALT = 0
DFU_PINECIL_VENDOR = 0x1209
DFU_PINECIL_PRODUCT = 0xDB42
class PinecilSettings:
IMAGE_ADDRESS = 0x0801F800
@@ -40,6 +60,13 @@ class PinecilSettings:
DFU_PINECIL_VENDOR = 0x28E9
DFU_PINECIL_PRODUCT = 0x0189
class Pinecilv2Settings:
IMAGE_ADDRESS = (1016 * 1024) # its 2 4k erase pages inset
DFU_TARGET_NAME = b"Pinecilv2"
DFU_PINECIL_ALT = 0
DFU_PINECIL_VENDOR = 0x28E9 # These are ignored by blisp so doesnt matter what we use
DFU_PINECIL_PRODUCT = 0x0189 # These are ignored by blisp so doesnt matter what we use
def still_image_to_bytes(image: Image, negative: bool, dither: bool, threshold: int, preview_filename):
# convert to luminance
@@ -117,7 +144,7 @@ def get_screen_blob(previous_frame: bytearray, this_frame: bytearray):
return outputData
def animated_image_to_bytes(imageIn: Image, negative: bool, dither: bool, threshold: int):
def animated_image_to_bytes(imageIn: Image, negative: bool, dither: bool, threshold: int, flip_frames):
"""
Convert the gif into our best effort startup animation
We are delta-encoding on a byte by byte basis
@@ -136,6 +163,8 @@ def animated_image_to_bytes(imageIn: Image, negative: bool, dither: bool, thresh
for framenum in range(0, imageIn.n_frames):
imageIn.seek(framenum)
image = imageIn
if flip_frames:
image = image.rotate(180)
frameb = still_image_to_bytes(image, negative, dither, threshold, None)
frameData.append(frameb)
@@ -188,13 +217,14 @@ def animated_image_to_bytes(imageIn: Image, negative: bool, dither: bool, thresh
def img2hex(
input_filename,
device_model_name:str,
preview_filename=None,
threshold=128,
dither=False,
negative=False,
isPinecil=False,
make_erase_image=False,
output_filename_base="out",
flip=False,
):
"""
Convert 'input_filename' image file into Intel hex format with data
@@ -219,8 +249,10 @@ def img2hex(
raise IOError('error reading image file "{}": {}'.format(input_filename, e))
if getattr(image, "is_animated", False):
data = animated_image_to_bytes(image, negative, dither, threshold)
data = animated_image_to_bytes(image, negative, dither, threshold,flip)
else:
if flip:
image = image.rotate(180)
# magic/required header
data = [DATA_PROGRAMMED_MARKER, 0x00] # Timing value of 0
image_bytes = still_image_to_bytes(image, negative, dither, threshold, preview_filename)
@@ -230,11 +262,35 @@ def img2hex(
if len(data) < LCD_PAGE_SIZE:
pad = [0] * (LCD_PAGE_SIZE - len(data))
data.extend(pad)
# Set device settings depending on input `-m` argument
device_name = device_model_name.lower()
if device_name == "miniware" or device_name == "ts100" or device_name == "ts80" or device_name == "ts80p":
deviceSettings = MiniwareSettings
if isPinecil:
elif device_name == "pinecilv1" or device_name == "pinecil":
deviceSettings = PinecilSettings
# Generate both possible outputs
output_name = output_filename_base + os.path.basename(input_filename)
elif device_name == "pinecilv2":
deviceSettings = Pinecilv2Settings
elif device_name == "ts101":
deviceSettings = TS101Settings
elif device_name == "s60":
deviceSettings = S60Settings
elif device_name == "mhp30":
deviceSettings = MHP30Settings
else:
print("Could not determine device type")
sys.exit(-1)
# Split name from extension so we can mangle in the _L suffix for flipped images
split_name = os.path.splitext( os.path.basename(input_filename))
if flip:
base = split_name[0]
ext = split_name[1]
base =base+"_L"
split_name = [base,ext]
output_name = output_filename_base +split_name[0] +split_name[1]
DFUOutput.writeFile(
output_name + ".dfu",
data,
@@ -273,9 +329,10 @@ def parse_commandline():
"-n",
"--negative",
action="store_true",
help="photo negative: exchange black and white " "in output",
help="photo negative: exchange black and white in output",
)
parser.add_argument(
"-t",
"--threshold",
@@ -298,8 +355,7 @@ def parse_commandline():
help="generate a logo erase file instead of a logo",
)
parser.add_argument("-p", "--pinecil", action="store_true", help="generate files for Pinecil")
parser.add_argument("-m", "--miniware", action="store_true", help="generate files for miniware")
parser.add_argument("-m", "--model", help="device model name")
parser.add_argument(
"-v",
"--version",
@@ -319,17 +375,30 @@ if __name__ == "__main__":
sys.stderr.write('Won\'t overwrite existing file "{}" (use --force ' "option to override)\n".format(args.preview))
sys.exit(1)
if args.miniware == False and args.pinecil == False:
sys.stderr.write("You must provide --miniware or --pinecil to select your model")
sys.exit(1)
print(f"Converting {args.input_filename} => {args.output_filename}")
img2hex(
input_filename=args.input_filename,
output_filename_base=args.output_filename,
device_model_name=args.model,
preview_filename=args.preview,
threshold=args.threshold,
dither=args.dither,
negative=args.negative,
make_erase_image=args.erase,
isPinecil=args.pinecil,
flip = False,
)
img2hex(
input_filename=args.input_filename,
output_filename_base=args.output_filename,
device_model_name=args.model,
preview_filename=args.preview,
threshold=args.threshold,
dither=args.dither,
negative=args.negative,
make_erase_image=args.erase,
flip = True,
)

View File

@@ -2,4 +2,4 @@
echo $1
echo $2
set -e
find Images/ -type f -exec python3 img2logo.py {} "$1" "$2" \;
find Images/ -type f -exec python3 img2logo.py {} "$1" "$2" "$3" \;

1
Documents/Install_Logo Normal file
View File

@@ -0,0 +1 @@

View File

@@ -6,3 +6,20 @@ This includes photographs of hardware, datasheets, schematics and of course **bo
This repository uses github actions to automagically build the logos for each device.
Periodically a "release" will be tagged and pre-compiled logo's will be put there as well to make it easy.
# Boot-Up Logos
The IronOS firmware supports a user created bootup logo.
By default, there is _not_ one included in the firmware. This means that once flashed they generally stay. If you want no logo again, you would have to flash a blank image to the bootup logo.
- Safe & Fun: will not over write your firmware
- Easy install: use dfu tool just like updating firmware (or Pine64 Updater if you have a Pinecil).
## Generating the Logo files
There are community logo's already converted and ready to use in [IronOS-Meta/releases](https://github.com/Ralim/IronOS-Meta/releases).
Download the zip for Pinecil or Miniware and then install using the instructions on the [main IronOS documentation](https://ralim.github.io/IronOS/Logo/).
Alternatively if you want to make your own logo files, there is also documentation on how best to do this in the [main IronOS documentation](https://ralim.github.io/IronOS/Logo/).