/* --COPYRIGHT--,BSD
 * Copyright (c) 2017, Texas Instruments Incorporated
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * *  Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 *
 * *  Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * *  Neither the name of Texas Instruments Incorporated nor the names of
 *    its contributors may be used to endorse or promote products derived
 *    from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 * --/COPYRIGHT--*/
//*****************************************************************************
//
// lcd_c.h - Driver for the LCD_C Module.
//
//*****************************************************************************

#ifndef __MSP430WARE_LCD_C_H__
#define __MSP430WARE_LCD_C_H__

#include "inc/hw_memmap.h"

#ifdef __MSP430_HAS_LCD_C__

//*****************************************************************************
//
// If building with a C++ compiler, make all of the definitions in this header
// have a C binding.
//
//*****************************************************************************
#ifdef __cplusplus
extern "C"
{
#endif

#include "inc/hw_memmap.h"
//*****************************************************************************
//
//! \brief Used in the LCD_C_init() function as the initParams parameter.
//
//*****************************************************************************
typedef struct LCD_C_initParam {
    //! Selects the clock that will be used by the LCD.
    //! \n Valid values are:
    //! - \b LCD_C_CLOCKSOURCE_ACLK [Default]
    //! - \b LCD_C_CLOCKSOURCE_VLOCLK
    uint16_t clockSource;
    //! Selects the divider for LCD_frequency.
    //! \n Valid values are:
    //! - \b LCD_C_CLOCKDIVIDER_1 [Default]
    //! - \b LCD_C_CLOCKDIVIDER_2
    //! - \b LCD_C_CLOCKDIVIDER_3
    //! - \b LCD_C_CLOCKDIVIDER_4
    //! - \b LCD_C_CLOCKDIVIDER_5
    //! - \b LCD_C_CLOCKDIVIDER_6
    //! - \b LCD_C_CLOCKDIVIDER_7
    //! - \b LCD_C_CLOCKDIVIDER_8
    //! - \b LCD_C_CLOCKDIVIDER_9
    //! - \b LCD_C_CLOCKDIVIDER_10
    //! - \b LCD_C_CLOCKDIVIDER_11
    //! - \b LCD_C_CLOCKDIVIDER_12
    //! - \b LCD_C_CLOCKDIVIDER_13
    //! - \b LCD_C_CLOCKDIVIDER_14
    //! - \b LCD_C_CLOCKDIVIDER_15
    //! - \b LCD_C_CLOCKDIVIDER_16
    //! - \b LCD_C_CLOCKDIVIDER_17
    //! - \b LCD_C_CLOCKDIVIDER_18
    //! - \b LCD_C_CLOCKDIVIDER_19
    //! - \b LCD_C_CLOCKDIVIDER_20
    //! - \b LCD_C_CLOCKDIVIDER_21
    //! - \b LCD_C_CLOCKDIVIDER_22
    //! - \b LCD_C_CLOCKDIVIDER_23
    //! - \b LCD_C_CLOCKDIVIDER_24
    //! - \b LCD_C_CLOCKDIVIDER_25
    //! - \b LCD_C_CLOCKDIVIDER_26
    //! - \b LCD_C_CLOCKDIVIDER_27
    //! - \b LCD_C_CLOCKDIVIDER_28
    //! - \b LCD_C_CLOCKDIVIDER_29
    //! - \b LCD_C_CLOCKDIVIDER_30
    //! - \b LCD_C_CLOCKDIVIDER_31
    //! - \b LCD_C_CLOCKDIVIDER_32
    uint16_t clockDivider;
    //! Selects the prescalar for frequency.
    //! \n Valid values are:
    //! - \b LCD_C_CLOCKPRESCALAR_1 [Default]
    //! - \b LCD_C_CLOCKPRESCALAR_2
    //! - \b LCD_C_CLOCKPRESCALAR_4
    //! - \b LCD_C_CLOCKPRESCALAR_8
    //! - \b LCD_C_CLOCKPRESCALAR_16
    //! - \b LCD_C_CLOCKPRESCALAR_32
    uint16_t clockPrescalar;
    //! Selects LCD mux rate.
    //! \n Valid values are:
    //! - \b LCD_C_STATIC [Default]
    //! - \b LCD_C_2_MUX
    //! - \b LCD_C_3_MUX
    //! - \b LCD_C_4_MUX
    //! - \b LCD_C_5_MUX
    //! - \b LCD_C_6_MUX
    //! - \b LCD_C_7_MUX
    //! - \b LCD_C_8_MUX
    uint16_t muxRate;
    //! Selects LCD waveform mode.
    //! \n Valid values are:
    //! - \b LCD_C_STANDARD_WAVEFORMS [Default]
    //! - \b LCD_C_LOW_POWER_WAVEFORMS
    uint16_t waveforms;
    //! Sets LCD segment on/off.
    //! \n Valid values are:
    //! - \b LCD_C_SEGMENTS_DISABLED [Default]
    //! - \b LCD_C_SEGMENTS_ENABLED
    uint16_t segments;
} LCD_C_initParam;


extern const LCD_C_initParam LCD_C_INIT_PARAM;

//*****************************************************************************
//
// The following are values that can be passed to the initParams parameter for
// functions: LCD_C_init().
//
//*****************************************************************************
#define LCD_C_CLOCKSOURCE_ACLK                                            (0x0)
#define LCD_C_CLOCKSOURCE_VLOCLK                                      (LCDSSEL)

//*****************************************************************************
//
// The following are values that can be passed to the initParams parameter for
// functions: LCD_C_init().
//
//*****************************************************************************
#define LCD_C_CLOCKDIVIDER_1                                         (LCDDIV_0)
#define LCD_C_CLOCKDIVIDER_2                                         (LCDDIV_1)
#define LCD_C_CLOCKDIVIDER_3                                         (LCDDIV_2)
#define LCD_C_CLOCKDIVIDER_4                                         (LCDDIV_3)
#define LCD_C_CLOCKDIVIDER_5                                         (LCDDIV_4)
#define LCD_C_CLOCKDIVIDER_6                                         (LCDDIV_5)
#define LCD_C_CLOCKDIVIDER_7                                         (LCDDIV_6)
#define LCD_C_CLOCKDIVIDER_8                                         (LCDDIV_7)
#define LCD_C_CLOCKDIVIDER_9                                         (LCDDIV_8)
#define LCD_C_CLOCKDIVIDER_10                                        (LCDDIV_9)
#define LCD_C_CLOCKDIVIDER_11                                       (LCDDIV_10)
#define LCD_C_CLOCKDIVIDER_12                                       (LCDDIV_11)
#define LCD_C_CLOCKDIVIDER_13                                       (LCDDIV_12)
#define LCD_C_CLOCKDIVIDER_14                                       (LCDDIV_13)
#define LCD_C_CLOCKDIVIDER_15                                       (LCDDIV_14)
#define LCD_C_CLOCKDIVIDER_16                                       (LCDDIV_15)
#define LCD_C_CLOCKDIVIDER_17                                       (LCDDIV_16)
#define LCD_C_CLOCKDIVIDER_18                                       (LCDDIV_17)
#define LCD_C_CLOCKDIVIDER_19                                       (LCDDIV_18)
#define LCD_C_CLOCKDIVIDER_20                                       (LCDDIV_19)
#define LCD_C_CLOCKDIVIDER_21                                       (LCDDIV_20)
#define LCD_C_CLOCKDIVIDER_22                                       (LCDDIV_21)
#define LCD_C_CLOCKDIVIDER_23                                       (LCDDIV_22)
#define LCD_C_CLOCKDIVIDER_24                                       (LCDDIV_23)
#define LCD_C_CLOCKDIVIDER_25                                       (LCDDIV_24)
#define LCD_C_CLOCKDIVIDER_26                                       (LCDDIV_25)
#define LCD_C_CLOCKDIVIDER_27                                       (LCDDIV_26)
#define LCD_C_CLOCKDIVIDER_28                                       (LCDDIV_27)
#define LCD_C_CLOCKDIVIDER_29                                       (LCDDIV_28)
#define LCD_C_CLOCKDIVIDER_30                                       (LCDDIV_29)
#define LCD_C_CLOCKDIVIDER_31                                       (LCDDIV_30)
#define LCD_C_CLOCKDIVIDER_32                                       (LCDDIV_31)

//*****************************************************************************
//
// The following are values that can be passed to the initParams parameter for
// functions: LCD_C_init().
//
//*****************************************************************************
#define LCD_C_CLOCKPRESCALAR_1                                       (LCDPRE_0)
#define LCD_C_CLOCKPRESCALAR_2                                       (LCDPRE_1)
#define LCD_C_CLOCKPRESCALAR_4                                       (LCDPRE_2)
#define LCD_C_CLOCKPRESCALAR_8                                       (LCDPRE_3)
#define LCD_C_CLOCKPRESCALAR_16                                      (LCDPRE_4)
#define LCD_C_CLOCKPRESCALAR_32                                      (LCDPRE_5)

//*****************************************************************************
//
// The following are values that can be passed to the initParams parameter for
// functions: LCD_C_init().
//
//*****************************************************************************
#define LCD_C_STATIC                                                      (0x0)
#define LCD_C_2_MUX                                                    (LCDMX0)
#define LCD_C_3_MUX                                                    (LCDMX1)
#define LCD_C_4_MUX                                           (LCDMX1 | LCDMX0)
#define LCD_C_5_MUX                                                    (LCDMX2)
#define LCD_C_6_MUX                                           (LCDMX2 | LCDMX0)
#define LCD_C_7_MUX                                           (LCDMX2 | LCDMX1)
#define LCD_C_8_MUX                                  (LCDMX2 | LCDMX1 | LCDMX0)

//*****************************************************************************
//
// The following are values that can be passed to the initParams parameter for
// functions: LCD_C_init().
//
//*****************************************************************************
#define LCD_C_STANDARD_WAVEFORMS                                          (0x0)
#define LCD_C_LOW_POWER_WAVEFORMS                                       (LCDLP)

//*****************************************************************************
//
// The following are values that can be passed to the initParams parameter for
// functions: LCD_C_init().
//
//*****************************************************************************
#define LCD_C_SEGMENTS_DISABLED                                           (0x0)
#define LCD_C_SEGMENTS_ENABLED                                         (LCDSON)

//*****************************************************************************
//
// The following are values that can be passed to the mask parameter for
// functions: LCD_C_clearInterrupt(), LCD_C_getInterruptStatus(),
// LCD_C_enableInterrupt(), and LCD_C_disableInterrupt() as well as returned by
// the LCD_C_getInterruptStatus() function.
//
//*****************************************************************************
#define LCD_C_NO_CAPACITANCE_CONNECTED_INTERRUPT                   (LCDNOCAPIE)
#define LCD_C_BLINKING_SEGMENTS_ON_INTERRUPT                       (LCDBLKONIE)
#define LCD_C_BLINKING_SEGMENTS_OFF_INTERRUPT                     (LCDBLKOFFIE)
#define LCD_C_FRAME_INTERRUPT                                        (LCDFRMIE)

//*****************************************************************************
//
// The following are values that can be passed to the displayMemory parameter
// for functions: LCD_C_selectDisplayMemory().
//
//*****************************************************************************
#define LCD_C_DISPLAYSOURCE_MEMORY                                        (0x0)
#define LCD_C_DISPLAYSOURCE_BLINKINGMEMORY                            (LCDDISP)

//*****************************************************************************
//
// The following are values that can be passed to the clockDivider parameter
// for functions: LCD_C_setBlinkingControl().
//
//*****************************************************************************
#define LCD_C_BLINK_FREQ_CLOCK_DIVIDER_1                                  (0x0)
#define LCD_C_BLINK_FREQ_CLOCK_DIVIDER_2                           (LCDBLKDIV0)
#define LCD_C_BLINK_FREQ_CLOCK_DIVIDER_3                           (LCDBLKDIV1)
#define LCD_C_BLINK_FREQ_CLOCK_DIVIDER_4              (LCDBLKDIV0 | LCDBLKDIV1)
#define LCD_C_BLINK_FREQ_CLOCK_DIVIDER_5                           (LCDBLKDIV2)
#define LCD_C_BLINK_FREQ_CLOCK_DIVIDER_6              (LCDBLKDIV2 | LCDBLKDIV0)
#define LCD_C_BLINK_FREQ_CLOCK_DIVIDER_7              (LCDBLKDIV2 | LCDBLKDIV1)
#define LCD_C_BLINK_FREQ_CLOCK_DIVIDER_8 (LCDBLKDIV2 | LCDBLKDIV1 | LCDBLKDIV0)

//*****************************************************************************
//
// The following are values that can be passed to the clockPrescalar parameter
// for functions: LCD_C_setBlinkingControl().
//
//*****************************************************************************
#define LCD_C_BLINK_FREQ_CLOCK_PRESCALAR_512                              (0x0)
#define LCD_C_BLINK_FREQ_CLOCK_PRESCALAR_1024                      (LCDBLKPRE0)
#define LCD_C_BLINK_FREQ_CLOCK_PRESCALAR_2048                      (LCDBLKPRE1)
#define LCD_C_BLINK_FREQ_CLOCK_PRESCALAR_4096         (LCDBLKPRE1 | LCDBLKPRE0)
#define LCD_C_BLINK_FREQ_CLOCK_PRESCALAR_8162                      (LCDBLKPRE2)
#define LCD_C_BLINK_FREQ_CLOCK_PRESCALAR_16384        (LCDBLKPRE2 | LCDBLKPRE0)
#define LCD_C_BLINK_FREQ_CLOCK_PRESCALAR_32768        (LCDBLKPRE2 | LCDBLKPRE1)
#define LCD_C_BLINK_FREQ_CLOCK_PRESCALAR_65536                                \
                                         (LCDBLKPRE2 | LCDBLKPRE1 | LCDBLKPRE0)

//*****************************************************************************
//
// The following are values that can be passed to the blinkingMode parameter
// for functions: LCD_C_setBlinkingControl().
//
//*****************************************************************************
#define LCD_C_BLINK_MODE_DISABLED                                 (LCDBLKMOD_0)
#define LCD_C_BLINK_MODE_INDIVIDUAL_SEGMENTS                      (LCDBLKMOD_1)
#define LCD_C_BLINK_MODE_ALL_SEGMENTS                             (LCDBLKMOD_2)
#define LCD_C_BLINK_MODE_SWITCHING_BETWEEN_DISPLAY_CONTENTS       (LCDBLKMOD_3)

//*****************************************************************************
//
// The following are values that can be passed to the bias parameter for
// functions: LCD_C_selectBias().
//
//*****************************************************************************
#define LCD_C_BIAS_1_3                                                    (0x0)
#define LCD_C_BIAS_1_2                                                  (LCD2B)

//*****************************************************************************
//
// The following are values that can be passed to the reference parameter for
// functions: LCD_C_selectChargePumpReference().
//
//*****************************************************************************
#define LCD_C_INTERNAL_REFERENCE_VOLTAGE                            (VLCDREF_0)
#define LCD_C_EXTERNAL_REFERENCE_VOLTAGE                            (VLCDREF_1)
#define LCD_C_INTERNAL_REFERENCE_VOLTAGE_SWITCHED_TO_EXTERNAL_PIN   (VLCDREF_2)

//*****************************************************************************
//
// The following are values that can be passed to the vlcdSource parameter for
// functions: LCD_C_setVLCDSource().
//
//*****************************************************************************
#define LCD_C_VLCD_GENERATED_INTERNALLY                                   (0x0)
#define LCD_C_VLCD_SOURCED_EXTERNALLY                                 (VLCDEXT)

//*****************************************************************************
//
// The following are values that can be passed to the v2v3v4Source parameter
// for functions: LCD_C_setVLCDSource().
//
//*****************************************************************************
#define LCD_C_V2V3V4_GENERATED_INTERNALLY_NOT_SWITCHED_TO_PINS            (0x0)
#define LCD_C_V2V3V4_GENERATED_INTERNALLY_SWITCHED_TO_PINS            (LCDREXT)
#define LCD_C_V2V3V4_SOURCED_EXTERNALLY                            (LCDEXTBIAS)

//*****************************************************************************
//
// The following are values that can be passed to the v5Source parameter for
// functions: LCD_C_setVLCDSource().
//
//*****************************************************************************
#define LCD_C_V5_VSS                                                      (0x0)
#define LCD_C_V5_SOURCED_FROM_R03                                      (R03EXT)

//*****************************************************************************
//
// The following are values that can be passed to the voltage parameter for
// functions: LCD_C_setVLCDVoltage().
//
//*****************************************************************************
#define LCD_C_CHARGEPUMP_DISABLED                                         (0x0)
#define LCD_C_CHARGEPUMP_VOLTAGE_2_60V_OR_2_17VREF                      (VLCD0)
#define LCD_C_CHARGEPUMP_VOLTAGE_2_66V_OR_2_22VREF                      (VLCD1)
#define LCD_C_CHARGEPUMP_VOLTAGE_2_72V_OR_2_27VREF              (VLCD1 | VLCD0)
#define LCD_C_CHARGEPUMP_VOLTAGE_2_78V_OR_2_32VREF                      (VLCD2)
#define LCD_C_CHARGEPUMP_VOLTAGE_2_84V_OR_2_37VREF              (VLCD2 | VLCD0)
#define LCD_C_CHARGEPUMP_VOLTAGE_2_90V_OR_2_42VREF              (VLCD2 | VLCD1)
#define LCD_C_CHARGEPUMP_VOLTAGE_2_96V_OR_2_47VREF      (VLCD2 | VLCD1 | VLCD0)
#define LCD_C_CHARGEPUMP_VOLTAGE_3_02V_OR_2_52VREF                      (VLCD3)
#define LCD_C_CHARGEPUMP_VOLTAGE_3_08V_OR_2_57VREF              (VLCD3 | VLCD0)
#define LCD_C_CHARGEPUMP_VOLTAGE_3_14V_OR_2_62VREF              (VLCD3 | VLCD1)
#define LCD_C_CHARGEPUMP_VOLTAGE_3_20V_OR_2_67VREF      (VLCD3 | VLCD1 | VLCD0)
#define LCD_C_CHARGEPUMP_VOLTAGE_3_26V_OR_2_72VREF              (VLCD3 | VLCD2)
#define LCD_C_CHARGEPUMP_VOLTAGE_3_32V_OR_2_77VREF      (VLCD3 | VLCD2 | VLCD0)
#define LCD_C_CHARGEPUMP_VOLTAGE_3_38V_OR_2_82VREF      (VLCD3 | VLCD2 | VLCD1)
#define LCD_C_CHARGEPUMP_VOLTAGE_3_44V_OR_2_87VREF                            \
                                                (VLCD3 | VLCD2 | VLCD1 | VLCD0)

//*****************************************************************************
//
// The following are values that can be passed to the startPin parameter for
// functions: LCD_C_setPinAsLCDFunctionEx(); the endPin parameter for
// functions: LCD_C_setPinAsLCDFunctionEx(); the pin parameter for functions:
// LCD_C_setPinAsLCDFunction(), LCD_C_setPinAsPortFunction(),
// LCD_C_setMemory(), and LCD_C_setBlinkingMemory().
//
//*****************************************************************************
#define LCD_C_SEGMENT_LINE_0                                                (0)
#define LCD_C_SEGMENT_LINE_1                                                (1)
#define LCD_C_SEGMENT_LINE_2                                                (2)
#define LCD_C_SEGMENT_LINE_3                                                (3)
#define LCD_C_SEGMENT_LINE_4                                                (4)
#define LCD_C_SEGMENT_LINE_5                                                (5)
#define LCD_C_SEGMENT_LINE_6                                                (6)
#define LCD_C_SEGMENT_LINE_7                                                (7)
#define LCD_C_SEGMENT_LINE_8                                                (8)
#define LCD_C_SEGMENT_LINE_9                                                (9)
#define LCD_C_SEGMENT_LINE_10                                              (10)
#define LCD_C_SEGMENT_LINE_11                                              (11)
#define LCD_C_SEGMENT_LINE_12                                              (12)
#define LCD_C_SEGMENT_LINE_13                                              (13)
#define LCD_C_SEGMENT_LINE_14                                              (14)
#define LCD_C_SEGMENT_LINE_15                                              (15)
#define LCD_C_SEGMENT_LINE_16                                              (16)
#define LCD_C_SEGMENT_LINE_17                                              (17)
#define LCD_C_SEGMENT_LINE_18                                              (18)
#define LCD_C_SEGMENT_LINE_19                                              (19)
#define LCD_C_SEGMENT_LINE_20                                              (20)
#define LCD_C_SEGMENT_LINE_21                                              (21)
#define LCD_C_SEGMENT_LINE_22                                              (22)
#define LCD_C_SEGMENT_LINE_23                                              (23)
#define LCD_C_SEGMENT_LINE_24                                              (24)
#define LCD_C_SEGMENT_LINE_25                                              (25)
#define LCD_C_SEGMENT_LINE_26                                              (26)
#define LCD_C_SEGMENT_LINE_27                                              (27)
#define LCD_C_SEGMENT_LINE_28                                              (28)
#define LCD_C_SEGMENT_LINE_29                                              (29)
#define LCD_C_SEGMENT_LINE_30                                              (30)
#define LCD_C_SEGMENT_LINE_31                                              (31)
#define LCD_C_SEGMENT_LINE_32                                              (32)
#define LCD_C_SEGMENT_LINE_33                                              (33)
#define LCD_C_SEGMENT_LINE_34                                              (34)
#define LCD_C_SEGMENT_LINE_35                                              (35)
#define LCD_C_SEGMENT_LINE_36                                              (36)
#define LCD_C_SEGMENT_LINE_37                                              (37)
#define LCD_C_SEGMENT_LINE_38                                              (38)
#define LCD_C_SEGMENT_LINE_39                                              (39)
#define LCD_C_SEGMENT_LINE_40                                              (40)
#define LCD_C_SEGMENT_LINE_41                                              (41)
#define LCD_C_SEGMENT_LINE_42                                              (42)
#define LCD_C_SEGMENT_LINE_43                                              (43)
#define LCD_C_SEGMENT_LINE_44                                              (44)
#define LCD_C_SEGMENT_LINE_45                                              (45)
#define LCD_C_SEGMENT_LINE_46                                              (46)
#define LCD_C_SEGMENT_LINE_47                                              (47)
#define LCD_C_SEGMENT_LINE_48                                              (48)
#define LCD_C_SEGMENT_LINE_49                                              (49)
#define LCD_C_SEGMENT_LINE_50                                              (50)
#define LCD_C_SEGMENT_LINE_51                                              (51)
#define LCD_C_SEGMENT_LINE_52                                              (52)
#define LCD_C_SEGMENT_LINE_53                                              (53)
#define LCD_C_SEGMENT_LINE_54                                              (54)
#define LCD_C_SEGMENT_LINE_55                                              (55)
#define LCD_C_SEGMENT_LINE_56                                              (56)
#define LCD_C_SEGMENT_LINE_57                                              (57)
#define LCD_C_SEGMENT_LINE_58                                              (58)
#define LCD_C_SEGMENT_LINE_59                                              (59)
#define LCD_C_SEGMENT_LINE_60                                              (60)
#define LCD_C_SEGMENT_LINE_61                                              (61)
#define LCD_C_SEGMENT_LINE_62                                              (62)
#define LCD_C_SEGMENT_LINE_63                                              (63)

//*****************************************************************************
//
// The following are values that can be passed to the syncToClock parameter for
// functions: LCD_C_configChargePump().
//
//*****************************************************************************
#define LCD_C_SYNCHRONIZATION_DISABLED                                    (0x0)
#define LCD_C_SYNCHRONIZATION_ENABLED                            (LCDCPCLKSYNC)

//*****************************************************************************
//
// Prototypes for the APIs.
//
//*****************************************************************************

//*****************************************************************************
//
//! \brief Initializes the LCD Module.
//!
//! This function initializes the LCD but without turning on. It bascially
//! setup the clock source, clock divider, clock prescalar, mux rate, low-power
//! waveform and segments on/off. After calling this function, user can config
//! charge pump, internal reference voltage and voltage sources.
//!
//! \param baseAddress is the base address of the LCD_C module.
//! \param initParams is the pointer to LCD_InitParam structure. See the
//!        following parameters for each field.
//!
//! \return None
//
//*****************************************************************************
extern void LCD_C_init(uint16_t baseAddress,
                       LCD_C_initParam *initParams);

//*****************************************************************************
//
//! \brief Turns on the LCD module.
//!
//! \param baseAddress is the base address of the LCD_C module.
//!
//! Modified bits are \b LCDON of \b LCDCTL0 register.
//!
//! \return None
//
//*****************************************************************************
extern void LCD_C_on(uint16_t baseAddress);

//*****************************************************************************
//
//! \brief Turns off the LCD module.
//!
//! \param baseAddress is the base address of the LCD_C module.
//!
//! Modified bits are \b LCDON of \b LCDCTL0 register.
//!
//! \return None
//
//*****************************************************************************
extern void LCD_C_off(uint16_t baseAddress);

//*****************************************************************************
//
//! \brief Clears the LCD interrupt flags.
//!
//! \param baseAddress is the base address of the LCD_C module.
//! \param mask is the masked interrupt flag to be cleared.
//!        Valid values are:
//!        - \b LCD_C_NO_CAPACITANCE_CONNECTED_INTERRUPT
//!        - \b LCD_C_BLINKING_SEGMENTS_ON_INTERRUPT
//!        - \b LCD_C_BLINKING_SEGMENTS_OFF_INTERRUPT
//!        - \b LCD_C_FRAME_INTERRUPT
//!        \n Modified bits are \b LCDCAPIFG, \b LCDBLKONIFG, \b LCDBLKOFFIFG
//!        and \b LCDFRMIFG of \b LCDCTL1 register.
//!
//! \return None
//
//*****************************************************************************
extern void LCD_C_clearInterrupt(uint16_t baseAddress,
                                 uint16_t mask);

//*****************************************************************************
//
//! \brief Gets the LCD interrupt status.
//!
//! \param baseAddress is the base address of the LCD_C module.
//! \param mask is the masked interrupt flags.
//!        Valid values are:
//!        - \b LCD_C_NO_CAPACITANCE_CONNECTED_INTERRUPT
//!        - \b LCD_C_BLINKING_SEGMENTS_ON_INTERRUPT
//!        - \b LCD_C_BLINKING_SEGMENTS_OFF_INTERRUPT
//!        - \b LCD_C_FRAME_INTERRUPT
//!
//! \return None
//!         Return Logical OR of any of the following:
//!         - \b LCD_C_NO_CAPACITANCE_CONNECTED_INTERRUPT
//!         - \b LCD_C_BLINKING_SEGMENTS_ON_INTERRUPT
//!         - \b LCD_C_BLINKING_SEGMENTS_OFF_INTERRUPT
//!         - \b LCD_C_FRAME_INTERRUPT
//!         \n indicating the status of the masked interrupts
//
//*****************************************************************************
extern uint16_t LCD_C_getInterruptStatus(uint16_t baseAddress,
                                         uint16_t mask);

//*****************************************************************************
//
//! \brief Enables LCD interrupt sources.
//!
//! \param baseAddress is the base address of the LCD_C module.
//! \param mask is the interrupts to be enabled.
//!        Valid values are:
//!        - \b LCD_C_NO_CAPACITANCE_CONNECTED_INTERRUPT
//!        - \b LCD_C_BLINKING_SEGMENTS_ON_INTERRUPT
//!        - \b LCD_C_BLINKING_SEGMENTS_OFF_INTERRUPT
//!        - \b LCD_C_FRAME_INTERRUPT
//!        \n Modified bits are \b LCDCAPIE, \b LCDBLKONIE, \b LCDBLKOFFIE and
//!        \b LCDFRMIE of \b LCDCTL1 register.
//!
//! \return None
//
//*****************************************************************************
extern void LCD_C_enableInterrupt(uint16_t baseAddress,
                                  uint16_t mask);

//*****************************************************************************
//
//! \brief Disables LCD interrupt sources.
//!
//! \param baseAddress is the base address of the LCD_C module.
//! \param mask is the interrupts to be disabled.
//!        Valid values are:
//!        - \b LCD_C_NO_CAPACITANCE_CONNECTED_INTERRUPT
//!        - \b LCD_C_BLINKING_SEGMENTS_ON_INTERRUPT
//!        - \b LCD_C_BLINKING_SEGMENTS_OFF_INTERRUPT
//!        - \b LCD_C_FRAME_INTERRUPT
//!        \n Modified bits are \b LCDCAPIE, \b LCDBLKONIE, \b LCDBLKOFFIE and
//!        \b LCDFRMIE of \b LCDCTL1 register.
//!
//! \return None
//
//*****************************************************************************
extern void LCD_C_disableInterrupt(uint16_t baseAddress,
                                   uint16_t mask);

//*****************************************************************************
//
//! \brief Clears all LCD memory registers.
//!
//! \param baseAddress is the base address of the LCD_C module.
//!
//! Modified bits are \b LCDCLRM of \b LCDMEMCTL register.
//!
//! \return None
//
//*****************************************************************************
extern void LCD_C_clearMemory(uint16_t baseAddress);

//*****************************************************************************
//
//! \brief Clears all LCD blinking memory registers.
//!
//! \param baseAddress is the base address of the LCD_C module.
//!
//! Modified bits are \b LCDCLRBM of \b LCDMEMCTL register.
//!
//! \return None
//
//*****************************************************************************
extern void LCD_C_clearBlinkingMemory(uint16_t baseAddress);

//*****************************************************************************
//
//! \brief Selects display memory.
//!
//! This function selects display memory either from memory or blinking memory.
//! Please note if the blinking mode is selected as
//! LCD_BLINKMODE_INDIVIDUALSEGMENTS or LCD_BLINKMODE_ALLSEGMENTS or mux rate
//! >=5, display memory can not be changed. If
//! LCD_BLINKMODE_SWITCHDISPLAYCONTENTS is selected, display memory bit
//! reflects current displayed memory.
//!
//! \param baseAddress is the base address of the LCD_C module.
//! \param displayMemory is the desired displayed memory.
//!        Valid values are:
//!        - \b LCD_C_DISPLAYSOURCE_MEMORY  [Default]
//!        - \b LCD_C_DISPLAYSOURCE_BLINKINGMEMORY
//!        \n Modified bits are \b LCDDISP of \b LCDMEMCTL register.
//!
//! \return None
//
//*****************************************************************************
extern void LCD_C_selectDisplayMemory(uint16_t baseAddress,
                                      uint16_t displayMemory);

//*****************************************************************************
//
//! \brief Sets the blink settings.
//!
//! \param baseAddress is the base address of the LCD_C module.
//! \param clockDivider is the clock divider for blinking frequency.
//!        Valid values are:
//!        - \b LCD_C_BLINK_FREQ_CLOCK_DIVIDER_1 [Default]
//!        - \b LCD_C_BLINK_FREQ_CLOCK_DIVIDER_2
//!        - \b LCD_C_BLINK_FREQ_CLOCK_DIVIDER_3
//!        - \b LCD_C_BLINK_FREQ_CLOCK_DIVIDER_4
//!        - \b LCD_C_BLINK_FREQ_CLOCK_DIVIDER_5
//!        - \b LCD_C_BLINK_FREQ_CLOCK_DIVIDER_6
//!        - \b LCD_C_BLINK_FREQ_CLOCK_DIVIDER_7
//!        - \b LCD_C_BLINK_FREQ_CLOCK_DIVIDER_8
//!        \n Modified bits are \b LCDBLKDIVx of \b LCDBLKCTL register.
//! \param clockPrescalar is the clock pre-scalar for blinking frequency.
//!        Valid values are:
//!        - \b LCD_C_BLINK_FREQ_CLOCK_PRESCALAR_512 [Default]
//!        - \b LCD_C_BLINK_FREQ_CLOCK_PRESCALAR_1024
//!        - \b LCD_C_BLINK_FREQ_CLOCK_PRESCALAR_2048
//!        - \b LCD_C_BLINK_FREQ_CLOCK_PRESCALAR_4096
//!        - \b LCD_C_BLINK_FREQ_CLOCK_PRESCALAR_8162
//!        - \b LCD_C_BLINK_FREQ_CLOCK_PRESCALAR_16384
//!        - \b LCD_C_BLINK_FREQ_CLOCK_PRESCALAR_32768
//!        - \b LCD_C_BLINK_FREQ_CLOCK_PRESCALAR_65536
//!        \n Modified bits are \b LCDBLKPREx of \b LCDBLKCTL register.
//!
//! \return None
//
//*****************************************************************************
extern void LCD_C_setBlinkingControl(uint16_t baseAddress,
                                     uint8_t clockDivider,
                                     uint8_t clockPrescalar,
                                     uint8_t mode);

//*****************************************************************************
//
//! \brief Enables the charge pump.
//!
//! \param baseAddress is the base address of the LCD_C module.
//!
//! Modified bits are \b LCDCPEN of \b LCDVCTL register; bits \b LCDON of \b
//! LCDCTL0 register.
//!
//! \return None
//
//*****************************************************************************
extern void LCD_C_enableChargePump(uint16_t baseAddress);

//*****************************************************************************
//
//! \brief Disables the charge pump.
//!
//! \param baseAddress is the base address of the LCD_C module.
//!
//! Modified bits are \b LCDCPEN of \b LCDVCTL register; bits \b LCDON of \b
//! LCDCTL0 register.
//!
//! \return None
//
//*****************************************************************************
extern void LCD_C_disableChargePump(uint16_t baseAddress);

//*****************************************************************************
//
//! \brief Selects the bias level.
//!
//! \param baseAddress is the base address of the LCD_C module.
//! \param bias is the select for bias level.
//!        Valid values are:
//!        - \b LCD_C_BIAS_1_3 [Default] - 1/3 bias
//!        - \b LCD_C_BIAS_1_2 - 1/2 bias
//!
//! Modified bits are \b LCD2B of \b LCDVCTL register; bits \b LCDON of \b
//! LCDCTL0 register.
//!
//! \return None
//
//*****************************************************************************
extern void LCD_C_selectBias(uint16_t baseAddress,
                             uint16_t bias);

//*****************************************************************************
//
//! \brief Selects the charge pump reference.
//!
//! The charge pump reference does not support
//! LCD_C_EXTERNAL_REFERENCE_VOLTAGE,
//! LCD_C_INTERNAL_REFERENCE_VOLTAGE_SWITCHED_TO_EXTERNAL_PIN when
//! LCD_C_V2V3V4_SOURCED_EXTERNALLY or
//! LCD_C_V2V3V4_GENERATED_INTERNALLY_SWITCHED_TO_PINS is selected.
//!
//! \param baseAddress is the base address of the LCD_C module.
//! \param reference is the select for charge pump reference.
//!        Valid values are:
//!        - \b LCD_C_INTERNAL_REFERENCE_VOLTAGE [Default]
//!        - \b LCD_C_EXTERNAL_REFERENCE_VOLTAGE
//!        - \b LCD_C_INTERNAL_REFERENCE_VOLTAGE_SWITCHED_TO_EXTERNAL_PIN
//!
//! Modified bits are \b VLCDREFx of \b LCDVCTL register; bits \b LCDON of \b
//! LCDCTL0 register.
//!
//! \return None
//
//*****************************************************************************
extern void LCD_C_selectChargePumpReference(uint16_t baseAddress,
                                            uint16_t reference);

//*****************************************************************************
//
//! \brief Sets the voltage source for V2/V3/V4 and V5.
//!
//! The charge pump reference does not support
//! LCD_C_EXTERNAL_REFERENCE_VOLTAGE,
//! LCD_C_INTERNAL_REFERENCE_VOLTAGE_SWITCHED_TO_EXTERNAL_PIN when
//! LCD_C_V2V3V4_SOURCED_EXTERNALLY or
//! LCD_C_V2V3V4_GENERATED_INTERNALLY_SWITCHED_TO_PINS is selected.
//!
//! \param baseAddress is the base address of the LCD_C module.
//! \param vlcdSource is the V(LCD) source select.
//!        Valid values are:
//!        - \b LCD_C_VLCD_GENERATED_INTERNALLY [Default]
//!        - \b LCD_C_VLCD_SOURCED_EXTERNALLY
//! \param v2v3v4Source is the V2/V3/V4 source select.
//!        Valid values are:
//!        - \b LCD_C_V2V3V4_GENERATED_INTERNALLY_NOT_SWITCHED_TO_PINS
//!           [Default]
//!        - \b LCD_C_V2V3V4_GENERATED_INTERNALLY_SWITCHED_TO_PINS
//!        - \b LCD_C_V2V3V4_SOURCED_EXTERNALLY
//! \param v5Source is the V5 source select.
//!        Valid values are:
//!        - \b LCD_C_V5_VSS [Default]
//!        - \b LCD_C_V5_SOURCED_FROM_R03
//!
//! Modified bits are \b VLCDEXT, \b LCDREXT, \b LCDEXTBIAS and \b R03EXT of \b
//! LCDVCTL register; bits \b LCDON of \b LCDCTL0 register.
//!
//! \return None
//
//*****************************************************************************
extern void LCD_C_setVLCDSource(uint16_t baseAddress,
                                uint16_t vlcdSource,
                                uint16_t v2v3v4Source,
                                uint16_t v5Source);

//*****************************************************************************
//
//! \brief Selects the charge pump reference.
//!
//! Sets LCD charge pump voltage.
//!
//! \param baseAddress is the base address of the LCD_C module.
//! \param voltage is the charge pump select.
//!        Valid values are:
//!        - \b LCD_C_CHARGEPUMP_DISABLED [Default]
//!        - \b LCD_C_CHARGEPUMP_VOLTAGE_2_60V_OR_2_17VREF
//!        - \b LCD_C_CHARGEPUMP_VOLTAGE_2_66V_OR_2_22VREF
//!        - \b LCD_C_CHARGEPUMP_VOLTAGE_2_72V_OR_2_27VREF
//!        - \b LCD_C_CHARGEPUMP_VOLTAGE_2_78V_OR_2_32VREF
//!        - \b LCD_C_CHARGEPUMP_VOLTAGE_2_84V_OR_2_37VREF
//!        - \b LCD_C_CHARGEPUMP_VOLTAGE_2_90V_OR_2_42VREF
//!        - \b LCD_C_CHARGEPUMP_VOLTAGE_2_96V_OR_2_47VREF
//!        - \b LCD_C_CHARGEPUMP_VOLTAGE_3_02V_OR_2_52VREF
//!        - \b LCD_C_CHARGEPUMP_VOLTAGE_3_08V_OR_2_57VREF
//!        - \b LCD_C_CHARGEPUMP_VOLTAGE_3_14V_OR_2_62VREF
//!        - \b LCD_C_CHARGEPUMP_VOLTAGE_3_20V_OR_2_67VREF
//!        - \b LCD_C_CHARGEPUMP_VOLTAGE_3_26V_OR_2_72VREF
//!        - \b LCD_C_CHARGEPUMP_VOLTAGE_3_32V_OR_2_77VREF
//!        - \b LCD_C_CHARGEPUMP_VOLTAGE_3_38V_OR_2_82VREF
//!        - \b LCD_C_CHARGEPUMP_VOLTAGE_3_44V_OR_2_87VREF
//!
//! Modified bits are \b VLCDx of \b LCDVCTL register; bits \b LCDON of \b
//! LCDCTL0 register.
//!
//! \return None
//
//*****************************************************************************
extern void LCD_C_setVLCDVoltage(uint16_t baseAddress,
                                 uint16_t voltage);

//*****************************************************************************
//
//! \brief Sets the LCD Pin as LCD functions.
//!
//! \param baseAddress is the base address of the LCD_C module.
//! \param pin is the select pin set as LCD function.
//!        Valid values are:
//!        - \b LCD_C_SEGMENT_LINE_0
//!        - \b LCD_C_SEGMENT_LINE_1
//!        - \b LCD_C_SEGMENT_LINE_2
//!        - \b LCD_C_SEGMENT_LINE_3
//!        - \b LCD_C_SEGMENT_LINE_4
//!        - \b LCD_C_SEGMENT_LINE_5
//!        - \b LCD_C_SEGMENT_LINE_6
//!        - \b LCD_C_SEGMENT_LINE_7
//!        - \b LCD_C_SEGMENT_LINE_8
//!        - \b LCD_C_SEGMENT_LINE_9
//!        - \b LCD_C_SEGMENT_LINE_10
//!        - \b LCD_C_SEGMENT_LINE_11
//!        - \b LCD_C_SEGMENT_LINE_12
//!        - \b LCD_C_SEGMENT_LINE_13
//!        - \b LCD_C_SEGMENT_LINE_14
//!        - \b LCD_C_SEGMENT_LINE_15
//!        - \b LCD_C_SEGMENT_LINE_16
//!        - \b LCD_C_SEGMENT_LINE_17
//!        - \b LCD_C_SEGMENT_LINE_18
//!        - \b LCD_C_SEGMENT_LINE_19
//!        - \b LCD_C_SEGMENT_LINE_20
//!        - \b LCD_C_SEGMENT_LINE_21
//!        - \b LCD_C_SEGMENT_LINE_22
//!        - \b LCD_C_SEGMENT_LINE_23
//!        - \b LCD_C_SEGMENT_LINE_24
//!        - \b LCD_C_SEGMENT_LINE_25
//!        - \b LCD_C_SEGMENT_LINE_26
//!        - \b LCD_C_SEGMENT_LINE_27
//!        - \b LCD_C_SEGMENT_LINE_28
//!        - \b LCD_C_SEGMENT_LINE_29
//!        - \b LCD_C_SEGMENT_LINE_30
//!        - \b LCD_C_SEGMENT_LINE_31
//!        - \b LCD_C_SEGMENT_LINE_32
//!        - \b LCD_C_SEGMENT_LINE_33
//!        - \b LCD_C_SEGMENT_LINE_34
//!        - \b LCD_C_SEGMENT_LINE_35
//!        - \b LCD_C_SEGMENT_LINE_36
//!        - \b LCD_C_SEGMENT_LINE_37
//!        - \b LCD_C_SEGMENT_LINE_38
//!        - \b LCD_C_SEGMENT_LINE_39
//!        - \b LCD_C_SEGMENT_LINE_40
//!        - \b LCD_C_SEGMENT_LINE_41
//!        - \b LCD_C_SEGMENT_LINE_42
//!        - \b LCD_C_SEGMENT_LINE_43
//!        - \b LCD_C_SEGMENT_LINE_44
//!        - \b LCD_C_SEGMENT_LINE_45
//!        - \b LCD_C_SEGMENT_LINE_46
//!        - \b LCD_C_SEGMENT_LINE_47
//!        - \b LCD_C_SEGMENT_LINE_48
//!        - \b LCD_C_SEGMENT_LINE_49
//!        - \b LCD_C_SEGMENT_LINE_50
//!        - \b LCD_C_SEGMENT_LINE_51
//!        - \b LCD_C_SEGMENT_LINE_52
//!        - \b LCD_C_SEGMENT_LINE_53
//!        - \b LCD_C_SEGMENT_LINE_54
//!        - \b LCD_C_SEGMENT_LINE_55
//!        - \b LCD_C_SEGMENT_LINE_56
//!        - \b LCD_C_SEGMENT_LINE_57
//!        - \b LCD_C_SEGMENT_LINE_58
//!        - \b LCD_C_SEGMENT_LINE_59
//!        - \b LCD_C_SEGMENT_LINE_60
//!        - \b LCD_C_SEGMENT_LINE_61
//!        - \b LCD_C_SEGMENT_LINE_62
//!        - \b LCD_C_SEGMENT_LINE_63
//!
//! Modified bits are \b LCDSx of \b LCDPCTLx register; bits \b LCDON of \b
//! LCDCTL0 register.
//!
//! \return None
//
//*****************************************************************************
extern void LCD_C_setPinAsLCDFunction(uint16_t baseAddress,
                                      uint8_t pin);

//*****************************************************************************
//
//! \brief Sets the LCD Pin as Port functions.
//!
//! \param baseAddress is the base address of the LCD_C module.
//! \param pin is the select pin set as Port function.
//!        Valid values are:
//!        - \b LCD_C_SEGMENT_LINE_0
//!        - \b LCD_C_SEGMENT_LINE_1
//!        - \b LCD_C_SEGMENT_LINE_2
//!        - \b LCD_C_SEGMENT_LINE_3
//!        - \b LCD_C_SEGMENT_LINE_4
//!        - \b LCD_C_SEGMENT_LINE_5
//!        - \b LCD_C_SEGMENT_LINE_6
//!        - \b LCD_C_SEGMENT_LINE_7
//!        - \b LCD_C_SEGMENT_LINE_8
//!        - \b LCD_C_SEGMENT_LINE_9
//!        - \b LCD_C_SEGMENT_LINE_10
//!        - \b LCD_C_SEGMENT_LINE_11
//!        - \b LCD_C_SEGMENT_LINE_12
//!        - \b LCD_C_SEGMENT_LINE_13
//!        - \b LCD_C_SEGMENT_LINE_14
//!        - \b LCD_C_SEGMENT_LINE_15
//!        - \b LCD_C_SEGMENT_LINE_16
//!        - \b LCD_C_SEGMENT_LINE_17
//!        - \b LCD_C_SEGMENT_LINE_18
//!        - \b LCD_C_SEGMENT_LINE_19
//!        - \b LCD_C_SEGMENT_LINE_20
//!        - \b LCD_C_SEGMENT_LINE_21
//!        - \b LCD_C_SEGMENT_LINE_22
//!        - \b LCD_C_SEGMENT_LINE_23
//!        - \b LCD_C_SEGMENT_LINE_24
//!        - \b LCD_C_SEGMENT_LINE_25
//!        - \b LCD_C_SEGMENT_LINE_26
//!        - \b LCD_C_SEGMENT_LINE_27
//!        - \b LCD_C_SEGMENT_LINE_28
//!        - \b LCD_C_SEGMENT_LINE_29
//!        - \b LCD_C_SEGMENT_LINE_30
//!        - \b LCD_C_SEGMENT_LINE_31
//!        - \b LCD_C_SEGMENT_LINE_32
//!        - \b LCD_C_SEGMENT_LINE_33
//!        - \b LCD_C_SEGMENT_LINE_34
//!        - \b LCD_C_SEGMENT_LINE_35
//!        - \b LCD_C_SEGMENT_LINE_36
//!        - \b LCD_C_SEGMENT_LINE_37
//!        - \b LCD_C_SEGMENT_LINE_38
//!        - \b LCD_C_SEGMENT_LINE_39
//!        - \b LCD_C_SEGMENT_LINE_40
//!        - \b LCD_C_SEGMENT_LINE_41
//!        - \b LCD_C_SEGMENT_LINE_42
//!        - \b LCD_C_SEGMENT_LINE_43
//!        - \b LCD_C_SEGMENT_LINE_44
//!        - \b LCD_C_SEGMENT_LINE_45
//!        - \b LCD_C_SEGMENT_LINE_46
//!        - \b LCD_C_SEGMENT_LINE_47
//!        - \b LCD_C_SEGMENT_LINE_48
//!        - \b LCD_C_SEGMENT_LINE_49
//!        - \b LCD_C_SEGMENT_LINE_50
//!        - \b LCD_C_SEGMENT_LINE_51
//!        - \b LCD_C_SEGMENT_LINE_52
//!        - \b LCD_C_SEGMENT_LINE_53
//!        - \b LCD_C_SEGMENT_LINE_54
//!        - \b LCD_C_SEGMENT_LINE_55
//!        - \b LCD_C_SEGMENT_LINE_56
//!        - \b LCD_C_SEGMENT_LINE_57
//!        - \b LCD_C_SEGMENT_LINE_58
//!        - \b LCD_C_SEGMENT_LINE_59
//!        - \b LCD_C_SEGMENT_LINE_60
//!        - \b LCD_C_SEGMENT_LINE_61
//!        - \b LCD_C_SEGMENT_LINE_62
//!        - \b LCD_C_SEGMENT_LINE_63
//!
//! Modified bits are \b LCDSx of \b LCDPCTLx register; bits \b LCDON of \b
//! LCDCTL0 register.
//!
//! \return None
//
//*****************************************************************************
extern void LCD_C_setPinAsPortFunction(uint16_t baseAddress,
                                       uint8_t pin);

//*****************************************************************************
//
//! \brief Sets the LCD pins as LCD function pin.
//!
//! This function sets the LCD pins as LCD function pin. Instead of passing the
//! all the possible pins, it just requires the start pin and the end pin.
//!
//! \param baseAddress is the base address of the LCD_C module.
//! \param startPin is the starting pin to be configed as LCD function pin.
//!        Valid values are:
//!        - \b LCD_C_SEGMENT_LINE_0
//!        - \b LCD_C_SEGMENT_LINE_1
//!        - \b LCD_C_SEGMENT_LINE_2
//!        - \b LCD_C_SEGMENT_LINE_3
//!        - \b LCD_C_SEGMENT_LINE_4
//!        - \b LCD_C_SEGMENT_LINE_5
//!        - \b LCD_C_SEGMENT_LINE_6
//!        - \b LCD_C_SEGMENT_LINE_7
//!        - \b LCD_C_SEGMENT_LINE_8
//!        - \b LCD_C_SEGMENT_LINE_9
//!        - \b LCD_C_SEGMENT_LINE_10
//!        - \b LCD_C_SEGMENT_LINE_11
//!        - \b LCD_C_SEGMENT_LINE_12
//!        - \b LCD_C_SEGMENT_LINE_13
//!        - \b LCD_C_SEGMENT_LINE_14
//!        - \b LCD_C_SEGMENT_LINE_15
//!        - \b LCD_C_SEGMENT_LINE_16
//!        - \b LCD_C_SEGMENT_LINE_17
//!        - \b LCD_C_SEGMENT_LINE_18
//!        - \b LCD_C_SEGMENT_LINE_19
//!        - \b LCD_C_SEGMENT_LINE_20
//!        - \b LCD_C_SEGMENT_LINE_21
//!        - \b LCD_C_SEGMENT_LINE_22
//!        - \b LCD_C_SEGMENT_LINE_23
//!        - \b LCD_C_SEGMENT_LINE_24
//!        - \b LCD_C_SEGMENT_LINE_25
//!        - \b LCD_C_SEGMENT_LINE_26
//!        - \b LCD_C_SEGMENT_LINE_27
//!        - \b LCD_C_SEGMENT_LINE_28
//!        - \b LCD_C_SEGMENT_LINE_29
//!        - \b LCD_C_SEGMENT_LINE_30
//!        - \b LCD_C_SEGMENT_LINE_31
//!        - \b LCD_C_SEGMENT_LINE_32
//!        - \b LCD_C_SEGMENT_LINE_33
//!        - \b LCD_C_SEGMENT_LINE_34
//!        - \b LCD_C_SEGMENT_LINE_35
//!        - \b LCD_C_SEGMENT_LINE_36
//!        - \b LCD_C_SEGMENT_LINE_37
//!        - \b LCD_C_SEGMENT_LINE_38
//!        - \b LCD_C_SEGMENT_LINE_39
//!        - \b LCD_C_SEGMENT_LINE_40
//!        - \b LCD_C_SEGMENT_LINE_41
//!        - \b LCD_C_SEGMENT_LINE_42
//!        - \b LCD_C_SEGMENT_LINE_43
//!        - \b LCD_C_SEGMENT_LINE_44
//!        - \b LCD_C_SEGMENT_LINE_45
//!        - \b LCD_C_SEGMENT_LINE_46
//!        - \b LCD_C_SEGMENT_LINE_47
//!        - \b LCD_C_SEGMENT_LINE_48
//!        - \b LCD_C_SEGMENT_LINE_49
//!        - \b LCD_C_SEGMENT_LINE_50
//!        - \b LCD_C_SEGMENT_LINE_51
//!        - \b LCD_C_SEGMENT_LINE_52
//!        - \b LCD_C_SEGMENT_LINE_53
//!        - \b LCD_C_SEGMENT_LINE_54
//!        - \b LCD_C_SEGMENT_LINE_55
//!        - \b LCD_C_SEGMENT_LINE_56
//!        - \b LCD_C_SEGMENT_LINE_57
//!        - \b LCD_C_SEGMENT_LINE_58
//!        - \b LCD_C_SEGMENT_LINE_59
//!        - \b LCD_C_SEGMENT_LINE_60
//!        - \b LCD_C_SEGMENT_LINE_61
//!        - \b LCD_C_SEGMENT_LINE_62
//!        - \b LCD_C_SEGMENT_LINE_63
//! \param endPin is the ending pin to be configed as LCD function pin.
//!        Valid values are:
//!        - \b LCD_C_SEGMENT_LINE_0
//!        - \b LCD_C_SEGMENT_LINE_1
//!        - \b LCD_C_SEGMENT_LINE_2
//!        - \b LCD_C_SEGMENT_LINE_3
//!        - \b LCD_C_SEGMENT_LINE_4
//!        - \b LCD_C_SEGMENT_LINE_5
//!        - \b LCD_C_SEGMENT_LINE_6
//!        - \b LCD_C_SEGMENT_LINE_7
//!        - \b LCD_C_SEGMENT_LINE_8
//!        - \b LCD_C_SEGMENT_LINE_9
//!        - \b LCD_C_SEGMENT_LINE_10
//!        - \b LCD_C_SEGMENT_LINE_11
//!        - \b LCD_C_SEGMENT_LINE_12
//!        - \b LCD_C_SEGMENT_LINE_13
//!        - \b LCD_C_SEGMENT_LINE_14
//!        - \b LCD_C_SEGMENT_LINE_15
//!        - \b LCD_C_SEGMENT_LINE_16
//!        - \b LCD_C_SEGMENT_LINE_17
//!        - \b LCD_C_SEGMENT_LINE_18
//!        - \b LCD_C_SEGMENT_LINE_19
//!        - \b LCD_C_SEGMENT_LINE_20
//!        - \b LCD_C_SEGMENT_LINE_21
//!        - \b LCD_C_SEGMENT_LINE_22
//!        - \b LCD_C_SEGMENT_LINE_23
//!        - \b LCD_C_SEGMENT_LINE_24
//!        - \b LCD_C_SEGMENT_LINE_25
//!        - \b LCD_C_SEGMENT_LINE_26
//!        - \b LCD_C_SEGMENT_LINE_27
//!        - \b LCD_C_SEGMENT_LINE_28
//!        - \b LCD_C_SEGMENT_LINE_29
//!        - \b LCD_C_SEGMENT_LINE_30
//!        - \b LCD_C_SEGMENT_LINE_31
//!        - \b LCD_C_SEGMENT_LINE_32
//!        - \b LCD_C_SEGMENT_LINE_33
//!        - \b LCD_C_SEGMENT_LINE_34
//!        - \b LCD_C_SEGMENT_LINE_35
//!        - \b LCD_C_SEGMENT_LINE_36
//!        - \b LCD_C_SEGMENT_LINE_37
//!        - \b LCD_C_SEGMENT_LINE_38
//!        - \b LCD_C_SEGMENT_LINE_39
//!        - \b LCD_C_SEGMENT_LINE_40
//!        - \b LCD_C_SEGMENT_LINE_41
//!        - \b LCD_C_SEGMENT_LINE_42
//!        - \b LCD_C_SEGMENT_LINE_43
//!        - \b LCD_C_SEGMENT_LINE_44
//!        - \b LCD_C_SEGMENT_LINE_45
//!        - \b LCD_C_SEGMENT_LINE_46
//!        - \b LCD_C_SEGMENT_LINE_47
//!        - \b LCD_C_SEGMENT_LINE_48
//!        - \b LCD_C_SEGMENT_LINE_49
//!        - \b LCD_C_SEGMENT_LINE_50
//!        - \b LCD_C_SEGMENT_LINE_51
//!        - \b LCD_C_SEGMENT_LINE_52
//!        - \b LCD_C_SEGMENT_LINE_53
//!        - \b LCD_C_SEGMENT_LINE_54
//!        - \b LCD_C_SEGMENT_LINE_55
//!        - \b LCD_C_SEGMENT_LINE_56
//!        - \b LCD_C_SEGMENT_LINE_57
//!        - \b LCD_C_SEGMENT_LINE_58
//!        - \b LCD_C_SEGMENT_LINE_59
//!        - \b LCD_C_SEGMENT_LINE_60
//!        - \b LCD_C_SEGMENT_LINE_61
//!        - \b LCD_C_SEGMENT_LINE_62
//!        - \b LCD_C_SEGMENT_LINE_63
//!
//! Modified bits are \b LCDSx of \b LCDPCTLx register; bits \b LCDON of \b
//! LCDCTL0 register.
//!
//! \return None
//
//*****************************************************************************
extern void LCD_C_setPinAsLCDFunctionEx(uint16_t baseAddress,
                                        uint8_t startPin,
                                        uint8_t endPin);

//*****************************************************************************
//
//! \brief Sets the LCD memory register.
//!
//! \param baseAddress is the base address of the LCD_C module.
//! \param pin is the select pin for setting value.
//!        Valid values are:
//!        - \b LCD_C_SEGMENT_LINE_0
//!        - \b LCD_C_SEGMENT_LINE_1
//!        - \b LCD_C_SEGMENT_LINE_2
//!        - \b LCD_C_SEGMENT_LINE_3
//!        - \b LCD_C_SEGMENT_LINE_4
//!        - \b LCD_C_SEGMENT_LINE_5
//!        - \b LCD_C_SEGMENT_LINE_6
//!        - \b LCD_C_SEGMENT_LINE_7
//!        - \b LCD_C_SEGMENT_LINE_8
//!        - \b LCD_C_SEGMENT_LINE_9
//!        - \b LCD_C_SEGMENT_LINE_10
//!        - \b LCD_C_SEGMENT_LINE_11
//!        - \b LCD_C_SEGMENT_LINE_12
//!        - \b LCD_C_SEGMENT_LINE_13
//!        - \b LCD_C_SEGMENT_LINE_14
//!        - \b LCD_C_SEGMENT_LINE_15
//!        - \b LCD_C_SEGMENT_LINE_16
//!        - \b LCD_C_SEGMENT_LINE_17
//!        - \b LCD_C_SEGMENT_LINE_18
//!        - \b LCD_C_SEGMENT_LINE_19
//!        - \b LCD_C_SEGMENT_LINE_20
//!        - \b LCD_C_SEGMENT_LINE_21
//!        - \b LCD_C_SEGMENT_LINE_22
//!        - \b LCD_C_SEGMENT_LINE_23
//!        - \b LCD_C_SEGMENT_LINE_24
//!        - \b LCD_C_SEGMENT_LINE_25
//!        - \b LCD_C_SEGMENT_LINE_26
//!        - \b LCD_C_SEGMENT_LINE_27
//!        - \b LCD_C_SEGMENT_LINE_28
//!        - \b LCD_C_SEGMENT_LINE_29
//!        - \b LCD_C_SEGMENT_LINE_30
//!        - \b LCD_C_SEGMENT_LINE_31
//!        - \b LCD_C_SEGMENT_LINE_32
//!        - \b LCD_C_SEGMENT_LINE_33
//!        - \b LCD_C_SEGMENT_LINE_34
//!        - \b LCD_C_SEGMENT_LINE_35
//!        - \b LCD_C_SEGMENT_LINE_36
//!        - \b LCD_C_SEGMENT_LINE_37
//!        - \b LCD_C_SEGMENT_LINE_38
//!        - \b LCD_C_SEGMENT_LINE_39
//!        - \b LCD_C_SEGMENT_LINE_40
//!        - \b LCD_C_SEGMENT_LINE_41
//!        - \b LCD_C_SEGMENT_LINE_42
//!        - \b LCD_C_SEGMENT_LINE_43
//!        - \b LCD_C_SEGMENT_LINE_44
//!        - \b LCD_C_SEGMENT_LINE_45
//!        - \b LCD_C_SEGMENT_LINE_46
//!        - \b LCD_C_SEGMENT_LINE_47
//!        - \b LCD_C_SEGMENT_LINE_48
//!        - \b LCD_C_SEGMENT_LINE_49
//!        - \b LCD_C_SEGMENT_LINE_50
//!        - \b LCD_C_SEGMENT_LINE_51
//!        - \b LCD_C_SEGMENT_LINE_52
//!        - \b LCD_C_SEGMENT_LINE_53
//!        - \b LCD_C_SEGMENT_LINE_54
//!        - \b LCD_C_SEGMENT_LINE_55
//!        - \b LCD_C_SEGMENT_LINE_56
//!        - \b LCD_C_SEGMENT_LINE_57
//!        - \b LCD_C_SEGMENT_LINE_58
//!        - \b LCD_C_SEGMENT_LINE_59
//!        - \b LCD_C_SEGMENT_LINE_60
//!        - \b LCD_C_SEGMENT_LINE_61
//!        - \b LCD_C_SEGMENT_LINE_62
//!        - \b LCD_C_SEGMENT_LINE_63
//! \param value is the designated value for corresponding pin.
//!
//! Modified bits are \b MBITx of \b LCDMx register.
//!
//! \return None
//
//*****************************************************************************
extern void LCD_C_setMemory(uint16_t baseAddress,
                            uint8_t pin,
                            uint8_t value);

//*****************************************************************************
//
//! \brief Gets the LCD memory register.
//!
//!
//! \return The uint8_t value of the LCD memory register.
//
//*****************************************************************************
extern uint8_t LCD_C_getMemory(uint16_t baseAddress,
                               uint8_t pin);

//*****************************************************************************
//
//! \brief Sets the LCD memory register without erasing what is already there.
//! Uses LCD getMemory() function.
//!
//!
//! Modified bits are \b MBITx of \b LCDMx register.
//!
//! \return None
//
//*****************************************************************************
extern void LCD_C_setMemoryWithoutOverwrite(uint16_t baseAddress,
                                            uint8_t pin,
                                            uint8_t value);

//*****************************************************************************
//
//! \brief Sets the LCD blink memory register.
//!
//! \param baseAddress is the base address of the LCD_C module.
//! \param pin is the select pin for setting value.
//!        Valid values are:
//!        - \b LCD_C_SEGMENT_LINE_0
//!        - \b LCD_C_SEGMENT_LINE_1
//!        - \b LCD_C_SEGMENT_LINE_2
//!        - \b LCD_C_SEGMENT_LINE_3
//!        - \b LCD_C_SEGMENT_LINE_4
//!        - \b LCD_C_SEGMENT_LINE_5
//!        - \b LCD_C_SEGMENT_LINE_6
//!        - \b LCD_C_SEGMENT_LINE_7
//!        - \b LCD_C_SEGMENT_LINE_8
//!        - \b LCD_C_SEGMENT_LINE_9
//!        - \b LCD_C_SEGMENT_LINE_10
//!        - \b LCD_C_SEGMENT_LINE_11
//!        - \b LCD_C_SEGMENT_LINE_12
//!        - \b LCD_C_SEGMENT_LINE_13
//!        - \b LCD_C_SEGMENT_LINE_14
//!        - \b LCD_C_SEGMENT_LINE_15
//!        - \b LCD_C_SEGMENT_LINE_16
//!        - \b LCD_C_SEGMENT_LINE_17
//!        - \b LCD_C_SEGMENT_LINE_18
//!        - \b LCD_C_SEGMENT_LINE_19
//!        - \b LCD_C_SEGMENT_LINE_20
//!        - \b LCD_C_SEGMENT_LINE_21
//!        - \b LCD_C_SEGMENT_LINE_22
//!        - \b LCD_C_SEGMENT_LINE_23
//!        - \b LCD_C_SEGMENT_LINE_24
//!        - \b LCD_C_SEGMENT_LINE_25
//!        - \b LCD_C_SEGMENT_LINE_26
//!        - \b LCD_C_SEGMENT_LINE_27
//!        - \b LCD_C_SEGMENT_LINE_28
//!        - \b LCD_C_SEGMENT_LINE_29
//!        - \b LCD_C_SEGMENT_LINE_30
//!        - \b LCD_C_SEGMENT_LINE_31
//!        - \b LCD_C_SEGMENT_LINE_32
//!        - \b LCD_C_SEGMENT_LINE_33
//!        - \b LCD_C_SEGMENT_LINE_34
//!        - \b LCD_C_SEGMENT_LINE_35
//!        - \b LCD_C_SEGMENT_LINE_36
//!        - \b LCD_C_SEGMENT_LINE_37
//!        - \b LCD_C_SEGMENT_LINE_38
//!        - \b LCD_C_SEGMENT_LINE_39
//!        - \b LCD_C_SEGMENT_LINE_40
//!        - \b LCD_C_SEGMENT_LINE_41
//!        - \b LCD_C_SEGMENT_LINE_42
//!        - \b LCD_C_SEGMENT_LINE_43
//!        - \b LCD_C_SEGMENT_LINE_44
//!        - \b LCD_C_SEGMENT_LINE_45
//!        - \b LCD_C_SEGMENT_LINE_46
//!        - \b LCD_C_SEGMENT_LINE_47
//!        - \b LCD_C_SEGMENT_LINE_48
//!        - \b LCD_C_SEGMENT_LINE_49
//!        - \b LCD_C_SEGMENT_LINE_50
//!        - \b LCD_C_SEGMENT_LINE_51
//!        - \b LCD_C_SEGMENT_LINE_52
//!        - \b LCD_C_SEGMENT_LINE_53
//!        - \b LCD_C_SEGMENT_LINE_54
//!        - \b LCD_C_SEGMENT_LINE_55
//!        - \b LCD_C_SEGMENT_LINE_56
//!        - \b LCD_C_SEGMENT_LINE_57
//!        - \b LCD_C_SEGMENT_LINE_58
//!        - \b LCD_C_SEGMENT_LINE_59
//!        - \b LCD_C_SEGMENT_LINE_60
//!        - \b LCD_C_SEGMENT_LINE_61
//!        - \b LCD_C_SEGMENT_LINE_62
//!        - \b LCD_C_SEGMENT_LINE_63
//! \param value is the designated value for corresponding blink pin.
//!
//! Modified bits are \b MBITx of \b LCDBMx register.
//!
//! \return None
//
//*****************************************************************************
extern void LCD_C_setBlinkingMemory(uint16_t baseAddress,
                                    uint8_t pin,
                                    uint8_t value);

//*****************************************************************************
//
//! \brief Gets the LCD blink memory register.
//!
//!
//! \return The uint8_t value of the LCD blink memory register.
//
//*****************************************************************************
extern uint8_t LCD_C_getBlinkingMemory(uint16_t baseAddress,
                                       uint8_t pin);

//*****************************************************************************
//
//! \brief Sets the LCD blink memory register without erasing what is already
//! there. Uses LCD getBlinkingMemory() function.
//!
//!
//! Modified bits are \b MBITx of \b LCDBMx register.
//!
//! \return None
//
//*****************************************************************************
extern void LCD_C_setBlinkingMemoryWithoutOverwrite(uint16_t baseAddress,
                                                    uint8_t pin,
                                                    uint8_t value);

//*****************************************************************************
//
//! \brief Configs the charge pump for synchronization and disabled capability.
//!
//! This function is device-specific. The charge pump clock can be synchronized
//! to a device-specific clock, and also can be disabled by connected function.
//!
//! \param baseAddress is the base address of the LCD_C module.
//! \param syncToClock is the synchronization select.
//!        Valid values are:
//!        - \b LCD_C_SYNCHRONIZATION_DISABLED [Default]
//!        - \b LCD_C_SYNCHRONIZATION_ENABLED
//! \param functionControl is the connected function control select. Setting 0
//!        to make connected function not disable charge pump.
//!
//! Modified bits are \b MBITx of \b LCDBMx register.
//!
//! \return None
//
//*****************************************************************************
extern void LCD_C_configChargePump(uint16_t baseAddress,
                                   uint16_t syncToClock,
                                   uint16_t functionControl);

//*****************************************************************************
//
// Mark the end of the C bindings section for C++ compilers.
//
//*****************************************************************************
#ifdef __cplusplus
}
#endif

#endif
#endif // __MSP430WARE_LCD_C_H__
