Example #1
0
// =============================================================================
// hal_CameraReset(BOOL InReset)
// -----------------------------------------------------------------------------
/// Puts the Camera sensor in Reset or out of Reset.
/// 
/// @param InReset if true, put the external camera sensor in reset
// =============================================================================
PUBLIC VOID hal_CameraReset(BOOL InReset)
{
    if (g_halCameraConfig.camId == 0)
    {
        // Use sensor 0
        if (g_halCfg->camCfg.camRstRemap.gpioId == HAL_GPIO_NONE)
        {
            // Configures the Reset bit to the camera
            if (InReset)
            {
                hwp_camera->CMD_SET = CAMERA_RESET;
            }
            else
            {
                hwp_camera->CMD_CLR = CAMERA_RESET;
            }
        }
        else
        {
            // Use GPIO
            if ((g_halCameraConfig.rstActiveH && InReset) || ((!g_halCameraConfig.rstActiveH) && (!InReset)))
            {
                hal_GpioSet(g_halCfg->camCfg.camRstRemap);
            }
            else
            {
                hal_GpioClr(g_halCfg->camCfg.camRstRemap);
            }
        }
    }
    else
    {
        // Use sensor 1
        // Use GPIO
        if (g_halCfg->camCfg.cam1RstRemap.gpioId == HAL_GPIO_NONE)
        {
            // Configures the Reset bit to the camera
            if (InReset)
            {
                hwp_camera->CMD_SET = CAMERA_RESET;
            }
            else
            {
                hwp_camera->CMD_CLR = CAMERA_RESET;
            }
        }
        else
        {
            // Use GPIO
            if ((g_halCameraConfig.rstActiveH && InReset) || ((!g_halCameraConfig.rstActiveH) && (!InReset)))
            {
                hal_GpioSet(g_halCfg->camCfg.cam1RstRemap);
            }
            else
            {
                hal_GpioClr(g_halCfg->camCfg.cam1RstRemap);
            }
        }
    }
}
Example #2
0
// =============================================================================
// fmd_Close
// -----------------------------------------------------------------------------
/// This function closes the FM driver and desactivate the FM chip 
/// and stops any pending #fmd_Tune or #fmd_Seek operation.
/// @return             \c FMD_ERR_NO, or \c FMD_ERR_RESOURCE_BUSY
// =============================================================================
PUBLIC FMD_ERR_T fmd_Close(VOID)
{ 
    //set mute,close adac
   // fmd_Write(0x10,0xc500);
    //set pdn low
    RDA5888FM_Exit();
    hal_GpioClr(g_fmdConfig->pinPdn);

#ifdef RDA5888_FM_26MCRYSTAL_ENABLE    
//if ( 0==rdabt_getCurrentState() )
{
	hal_SysAuxClkOut(FALSE);
}
#endif
//close 32k here
#ifdef RDA5888_32KFMMODE_ENALBE
    {
        RDA_Close32KOnClip();
    }
#endif

#ifdef I2C_BASED_ON_GPIO
		   gpio_i2c_close();
#else 
		//xiaoyifeng for atv
		 hal_I2cClose(g_atvdI2cBusId); 
#endif

    g_band = FMD_BAND_QTY; // close marker
 
    return FMD_ERR_NO;
}
Example #3
0
void rda_bt_poweroff_for_test(void)
{

    pmd_EnablePower(PMD_POWER_BT, FALSE);
    hal_GpioClr(g_btdConfig->pinReset);
    rdabt_uart_stop();
#ifdef __RDA_SHARE_CRYSTAL__
    L1SM_SleepEnable(bt_sleephdl);
#endif
}
Example #4
0
PROTECTED VOID hal_KeyIrqHandler(UINT8 interruptId)
{
    // interrupt status
    UINT32 status;
    // Keys pressed a the time of the interrupt
    HAL_KEY_MATRIX_T scannedKeys;
    // On-Off key state at the time of the interrupt
    BOOL scannedOnOff;
    
    // Variables to store the state of the different keys
    HAL_KEY_MATRIX_T downKeys;
    HAL_KEY_MATRIX_T upKeys;
    HAL_KEY_MATRIX_T pressedKeys;
    BOOL ExpKeyDet = FALSE;

    status = hwp_keypad->KP_IRQ_CAUSE &
        (KEYPAD_KP_EVT0_IRQ_CAUSE|KEYPAD_KP_EVT1_IRQ_CAUSE|KEYPAD_KP_ITV_IRQ_CAUSE) ;

    // Clear IRQ
    hwp_keypad->KP_IRQ_CLR = KEYPAD_KP_IRQ_CLR;


    if ((status & KEYPAD_KP_EVT0_IRQ_CAUSE) || (status & KEYPAD_KP_ITV_IRQ_CAUSE))
    {
        hal_KeySingleScan(scannedKeys);
        if (scannedKeys[0] == COL0_PATTERN)
        {
            g_expKey[0] = 0;
            ExpKeyDet = TRUE;
        }
        else if (scannedKeys[0] == COL1_PATTERN)
        {
            g_expKey[0] = 1;
            ExpKeyDet = TRUE;
        }
        else if (scannedKeys[0] == COL2_PATTERN)
        {
            g_expKey[0] = 2;
            ExpKeyDet = TRUE;
        }
        else if (scannedKeys[0] == COL3_PATTERN)
        {
            g_expKey[0] = 3;
            ExpKeyDet = TRUE;
        }
        else if (scannedKeys[0] == COL4_PATTERN)
        {
            g_expKey[0] = 4;
            ExpKeyDet = TRUE;
        }
        else if (scannedKeys[0] == COL5_PATTERN)
        {
            g_expKey[0] = 5;
            ExpKeyDet = TRUE;
        }
        else
        {
            ExpKeyDet = FALSE;
        }
    }
    if (status & KEYPAD_KP_EVT1_IRQ_CAUSE)
    {
        if (g_ExpKeyPressed)
        {
            HAL_TRACE(HAL_IO_TRC, 0, "HAL_KEY: Key Up -> Finish Exp Key config");
            hwp_keypad->KP_CTRL = g_kpCtrlReg | KEYPAD_KP_ITV_TIME(g_kpItvReg) | KEYPAD_KP_DBN_TIME(g_kpdbReg);
            g_ItvTimeShort = FALSE;
            g_ExpKeyPressed = FALSE;
            g_kpItvCnt = 0;

            if (g_RowToDisable == 6)
            {
                g_RowToDisable = 7;
            }
            else
            {
                g_RowToDisable = 6;
            }

            hal_ExpKeyCallHandler(g_expKey, HAL_KEY_UP);
            // Reset KeyOut6 & 7 to '1'
            hal_GpioSet(g_keyOut6);
            hal_GpioSet(g_keyOut7);
        }
    }
    if (!ExpKeyDet)
    {
        // All keys are released
        if ((status & KEYPAD_KP_EVT1_IRQ_CAUSE) && g_eventOnUp)
        {
            pressedKeys[0] = 0;
            pressedKeys[1] = 0;
            scannedOnOff = FALSE;

            // All previously pressed keys are released
            hal_KeyCallHandler(g_previousKeys, HAL_KEY_UP);

            // on-off button
            if (g_previousOnOff)
            {
                g_keyIrqHandler(255, HAL_KEY_UP);
            }
            
            // Keep track of the pressed buttons.
            g_previousKeys[0] = pressedKeys[0];
            g_previousKeys[1] = pressedKeys[1];
            g_previousOnOff   = scannedOnOff;
        }

        else
        
        {
        // Key up or down
            if (status &  KEYPAD_KP_EVT0_IRQ_CAUSE)
            {
                
                hal_KeySingleScan(scannedKeys);
                scannedOnOff = hal_KeyOnOffStateGet();

                // Send the ***pressed events*** only if user requested it.
                if (g_eventOnPressed && NULL != g_keyIrqHandler)
                {
                    // Pressed key detection
                    // Those are the one previously pressed and still pressed now
                    pressedKeys[0] = (scannedKeys[0] & g_previousKeys[0]);
                    pressedKeys[1] = (scannedKeys[1] & g_previousKeys[1]);
                
                    hal_KeyCallHandler(pressedKeys, HAL_KEY_PRESSED);
                    // on-off button
                    if (g_previousOnOff & scannedOnOff)
                    {
                        g_keyIrqHandler(255, HAL_KEY_PRESSED);
                    }

                }
                
                // If the pressed buttons changed.
                if (scannedKeys[0] != g_previousKeys[0] ||
                    scannedKeys[1] != g_previousKeys[1] ||
                    scannedOnOff   != g_previousOnOff)
                {
                    // Send the ***down events*** only if user requested it.
                    if (g_eventOnDown && NULL != g_keyIrqHandler)
                    {
                        // Key that are now pressed but weren't before
                        downKeys[0] = scannedKeys[0] & ~g_previousKeys[0];
                        downKeys[1] = scannedKeys[1] & ~g_previousKeys[1];

                        // low and high keys
                        hal_KeyCallHandler(downKeys, HAL_KEY_DOWN);
                        
                        // on-off button
                        if (~g_previousOnOff & scannedOnOff)
                        {
                            g_keyIrqHandler(255, HAL_KEY_DOWN);
                        }
                    }

                    // Send the ***up events*** only if user requested it.
                    if (g_eventOnUp && NULL != g_keyIrqHandler)
                    {
                        // Keys that are now unpressed but were pressed before
                        upKeys[0] = ~scannedKeys[0] & g_previousKeys[0];
                        upKeys[1] = ~scannedKeys[1] & g_previousKeys[1];

                        // low and high keys
                        hal_KeyCallHandler(upKeys, HAL_KEY_UP);

                        // on-off key
                        if (g_previousOnOff & ~scannedOnOff)
                        {
                            g_keyIrqHandler(255, HAL_KEY_UP);
                        }
                    }

                    // Keep track of the pressed buttons.
                    g_previousKeys[0] = scannedKeys[0];
                    g_previousKeys[1] = scannedKeys[1];
                    g_previousOnOff   = scannedOnOff;
                }
            }
            else
            {
                // There are only already pressed keys 
                // still pressed, so no change in pressed keys
                // and no need for a new scan
                if ((status & KEYPAD_KP_ITV_IRQ_CAUSE) && g_eventOnPressed)
                {
                    hal_KeyCallHandler(g_previousKeys, HAL_KEY_PRESSED);
                    // on-off button
                    if (g_previousOnOff)
                    {
                        g_keyIrqHandler(255, HAL_KEY_PRESSED);
                    }
                }
            }
        }
    }
    else // Expand Key
    {
        if (status & KEYPAD_KP_EVT0_IRQ_CAUSE)
        {
            hwp_keypad->KP_CTRL = g_kpCtrlReg | KEYPAD_KP_ITV_TIME(0) | KEYPAD_KP_DBN_TIME(1);
            g_ItvTimeShort = TRUE;
            HAL_TRACE(HAL_IO_TRC, 0, "HAL_KEY: COL_DET");
            if (g_RowToDisable == 6)
            {
                hal_GpioClr(g_keyOut6);
            }
            else
            {
                hal_GpioClr(g_keyOut7);
            }
            g_ExpKeyPressed = TRUE;
        }
        if (status & KEYPAD_KP_ITV_IRQ_CAUSE)
        {
            if (g_ItvTimeShort)
            {
                hwp_keypad->KP_CTRL = g_kpCtrlReg | KEYPAD_KP_ITV_TIME(g_kpItvReg) | KEYPAD_KP_DBN_TIME(g_kpdbReg);
                g_ItvTimeShort=FALSE;
                if (g_RowToDisable == 6)
                {
                    // Row 6 is disabled, so exp key is on row 7
                    g_expKey[1] = 1;
                    HAL_TRACE(HAL_IO_TRC, 0, "HAL_KEY: Key Down 7");
                }
                else
                {
                    // Row 7 is disabled, so exp key is on row 6
                    g_expKey[1] = 0;
                    HAL_TRACE(HAL_IO_TRC, 0, "HAL_KEY: Key Down 6");
                }
                hal_ExpKeyCallHandler(g_expKey, HAL_KEY_DOWN);
            }
            else
            {
                if (g_RowToDisable == 6)
                {
                    // Row 6 is disabled, so exp key is on row 7
                    g_expKey[1] = 1;
                    HAL_TRACE(HAL_IO_TRC, 0, "HAL_KEY: Key Pressed 7");
                }
                else
                {
                    // Row 7 is disabled, so exp key is on row 6
                    g_expKey[1] = 0;
                    HAL_TRACE(HAL_IO_TRC, 0, "HAL_KEY: Key Pressed 6");
                }
                if (g_kpItvCnt)
                {
                    hal_ExpKeyCallHandler(g_expKey, HAL_KEY_PRESSED);
                }
                g_kpItvCnt++;
            }
        }
    }
}
Example #5
0
PRIVATE UINT16 lcddp_Open_Read_LcdId(VOID)
{
   // return 1;
    UINT32 count;
   // UINT8 data[6] = {0x0,0x0,0x0,0x0,0x0,0x0};
   // UINT8 iTempData[6] = {0x9, 0xff,0xff,0xff,0xff,0xff};
    UINT8 data[3] = {0x0,0x0,0x0};
    UINT8 iTempData[3] = {0xdb,0xff, 0xff};
   // UINT8 dummy = 0;
    HAL_SPI_CFG_T slcd_spiCfg =
    {
        .enabledCS    = HAL_SPI_CS0,
        .csActiveLow    = TRUE,
        .inputEn        = TRUE,
        .clkFallEdge    = TRUE,
        .clkDelay       = HAL_SPI_HALF_CLK_PERIOD_0,
        .doDelay        = HAL_SPI_HALF_CLK_PERIOD_0,
        .diDelay        = HAL_SPI_HALF_CLK_PERIOD_1,
        .csDelay        = HAL_SPI_HALF_CLK_PERIOD_1,
        .csPulse        = HAL_SPI_HALF_CLK_PERIOD_0,//HAL_SPI_HALF_CLK_PERIOD_1
        .frameSize      = 8,
        .oeRatio        = 8,
        .spiFreq        = 1000000,//5M 5000000
        .rxTrigger      = HAL_SPI_RX_TRIGGER_4_BYTE,
        .txTrigger      = HAL_SPI_TX_TRIGGER_1_EMPTY,
        .rxMode         = HAL_SPI_DIRECT_POLLING,
        .txMode         = HAL_SPI_DIRECT_POLLING,
        .mask           = {0,0,0,0,0},
        .handler        = NULL
    };
    hal_SpiOpen(HAL_SPI,HAL_SPI_CS0, &slcd_spiCfg);
    hal_SpiActivateCs(HAL_SPI,HAL_SPI_CS0);
    hal_GpioClr(g_slcd_a0);
   // hal_SpiSendData(HAL_SPI,HAL_SPI_CS0,&dummy,1);
    //wait until any previous transfers have ended
   // while(!hal_SpiTxFinished(HAL_SPI,HAL_SPI_CS0));hal_GpioSet(g_slcd_a0);
    hal_SpiSendData(HAL_SPI,HAL_SPI_CS0,iTempData,3);
    //wait until any previous transfers have ended
    while(!hal_SpiTxFinished(HAL_SPI,HAL_SPI_CS0));//hal_GpioSet(g_slcd_a0);
    count = hal_SpiGetData(HAL_SPI,HAL_SPI_CS0,data, 3);
    hal_SpiDeActivateCs(HAL_SPI,HAL_SPI_CS0);
    hal_SpiClose(HAL_SPI,HAL_SPI_CS0);
    SXS_TRACE(TSTDOUT, "hx8535d: lcd read id is 0x%x 0x%x 0x%x  ,count=%d",data[0],data[1],data[2],count);
    return (UINT16)data[1];



}

