Skip to content

Commit

Permalink
add animation while charging
Browse files Browse the repository at this point in the history
- add 5x7 font
- add animation
- display version after the animation end
- add BOOT state for switching to normal mode while charging
  • Loading branch information
kienvo committed Sep 29, 2024
1 parent 12ce17a commit 907bf59
Show file tree
Hide file tree
Showing 7 changed files with 167 additions and 9 deletions.
1 change: 1 addition & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ src/usb/composite/cdc-serial.c \
src/xbm.c \
src/resource.c \
src/animation.c \
src/font.c \


# ASM sources
Expand Down
100 changes: 100 additions & 0 deletions src/font.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
#include <stdint.h>

uint8_t font5x7[][6] = { //Font 5x7
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 20 ' '
{0x00, 0x00, 0x00, 0x5f, 0x00, 0x00}, // 21 !
{0x00, 0x00, 0x07, 0x00, 0x07, 0x00}, // 22 "
{0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14}, // 23 #
{0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12}, // 24 $
{0x00, 0x23, 0x13, 0x08, 0x64, 0x62}, // 25 %
{0x00, 0x36, 0x49, 0x55, 0x22, 0x50}, // 26 &
{0x00, 0x00, 0x05, 0x03, 0x00, 0x00}, // 27 '
{0x00, 0x00, 0x1c, 0x22, 0x41, 0x00}, // 28 (
{0x00, 0x00, 0x41, 0x22, 0x1c, 0x00}, // 29 )
{0x00, 0x14, 0x08, 0x3e, 0x08, 0x14}, // 2a *
{0x00, 0x08, 0x08, 0x3e, 0x08, 0x08}, // 2b +
{0x00, 0x00, 0x50, 0x30, 0x00, 0x00}, // 2c ,
{0x00, 0x08, 0x08, 0x08, 0x08, 0x08}, // 2d -
{0x00, 0x00, 0x60, 0x60, 0x00, 0x00}, // 2e .
{0x00, 0x20, 0x10, 0x08, 0x04, 0x02}, // 2f /
{0x00, 0x3e, 0x51, 0x49, 0x45, 0x3e}, // 30 0
{0x00, 0x00, 0x42, 0x7f, 0x40, 0x00}, // 31 1
{0x00, 0x42, 0x61, 0x51, 0x49, 0x46}, // 32 2
{0x00, 0x21, 0x41, 0x45, 0x4b, 0x31}, // 33 3
{0x00, 0x18, 0x14, 0x12, 0x7f, 0x10}, // 34 4
{0x00, 0x27, 0x45, 0x45, 0x45, 0x39}, // 35 5
{0x00, 0x3c, 0x4a, 0x49, 0x49, 0x30}, // 36 6
{0x00, 0x01, 0x71, 0x09, 0x05, 0x03}, // 37 7
{0x00, 0x36, 0x49, 0x49, 0x49, 0x36}, // 38 8
{0x00, 0x06, 0x49, 0x49, 0x29, 0x1e}, // 39 9
{0x00, 0x00, 0x36, 0x36, 0x00, 0x00}, // 3a :
{0x00, 0x00, 0x56, 0x36, 0x00, 0x00}, // 3b ;
{0x00, 0x08, 0x14, 0x22, 0x41, 0x00}, // 3c <
{0x00, 0x14, 0x14, 0x14, 0x14, 0x14}, // 3d =
{0x00, 0x00, 0x41, 0x22, 0x14, 0x08}, // 3e >
{0x00, 0x02, 0x01, 0x51, 0x09, 0x06}, // 3f ?
{0x00, 0x32, 0x49, 0x79, 0x41, 0x3e}, // 40 @
{0x00, 0x7e, 0x11, 0x11, 0x11, 0x7e}, // 41 A
{0x00, 0x7f, 0x49, 0x49, 0x49, 0x36}, // 42 B
{0x00, 0x3e, 0x41, 0x41, 0x41, 0x22}, // 43 C
{0x00, 0x7f, 0x41, 0x41, 0x22, 0x1c}, // 44 D
{0x00, 0x7f, 0x49, 0x49, 0x49, 0x41}, // 45 E
{0x00, 0x7f, 0x09, 0x09, 0x09, 0x01}, // 46 F
{0x00, 0x3e, 0x41, 0x49, 0x49, 0x7a}, // 47 G
{0x00, 0x7f, 0x08, 0x08, 0x08, 0x7f}, // 48 H
{0x00, 0x00, 0x41, 0x7f, 0x41, 0x00}, // 49 I
{0x00, 0x20, 0x40, 0x41, 0x3f, 0x01}, // 4a J
{0x00, 0x7f, 0x08, 0x14, 0x22, 0x41}, // 4b K
{0x00, 0x7f, 0x40, 0x40, 0x40, 0x40}, // 4c L
{0x00, 0x7f, 0x02, 0x0c, 0x02, 0x7f}, // 4d M
{0x00, 0x7f, 0x04, 0x08, 0x10, 0x7f}, // 4e N
{0x00, 0x3e, 0x41, 0x41, 0x41, 0x3e}, // 4f O
{0x00, 0x7f, 0x09, 0x09, 0x09, 0x06}, // 50 P
{0x00, 0x3e, 0x41, 0x51, 0x21, 0x5e}, // 51 Q
{0x00, 0x7f, 0x09, 0x19, 0x29, 0x46}, // 52 R
{0x00, 0x46, 0x49, 0x49, 0x49, 0x31}, // 53 S
{0x00, 0x01, 0x01, 0x7f, 0x01, 0x01}, // 54 T
{0x00, 0x3f, 0x40, 0x40, 0x40, 0x3f}, // 55 U
{0x00, 0x1f, 0x20, 0x40, 0x20, 0x1f}, // 56 V
{0x00, 0x3f, 0x40, 0x38, 0x40, 0x3f}, // 57 W
{0x00, 0x63, 0x14, 0x08, 0x14, 0x63}, // 58 X
{0x00, 0x07, 0x08, 0x70, 0x08, 0x07}, // 59 Y
{0x00, 0x61, 0x51, 0x49, 0x45, 0x43}, // 5a Z
{0x00, 0x00, 0x7f, 0x41, 0x41, 0x00}, // 5b [
{0x00, 0x02, 0x04, 0x08, 0x10, 0x20}, // 5c ¥
{0x00, 0x00, 0x41, 0x41, 0x7f, 0x00}, // 5d ]
{0x00, 0x04, 0x02, 0x01, 0x02, 0x04}, // 5e ^
{0x00, 0x40, 0x40, 0x40, 0x40, 0x40}, // 5f _
{0x00, 0x00, 0x01, 0x02, 0x04, 0x00}, // 60 `
{0x00, 0x20, 0x54, 0x54, 0x54, 0x78}, // 61 a
{0x00, 0x7f, 0x48, 0x44, 0x44, 0x38}, // 62 b
{0x00, 0x38, 0x44, 0x44, 0x44, 0x20}, // 63 c
{0x00, 0x38, 0x44, 0x44, 0x48, 0x7f}, // 64 d
{0x00, 0x38, 0x54, 0x54, 0x54, 0x18}, // 65 e
{0x00, 0x08, 0x7e, 0x09, 0x01, 0x02}, // 66 f
{0x00, 0x0c, 0x52, 0x52, 0x52, 0x3e}, // 67 g
{0x00, 0x7f, 0x08, 0x04, 0x04, 0x78}, // 68 h
{0x00, 0x00, 0x44, 0x7d, 0x40, 0x00}, // 69 i
{0x00, 0x20, 0x40, 0x44, 0x3d, 0x00}, // 6a j
{0x00, 0x7f, 0x10, 0x28, 0x44, 0x00}, // 6b k
{0x00, 0x00, 0x41, 0x7f, 0x40, 0x00}, // 6c l
{0x00, 0x7c, 0x04, 0x18, 0x04, 0x78}, // 6d m
{0x00, 0x7c, 0x08, 0x04, 0x04, 0x78}, // 6e n
{0x00, 0x38, 0x44, 0x44, 0x44, 0x38}, // 6f o
{0x00, 0x7c, 0x14, 0x14, 0x14, 0x08}, // 70 p
{0x00, 0x08, 0x14, 0x14, 0x18, 0x7c}, // 71 q
{0x00, 0x7c, 0x08, 0x04, 0x04, 0x08}, // 72 r
{0x00, 0x48, 0x54, 0x54, 0x54, 0x20}, // 73 s
{0x00, 0x04, 0x3f, 0x44, 0x40, 0x20}, // 74 t
{0x00, 0x3c, 0x40, 0x40, 0x20, 0x7c}, // 75 u
{0x00, 0x1c, 0x20, 0x40, 0x20, 0x1c}, // 76 v
{0x00, 0x3c, 0x40, 0x30, 0x40, 0x3c}, // 77 w
{0x00, 0x44, 0x28, 0x10, 0x28, 0x44}, // 78 x
{0x00, 0x0c, 0x50, 0x50, 0x50, 0x3c}, // 79 y
{0x00, 0x44, 0x64, 0x54, 0x4c, 0x44}, // 7a z
{0x00, 0x00, 0x08, 0x36, 0x41, 0x00}, // 7b {
{0x00, 0x00, 0x00, 0x7f, 0x00, 0x00}, // 7c |
{0x00, 0x00, 0x41, 0x36, 0x08, 0x00}, // 7d }
{0x00, 0x10, 0x08, 0x08, 0x10, 0x08}, // 7e ->
{0x00, 0x78, 0x46, 0x41, 0x46, 0x78} // 7f <-
};
8 changes: 8 additions & 0 deletions src/font.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#ifndef __FONT_H__
#define __FONT_H__

