From 812c6c2612c6aa89c9e2bd356f1b8c2a829d5f6a Mon Sep 17 00:00:00 2001 From: Joey Castillo Date: Sun, 28 Nov 2021 18:03:17 -0500 Subject: more character map edge cases --- watch-library/watch/watch_slcd.c | 38 +++++++++++++++++++++++++++++++------- 1 file changed, 31 insertions(+), 7 deletions(-) (limited to 'watch-library/watch') diff --git a/watch-library/watch/watch_slcd.c b/watch-library/watch/watch_slcd.c index 05c0bf97..a74d4169 100644 --- a/watch-library/watch/watch_slcd.c +++ b/watch-library/watch/watch_slcd.c @@ -31,7 +31,7 @@ static const uint8_t Character_Set[] = { 0b00000000, // - 0b00000000, // ! (unused) + 0b01100000, // ! (L in the top half for positions 4 and 6) 0b00100010, // " 0b01100011, // # (degree symbol, hash mark doesn't fit) 0b00000000, // $ (unused) @@ -177,13 +177,37 @@ void watch_display_character(uint8_t character, uint8_t position) { // special cases for positions 4 and 6 if (position == 4 || position == 6) { if (character == '7') character = '&'; // "lowercase" 7 - if (character == 'v') character = 'u'; // bottom segment duplicated, so show in top half - if (character == 'J') character = 'j'; // same - } else if (position != 4 && position != 6) { + else if (character == 'A') character = 'a'; // A needs to be lowercase + else if (character == 'o') character = 'O'; // O needs to be uppercase + else if (character == 'L') character = '!'; // L needs to be in top half + else if (character == 'M' || character == 'm' || character == 'N') character = 'n'; // M and uppercase N need to be lowercase n + else if (character == 'c') character = 'C'; // C needs to be uppercase + else if (character == 'J') character = 'j'; // same + else if (character == 'v' || character == 'V' || character == 'U' || character == 'W' || character == 'w') character = 'u'; // bottom segment duplicated, so show in top half + } else { if (character == 'u') character = 'v'; // we can use the bottom segment; move to lower half - if (character == 'j') character = 'J'; // same but just display a normal J + else if (character == 'j') character = 'J'; // same but just display a normal J + } + if (position > 1) { + if (character == 'T') character = 't'; // uppercase T only works in positions 0 and 1 + } + if (position == 1) { + if (character == 'o') character = 'O'; // O needs to be uppercase + if (character == 'i') character = 'l'; // I needs to be uppercase (use an l, it looks the same) + if (character == 'n') character = 'N'; // N needs to be uppercase + if (character == 'r') character = 'R'; // R needs to be uppercase + if (character == 'd') character = 'D'; // D needs to be uppercase + if (character == 'v' || character == 'V' || character == 'u') character = 'U'; // side segments shared, make uppercase + if (character == 'b') character = 'B'; // B needs to be uppercase + if (character == 'c') character = 'C'; // C needs to be uppercase + } else { + if (character == 'R') character = 'r'; // R needs to be lowercase almost everywhere + } + if (position == 0) { + slcd_sync_seg_off(&SEGMENT_LCD_0, SLCD_SEGID(0, 15)); // clear funky ninth segment + } else { + if (character == 'I') character = 'l'; // uppercase I only works in position 0 } - if (position == 0) slcd_sync_seg_off(&SEGMENT_LCD_0, SLCD_SEGID(0, 15)); // clear funky ninth segment uint64_t segmap = Segment_Map[position]; uint64_t segdata = Character_Set[character - 0x20]; @@ -204,7 +228,7 @@ void watch_display_character(uint8_t character, uint8_t position) { } if (character == 'T' && position == 1) slcd_sync_seg_on(&SEGMENT_LCD_0, SLCD_SEGID(1, 12)); // add descender else if (position == 0 && (character == 'B' || character == 'D')) slcd_sync_seg_on(&SEGMENT_LCD_0, SLCD_SEGID(0, 15)); // add funky ninth segment - else if (position == 0 && (character == 'B' || character == 'D' || character == '@')) slcd_sync_seg_on(&SEGMENT_LCD_0, SLCD_SEGID(0, 15)); // add funky ninth segment + else if (position == 1 && (character == 'B' || character == 'D' || character == '@')) slcd_sync_seg_on(&SEGMENT_LCD_0, SLCD_SEGID(0, 12)); // add funky ninth segment } void watch_display_string(char *string, uint8_t position) { -- cgit v1.2.3