⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pmic_tcled.cpp

📁 i.mx27 soc for wince 6.0
💻 CPP
📖 第 1 页 / 共 5 页
字号:
//-----------------------------------------------------------------------------
//
//  Copyright (C) 2005, Motorola Inc. All Rights Reserved
//
//-----------------------------------------------------------------------------
/*---------------------------------------------------------------------------
* Copyright (C) 2006, Freescale Semiconductor, Inc. All Rights Reserved.
* THIS SOURCE CODE, AND ITS USE AND DISTRIBUTION, IS SUBJECT TO THE TERMS
* AND CONDITIONS OF THE APPLICABLE LICENSE AGREEMENT 
*--------------------------------------------------------------------------*/
//------------------------------------------------------------------------------
//
//  File:  pmic_tcled.cpp
//
//  This file contains the PMIC TCLED SDK interface that is used by applications
//  and other drivers to access registers of the PMIC.
//
//-----------------------------------------------------------------------------
#include <windows.h>
#include <Devload.h>
#include <ceddk.h>
#include "socarm_macros.h"
#include "pmic_ioctl.h"
#include "pmic_tcled.h"

#include "regs.h"
#include "regs_led.h"

//-----------------------------------------------------------------------------
// External Functions

//-----------------------------------------------------------------------------
// External Variables

//-----------------------------------------------------------------------------
// Defines

//-----------------------------------------------------------------------------
// Types

//-----------------------------------------------------------------------------
// Global Variables
extern HANDLE hPMI;

#ifdef DEBUG

// Debug zone bit positions
#define ZONEID_ERROR           0
#define ZONEID_WARN            1
#define ZONEID_INIT            2
#define ZONEID_FUNC            3
#define ZONEID_INFO            4

// Debug zone masks
#define ZONEMASK_ERROR         (1 << ZONEID_ERROR)
#define ZONEMASK_WARN          (1 << ZONEID_WARN)
#define ZONEMASK_INIT          (1 << ZONEID_INIT)
#define ZONEMASK_FUNC          (1 << ZONEID_FUNC)
#define ZONEMASK_INFO          (1 << ZONEID_INFO)

// Debug zone args to DEBUGMSG
#define ZONE_ERROR             DEBUGZONE(ZONEID_ERROR)
#define ZONE_WARN              DEBUGZONE(ZONEID_WARN)
#define ZONE_INIT              DEBUGZONE(ZONEID_INIT)
#define ZONE_FUNC              DEBUGZONE(ZONEID_FUNC)
#define ZONE_INFO              DEBUGZONE(ZONEID_INFO)

extern DBGPARAM dpCurSettings;

#endif

//-----------------------------------------------------------------------------
// Local Variables

//-----------------------------------------------------------------------------
// Local Functions

//------------------------------------------------------------------------------
//
// Function: PmicTCLEDEnable
//
// This function enables the Tri-Colour LED operation mode.
//
// Parameters:
//      mode [in] : operational mode for Tri-Color LED
//      bank[in]  : Selected tri-color bank
//
// Returns:
//      PMIC_STATUS.
//
//------------------------------------------------------------------------------
PMIC_STATUS PmicTCLEDEnable(TCLED_MODE mode, FUNLIGHT_BANK bank)
{
    PMIC_PARAM_LLA_WRITE_REG param;

    DEBUGMSG(ZONE_FUNC, (TEXT("+%s()\r\n"), __WFUNCTION__));

    param.addr = MC13783_LED_CTL0_ADDR;

    switch(mode)
    {
        case TCLED_FUN_MODE:
            switch(bank)
            {
                case TCLED_FUN_BANK1:
                    param.data = CSP_BITFVAL(MC13783_LED_CTL0_FLBANK1,
                                             MC13783_LED_CTL0_FLBANK_ENABLE);
                    param.mask = CSP_BITFMASK(MC13783_LED_CTL0_FLBANK1);
                    break;

                case TCLED_FUN_BANK2:
                    param.data = CSP_BITFVAL(MC13783_LED_CTL0_FLBANK2,
                                             MC13783_LED_CTL0_FLBANK_ENABLE);
                    param.mask = CSP_BITFMASK(MC13783_LED_CTL0_FLBANK2);
                    break;

                case TCLED_FUN_BANK3:
                    param.data = CSP_BITFVAL(MC13783_LED_CTL0_FLBANK3,
                                             MC13783_LED_CTL0_FLBANK_ENABLE);
                    param.mask = CSP_BITFMASK(MC13783_LED_CTL0_FLBANK3);
                    break;
            }
            break;

        case TCLED_IND_MODE:
            param.mask = CSP_BITFMASK(MC13783_LED_CTL0_FLBANK1) |
                         CSP_BITFMASK(MC13783_LED_CTL0_FLBANK2) |
                         CSP_BITFMASK(MC13783_LED_CTL0_FLBANK3);
            param.data = CSP_BITFVAL(MC13783_LED_CTL0_FLBANK1,
                                     MC13783_LED_CTL0_FLBANK_DISABLE) |
                         CSP_BITFVAL(MC13783_LED_CTL0_FLBANK2,
                                     MC13783_LED_CTL0_FLBANK_DISABLE) |
                         CSP_BITFVAL(MC13783_LED_CTL0_FLBANK3,
                                     MC13783_LED_CTL0_FLBANK_DISABLE);
            break;

    }

    if(! DeviceIoControl(hPMI, PMIC_IOCTL_LLA_WRITE_REG, &param,
                         sizeof(param), NULL, 0, NULL, NULL))
        return PMIC_ERROR;

    DEBUGMSG(ZONE_FUNC, (TEXT("-%s()\r\n"), __WFUNCTION__));
    return PMIC_SUCCESS;
}