#include <stdint.h>

extern uint8_t font5x7[][6]; // Font 5x7

#endif /* __FONT_H__ */
44 changes: 35 additions & 9 deletions src/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
#include "bmlist.h"
#include "resource.h"
#include "animation.h"
#include "font.h"

#include "power.h"
#include "data.h"
Expand All @@ -25,7 +26,8 @@
(v) = (min)

enum MODES {
NORMAL = 0,
BOOT = 0,
NORMAL,
DOWNLOAD,
POWER_OFF,
MODES_COUNT,
Expand Down Expand Up @@ -383,16 +385,38 @@ static int bat_raw2percent(int r)
return 100;
}

static void fb_putchar(char c, int col, int row)
{
for (int i=0; i < 6; i++) {
if (col + i >= LED_COLS) break;
fb[col + i] = (fb[col + i] & ~(0x7f << row))
| (font5x7[c - ' '][i] << row);
}
}

static void fb_puts(char *s, int len, int col, int row)
{
while (*s && len--) {
fb_putchar(*s, col, row);
col += 6;
s++;
}
}

static void disp_charging()
{
int blink = 0;
while (1) {
while (mode == BOOT) {
int percent = bat_raw2percent(read_batt_raw());

if (is_charging()) {
disp_bat_stt(blink ? percent : 0, 7, 2);
disp_bat_stt(blink ? percent : 0, 2, 2);
if (ani_xbm_next_frame(&fabm_xbm, fb, 16, 0) == 0) {
fb_puts("v0.1", 4, 16, 2); // TODO: get version from git tag
fb_putchar(' ', 40, 2);
}
blink = !blink;
DelayMs(300);
DelayMs(500);
} else {
disp_bat_stt(percent, 7, 2);
DelayMs(500);
Expand All @@ -419,20 +443,22 @@ int main()

bmlist_init(LED_COLS * 4);

btn_init();
btn_onOnePress(KEY1, change_mode);
btn_onOnePress(KEY2, bm_transition);
btn_onLongPress(KEY1, change_brightness);

disp_charging();

play_splash(&splash, 0, 0);

load_bmlist();

btn_init();
btn_onOnePress(KEY1, change_mode);
btn_onOnePress(KEY2, bm_transition);
btn_onLongPress(KEY1, change_brightness);

ble_setup();

spawn_tasks();

mode = NORMAL;
while (1) {
handle_mode_transition();
TMOS_SystemProcess();
Expand Down
14 changes: 14 additions & 0 deletions src/res/fossasia-badgemagic-ani.xbm
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#define fossasia_badgemagic_ani_width 26
#define fossasia_badgemagic_ani_height 33
static unsigned char fossasia_badgemagic_ani_bits[] = {
0x9c, 0xc7, 0xe7, 0x03, 0x42, 0x28, 0x10, 0x00, 0x5f, 0xc8, 0xe3, 0x01,
0x42, 0x08, 0x04, 0x02, 0x82, 0xe7, 0xf3, 0x01, 0x02, 0x00, 0x00, 0x00,
0x3e, 0x7c, 0xf2, 0x01, 0x40, 0x02, 0x02, 0x02, 0x7e, 0x3c, 0xf2, 0x03,
0x42, 0x40, 0x12, 0x02, 0x7c, 0x3e, 0xe2, 0x03, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x73, 0x9c, 0x03,
0xa2, 0x94, 0x42, 0x00, 0x9e, 0x94, 0xc2, 0x01, 0xa2, 0x97, 0x5a, 0x00,
0xa2, 0x94, 0x52, 0x00, 0x9e, 0x74, 0x9c, 0x03, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x22, 0xe3, 0xce, 0x01, 0xb6, 0x14, 0x24, 0x00,
0xaa, 0x14, 0x24, 0x00, 0xa2, 0xd7, 0x24, 0x00, 0xa2, 0x94, 0x24, 0x00,
0xa2, 0xe4, 0xce, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
8 changes: 8 additions & 0 deletions src/resource.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
#include "res/foss-asia-2.xbm"
#include "res/bat-icon.xbm"
#include "res/bat-warn-icon.xbm"
#include "res/fossasia-badgemagic-ani.xbm"

xbm_t bluetooth = {
.bits = bluetooth_bits,
Expand Down Expand Up @@ -31,4 +32,11 @@ xbm_t batwarn_xbm = {
.w = bat_warn_icon_width,
.h = bat_warn_icon_height,
.fh = 11
};

xbm_t fabm_xbm = {
.bits = fossasia_badgemagic_ani_bits,
.w = fossasia_badgemagic_ani_width,
.h = fossasia_badgemagic_ani_height,
.fh = 11
};
1 change: 1 addition & 0 deletions src/resource.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,6 @@ extern xbm_t bluetooth;
extern xbm_t splash;
extern xbm_t bat_xbm;
extern xbm_t batwarn_xbm;
extern xbm_t fabm_xbm; // FOSSASIA-BADGEMAGIC animation

#endif /* __RES_H__ */

0 comments on commit 907bf59

Please sign in to comment.