initial release
Diff: Components/Display/Display_class.h
- Revision:
- 14:8320b5ff96fa
- Parent:
- 9:367d1f390cb2
- Child:
- 15:44e6c9013bff
--- a/Components/Display/Display_class.h Thu Jun 15 13:33:35 2017 +0000 +++ b/Components/Display/Display_class.h Mon Aug 07 14:30:21 2017 +0000 @@ -72,12 +72,12 @@ uint32_t u32; /*!< single dword i/o view */ } /** cache the extended IO values */ -CurIOVal; +cur_io_val; /** * lookup table for digit to bit position */ -static int DisplayBitPos[4]={0, 7, 16, 16+7}; +static int display_bit_posn[4] = {0, 7, 16, 16 + 7}; /** * @defgroup XNUCLEO53L0A1_7Segment 7 segment display @@ -96,22 +96,22 @@ * @{ */ /** decimal point bit mapping* */ -#define DP (1<<7) +#define DP (1 << 7) /** sgement s0 bit mapping*/ -#define S0 (1<<3) +#define S0 (1 << 3) /** sgement s1 bit mapping*/ -#define S1 (1<<5) +#define S1 (1 << 5) /** sgement s2 bit mapping*/ -#define S2 (1<<6) +#define S2 (1 << 6) /** sgement s3 bit mapping*/ -#define S3 (1<<4) +#define S3 (1 << 4) /** sgement s4 bit mapping*/ -#define S4 (1<<0) +#define S4 (1 << 0) /** sgement s5 bit mapping*/ -#define S5 (1<<1) +#define S5 (1 << 1) /** sgement s6 bit mapping*/ -#define S6 (1<<2) +#define S6 (1 << 2) /** * build a character by defining the non lighted segment (not one and no DP) @@ -133,173 +133,173 @@ */ #ifndef __cpluplus /* refer to http://www.twyman.org.uk/Fonts/ */ -static const uint8_t ascii_to_display_lut[256]={ - 0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0, - [32]= 0, - 0,0,0,0,0,0,0,0, - 0, - [42]= NOT_7_NO_DP(), - 0,0, - [45]= S6, - 0,0, - [48]= NOT_7_NO_DP(S6), - [49]= S1+S2, - [50]= S0+S1+S6+S4+S3, - [51]= NOT_7_NO_DP(S4+S5), - [52]= S5+S1+S6+S2, - [53]= NOT_7_NO_DP(S1+S4), - [54]= NOT_7_NO_DP(S1), - [55]= S0+S1+S2, - [56]= NOT_7_NO_DP(0), - [57]= NOT_7_NO_DP(S4), - 0,0,0, - [61]= S3+S6, - 0, - [63]= NOT_7_NO_DP(S5+S3+S2), - [64]= S0+S3, - [65]= NOT_7_NO_DP(S3), - [66]= NOT_7_NO_DP(S0+S1), /* as b */ - [67]= S0+S3+S4+S5, // same as [ - [68]= S0+S3+S4+S5, // same as [ DUMMY - [69]= NOT_7_NO_DP(S1+S2), - [70]= S6+S5+S4+S0, - [71]= NOT_7_NO_DP(S4), /* same as 9 */ - [72]= NOT_7_NO_DP(S0+S3), - [73]= S1+S2, - [74]= S1+S2+S3+S4, - [75]= NOT_7_NO_DP(S0+S3), /* same as H */ - [76]= S3+S4+S5, - [77]= S0+S4+S2, /* same as m*/ - [78]= S2+S4+S6, /* same as n*/ - [79]= NOT_7_NO_DP(S6), - [80]= S0+S1+S2+S5+S6, // sames as 'q' - [81]= NOT_7_NO_DP(S3+S2), - [82]= S4+S6, - [83]= NOT_7_NO_DP(S1+S4), /* sasme as 5 */ - [84]= NOT_7_NO_DP(S0+S1+S2), /* sasme as t */ - [85]= NOT_7_NO_DP(S6+S0), - [86]= S4+S3+S2, // is u but u use U - [87]= S1+S3+S5, - [88]= NOT_7_NO_DP(S0+S3), // similar to H - [89]= NOT_7_NO_DP(S0+S4), - [90]= S0+S1+S6+S4+S3, // same as 2 - [91]= S0+S3+S4+S5, - 0, - [93]= S0+S3+S2+S1, - [94]= S0, /* use as top bar */ - [95]= S3, - 0, - [97]= S2+ S3+ S4+ S6 , - [98]= NOT_7_NO_DP(S0+S1), - [99]= S6+S4+S3, - [100]= NOT_7_NO_DP(S0+S5), - [101]= NOT_7_NO_DP(S2), - [102]= S6+S5+S4+S0, /* same as F */ - [103]= NOT_7_NO_DP(S4), /* same as 9 */ - [104]= S6+S5+S4+S2, - [105]= S4, - [106]= S1+S2+S3+S4, - [107]= S6+S5+S4+S2, /* a h */ - [108]= S3+S4, - [109]= S0+S4+S2, /* same as */ - [110]= S2+S4+S6, - [111]= S6+S4+S3+S2, - [112]= NOT_7_NO_DP(S3+S2), // same as P - [113]= S0+S1+S2+S5+S6, - [114]= S4+S6, - [115]= NOT_7_NO_DP(S1+S4), - [116]= NOT_7_NO_DP(S0+S1+S2), - [117]= S4+S3+S2+S5+S1, // U - [118]= S4+S3+S2, // is u but u use U - [119]= S1+S3+S5, - [120]= NOT_7_NO_DP(S0+S3), // similar to H - [121]= NOT_7_NO_DP(S0+S4), - [122]= S0+S1+S6+S4+S3, // same as 2 - 0,0,0, - [126]= S0+S3+S6 /* 3 h bar */ +static const uint8_t ascii_to_display_lut[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + [32] = 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, + [42] = NOT_7_NO_DP(), + 0, 0, + [45] = S6, + 0, 0, + [48] = NOT_7_NO_DP(S6), + [49] = S1 + S2, + [50] = S0 + S1 + S6 + S4 + S3, + [51] = NOT_7_NO_DP(S4 + S5), + [52] = S5 + S1 + S6 + S2, + [53] = NOT_7_NO_DP(S1 + S4), + [54] = NOT_7_NO_DP(S1), + [55] = S0 + S1 + S2, + [56] = NOT_7_NO_DP(0), + [57] = NOT_7_NO_DP(S4), + 0, 0, 0, + [61] = S3 + S6, + 0, + [63] = NOT_7_NO_DP(S5 + S3 + S2), + [64] = S0 + S3, + [65] = NOT_7_NO_DP(S3), + [66] = NOT_7_NO_DP(S0 + S1), /* as b */ + [67] = S0 + S3 + S4 + S5, // same as [ + [68] = S0 + S3 + S4 + S5, // same as [ DUMMY + [69] = NOT_7_NO_DP(S1 + S2), + [70] = S6 + S5 + S4 + S0, + [71] = NOT_7_NO_DP(S4), /* same as 9 */ + [72] = NOT_7_NO_DP(S0 + S3), + [73] = S1 + S2, + [74] = S1 + S2 + S3 + S4, + [75] = NOT_7_NO_DP(S0 + S3), /* same as H */ + [76] = S3 + S4 + S5, + [77] = S0 + S4 + S2, /* same as m*/ + [78] = S2 + S4 + S6, /* same as n*/ + [79] = NOT_7_NO_DP(S6), + [80] = S0 + S1 + S2 + S5 + S6, // sames as 'q' + [81] = NOT_7_NO_DP(S3 + S2), + [82] = S4 + S6, + [83] = NOT_7_NO_DP(S1 + S4), /* sasme as 5 */ + [84] = NOT_7_NO_DP(S0 + S1 + S2), /* sasme as t */ + [85] = NOT_7_NO_DP(S6 + S0), + [86] = S4 + S3 + S2, // is u but u use U + [87] = S1 + S3 + S5, + [88] = NOT_7_NO_DP(S0 + S3), // similar to H + [89] = NOT_7_NO_DP(S0 + S4), + [90] = S0 + S1 + S6 + S4 + S3, // same as 2 + [91] = S0 + S3 + S4 + S5, + 0, + [93] = S0 + S3 + S2 + S1, + [94] = S0, /* use as top bar */ + [95] = S3, + 0, + [97] = S2 + S3 + S4 + S6, + [98] = NOT_7_NO_DP(S0 + S1), + [99] = S6 + S4 + S3, + [100] = NOT_7_NO_DP(S0 + S5), + [101] = NOT_7_NO_DP(S2), + [102] = S6 + S5 + S4 + S0, /* same as F */ + [103] = NOT_7_NO_DP(S4), /* same as 9 */ + [104] = S6 + S5 + S4 + S2, + [105] = S4, + [106] = S1 + S2 + S3 + S4, + [107] = S6 + S5 + S4 + S2, /* a h */ + [108] = S3 + S4, + [109] = S0 + S4 + S2, /* same as */ + [110] = S2 + S4 + S6, + [111] = S6 + S4 + S3 + S2, + [112] = NOT_7_NO_DP(S3 + S2), // same as P + [113] = S0 + S1 + S2 + S5 + S6, + [114] = S4 + S6, + [115] = NOT_7_NO_DP(S1 + S4), + [116] = NOT_7_NO_DP(S0 + S1 + S2), + [117] = S4 + S3 + S2 + S5 + S1, // U + [118] = S4 + S3 + S2, // is u but u use U + [119] = S1 + S3 + S5, + [120] = NOT_7_NO_DP(S0 + S3), // similar to H + [121] = NOT_7_NO_DP(S0 + S4), + [122] = S0 + S1 + S6 + S4 + S3, // same as 2 + 0, 0, 0, + [126] = S0 + S3 + S6 /* 3 h bar */ }; #else /* refer to http://www.twyman.org.uk/Fonts/ */ -static const uint8_t ascii_to_display_lut[256]={ - [' ']= 0, - ['-']= S6, - ['_']= S3, - ['=']= S3+S6, - ['~']= S0+S3+S6, /* 3 h bar */ - ['^']= S0, /* use as top bar */ +static const uint8_t ascii_to_display_lut[256] = { + [' '] = 0, + ['-'] = S6, + ['_'] = S3, + ['='] = S3 + S6, + ['~'] = S0 + S3 + S6, /* 3 h bar */ + ['^'] = S0, /* use as top bar */ - ['?']= NOT_7_NO_DP(S5+S3+S2), - ['*']= NOT_7_NO_DP(), - ['[']= S0+S3+S4+S5, - [']']= S0+S3+S2+S1, - ['@']= S0+S3, + ['?'] = NOT_7_NO_DP(S5 + S3 + S2), + ['*'] = NOT_7_NO_DP(), + ['['] = S0 + S3 + S4 + S5, + [']'] = S0 + S3 + S2 + S1, + ['@'] = S0 + S3, - ['0']= NOT_7_NO_DP(S6), - ['1']= S1+S2, - ['2']= S0+S1+S6+S4+S3, - ['3']= NOT_7_NO_DP(S4+S5), - ['4']= S5+S1+S6+S2, - ['5']= NOT_7_NO_DP(S1+S4), - ['6']= NOT_7_NO_DP(S1), - ['7']= S0+S1+S2, - ['8']= NOT_7_NO_DP(0), - ['9']= NOT_7_NO_DP(S4), + ['0'] = NOT_7_NO_DP(S6), + ['1'] = S1 + S2, + ['2'] = S0 + S1 + S6 + S4 + S3, + ['3'] = NOT_7_NO_DP(S4 + S5), + ['4'] = S5 + S1 + S6 + S2, + ['5'] = NOT_7_NO_DP(S1 + S4), + ['6'] = NOT_7_NO_DP(S1), + ['7'] = S0 + S1 + S2, + ['8'] = NOT_7_NO_DP(0), + ['9'] = NOT_7_NO_DP(S4), - ['a']= S2+ S3+ S4+ S6 , - ['b']= NOT_7_NO_DP(S0+S1), - ['c']= S6+S4+S3, - ['d']= NOT_7_NO_DP(S0+S5), - ['e']= NOT_7_NO_DP(S2), - ['f']= S6+S5+S4+S0, /* same as F */ - ['g']= NOT_7_NO_DP(S4), /* same as 9 */ - ['h']= S6+S5+S4+S2, - ['i']= S4, - ['j']= S1+S2+S3+S4, - ['k']= S6+S5+S4+S2, /* a h */ - ['l']= S3+S4, - ['m']= S0+S4+S2, /* same as */ - ['n']= S2+S4+S6, - ['o']= S6+S4+S3+S2, - ['p']= NOT_7_NO_DP(S3+S2), // same as P - ['q']= S0+S1+S2+S5+S6, - ['r']= S4+S6, - ['s']= NOT_7_NO_DP(S1+S4), - ['t']= NOT_7_NO_DP(S0+S1+S2), - ['u']= S4+S3+S2+S5+S1, // U - ['v']= S4+S3+S2, // is u but u use U - ['w']= S1+S3+S5, - ['x']= NOT_7_NO_DP(S0+S3), // similar to H - ['y']= NOT_7_NO_DP(S0+S4), - ['z']= S0+S1+S6+S4+S3, // same as 2 + ['a'] = S2 + S3 + S4 + S6, + ['b'] = NOT_7_NO_DP(S0 + S1), + ['c'] = S6 + S4 + S3, + ['d'] = NOT_7_NO_DP(S0 + S5), + ['e'] = NOT_7_NO_DP(S2), + ['f'] = S6 + S5 + S4 + S0, /* same as F */ + ['g'] = NOT_7_NO_DP(S4), /* same as 9 */ + ['h'] = S6 + S5 + S4 + S2, + ['i'] = S4, + ['j'] = S1 + S2 + S3 + S4, + ['k'] = S6 + S5 + S4 + S2, /* a h */ + ['l'] = S3 + S4, + ['m'] = S0 + S4 + S2, /* same as */ + ['n'] = S2 + S4 + S6, + ['o'] = S6 + S4 + S3 + S2, + ['p'] = NOT_7_NO_DP(S3 + S2), // same as P + ['q'] = S0 + S1 + S2 + S5 + S6, + ['r'] = S4 + S6, + ['s'] = NOT_7_NO_DP(S1 + S4), + ['t'] = NOT_7_NO_DP(S0 + S1 + S2), + ['u'] = S4 + S3 + S2 + S5 + S1, // U + ['v'] = S4 + S3 + S2, // is u but u use U + ['w'] = S1 + S3 + S5, + ['x'] = NOT_7_NO_DP(S0 + S3), // similar to H + ['y'] = NOT_7_NO_DP(S0 + S4), + ['z'] = S0 + S1 + S6 + S4 + S3, // same as 2 - ['A']= NOT_7_NO_DP(S3), - ['B']= NOT_7_NO_DP(S0+S1), /* as b */ - ['C']= S0+S3+S4+S5, // same as [ - ['E']= NOT_7_NO_DP(S1+S2), - ['F']= S6+S5+S4+S0, - ['G']= NOT_7_NO_DP(S4), /* same as 9 */ - ['H']= NOT_7_NO_DP(S0+S3), - ['I']= S1+S2, - ['J']= S1+S2+S3+S4, - ['K']= NOT_7_NO_DP(S0+S3), /* same as H */ - ['L']= S3+S4+S5, - ['M']= S0+S4+S2, /* same as m*/ - ['N']= S2+S4+S6, /* same as n*/ - ['O']= NOT_7_NO_DP(S6), - ['P']= S0+S1+S2+S5+S6, // sames as 'q' - ['Q']= NOT_7_NO_DP(S3+S2), - ['R']= S4+S6, - ['S']= NOT_7_NO_DP(S1+S4), /* sasme as 5 */ - ['T']= NOT_7_NO_DP(S0+S1+S2), /* sasme as t */ - ['U']= NOT_7_NO_DP(S6+S0), - ['V']= S4+S3+S2, // is u but u use U - ['W']= S1+S3+S5, - ['X']= NOT_7_NO_DP(S0+S3), // similar to H - ['Y']= NOT_7_NO_DP(S0+S4), - ['Z']= S0+S1+S6+S4+S3 // same as 2 + ['A'] = NOT_7_NO_DP(S3), + ['B'] = NOT_7_NO_DP(S0 + S1), /* as b */ + ['C'] = S0 + S3 + S4 + S5, // same as [ + ['E'] = NOT_7_NO_DP(S1 + S2), + ['F'] = S6 + S5 + S4 + S0, + ['G'] = NOT_7_NO_DP(S4), /* same as 9 */ + ['H'] = NOT_7_NO_DP(S0 + S3), + ['I'] = S1 + S2, + ['J'] = S1 + S2 + S3 + S4, + ['K'] = NOT_7_NO_DP(S0 + S3), /* same as H */ + ['L'] = S3 + S4 + S5, + ['M'] = S0 + S4 + S2, /* same as m*/ + ['N'] = S2 + S4 + S6, /* same as n*/ + ['O'] = NOT_7_NO_DP(S6), + ['P'] = S0 + S1 + S2 + S5 + S6, // sames as 'q' + ['Q'] = NOT_7_NO_DP(S3 + S2), + ['R'] = S4 + S6, + ['S'] = NOT_7_NO_DP(S1 + S4), /* sasme as 5 */ + ['T'] = NOT_7_NO_DP(S0 + S1 + S2), /* sasme as t */ + ['U'] = NOT_7_NO_DP(S6 + S0), + ['V'] = S4 + S3 + S2, // is u but u use U + ['W'] = S1 + S3 + S5, + ['X'] = NOT_7_NO_DP(S0 + S3), // similar to H + ['Y'] = NOT_7_NO_DP(S0 + S4), + ['Z'] = S0 + S1 + S6 + S4 + S3 // same as 2 }; #endif @@ -315,89 +315,91 @@ /** @} */ -//#define DISPLAY_DELAY 1 // in mSec +//#define DISPLAY_DELAY 1 // in mSec /* Classes -------------------------------------------------------------------*/ /** Class representing Display - */ + */ class Display { private: - STMPE1600 &stmpe1600_exp0; - STMPE1600 &stmpe1600_exp1; + Stmpe1600 &stmpe1600_exp0; + Stmpe1600 &stmpe1600_exp1; public: - /** Constructor - * @param[in] &stmpe_1600 device handler to be used for display control - */ - Display (STMPE1600 &stmpe_1600_exp0, STMPE1600 &stmpe_1600_exp1) : stmpe1600_exp0(stmpe_1600_exp0), stmpe1600_exp1(stmpe_1600_exp1) { - uint16_t ExpanderData; + /** Constructor + * @param[in] &stmpe_1600 device handler to be used for display control + */ + Display(Stmpe1600 &stmpe_1600_exp0, Stmpe1600 &stmpe_1600_exp1) : stmpe1600_exp0(stmpe_1600_exp0), + stmpe1600_exp1(stmpe_1600_exp1) + { + uint16_t expander_data; // detect the extenders - stmpe1600_exp0.read16bitReg(0x00, &ExpanderData); + stmpe1600_exp0.read_16bit_reg(0x00, &expander_data); // if (ExpanderData != 0x1600) {/* log - failed to find expander exp0 */ } - stmpe1600_exp1.read16bitReg(0x00, &ExpanderData); + stmpe1600_exp1.read_16bit_reg(0x00, &expander_data); // if (ExpanderData != 0x1600) {/* log - failed to find expander exp1 */ } // configure all necessary GPIO pins as outputs - ExpanderData = 0xFFFF; - stmpe1600_exp0.write16bitReg(GPDR, &ExpanderData); - ExpanderData = 0xBFFF; // leave bit 14 as an input, for the pushbutton, PB1. - stmpe1600_exp1.write16bitReg(GPDR, &ExpanderData); + expander_data = 0xFFFF; + stmpe1600_exp0.write_16bit_reg(GPDR, &expander_data); + expander_data = 0xBFFF; // leave bit 14 as an input, for the pushbutton, PB1. + stmpe1600_exp1.write_16bit_reg(GPDR, &expander_data); // shut down all segment and all device - ExpanderData = 0x7F + (0x7F << 7); - stmpe1600_exp0.write16bitReg(GPSR, &ExpanderData); - stmpe1600_exp1.write16bitReg(GPSR, &ExpanderData); + expander_data = 0x7F + (0x7F << 7); + stmpe1600_exp0.write_16bit_reg(GPSR, &expander_data); + stmpe1600_exp1.write_16bit_reg(GPSR, &expander_data); } - - /*** Interface Methods ***/ - /** - * @brief Print the string on display - * @param[in] String to be printed - * @param[in] String lenght [min 1, max 4] - * @return void - */ - void DisplayString (const char *str) + + /*** Interface Methods ***/ + /** + * @brief Print the string on display + * @param[in] String to be printed + * @param[in] String lenght [min 1, max 4] + * @return void + */ + void display_string(const char *str) { - uint16_t ExpanderData; - uint32_t Segments; - int BitPos; + uint16_t expander_data; + uint32_t segments; + int bit_posn; int i; - for( i=0; i<4 && str[i]!=0; i++){ - Segments = (uint32_t)ascii_to_display_lut[(uint8_t)str[i]]; - Segments =(~Segments)&0x7F; - BitPos=DisplayBitPos[i]; - CurIOVal.u32 &=~(0x7F<<BitPos); - CurIOVal.u32 |= Segments<<BitPos; + for (i = 0; (i < 4 && str[i] != 0); i++) { + segments = (uint32_t) ascii_to_display_lut[(uint8_t) str[i]]; + segments = (~segments) & 0x7F; + bit_posn = display_bit_posn[i]; + cur_io_val.u32 &= ~(0x7F << bit_posn); + cur_io_val.u32 |= segments << bit_posn; } /* clear unused digit */ - for( ; i<4;i++){ - BitPos=DisplayBitPos[i]; - CurIOVal.u32 |=0x7F<<BitPos; + for (; i < 4; i++) { + bit_posn = display_bit_posn[i]; + cur_io_val.u32 |= 0x7F << bit_posn; } // stmpe1600_exp0.write16bitReg(GPSR, (uint16_t *)&CurIOVal.bytes[0]); // stmpe1600_exp1.write16bitReg(GPSR, (uint16_t *)&CurIOVal.bytes[2]); // ordered low-byte/high-byte! - CurIOVal.bytes[1] |= 0xC0; // ensure highest bits are high, as these are xshutdown pins for left & right sensors! - ExpanderData = (CurIOVal.bytes[1] << 8) + CurIOVal.bytes[0]; - stmpe1600_exp0.write16bitReg(GPSR, &ExpanderData); - CurIOVal.bytes[3] |= 0x80; // ensure highest bit is high, as this is xshutdown pin on central sensor! - ExpanderData = (CurIOVal.bytes[3] << 8) + CurIOVal.bytes[2]; - stmpe1600_exp1.write16bitReg(GPSR, &ExpanderData); + cur_io_val.bytes[1] |= 0xC0; // ensure highest bits are high, as these are xshutdown pins for left & right sensors! + expander_data = (cur_io_val.bytes[1] << 8) + cur_io_val.bytes[0]; + stmpe1600_exp0.write_16bit_reg(GPSR, &expander_data); + cur_io_val.bytes[3] |= 0x80; // ensure highest bit is high, as this is xshutdown pin on central sensor! + expander_data = (cur_io_val.bytes[3] << 8) + cur_io_val.bytes[2]; + stmpe1600_exp1.write_16bit_reg(GPSR, &expander_data); } - void ClearDisplay(void) + void clear_display(void) { - uint16_t ExpanderData; + uint16_t expander_data; - ExpanderData = 0x7F + (0x7F << 7); - stmpe1600_exp0.write16bitReg(GPSR, &ExpanderData); - stmpe1600_exp1.write16bitReg(GPSR, &ExpanderData); + expander_data = 0x7F + (0x7F << 7); + stmpe1600_exp0.write_16bit_reg(GPSR, &expander_data); + stmpe1600_exp1.write_16bit_reg(GPSR, &expander_data); } };