//-----------------------------------------------------------------------------
//
// Function: PmicTCLEDDisable
//
// This function disables the Tri-Color LED operation mode.
//
// Parameters:
//      bank[in]  : Selected tri-color bank
//
// Returns:
//      PMIC_STATUS.
//
//-----------------------------------------------------------------------------
PMIC_STATUS PmicTCLEDDisable(FUNLIGHT_BANK bank)
{
    PMIC_PARAM_LLA_WRITE_REG param;

    DEBUGMSG(ZONE_FUNC, (TEXT("+%s()\r\n"), __WFUNCTION__));

    param.addr = MC13783_LED_CTL0_ADDR;

    switch(bank)
    {
          case TCLED_FUN_BANK1:
               param.data = CSP_BITFVAL(MC13783_LED_CTL0_FLBANK1,
                                        MC13783_LED_CTL0_FLBANK_DISABLE);
               param.mask = CSP_BITFMASK(MC13783_LED_CTL0_FLBANK1);
          break;

          case TCLED_FUN_BANK2:
               param.data = CSP_BITFVAL(MC13783_LED_CTL0_FLBANK2,
                                        MC13783_LED_CTL0_FLBANK_DISABLE);
               param.mask = CSP_BITFMASK(MC13783_LED_CTL0_FLBANK2);
          break;

          case TCLED_FUN_BANK3:
               param.data = CSP_BITFVAL(MC13783_LED_CTL0_FLBANK3,
                                        MC13783_LED_CTL0_FLBANK_DISABLE);
               param.mask = CSP_BITFMASK(MC13783_LED_CTL0_FLBANK3);
          break;
    }

    if(! DeviceIoControl(hPMI, PMIC_IOCTL_LLA_WRITE_REG, &param,
                         sizeof(param), NULL, 0, NULL, NULL))
    {
        return PMIC_ERROR;
    }

    DEBUGMSG(ZONE_FUNC, (TEXT("-%s()\r\n"), __WFUNCTION__));
    return PMIC_SUCCESS;
}

//-----------------------------------------------------------------------------
//
// Function: PmicTCLEDGetMode
//
// This function retrieves the Tri-Color LED operation mode.
//
// Parameters:
//      mode [out] : pointer to operational mode for Tri-Color LED
//      bank[in]  : Selected tri-color bank
//
// Returns:
//      PMIC_STATUS.
//
//-----------------------------------------------------------------------------
PMIC_STATUS PmicTCLEDGetMode(TCLED_MODE *mode, FUNLIGHT_BANK bank)
{
    PMIC_PARAM_LLA_WRITE_REG param = {0};
    UINT32 temp;

    DEBUGMSG(ZONE_FUNC, (TEXT("+%s()\r\n"), __WFUNCTION__));

    param.addr = MC13783_LED_CTL0_ADDR;

    if(!DeviceIoControl(hPMI, PMIC_IOCTL_LLA_READ_REG, &param, sizeof(param),
                        &temp, sizeof(temp), NULL, NULL))
    {
        return PMIC_ERROR;
    }

    switch(bank)
    {
          case TCLED_FUN_BANK1:
               temp = CSP_BITFEXT(temp, MC13783_LED_CTL0_FLBANK1);
          break;

          case TCLED_FUN_BANK2:
               temp = CSP_BITFEXT(temp, MC13783_LED_CTL0_FLBANK3);
          break;

          case TCLED_FUN_BANK3:
               temp = CSP_BITFEXT(temp, MC13783_LED_CTL0_FLBANK3);
          break;
    }

    if (temp == MC13783_LED_CTL0_FLBANK_ENABLE)
    {
         *mode = TCLED_FUN_MODE;
    }
    else
    {
         *mode = TCLED_IND_MODE;
    }

    DEBUGMSG(ZONE_FUNC, (TEXT("-%s()\r\n"), __WFUNCTION__));

    return PMIC_SUCCESS;
}

