Ejemplo n.º 1
0
/*******************************************************************************
** Name: RK618DevShellMc
** Input:HDC dev, uint8 * pstr
** Return: rk_err_t
** Owner:aaron.sun
** Date: 2014.12.16
** Time: 17:00:38
*******************************************************************************/
_DRIVER_RK61X_RK618DEVICE_SHELL_
SHELL FUN rk_err_t RK618DevShellMc(HDC dev, uint8 * pstr)
{
	RK618_DEV_ARG stRK618DevArg;
	rk_err_t ret;
	uint32 DevID;

	if(StrCmpA(pstr, "0", 1) == 0)
	{
		DevID = 0;
	}
	else if(StrCmpA(pstr, "1", 1) == 0)
	{
		DevID = 1;
	}
	else
	{
		DevID = 0;
	}

	//Init RK618Dev arg...
	//stRK618DevArg.usbmode = USBOTG_MODE_DEVICE;

	//Create RK618Dev...
	ret = RKDev_Create(DEV_CLASS_RK618, DevID, &stRK618DevArg);
	if(ret != RK_SUCCESS)
	{
		rk_print_string("RK618Dev create failure");
	}
	return RK_SUCCESS;

}
Ejemplo n.º 2
0
/*******************************************************************************
** Name: WDTDevShellDel
** Input:HDC dev, uint8 * pstr
** Return: rk_err_t
** Owner:wrm
** Date: 2015.5.19
** Time: 10:16:13
*******************************************************************************/
_DRIVER_WATCHDOG_WATCHDOGDEVICE_SHELL_
SHELL FUN rk_err_t WDTDevShellDel(HDC dev, uint8 * pstr)
{
	uint32 DevID;

	//Get WDTDev ID...
	if(StrCmpA(pstr, "0", 1) == 0)
	{
		DevID = 0;
	}
	else if(StrCmpA(pstr, "1", 1) == 0)
	{
		DevID = 1;
	}
	else
	{
		DevID = 0;
	}
	if(RKDev_Delete(DEV_CLASS_WDT, DevID, NULL) != RK_SUCCESS)
	{
		rk_print_string("WDTDev delete failure");
	}
	return RK_SUCCESS;

}
Ejemplo n.º 3
0
/*******************************************************************************
** Name: SpiDevShellBspInit
** Input:HDC dev, uint8 * pstr
** Return: rk_err_t
** Owner:hj
** Date: 2014.11.11
** Time: 15:45:43
*******************************************************************************/
_DRIVER_SPI_SPIDEVICE_SHELL_
SHELL FUN rk_err_t SpiDevShellBspInit(HDC dev, uint8 * pstr)
{

    if(StrCmpA(pstr, "0", 1) == 0)
    {
        SPI_TEST_MODE = SPI_TRANSMIT_ONLY;
        SPI_CH_TEST = SPI_CH0;
        DEBUG("SPI_TRANSMIT_ONLY 0");
    }
    else if(StrCmpA(pstr, "1", 1) == 0)
    {
        SPI_TEST_MODE = SPI_TRANSMIT_ONLY;
        SPI_CH_TEST = SPI_CH1;
        DEBUG("SPI_TRANSMIT_ONLY 1");
    }
    else if(StrCmpA(pstr, "2", 1) == 0)
    {
        SPI_TEST_MODE = SPI_TRANSMIT_RECEIVE;
        DEBUG("SPI_Read_Write");
    }
    //ScuClockGateCtr(CLOCK_GATE_I2C, 1);
    //ScuClockGateCtr(CLOCK_GATE_I2S, 1);
    //ScuClockGateCtr(CLOCK_GATE_GRF, 1);
    //I2s_Iomux_Set();
    //I2c_Iomux_Set();

    rk_print_string("\r\nspi init over");
}
Ejemplo n.º 4
0
/*******************************************************************************
** Name: RK618DevShellTest
** Input:HDC dev, uint8 * pstr
** Return: rk_err_t
** Owner:aaron.sun
** Date: 2014.12.16
** Time: 17:00:38
*******************************************************************************/
_DRIVER_RK61X_RK618DEVICE_SHELL_
SHELL FUN rk_err_t RK618DevShellTest(HDC dev, uint8 * pstr)
{
	HDC hRK618Dev;
	uint32 DevID;

	//Get RK618Dev ID...
	if(StrCmpA(pstr, "0", 1) == 0)
	{
		DevID = 0;
	}
	else if(StrCmpA(pstr, "1", 1) == 0)
	{
		DevID = 1;
	}
	else
	{
		DevID = 0;
	}

	//Open RK618Dev...
	hRK618Dev = RKDev_Open(DEV_CLASS_RK618, 0, NOT_CARE);
	if((hRK618Dev == NULL) || (hRK618Dev == (HDC)RK_ERROR) || (hRK618Dev == (HDC)RK_PARA_ERR))
	{
		rk_print_string("RK618Dev open failure");
		 return RK_SUCCESS;
	}

	//do test....

	//close RK618Dev...
	RKDev_Close(hRK618Dev);
	return RK_SUCCESS;

}
Ejemplo n.º 5
0
/*******************************************************************************
** Name: RK618DevShellDel
** Input:HDC dev, uint8 * pstr
** Return: rk_err_t
** Owner:aaron.sun
** Date: 2014.12.16
** Time: 17:00:38
*******************************************************************************/
_DRIVER_RK61X_RK618DEVICE_SHELL_
SHELL FUN rk_err_t RK618DevShellDel(HDC dev, uint8 * pstr)
{
	uint32 DevID;

	//Get RK618Dev ID...
	if(StrCmpA(pstr, "0", 1) == 0)
	{
		DevID = 0;
	}
	else if(StrCmpA(pstr, "1", 1) == 0)
	{
		DevID = 1;
	}
	else
	{
		DevID = 0;
	}
	if(RKDev_Delete(DEV_CLASS_RK618, DevID) != RK_SUCCESS)
	{
		rk_print_string("RK618Dev delete failure");
	}
	return RK_SUCCESS;

}
Ejemplo n.º 6
0
/*******************************************************************************
** Name: EmmcDevInit
** Input:HDC dev
** Return: rk_err_t
** Owner:Aaron.sun
** Date: 2014.2.24
** Time: 10:43:17
*******************************************************************************/
_DRIVER_SDMMC_SDMMCDEVICE_SHELL_
rk_err_t SdMmcShellCreate(HDC dev,  uint8 * pstr)
{
    SDC_DEV_ARG stSdcArg;
    rk_err_t ret;

    int DevID;

#ifdef SHELL_HELP
    pstr--;
    if (pstr[0] == '.')
    {
        //list have sub cmd
        pstr++;
        if (StrCmpA((uint8 *) pstr, "help", 4) == 0)
        {
            rk_print_string("sdmmc.open : sdmmc open cmd.\r\n");
            return RK_SUCCESS;
        }
    }
    else
#endif
    {
        pstr++;
        if (StrCmpA((uint8 *) pstr, "/0/0", 2) == 0)
        {
            DevID = 0;
            stSdcArg.Channel = 0;
        }
        else if (StrCmpA((uint8 *) pstr, "/1", 2) == 0)
        {
            DevID = 1;
            stSdcArg.Channel = 0;
        }
        else if (StrCmpA((uint8 *) pstr, "/0/1", 2) == 0)
        {
            DevID = 0;
            stSdcArg.Channel = 1;
        }
        else
        {
            return RK_ERROR;
        }
    }
    stSdcArg.hDma = RKDev_Open(DEV_CLASS_DMA, 0, NOT_CARE);
    if (stSdcArg.hDma <= 0)
    {
        rk_printf("hDma open failure");
    }
    ret = RKDev_Create(DEV_CLASS_SDC, DevID, &stSdcArg);
    if (ret != RK_SUCCESS)
    {
        rk_printf("sdc%d open failure", DevID);
    }

    return RK_SUCCESS;

}
Ejemplo n.º 7
0
/*******************************************************************************
** Name: SpiDevShellMc
** Input:HDC dev, uint8 * pstr
** Return: rk_err_t
** Owner:Aaron.sun
** Date: 2014.5.30
** Time: 9:18:00
*******************************************************************************/
_DRIVER_SPI_SPIDEVICE_SHELL_
SHELL FUN rk_err_t SpiDevShellMc(HDC dev, uint8 * pstr)
{
     SPI_DEV_ARG stSpiArg;
     rk_err_t ret;

#ifdef SHELL_HELP
    pstr--;
    if(pstr[0] == '.')
    {
        //list have sub cmd
        pstr++;
        if(StrCmpA(pstr, "help", 4) == 0)
        {
            rk_print_string("spi.mc : mc cmd.\r\n");
            return RK_SUCCESS;
        }
    }
#endif

	return RK_SUCCESS;
     stSpiArg.Ch = 0;
     stSpiArg.CtrlMode = SPI_CTL_MODE;
     stSpiArg.SpiRate = SPI_BUS_CLK;

     ret = RKDev_Create(DEV_CLASS_SPI, 0, &stSpiArg);
     if(ret != RK_SUCCESS)
     {
        rk_print_string("Spi Device Create failure");
     }

     return RK_SUCCESS;

}
Ejemplo n.º 8
0
rk_err_t ShellCheckCmd(uint8 * CmdStr[],  uint8 * Cmd,  uint32 len)
{

    int32 i = 0;

    while (1)   //compare the name
    {
        if (len != StrLenA(CmdStr[i]))
        {
            i++;
        }
        else
        {
            if (StrCmpA(CmdStr[i], Cmd, len) != 0)
            {
                i++;
            }
            else
            {
                break;
            }
        }

        if (*(CmdStr[i]) == '\b')
            return RK_ERROR;

    }

    return i;

}
Ejemplo n.º 9
0
/*******************************************************************************
** Name: SdMmcShellDel
** Input:HDC dev, uint8 * pstr
** Return: rk_err_t
** Owner:Aaron.sun
** Date: 2014.6.14
** Time: 9:40:35
*******************************************************************************/
_DRIVER_SDMMC_SDMMCDEVICE_SHELL_
SHELL FUN rk_err_t SdMmcShellDel(HDC dev, uint8 * pstr)
{
    SDC_DEV_ARG stSdcArg;
#ifdef SHELL_HELP
    pstr--;
    if (pstr[0] == '.')
    {
        //list have sub cmd
        pstr++;
        if (StrCmpA(pstr, "help", 4) == 0)
        {
            rk_print_string("sdc.del : 删除sdc 设备命令.\r\n");
            return RK_SUCCESS;
        }
    }
#endif

    if (RKDev_Delete(DEV_CLASS_SDC, 1, &stSdcArg) != RK_SUCCESS)
    {
        printf("sdc1 delete failure\n");
        return RK_ERROR;
    }

    if(stSdcArg.hDma != NULL)
    {
        if (RKDev_Close(stSdcArg.hDma) != RK_SUCCESS)
        {
            printf("sdmmc hDma close failure\n");
            return RK_ERROR;
        }
    }

    return RK_SUCCESS;
}
Ejemplo n.º 10
0
/*******************************************************************************
** Name: WDTDevShellPcb
** Input:HDC dev, uint8 * pstr
** Return: rk_err_t
** Owner:wrm
** Date: 2015.5.19
** Time: 10:16:13
*******************************************************************************/
_DRIVER_WATCHDOG_WATCHDOGDEVICE_SHELL_
SHELL FUN rk_err_t WDTDevShellPcb(HDC dev, uint8 * pstr)
{
	HDC hWDTDev;
	uint32 DevID;

	//Get WDTDev ID...
	if(StrCmpA(pstr, "0", 1) == 0)
	{
		DevID = 0;
	}
	else if(StrCmpA(pstr, "1", 1) == 0)
	{
		DevID = 1;
	}
	else
	{
		DevID = 0;
	}

	//Display pcb...
	if(gpstWDTDevISR[DevID] != NULL)
	{
		rk_print_string("rn");
		rk_printf_no_time("WDTDev ID = %d Pcb list as follow:", DevID);
		rk_printf_no_time("	&stWDTDevice---0x%08x", &gpstWDTDevISR[DevID]->stWDTDevice);
		rk_printf_no_time("	osWDTOperReqSem---0x%08x", gpstWDTDevISR[DevID]->osWDTOperReqSem);
		rk_printf_no_time("	osWDTOperSem---0x%08x", gpstWDTDevISR[DevID]->osWDTOperSem);
		rk_printf_no_time("	osWDTReadReqSem---0x%08x", gpstWDTDevISR[DevID]->osWDTReadReqSem);
		rk_printf_no_time("	osWDTReadSem---0x%08x", gpstWDTDevISR[DevID]->osWDTReadSem);
		rk_printf_no_time("	osWDTWriteReqSem---0x%08x", gpstWDTDevISR[DevID]->osWDTWriteReqSem);
		rk_printf_no_time("	osWDTWriteSem---0x%08x", gpstWDTDevISR[DevID]->osWDTWriteSem);
		//rk_printf_no_time("	usbmode---0x%08x", gpstUsbOtgDevISR[DevID]->usbmode);
		//rk_printf_no_time("	usbspeed---0x%08x", gpstUsbOtgDevISR[DevID]->usbspeed);
	}
	else
	{
		rk_print_string("rn");
		rk_printf_no_time("WDTDev ID = %d not exit", DevID);
	}
	return RK_SUCCESS;

}
Ejemplo n.º 11
0
/*******************************************************************************
** Name: WDTDevShellTest
** Input:HDC dev, uint8 * pstr
** Return: rk_err_t
** Owner:wrm
** Date: 2015.5.19
** Time: 10:16:13
*******************************************************************************/
_DRIVER_WATCHDOG_WATCHDOGDEVICE_SHELL_
SHELL FUN rk_err_t WDTDevShellTest(HDC dev, uint8 * pstr)
{
	HDC hWDTDev;
	uint32 DevID;

	//Get WDTDev ID...
	if(StrCmpA(pstr, "0", 1) == 0)
	{
		DevID = 0;
	}
	else if(StrCmpA(pstr, "1", 1) == 0)
	{
		DevID = 1;
	}
	else
	{
		DevID = 0;
	}

	//Open WDTDev...
	hWDTDev = RKDev_Open(DEV_CLASS_WDT, 0, NOT_CARE);
	if((hWDTDev == NULL) || (hWDTDev == (HDC)RK_ERROR) || (hWDTDev == (HDC)RK_PARA_ERR))
	{
		rk_print_string("WDTDev open failure");
		 return RK_SUCCESS;
	}

	//do test....
	rk_printf ("Test WatchDog Device\n");
	IsWatchDogTestClearInt= 0;

	WatchDogInit(RESP_MODE_INT_RESET, PCLK_CYCLES_128, PERIOD_RANGE_0X07FFFFFF);
	WatchDogStart();

	//close WDTDev...
	RKDev_Close(hWDTDev);
	return RK_SUCCESS;

}
Ejemplo n.º 12
0
/*******************************************************************************
** Name: WDTDevShellMc
** Input:HDC dev, uint8 * pstr
** Return: rk_err_t
** Owner:wrm
** Date: 2015.5.19
** Time: 10:16:13
*******************************************************************************/
_DRIVER_WATCHDOG_WATCHDOGDEVICE_SHELL_
SHELL FUN rk_err_t WDTDevShellMc(HDC dev, uint8 * pstr)
{
	WDT_DEV_ARG stWDTDevArg;
	rk_err_t ret;
	uint32 DevID;
	DevID = 0;

	if(StrCmpA(pstr, "0", 1) == 0)
	{
		DevID = 0;
	}
	else if(StrCmpA(pstr, "1", 1) == 0)
	{
		DevID = 1;
	}
	else
	{
		DevID = 0;
	}

	//Init WDTDev arg...
	//stWDTDevArg.usbmode = USBOTG_MODE_DEVICE;
	rk_printf ("Entry WatchDogDev Create\n");
    stWDTDevArg.Channel = 0;
    stWDTDevArg.DevID = 0;

	//Create WDTDev...
	ret = RKDev_Create(DEV_CLASS_WDT, DevID, &stWDTDevArg);
	if(ret != RK_SUCCESS)
	{
		rk_print_string("WDTDev create failure");
	}
	return RK_SUCCESS;

}
Ejemplo n.º 13
0
/*******************************************************************************
** Name: EmmcShellPcb
** Input:HDC dev
** Return: rk_err_t
** Owner:Aaron.sun
** Date: 2014.2.24
** Time: 10:43:17
*******************************************************************************/
_DRIVER_SDMMC_SDMMCDEVICE_SHELL_
rk_err_t SdMmcShellPcb(HDC dev,  uint8 * pstr)
{
#ifdef SHELL_HELP
    pstr--;
    if (pstr[0] == '.')
    {
        //list have sub cmd
        pstr++;
        if (StrCmpA((uint8 *) pstr, "help", 4) == 0)
        {
            rk_print_string("sdmmc.pcb : sdmmc pcb info.\r\n");
            return RK_SUCCESS;
        }
    }
#endif
    // TODO:
    //add other code below:
    //...

    return RK_SUCCESS;
}
Ejemplo n.º 14
0
/*******************************************************************************
** Name: SpiDevShellPcb
** Input:HDC dev, uint8 * pstr
** Return: rk_err_t
** Owner:Aaron.sun
** Date: 2014.5.30
** Time: 9:18:00
*******************************************************************************/
_DRIVER_SPI_SPIDEVICE_SHELL_
SHELL FUN rk_err_t SpiDevShellPcb(HDC dev, uint8 * pstr)
{
#ifdef SHELL_HELP
    pstr--;
    if(pstr[0] == '.')
    {
        //list have sub cmd
        pstr++;
        if(StrCmpA(pstr, "help", 4) == 0)
        {
            rk_print_string("spi.pcb : pcb info cmd.\r\n");
            return RK_SUCCESS;
        }
    }
#endif
    // TODO:
    //add other code below:
    //...

	return RK_SUCCESS;
}
Ejemplo n.º 15
0
/*******************************************************************************
** Name: SpiDevShellBspDMA_ReadWrite
** Input:HDC dev, uint8 * pstr
** Return: rk_err_t
** Owner:hj
** Date: 2014.12.9
** Time: 20:39:07
*******************************************************************************/
_DRIVER_SPI_SPIDEVICE_SHELL_
SHELL FUN rk_err_t SpiDevShellBspDMA_ReadWrite(HDC dev, uint8 * pstr)
{
    rk_size_t realsize,_RXrealsize;
    pSPI_REG Spi_Reg0,Spi_Reg1;
    uint8 Spi_clockBuffer[5] = {0,};
    eSPI_ch_t spiChMaster,spiChSlave;
    uint32 i = 0;
    uint32 SPI0_RX_FIFO_ADDR, SPI0_TX_FIFO_ADDR,SPI1_RX_FIFO_ADDR,SPI1_TX_FIFO_ADDR;

    Spi_Reg0 = SpiGetCH(SPI_CH0);
    Spi_Reg1 = SpiGetCH(SPI_CH1);

    SPI0_RX_FIFO_ADDR = SpiGetRxFIFOaddr(SPI_CH0);
    SPI0_TX_FIFO_ADDR = SpiGetTxFIFOaddr(SPI_CH0);

    SPI1_RX_FIFO_ADDR = SpiGetRxFIFOaddr(SPI_CH1);
    SPI1_TX_FIFO_ADDR = SpiGetTxFIFOaddr(SPI_CH1);


    if(StrCmpA(pstr, "0", 1) == 0)
    {
        spiChMaster = SPI_CH0;
        spiChSlave = SPI_CH1;
        DEBUG("Master-SPI0;Slave-SPI1\n");
    }
    else if(StrCmpA(pstr, "1", 1) == 0)
    {
        spiChMaster = SPI_CH1;
        spiChSlave = SPI_CH0;
        DEBUG("Master-SPI1;Slave-SPI0\n");
    }

    Spi_NeedTransLen = 0;
    Spi_NeedTransLen_RX = 5;
    Spi_Testflag = 1;
    for(i=0;i<10;i++)
    {
        Spi_TestBuffer[i++] = 0x55;
        Spi_TestBuffer[i] = 0xaa;
    }

     //open uart clk
    ScuClockGateCtr(HCLK_DMA_GATE, 1);

    //open rst uart ip
    ScuSoftResetCtr(SYSDMA_SRST, 1);
    DelayMs(1);
    ScuSoftResetCtr(SYSDMA_SRST, 0);

    IntRegister(INT_ID_DMA ,SpiDMAIntIsr_Test);
    IntPendingClear(INT_ID_DMA);
    IntEnable(INT_ID_DMA);

    DmaEnableInt(2);

    SPIInit(spiChMaster,0, 12*1000*1000, SPI_CTL_TXRX_MASTER_TEST);

    SPIInit(spiChSlave,0, 12*1000*1000, SPI_CTL_TXRX_SLAVE_TEST);

    SPIDmaRead(spiChSlave,5);

    SpiEanbleChannel(spiChMaster,0);
    SPIDmaWrite(spiChMaster);

    //写入0x55 0xaa 0x55 0xaa 0x55 发送到slave
    if(spiChMaster == SPI_CH0)
    {
        DmaConfig(2, (uint32)Spi_TestBuffer, (uint32)SPI0_TX_FIFO_ADDR,5, &SPI0ControlDmaCfg_TX, NULL);
    }
    else
    {
        DmaConfig(2, (uint32)Spi_TestBuffer, (uint32)SPI1_TX_FIFO_ADDR,5, &SPI1ControlDmaCfg_TX, NULL);
    }

    SpiGetInt(spiChMaster);
    //SpiEnableTxInt(SPI_CH_TEST);
    SpiWaitIdle(spiChMaster);

    //从Slave读出0x55 0xaa 0x55 0xaa 0x55
    DmaEnableInt(2);

    if(spiChMaster == SPI_CH0)
    {
        DmaConfig(2, (uint32)SPI1_RX_FIFO_ADDR,(uint32)Spi_TestBuffer_Read, 5, &SPI1ControlDmaCfg_RX, NULL);
    }
    else
    {
        DmaConfig(2, (uint32)SPI0_RX_FIFO_ADDR,(uint32)Spi_TestBuffer_Read, 5, &SPI0ControlDmaCfg_RX, NULL);
    }

    //SPIReadFIFO(spiChSlave,Spi_TestBuffer_Read,5);

    //读出master Read FIFO里面的无效数据
    SPIReadFIFO(spiChMaster,&Spi_TestBuffer_Read[10],5);

    //check
    if((Spi_TestBuffer_Read[0] == 0x55)
       && (Spi_TestBuffer_Read[1] == 0xaa)
       && (Spi_TestBuffer_Read[2] == 0x55)
       && (Spi_TestBuffer_Read[3] == 0xaa)
       && (Spi_TestBuffer_Read[4] == 0x55))
    {
       //写入0x55 0xaa 0x55 0xaa 0x55 发送到master
       //SPIDmaWrite(spiChSlave);

       DmaEnableInt(2);
       //写入数据,需要MASTER提供clock
       if(spiChMaster == SPI_CH0)
       {
           DmaConfig(2, (uint32)Spi_TestBuffer, (uint32)SPI1_TX_FIFO_ADDR,5, &SPI1ControlDmaCfg_TX, NULL);
       }
       else
       {
           DmaConfig(2, (uint32)Spi_TestBuffer, (uint32)SPI0_TX_FIFO_ADDR,5, &SPI0ControlDmaCfg_TX, NULL);
       }
       //SPIWriteFIFO(spiChSlave,Spi_TestBuffer,5);

       SPIWriteFIFO(spiChMaster,Spi_clockBuffer,5); //master 发送无效数据0x00,只提供clock

       SpiGetInt(spiChMaster);
       //SpiEnableTxInt(SPI_CH_TEST);
       SpiWaitIdle(spiChMaster);

       DelayMs(10);
       //读出0x55 0xaa 0x55 0xaa 0x55
       //SPIDmaRead(spiChMaster,5);
       DmaEnableInt(2);

       if(spiChMaster == SPI_CH0)
       {
           DmaConfig(2, (uint32)SPI0_RX_FIFO_ADDR,(uint32)&Spi_TestBuffer_Read[10], 5, &SPI0ControlDmaCfg_RX, NULL);
       }
       else
       {
           DmaConfig(2,(uint32)SPI1_RX_FIFO_ADDR,(uint32)&Spi_TestBuffer_Read[10],5, &SPI1ControlDmaCfg_RX, NULL);
       }

       //SPIReadFIFO(spiChMaster,&Spi_TestBuffer_Read[10],5);
       if((Spi_TestBuffer_Read[10] == 0x55)
       && (Spi_TestBuffer_Read[11] == 0xaa)
       && (Spi_TestBuffer_Read[12] == 0x55)
       && (Spi_TestBuffer_Read[13] == 0xaa)
       && (Spi_TestBuffer_Read[14] == 0x55))
       {
          Spi_Testflag = 0;
       }
    }

    while(Spi_Testflag);
    DEBUG("SPI_TRANSMIT_RECEIVE is ok\n");
}
Ejemplo n.º 16
0
std::tstring ContainerManager::GetContainerName(unsigned int charid, unsigned int containerid) const
{
    if (containerid == 1) {
        return _T("Bank");
    }
    else if (containerid == 2) {
        return _T("Inventory/Equip");
    }
    else if (containerid == 3) {
        return _T("Shop");
    }

    std::tstring result;

    __int64 key = ((__int64)charid) << 32;
    key += containerid;

    FILETIME lastWrite;
    lastWrite.dwHighDateTime = lastWrite.dwLowDateTime = 0;

    std::tstring filename;
    for (unsigned int i = 0; i < m_accounts.size(); i++)
    {
        filename = STREAM2STR( AOManager::instance().getAOPrefsFolder() << _T("\\") << m_accounts[i] << _T("\\Char") << charid << _T("\\Containers\\Container_51017x") << containerid << _T(".xml") );
        if (PathFileExists(filename.c_str()))
        {
            WIN32_FILE_ATTRIBUTE_DATA atribs; 
            if (GetFileAttributesEx(filename.c_str(), GetFileExInfoStandard, &atribs))
            {
                lastWrite = atribs.ftLastWriteTime;
                break;
            }
        }
    }

    bool wasInCache = m_containerFileCache.find(key) != m_containerFileCache.end();

    // Clear invalid cache
    if ((filename.empty() || (lastWrite.dwHighDateTime == 0 && lastWrite.dwHighDateTime == 0)) && wasInCache)
    {
        m_containerFileCache.erase(m_containerFileCache.find(key));
    }

    // Create cache from file
    if (!filename.empty())
    {
        bool update = true;

        // If already in cache, check timestamps
        if (m_containerFileCache.find(key) != m_containerFileCache.end())
        {
            FILETIME stamp = m_containerFileCache[key].second;
            if (stamp.dwHighDateTime == lastWrite.dwHighDateTime &&
                stamp.dwLowDateTime == lastWrite.dwLowDateTime)
            {
                update = false;
                result = m_containerFileCache[key].first;
            }
        }

        if (update)
        {
            TiXmlDocument document;
            if (document.LoadFile(to_ascii_copy(filename), TIXML_ENCODING_UTF8))
            {
                TiXmlHandle docHandle( &document );
                TiXmlElement* element = docHandle.FirstChild( "Archive" ).FirstChild( "String" ).Element();

                while (element)
                {
                    if (StrCmpA(element->Attribute("name"), "container_name") == 0)
                    {
                        result = from_utf8_copy(element->Attribute("value"));
                        boost::algorithm::replace_all(result, _T("&amp;"), _T("&"));    // Fixes wierd encoding in the AO xml.
                        m_containerFileCache[key] = std::pair<std::tstring, FILETIME>(result, lastWrite);
                        break;
                    }
                    element = element->NextSiblingElement();
                }
            }
        }
    }

    if (result.empty())
    {
        result = MakeContainerName(charid, containerid);
    }

    return result;
}
Ejemplo n.º 17
0
/*******************************************************************************
** Name: SpiDevShellBspPIO_ReadWrite
** Input:HDC dev, uint8 * pstr
** Return: rk_err_t
** Owner:hj
** Date: 2014.12.9
** Time: 20:38:05
*******************************************************************************/
_DRIVER_SPI_SPIDEVICE_SHELL_
SHELL FUN rk_err_t SpiDevShellBspPIO_ReadWrite(HDC dev, uint8 * pstr)
{
    rk_size_t realsize,_RXrealsize;
    pSPI_REG Spi_Reg0,Spi_Reg1;
    uint8 Spi_clockBuffer[5] = {0,};
    eSPI_ch_t spiChMaster,spiChSlave;
    uint32 i = 0;

    if(StrCmpA(pstr, "0", 1) == 0)
    {
        spiChMaster = SPI_CH0;
        spiChSlave = SPI_CH1;
        DEBUG("Master-SPI0;Slave-SPI1\n");
    }
    else if(StrCmpA(pstr, "1", 1) == 0)
    {
        spiChMaster = SPI_CH1;
        spiChSlave = SPI_CH0;
        DEBUG("Master-SPI1;Slave-SPI0\n");
    }

    Spi_NeedTransLen = 0;
    Spi_NeedTransLen_RX = 5;

    for(i=0;i<10;i++)
    {
        Spi_TestBuffer[i++] = 0x55;
        Spi_TestBuffer[i] = 0xaa;
    }


    SPIInit(spiChMaster,0, 12*1000*1000, SPI_CTL_TXRX_MASTER_TEST);

    SPIInit(spiChSlave,0, 12*1000*1000, SPI_CTL_TXRX_SLAVE_TEST);

    SPIPioRead(spiChSlave,5);

    SpiEanbleChannel(spiChMaster,0);
    SPIPioWrite(spiChMaster);



    Spi_Testflag = 1;
    //写入0x55 0xaa 0x55 0xaa 0x55 发送到slave
    SPIWriteFIFO(spiChMaster,&Spi_TestBuffer[0],5);

    SpiGetInt(spiChMaster);
    //SpiEnableTxInt(SPI_CH_TEST);
    SpiWaitIdle(spiChMaster);

    //读出0x55 0xaa 0x55 0xaa 0x55
    SPIReadFIFO(spiChSlave,Spi_TestBuffer_Read,5);

    //读出master Read FIFO里面的无效数据
    SPIReadFIFO(spiChMaster,&Spi_TestBuffer_Read[10],5);

    //check
    if((Spi_TestBuffer_Read[0] == 0x55)
       && (Spi_TestBuffer_Read[1] == 0xaa)
       && (Spi_TestBuffer_Read[2] == 0x55)
       && (Spi_TestBuffer_Read[3] == 0xaa)
       && (Spi_TestBuffer_Read[4] == 0x55))
    {
       //写入0x55 0xaa 0x55 0xaa 0x55 发送到master
       SPIWriteFIFO(spiChSlave,Spi_TestBuffer,5); //写入数据,需要MASTER提供clock

       SPIWriteFIFO(spiChMaster,Spi_clockBuffer,5); //master 发送无效数据0x00,只提供clock

       SpiGetInt(spiChMaster);
       //SpiEnableTxInt(SPI_CH_TEST);
       SpiWaitIdle(spiChMaster);

       DelayMs(10);
       //读出0x55 0xaa 0x55 0xaa 0x55
       SPIReadFIFO(spiChMaster,&Spi_TestBuffer_Read[10],5);
       if((Spi_TestBuffer_Read[10] == 0x55)
       && (Spi_TestBuffer_Read[11] == 0xaa)
       && (Spi_TestBuffer_Read[12] == 0x55)
       && (Spi_TestBuffer_Read[13] == 0xaa)
       && (Spi_TestBuffer_Read[14] == 0x55))
       {
          Spi_Testflag = 0;
       }
    }

    while(Spi_Testflag);
    DEBUG("SPI_TRANSMIT_RECEIVE is ok\n");

}