From 879bdccd92ad07c1f477ce77474fce52f5cc6bb1 Mon Sep 17 00:00:00 2001
From: liamcharger <105521623+liamcharger@users.noreply.github.com>
Date: Wed, 23 Oct 2024 13:00:48 -0400
Subject: [PATCH] README: Header redesign (#2032)
* Reformat README.md
* Update README.md
* Add files via upload
* Add files via upload
* Add new README.md header image
* Remove unnecessary
tag
* Scale watchface logo down; add downloads badge
* Remove unnecessary
tag
* Add
tag to maintain spacing consistency
* Remove incorrect link
* Add watchface logo with dark logo
* Replace logo image with dark version
* Add files via upload
* Add header image
* Fix row spacing in header image
* Remove unnecessary
tag
* Add corner radius to header image
* Add files via upload
* Update image background
* Add reference to InfiniTimeExplorer
* Remove unnecessary image
* Remove unnecessary image
* Remove unnecessary images
* Rename watchface_collage_no_shadow.png to watchface_collage.png
* Update header image URL
* Remove unnecessary
tag
* SPI transaction hooks
* Remove task to notify
* Refactor display WriteToRam
* Use functional abstraction for hooks
* Refactor lambdas
* Avoid storing lambda
* Rename to pre-transaction hook
* Use FreeRTOS delay instead of spinning the CPU
* Apply display driver datasheet delays
* Move includes back
* Include task header (Fixes sim)
* Make chime vibrate twice
* Remove commit from main
* README: improve wording
* Add bootloader to DeviceInformationService.cpp
* Add bootloader to DeviceInformationService.h
* Revert "Add bootloader to DeviceInformationService.h"
This reverts commit f3f0fd568d96dea1ebd30529b4b8b6d5f4d5444b.
* Revert "Add bootloader to DeviceInformationService.cpp"
This reverts commit 35570edafab1b061442ae89b01a2ced8b9a812bd.
* Delete doc/logo/watchface_collage.png
* Add files via upload
* Delete doc/logo/watchface_collage.png
* Add files via upload
* Replace collage with correct image
---------
Co-authored-by: mark9064 <30447455+mark9064@users.noreply.github.com>
---
README.md | 29 +++++++++++++++++++++++++----
doc/logo/watchface_collage.png | Bin 0 -> 865794 bytes
2 files changed, 25 insertions(+), 4 deletions(-)
create mode 100644 doc/logo/watchface_collage.png
diff --git a/README.md b/README.md
index 765d5d4b..d24f2bb6 100644
--- a/README.md
+++ b/README.md
@@ -1,8 +1,24 @@
-# [InfiniTime](https://github.com/InfiniTimeOrg/InfiniTime)
+
-![InfiniTime logo](doc/logo/infinitime-logo-small.jpg "InfiniTime Logo")
+![Header Image](doc/logo/watchface_collage.png)
-Fast open-source firmware for the [PineTime smartwatch](https://pine64.org/devices/pinetime/) with many features, written in modern C++.
+
+
+[![GitHub tag](https://img.shields.io/github/tag/InfiniTimeOrg/InfiniTime?include_prereleases=&sort=semver&color=blue)](https://github.com/InfiniTimeOrg/InfiniTime/releases)
+[![GitHub License](https://img.shields.io/github/license/InfiniTimeOrg/InfiniTime)](https://github.com/InfiniTimeOrg/InfiniLink/blob/main/LICENSE)
+[![Issues - InfiniTime](https://img.shields.io/github/issues/InfiniTimeOrg/InfiniTime)](https://github.com/InfiniTimeOrg/InfiniTime/issues)
+[![Pull Requests - InfiniTime](https://img.shields.io/github/issues-pr/InfiniTimeOrg/InfiniTime)](https://github.com/InfiniTimeOrg/InfiniTime/pulls)
+[![Downloads - InfiniTime](https://img.shields.io/github/downloads/InfiniTimeOrg/InfiniTime/total)](https://github.com/InfiniTimeOrg/InfiniTime)
+[![Stars - InfiniTime](https://img.shields.io/github/stars/InfiniTimeOrg/InfiniTime?style=social)](https://github.com/InfiniTimeOrg/InfiniTime/stargazers)
+[![Forks - InfiniTime](https://img.shields.io/github/forks/InfiniTimeOrg/InfiniTime?style=social)](https://github.com/InfiniTimeOrg/InfiniTime/network/members)
+
+# InfiniTime
+
+*Fast open-source firmware for the [PineTime smartwatch](https://pine64.org/devices/pinetime/) with many features, written in modern C++.*
+
+
+
+
## New to InfiniTime?
@@ -22,8 +38,13 @@ Fast open-source firmware for the [PineTime smartwatch](https://pine64.org/devic
- [InfiniLink](https://github.com/InfiniTimeOrg/InfiniLink) (iOS)
- [ITD](https://gitea.elara.ws/Elara6331/itd) (Linux)
- [WatchMate](https://github.com/azymohliad/watchmate) (Linux)
+- [InfiniTimeExplorer](https://infinitimeexplorer.netlify.app) (Web)
-***Note**: We removed mentions to NRFConnect as this app is closed source and recent versions do not work anymore with InfiniTime (the last version known to work is 4.24.3). If you used NRFConnect in the past, we recommend you switch to [Gadgetbridge](https://gadgetbridge.org/).*
+
+
+> *InfiniTimeExplorer is only compatible with web browsers that support Web BLE. Current fully supported browsers include Chrome and Microsoft Edge.*
+>
+> *We removed mentions to NRFConnect as this app is closed source and recent versions do not work anymore with InfiniTime (the last version known to work is 4.24.3). If you used NRFConnect in the past, we recommend you switch to [Gadgetbridge](https://gadgetbridge.org/).*
## Development
diff --git a/doc/logo/watchface_collage.png b/doc/logo/watchface_collage.png
new file mode 100644
index 0000000000000000000000000000000000000000..caeb74562f40dc76e54c99bc8c1fce5dffa25f2a
GIT binary patch
literal 865794
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