//-----------------------------------------------------------------------------
//
// Function: PmicTCLEDFunLightSetCurrentLevel
//
// This function sets the current level when Tri-Color LED is operating in
// fun light mode.
//
// Parameters:
//      bank
//           [in] bank.
//      channel
//           [in] channel.
//      level
//           [in] current level.
//
// Returns:
//      PMIC_STATUS.
//
//-----------------------------------------------------------------------------
PMIC_STATUS PmicTCLEDFunLightSetCurrentLevel(FUNLIGHT_BANK bank, FUNLIGHT_CHANNEL channel, TCLED_CUR_LEVEL level)
{
    PMIC_PARAM_LLA_WRITE_REG param;

    DEBUGMSG(ZONE_FUNC, (TEXT("+%s()\r\n"), __WFUNCTION__));

    if (level > MC13783_MAX_FUNLIGHT_CURRENT_LEVEL)
    {
        DEBUGMSG(ZONE_ERROR, (_T("PmicTCLEDIndicatorSetCurrentLevel: ")
                              _T("Invalid Parameter\r\n")));
        return PMIC_PARAMETER_ERROR;
    }

    switch(bank)
    {
        case TCLED_FUN_BANK1:
            switch(channel)
            {
                case TCLED_FUN_CHANNEL1:
                    param.data = CSP_BITFVAL(MC13783_LED_CTL3_LEDR1, level);
                    param.mask = CSP_BITFMASK(MC13783_LED_CTL3_LEDR1);
                    break;

                case TCLED_FUN_CHANNEL2:
                    param.data = CSP_BITFVAL(MC13783_LED_CTL3_LEDG1, level);
                    param.mask = CSP_BITFMASK(MC13783_LED_CTL3_LEDG1);
                    break;

                case TCLED_FUN_CHANNEL3:
                    param.data = CSP_BITFVAL(MC13783_LED_CTL3_LEDB1, level);
                    param.mask = CSP_BITFMASK(MC13783_LED_CTL3_LEDB1);
                    break;
            }
            param.addr = MC13783_LED_CTL3_ADDR;
            break;

        case TCLED_FUN_BANK2:
            switch(channel)
            {
                case TCLED_FUN_CHANNEL1:
                    param.data = CSP_BITFVAL(MC13783_LED_CTL4_LEDR2, level);
                    param.mask = CSP_BITFMASK(MC13783_LED_CTL4_LEDR2);
                    break;

                case TCLED_FUN_CHANNEL2:
                    param.data = CSP_BITFVAL(MC13783_LED_CTL4_LEDG2, level);
                    param.mask = CSP_BITFMASK(MC13783_LED_CTL4_LEDG2);
                    break;

                case TCLED_FUN_CHANNEL3:
                    param.data = CSP_BITFVAL(MC13783_LED_CTL4_LEDB2, level);
                    param.mask = CSP_BITFMASK(MC13783_LED_CTL4_LEDB2);
                    break;
            }
            param.addr = MC13783_LED_CTL4_ADDR;
            break;

        case TCLED_FUN_BANK3:
            switch(channel)
            {
                case TCLED_FUN_CHANNEL1:
                    param.data = CSP_BITFVAL(MC13783_LED_CTL5_LEDR3, level);
                    param.mask = CSP_BITFMASK(MC13783_LED_CTL5_LEDR3);
                    break;

                case TCLED_FUN_CHANNEL2:
                    param.data = CSP_BITFVAL(MC13783_LED_CTL5_LEDG3, level);
                    param.mask = CSP_BITFMASK(MC13783_LED_CTL5_LEDG3);
                    break;

                case TCLED_FUN_CHANNEL3:
                    param.data = CSP_BITFVAL(MC13783_LED_CTL5_LEDB3, level);
                    param.mask = CSP_BITFMASK(MC13783_LED_CTL5_LEDB3);
                    break;
            }
            param.addr = MC13783_LED_CTL5_ADDR;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -