From 66b416e4a36ea7754a97172c07775f94f5e3dbb5 Mon Sep 17 00:00:00 2001 From: marschap Date: Thu, 8 Feb 2007 20:38:28 +0000 Subject: [PATCH] 2-line bignum mode with 6 custom chars (Robin Gilks) --- ChangeLog | 1 + server/drivers/adv_bignum.c | 127 +++++++++++++++++++++++++++++++++++- 2 files changed, 126 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0767247..b0b729b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -31,6 +31,7 @@ v.0.5dev (ongoing development) * fixes for the hd44780-serial drivers (Matteo Pillon) + new options for the hd44780 driver (Frank Jepsen) + new driver for text based serial Point of Sale displays (Eric Pooch) + + new 2-line bignum mode using 6 user defined characters (Robin Gilks) v.0.5.1 + config file support in lcdproc client (Andrew Foss) diff --git a/server/drivers/adv_bignum.c b/server/drivers/adv_bignum.c index ee2250f..9ee71e0 100644 --- a/server/drivers/adv_bignum.c +++ b/server/drivers/adv_bignum.c @@ -86,6 +86,7 @@ static void adv_bignum_num_2_0(Driver *drvthis, int x, int num, int height, int static void adv_bignum_num_2_1(Driver *drvthis, int x, int num, int height, int offset, int do_init); static void adv_bignum_num_2_2(Driver *drvthis, int x, int num, int height, int offset, int do_init); static void adv_bignum_num_2_5(Driver *drvthis, int x, int num, int height, int offset, int do_init); +static void adv_bignum_num_2_6(Driver *drvthis, int x, int num, int height, int offset, int do_init); static void adv_bignum_num_2_28(Driver *drvthis, int x, int num, int height, int offset, int do_init); static void adv_bignum_num_4_0(Driver *drvthis, int x, int num, int height, int offset, int do_init); @@ -130,9 +131,12 @@ int customchars = drvthis->get_free_chars(drvthis); else if (customchars < 5) { // 2 lines and customchars = 2 ... 4 adv_bignum_num_2_2 (drvthis, x, num, height, offset, do_init); } - else if (customchars < 28) { // 2 lines and customchars = 5 ... 27 + else if (customchars < 6) { // 2 lines and customchars = 5 adv_bignum_num_2_5 (drvthis, x, num, height, offset, do_init); } + else if (customchars < 28) { // 2 lines and customchars = 6 ... 27 + adv_bignum_num_2_6 (drvthis, x, num, height, offset, do_init); + } else { // 2 lines and customchars >= 28 adv_bignum_num_2_28 (drvthis, x, num, height, offset, do_init); } @@ -432,7 +436,7 @@ static void adv_bignum_num_2_2(Driver *drvthis, int x, int num, int height, int ///////////////////////////////////////////////////////////////////////////////////////////// -// This function is usable for a 2 line display with 5 or more custom characters. +// This function is usable for a 2 line display with 5 characters. // (nice bignumbers) static void adv_bignum_num_2_5(Driver *drvthis, int x, int num, int height, int offset, int do_init) { @@ -540,6 +544,125 @@ static void adv_bignum_num_2_5(Driver *drvthis, int x, int num, int height, int adv_bignum_write_num(drvthis, num_map, x, num, height, offset); // write the number } +///////////////////////////////////////////////////////////////////////////////////////////// +// This function is usable for a 2 line display with 6 or more custom characters. +// (nice bignumbers) + +static void adv_bignum_num_2_6(Driver *drvthis, int x, int num, int height, int offset, int do_init) +{ + static char num_map[][4][3] = + {{{3 ,0 ,2}, /*0*/ + {3 ,1 ,2}, + {" "}, + {" "}}, + {{' ' ,' ', 2},/*1*/ + {' ' ,' ', 2}, + {" "}, + {" "}}, + {{' ' ,5 ,2},/*2*/ + {3 ,4 ,' '}, + {" "}, + {" "}}, + {{' ' ,5 ,2},/*3*/ + {' ' ,4 ,2}, + {" "}, + {" "}}, + {{3 ,1 ,2},/*4*/ + {' ' ,' ' ,2}, + {" "}, + {" "}}, + {{3 ,5 ,' '},/*5*/ + {' ' ,4 ,2}, + {" "}, + {" "}}, + {{3 ,5 ,7},/*6*/ + {3 ,4 ,2}, + {" "}, + {" "}}, + {{' ' ,0 ,2},/*7*/ + {' ' ,' ' ,2}, + {" "}, + {" "}}, + {{3 ,5 ,2},/*8*/ + {3 ,4 ,2}, + {" "}, + {" "}}, + {{3 ,5 ,2},/*9*/ + {' ' ,1 ,2}, + {" "}, + {" "}}, + {{'.'},/*:*/ + {'.'}, + {" "}, + {" "}}}; // Defines the character placing inside the bignumber. + + if (do_init) { // Set customcharacters if needed. + static unsigned char bignum[6][8] = { // stored customcharacters + [0] { + b__XXXXX, + b__XXXXX, + b_______, + b_______, + b_______, + b_______, + b_______, + b_______, }, + [1] { + b_______, + b_______, + b_______, + b_______, + b_______, + b__XXXXX, + b__XXXXX, + b__XXXXX, }, + [2] { + b__XXX__, + b__XXX__, + b__XXX__, + b__XXX__, + b__XXX__, + b__XXX__, + b__XXX__, + b__XXX__, }, + [3] { + b____XXX, + b____XXX, + b____XXX, + b____XXX, + b____XXX, + b____XXX, + b____XXX, + b____XXX, }, + [4] { + b__XXXXX, + b_______, + b_______, + b_______, + b_______, + b__XXXXX, + b__XXXXX, + b__XXXXX, }, + [5] { + b__XXXXX, + b__XXXXX, + b_______, + b_______, + b_______, + b_______, + b__XXXXX, + b__XXXXX, }, + }; + int i; + + for (i = 0; i < 6 ; i++) { // put the customcharacters into the display + drvthis->set_char(drvthis, offset+i, bignum[i]); + } + } + + adv_bignum_write_num(drvthis, num_map, x, num, height, offset); // write the number +} + ///////////////////////////////////////////////////////////////////////////////////////////// // This function is usable for a 2 line display with 28 or more custom characters.