This module provides a simple API to the Maxim MAX7456 on-screen display chip

MAX7456CHARS.h

Committer:
AjK
Date:
2010-11-16
Revision:
0:d7cd54ad4c3d

File content as of revision 0:d7cd54ad4c3d:

/****************************************************************************
 *    Copyright 2010 Andy Kirkham, Stellar Technologies Ltd
 *    
 *    This file is part of the Satellite Observers Workbench (SOWB).
 *
 *    SOWB is free software: you can redistribute it and/or modify
 *    it under the terms of the GNU General Public License as published by
 *    the Free Software Foundation, either version 3 of the License, or
 *    (at your option) any later version.
 *
 *    SOWB is distributed in the hope that it will be useful,
 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *    GNU General Public License for more details.
 *
 *    You should have received a copy of the GNU General Public License
 *    along with SOWB.  If not, see <http://www.gnu.org/licenses/>.
 *
 *    $Id: main.cpp 5 2010-07-12 20:51:11Z ajk $
 *    
 ***************************************************************************/

typedef struct _max7456_custom_char {
    unsigned char         ascii;
    const unsigned char   *map;
} MAX7456_CUSTOM_CHAR;

/* Why doesn't the MAX7456 have a + symbol? wtf! */
const unsigned char ascii_4d[54] = {
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55,
    0x55, 0x00, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x00, 0x28, 0x00,
    0x4A, 0xAA, 0xA1,
    0x4A, 0xAA, 0xA1,
    0x00, 0x28, 0x00,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x00, 0x55,
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55    };

const unsigned char crosshair1_left[54] = {
    0x55, 0x55, 0x56, // 0
    0x55, 0x55, 0x56, // 1
    0x55, 0x55, 0x56, // 2
    0x55, 0x55, 0x56, // 3
    0x55, 0x55, 0x56, // 4
    0x55, 0x55, 0x56, // 5
    0x55, 0x55, 0x55, // 6
    0x55, 0x55, 0x55, // 7
    0x55, 0xAA, 0x95, // 8
    0x55, 0xAA, 0x95, // 9  - 8
    0x55, 0x55, 0x55, // 10 - 7
    0x55, 0x55, 0x55, // 11 - 6
    0x55, 0x55, 0x56, // 12 - 5
    0x55, 0x55, 0x56, // 13 - 4
    0x55, 0x55, 0x56, // 14 - 3
    0x55, 0x55, 0x56, // 15 - 2
    0x55, 0x55, 0x56, // 16 - 1
    0x55, 0x55, 0x56    };

const unsigned char crosshair1_right[54] = {
    0x95, 0x55, 0x55, // 0
    0x95, 0x55, 0x55, // 1
    0x95, 0x55, 0x55, // 2
    0x95, 0x55, 0x55, // 3
    0x95, 0x55, 0x55, // 4
    0x95, 0x55, 0x55, // 5
    0x55, 0x55, 0x55, // 6
    0x55, 0x55, 0x55, // 7
    0x56, 0xAA, 0x55, // 8
    0x56, 0xAA, 0x55, // 9  - 8
    0x55, 0x55, 0x55, // 10 - 7
    0x55, 0x55, 0x55, // 11 - 6
    0x95, 0x55, 0x55, // 12 - 5
    0x95, 0x55, 0x55, // 13 - 4
    0x95, 0x55, 0x55, // 14 - 3
    0x95, 0x55, 0x55, // 15 - 2
    0x95, 0x55, 0x55, // 16 - 1
    0x95, 0x55, 0x55    };
    
const unsigned char crosshair_centre[54] = {
    0x55, 0x28, 0x55,   // 0
    0x55, 0x28, 0x55,   // 1
    0x55, 0x28, 0x55,   // 2
    0x55, 0x28, 0x55,   // 3
    0x55, 0x28, 0x55,   // 4
    0x55, 0x00, 0x55,   // 5
    0x55, 0x55, 0x55,   // 6
    0x01, 0x55, 0x40,   // 7
    0xA1, 0x69, 0x4A,   // 8
    0xA1, 0x69, 0x4A,   // 9
    0x01, 0x55, 0x40,   // 10
    0x55, 0x55, 0x55,   // 11
    0x55, 0x00, 0x55,   // 12
    0x55, 0x28, 0x55,   // 13
    0x55, 0x28, 0x55,   // 14
    0x55, 0x28, 0x55,   // 15
    0x55, 0x28, 0x55,   // 16
    0x55, 0x28, 0x55    };
    

const unsigned char ascii_b0[54] = {
    0x55, 0x55, 0x55, // 0
    0x55, 0x55, 0x55, // 1
    0x50, 0x01, 0x55, // 2
    0x42, 0xA0, 0x55, // 3
    0x0A, 0xA8, 0x15, // 4
    0x28, 0x0A, 0x15, // 5
    0x28, 0x0A, 0x15, // 6
    0x28, 0x0A, 0x15,
    0x0A, 0xA8, 0x15,
    0x42, 0xA0, 0x55,
    0x50, 0x01, 0x55,
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55    };

const unsigned char ascii_b3[54] = {
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55    };

const unsigned char ascii_b4[54] = {
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x00, 0x28, 0x55,
    0xAA, 0xA8, 0x55,
    0xAA, 0xA8, 0x55,
    0x00, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55    };

const unsigned char ascii_bf[54] = {
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55,
    0x00, 0x00, 0x55,
    0xAA, 0xA8, 0x55,
    0xAA, 0xA8, 0x55,
    0x00, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55    };

const unsigned char ascii_c0[54] = {
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x00,
    0x55, 0x2A, 0xAA,
    0x55, 0x2A, 0xAA,
    0x55, 0x00, 0x00,
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55    };

const unsigned char ascii_c1[54] = {
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x00, 0x28, 0x00,
    0xAA, 0xAA, 0xAA,
    0xAA, 0xAA, 0xAA,
    0x00, 0x00, 0x00,
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55    };

const unsigned char ascii_c2[54] = {
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55,
    0x00, 0x00, 0x00,
    0xAA, 0xAA, 0xAA,
    0xAA, 0xAA, 0xAA,
    0x00, 0x28, 0x00,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55    };

const unsigned char ascii_c3[54] = {
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x00,
    0x55, 0x2A, 0xAA,
    0x55, 0x2A, 0xAA,
    0x55, 0x28, 0x00,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55    };

const unsigned char ascii_c4[54] = {
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55,
    0x00, 0x00, 0x00,
    0xAA, 0xAA, 0xAA,
    0xAA, 0xAA, 0xAA,
    0x00, 0x00, 0x00,
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55    };

const unsigned char ascii_c5[54] = {
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x00, 0x28, 0x00,
    0xAA, 0xAA, 0xAA,
    0xAA, 0xAA, 0xAA,
    0x00, 0x28, 0x00,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55    };

const unsigned char ascii_d9[54] = {
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x00, 0x28, 0x55,
    0xAA, 0xA8, 0x55,
    0xAA, 0xA8, 0x55,
    0x00, 0x00, 0x55,
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55    };

const unsigned char ascii_da[54] = {
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55,
    0x55, 0x55, 0x55,
    0x55, 0x00, 0x00,
    0x55, 0x2A, 0xAA,
    0x55, 0x2A, 0xAA,
    0x55, 0x28, 0x00,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55,
    0x55, 0x28, 0x55    };

/* For the curious, during testing I managed to screw up the
   characher at CM index2, ('2'). So I needed to reprogram
   index2 with the correct character, doh! Anyway, since I
   went to the trouble I'll leave it in the code. I managed
   to find a default CM map at:- 
        http://www.maxim-ic.com/tools/evkit/index.cfm?EVKit=558
   If you download this then be aware that the DEFAULTCM.MCM file
   defines each charmap as 64bytes, the 10 additional bytes need
   to be stripped off as "not used". */
#ifdef FIX_CM2_SCREW_UP
const unsigned char ascii_02[54] = {
    0x55, 0x55, 0x55, // 01010101 01010101 01010101
    0x55, 0x55, 0x55, // 01010101 01010101 01010101
    0x54, 0x00, 0x15, // 01010100 00000000 00010101
    0x52, 0xAA, 0x85, // 01010010 10101010 10000101
    0x4A, 0xAA, 0xA1, // 01001010 10101010 10100001
    0x2A, 0x80, 0xA8, // 00101010 10000000 10101000
    0x2A, 0x15, 0x28, // 00101010 00010101 00101000
    0x40, 0x55, 0x28, // 01000000 01010101 00101000
    0x55, 0x54, 0xA8, // 01010101 01010100 10101000
    0x55, 0x52, 0xA1, // 01010101 01010010 10100001
    0x55, 0x4A, 0x85, // 01010101 01001010 10000101
    0x55, 0x2A, 0x15, // 01010101 00101010 00010101
    0x54, 0xA8, 0x55, // 01010100 10101000 01010101
    0x52, 0xA1, 0x55, // 01010010 10100001 01010101
    0x4A, 0x80, 0x01, // 01001010 10000000 00000001
    0x2A, 0xAA, 0xA8, // 00101010 10101010 10101000
    0x2A, 0xAA, 0xA8, // 00101010 10101010 10101000
    0x40, 0x00, 0x01  // 01000000 00000000 00000001
};
#endif

/* Create an array of structures that link the data
   characters to ASCII characters. The last entry 
   must always be null so we can detect the end of 
   the array. */    
MAX7456_CUSTOM_CHAR custom_chars[] = {
    { 0xE0, crosshair1_left },
    { 0xE1, crosshair1_right },
    { 0xE2, crosshair_centre },
    { 0x4D, ascii_4d },
    { 0xB0, ascii_b0 },
    { 0xB3, ascii_b3 },
    { 0xB4, ascii_b4 },
    { 0xBF, ascii_bf },
    { 0xC0, ascii_c0 },
    { 0xC1, ascii_c1 },
    { 0xC2, ascii_c2 },
    { 0xC3, ascii_c3 },
    { 0xC4, ascii_c4 },
    { 0xC5, ascii_c5 },
    { 0xD9, ascii_d9 },
    { 0xDA, ascii_da },
#ifdef FIX_CM2_SCREW_UP    
    { 0x02, ascii_02 },
#endif    
    { 0x00, 0 }
};