PRIVATE VOID lcddp_Open_Spi(VOID)
{
    HAL_SPI_CFG_T slcd_spiCfg =
    {
        .enabledCS    = HAL_SPI_CS0,
        .csActiveLow    = TRUE,
        .inputEn        = TRUE,
        .clkFallEdge    = TRUE,
        .clkDelay       = HAL_SPI_HALF_CLK_PERIOD_0,
        .doDelay        = HAL_SPI_HALF_CLK_PERIOD_0,
        .diDelay        = HAL_SPI_HALF_CLK_PERIOD_1,
        .csDelay        = HAL_SPI_HALF_CLK_PERIOD_1,
        .csPulse        = HAL_SPI_HALF_CLK_PERIOD_0,//HAL_SPI_HALF_CLK_PERIOD_1
        .frameSize      = 8,
        .oeRatio        = 0,
        .spiFreq        = 20000000,//5M 5000000 15M  20M(33ms-per-frame)  39M(13ms-per-frame)
        .rxTrigger      = HAL_SPI_RX_TRIGGER_4_BYTE,
        .txTrigger      = HAL_SPI_TX_TRIGGER_1_EMPTY,
        .rxMode         = HAL_SPI_DIRECT_POLLING,
        .txMode         = HAL_SPI_DMA_POLLING,
        .mask           = {0,0,0,0,0},
        .handler        = NULL
    };
    hal_SpiOpen(HAL_SPI,HAL_SPI_CS0, &slcd_spiCfg);
}
// ============================================================================
// lcddp_Open
// ----------------------------------------------------------------------------
/// Open the LCDD driver.
/// It must be called before any call to any other function of this driver.
/// This function is to be called only once.
/// @return #LCDD_ERR_NO or #LCDD_ERR_DEVICE_NOT_FOUND.
// ============================================================================
PRIVATE LCDD_ERR_T lcddp_Open(VOID)
{
    hal_HstSendEvent(0x88855503);
    //hal_GoudaOpen(&g_tgtLcddCfg.config, g_tgtLcddCfg.timings, 0);
    hal_GpioSetOut(g_slcd_a0.gpioId);
    lcddp_Open_Spi();

    

    lcddp_Init();
    hal_TimDelay(1 MS_WAITING);	   
    g_lcddInSleep = FALSE;

    return LCDD_ERR_NO;
}


// ============================================================================
// lcddp_Close
// ----------------------------------------------------------------------------
/// Close the LCDD driver
/// No other functions of this driver should be called after a call to 
/// #lcddp_Close.
/// @return #LCDD_ERR_NO or #LCDD_ERR_DEVICE_NOT_FOUND.
// ============================================================================
PRIVATE LCDD_ERR_T lcddp_Close(VOID)
{
    
   // hal_GoudaClose();
    lcddp_SpiDeActivateCs();
    return LCDD_ERR_NO;
}


// ============================================================================
// lcddp_SetContrast
// ----------------------------------------------------------------------------
/// Set the contrast of the 'main'LCD screen.
/// @param contrast Value to set the contrast to.
/// @return #LCDD_ERR_NO, #LCDD_ERR_NOT_OPENED or 
/// #LCDD_ERR_INVALID_PARAMETER.
// ============================================================================
PRIVATE LCDD_ERR_T lcddp_SetContrast(UINT32 contrast)
{
    //#warning This function is not implemented yet
    return LCDD_ERR_NO;
}


// ============================================================================
// lcddp_SetStandbyMode
// ----------------------------------------------------------------------------
/// Set the main LCD in standby mode or exit from it
/// @param standbyMode If \c TRUE, go in standby mode. 
///                    If \c FALSE, cancel standby mode. 
/// @return #LCDD_ERR_NO, #LCDD_ERR_NOT_OPENED or 
/// #LCDD_ERR_INVALID_PARAMETER.
// ============================================================================
PRIVATE LCDD_ERR_T lcddp_SetStandbyMode(BOOL standbyMode)
{
    if (standbyMode)
    {
        lcddp_Sleep();
    }
    else
    {
        lcddp_WakeUp();
    }
    return LCDD_ERR_NO;
}


// ============================================================================
// lcddp_Sleep
// ----------------------------------------------------------------------------
/// Set the main LCD screen in sleep mode.
/// @return #LCDD_ERR_NO or #LCDD_ERR_NOT_OPENED
// ============================================================================
PRIVATE LCDD_ERR_T lcddp_Sleep(VOID)
{
   
    while (0 == lcdd_MutexGet())
    {
        sxr_Sleep(LCDD_TIME_MUTEX_RETRY);
        LCDD_TRACE(TSTDOUT, 0, "LCDD: Sleep while another LCD operation in progress. Sleep %d ticks",
            LCDD_TIME_MUTEX_RETRY);
    }

    if (g_lcddInSleep)
    {
        lcdd_MutexFree();
        return LCDD_ERR_NO;
    }

    WriteCommand_Addr(0x10); //Set Sleep In
    sxr_Sleep(10 MS_WAITING);
    LCDD_TRACE(TSTDOUT, 0, "lcddp_Sleep: calling hal_GoudaClose");

    g_lcddInSleep = TRUE;
    hal_SpiDeActivateCs(HAL_SPI,HAL_SPI_CS0);

    lcdd_MutexFree();

    return LCDD_ERR_NO;
}


// ============================================================================
// lcddp_PartialOn
// ----------------------------------------------------------------------------
/// Set the Partial mode of the LCD
/// @param vsa : Vertical Start Active
/// @param vea : Vertical End Active
/// @return #LCDD_ERR_NO, #LCDD_ERR_NOT_OPENED
// ============================================================================
PRIVATE LCDD_ERR_T lcddp_PartialOn(UINT16 vsa, UINT16 vea)
{
    return LCDD_ERR_NO;
}


// ============================================================================
// lcddp_PartialOff
// ----------------------------------------------------------------------------
/// return to Normal Mode
/// @return #LCDD_ERR_NO, #LCDD_ERR_NOT_OPENED
// ============================================================================
PRIVATE LCDD_ERR_T lcddp_PartialOff(VOID)
{
    return LCDD_ERR_NO;
}


// ============================================================================
// lcddp_WakeUp
// ----------------------------------------------------------------------------
/// Wake the main LCD screen out of sleep mode
/// @return #LCDD_ERR_NO, #LCDD_ERR_NOT_OPENED
// ============================================================================
PRIVATE LCDD_ERR_T lcddp_WakeUp(VOID)
{
    if (0 == lcdd_MutexGet())
    {
        sxr_Sleep(LCDD_TIME_MUTEX_RETRY);
        LCDD_TRACE(TSTDOUT, 0, "LCDD: Wakeup while another LCD operation in progress. Sleep %d ticks",
            LCDD_TIME_MUTEX_RETRY);
    }

    if (!g_lcddInSleep)
    {
        lcdd_MutexFree();
        return LCDD_ERR_NO;
    }

    LCDD_TRACE(TSTDOUT, 0, "lcddp_WakeUp: calling hal_GoudaOpen");
   // hal_GoudaOpen(&g_tgtLcddCfg.config, g_tgtLcddCfg.timings, 0);

#if 0
    lcddp_SpiActivateCs();
    WriteCommand_Addr(0x11); //Set Sleep Out
    sxr_Sleep(120 MS_WAITING);
#else
    lcddp_Init();
#endif

    g_lcddInSleep = FALSE;

    lcdd_MutexFree();

    // Set a comfortable background color to avoid screen flash
    LCDD_FBW_T frameBufferWin;
    frameBufferWin.fb.buffer = NULL;
    frameBufferWin.fb.colorFormat = LCDD_COLOR_FORMAT_RGB_565;
    frameBufferWin.roi.x=0;
    frameBufferWin.roi.y=0;

    if (g_lcddRotate)
    {
        frameBufferWin.roi.width = LCDD_DISP_Y;
        frameBufferWin.roi.height = LCDD_DISP_X;
        frameBufferWin.fb.width = LCDD_DISP_Y;
        frameBufferWin.fb.height = LCDD_DISP_X;
    }
    else
    {
        frameBufferWin.roi.width = LCDD_DISP_X;
        frameBufferWin.roi.height = LCDD_DISP_Y;
        frameBufferWin.fb.width = LCDD_DISP_X;
        frameBufferWin.fb.height = LCDD_DISP_Y;
    }
    lcddp_Blit16(&frameBufferWin,frameBufferWin.roi.x,frameBufferWin.roi.y);   


    return LCDD_ERR_NO;
}


// ============================================================================
// lcddp_GetScreenInfo
// ----------------------------------------------------------------------------
/// Get information about the main LCD device.
/// @param screenInfo Pointer to the structure where the information
/// obtained will be stored
/// @return #LCDD_ERR_NO, #LCDD_ERR_NOT_OPENED or 
/// #LCDD_ERR_INVALID_PARAMETER.
// ============================================================================
PRIVATE LCDD_ERR_T lcddp_GetScreenInfo(LCDD_SCREEN_INFO_T* screenInfo)
{
    {
        screenInfo->width = LCDD_DISP_X;
        screenInfo->height = LCDD_DISP_Y;
        screenInfo->bitdepth = LCDD_COLOR_FORMAT_RGB_565;
        screenInfo->nReserved = 0;
        return LCDD_ERR_NO;
    }
}