71

帖子

0

TA的资源

一粒金砂(初级)

21
 
引用 19 楼 bzjing 的回复:
是指定这些DLL加载到内存的低端位置,这样TCPMP才能正常地加载这些PLG和DLL。不然无法加载成功!在CE6.0中,对于每个DLL都是如此,默认是会被加载到内存高端,导致使用LoadLibrary无法成功加载。系统中没有这些注册表项,你可以自己添加上去。
希望你能尽快测试验证一下!谢谢。


可是我的程序,明显DLL和PLG已经成功加载了。可以看到interface.plg运行时产生的界面,所以应该不是你所说的。
试试我一定会试的。

回复

73

帖子

0

TA的资源

一粒金砂(初级)

22
 
我已经试验过,在注册表中增加bzjing 所说的注册表项,仍然存在同样的问题。

有谁遇到过这样的问题吗?
 
 

回复

56

帖子

0

TA的资源

一粒金砂(初级)

23
 
以上现象不是每次都出现的,也就是说TCPMP有可能可以正常运行。特别是在调试的情况下,正常运行的概率比较大,这样给单步调试带来了很大的障碍。
无奈啊!!!
 
 
 

回复

54

帖子

0

TA的资源

一粒金砂(初级)

24
 
1.TCPMP的库在CE6.0下面运行,最好用5.0的SDK编译。
2.增加WMADMOD.DLL, WMSDMOD.DLL, WMVDMOD.DLL到你的PLYAER的目录下面试试。
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

25
 
我在6.0用过,现在没做WINCE了。这里有我的关于TCPMP在WINCE上的文档。
http://blog.sina.com.cn/windowsce600  你找一下,比较靠前,去年做的
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

26
 
引用 24 楼 lyc7898 的回复:
我在6.0用过,现在没做WINCE了。这里有我的关于TCPMP在WINCE上的文档。
http://blog.sina.com.cn/windowsce600? 你找一下,比较靠前,去年做的


好东东,我也去看看
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

27
 
引用 24 楼 lyc7898 的回复:
我在6.0用过,现在没做WINCE了。这里有我的关于TCPMP在WINCE上的文档。
http://blog.sina.com.cn/windowsce600? 你找一下,比较靠前,去年做的


去看了后,有种上当受骗的感觉
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

28
 
引用 24 楼 lyc7898 的回复:
我在6.0用过,现在没做WINCE了。这里有我的关于TCPMP在WINCE上的文档。
http://blog.sina.com.cn/windowsce600? 你找一下,比较靠前,去年做的


此人有广告嫌疑
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

29
 
    哈哈,楼主幸亏遇到我了,我个问题俺彻底解决,我曾经研究了几周,问题的关键是在common.dll有一段动态代码生成处,增加50毫秒延时即可.

全球首次独家奉送,供大家分享!


楼主要记得给分啊!  


我要100分!!!

TCPMP针对WinCE6.0 平台的修改  

一、CPU ID
        Cpu.c文件修改 2处:
a. static NOINLINE void SafeGetCpuId(int Id, uint32_t* p)
{
        memset(p,0,4*sizeof(uint32_t));
        TRY_BEGIN
        {
                bool_t Mode = KernelMode(1);
                GetCpuId(Id,p);
                p[0] = 0x4107B360; // Designate the Device ID of ARM1136J                Mode = KernelMode(Mode);
        }
        TRY_END
}
        。。。。。。。。。。。。
        else if ((CpuId[0] & 0xFF000000) == 0x41000000) //arm
        {
                Caps |= CAPS_ARM_GENERAL;
                switch ((CpuId[0] >> 4) & 0xFFF)
                {
                case 0x920: p->Model = T("920T"); break;
                case 0x922: p->Model = T("922T"); break;
                case 0x926: p->Model = T("926E"); Caps |= CAPS_ARM_5E; break;
                case 0x940: p->Model = T("940T"); break;
                case 0x946: p->Model = T("946E"); Caps |= CAPS_ARM_5E; break;
                case 0xA22: p->Model = T("1020E"); Caps |= CAPS_ARM_5E; break;
                case 0xB36: p->Model = T("1136J"); Caps |= CAPS_ARM_5E; break;//
                }
        }


二、做好frame buffer的映射,因为这与wince5.0不同
\common\overlay\overlay_raw.c.  文件
static bool_t GetRawFrameBuffer(RawFrameBufferInfo* Info)
{       
                。。。。。。。。。。。。
//////////////
                        HANDLE hUtlDrv = NULL;
                        BUF_MAP_REQUEST_INFO RequestMapBufInfo;
                        BUF_INFO        temp_p_fromkernel;
                        DWORD       dwRealBytes;
                        DWORD       g_dwFrameBuf;
/////////////
                        memset(&GXInfo,0,sizeof(GXInfo));
                        GXInfo.Version = 100;
                        ExtEscape(DC, GETGXINFO, 0, NULL, sizeof(GXInfo), (char*)&GXInfo);
                        //////////////////////////////////////////
#if 1       //Map virtual memory to current process (Idylic Chen, 2009.04.14)
                        if (!KernelIoControl(IOCTL_HAL_GET_DISPLAY_DATA_BUF,
                                 NULL,
                                 0,
                                 &temp_p_fromkernel,
                                 sizeof(BUF_INFO),
                                 NULL))
                        {
                                RETAILMSG(1, (_T("KernelIoControl(IOCTL_HAL_GET_DISPLAY_DATA_BUF) Failed\r\n")));
                                return FALSE;
                        }

                        RETAILMSG(1, (_T("DISPLAY_DATA_BUF = %x - %x\r\n"), temp_p_fromkernel.dwBufVir, temp_p_fromkernel.dwBufLen));
                        hUtlDrv = CreateFile(TEXT("UTL0:"),
                                                 GENERIC_READ | GENERIC_WRITE,
                                                 FILE_SHARE_READ | FILE_SHARE_WRITE,
                                                 NULL, OPEN_EXISTING, 0, 0);

                        if (INVALID_HANDLE_VALUE == hUtlDrv)
                        {
                                RETAILMSG(1, (_T("Call UTL Driver Failed.\r\n")));
                                hUtlDrv = NULL;
                                return FALSE;
                        }

                        RequestMapBufInfo.dwSrcAddress = temp_p_fromkernel.dwBufVir;
                        RequestMapBufInfo.dwSize = temp_p_fromkernel.dwBufLen;
                        RequestMapBufInfo.bPhysicalAddress = FALSE;
                        RequestMapBufInfo.bNoCache = FALSE;

                        if (!DeviceIoControl(hUtlDrv, IOCTL_UTL_MEM_MAP, &RequestMapBufInfo, sizeof(RequestMapBufInfo), &g_dwFrameBuf, sizeof(LPVOID), &dwRealBytes, NULL))
                        {
                                RETAILMSG(1, (_T("UTL Memory Mapping Failed.\r\n")));
                                return FALSE;
                        }

                        if (hUtlDrv)
                        {
                                CloseHandle(hUtlDrv);
                        }

                        GXInfo.pvFrameBuffer = g_dwFrameBuf;
#endif                       
                        /////////////////////////////////////////

                。。。。。。。。。。。。
}




四.动态代码生成;  
common\dyncode\Dyncode.c文件
void CodeBuild(dyncode* Code)
{
    for (p=(dyninst*)c->CodeInstBegin;p;p=p->Next)
                {
p->Address = Addr;       
                        Addr += InstSize(p,Addr - Code->Code);                               
                }
          Sleep(50);//新增加
                for (p=(dyninst*)c->CodeInstBegin;p;p=p->Next)
                {
}

   
 
 
 

回复

90

帖子

0

TA的资源

一粒金砂(初级)

30
 
我也期望LS的方法,可以解决这个问题。

但是代码中,BUF_MAP_REQUEST_INFO 和 BUF_INFO 的定义没有,没有办法测试。

请LS提供它们的定义,分全是你的!
如果真的解决,再给100分给你!!!
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

31
 
还有IOCTL_HAL_GET_DISPLAY_DATA_BUF的定义,应该 是驱动提供的吧?
如果没有驱动的支持,会否不能实现???
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

32
 
请问kieven2008,你的CPU的主频是多少?

我有的是A4,可是只要增加sleep(50),播放器在选择播放文件后就彻底死掉了。
PS:其它的代码没有加!
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

33
 
关注!
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

34
 
引用 31 楼 icesoft2000 的回复:
请问kieven2008,你的CPU的主频是多少?

我有的是A4,可是只要增加sleep(50),播放器在选择播放文件后就彻底死掉了。
PS:其它的代码没有加!


     原因是framebuffer还没有正确映射.
    A4,掌微,跟你的一样,新增文件 BufInfo.h 、   halio.h  、 utldrv.h  放在common根目录下面,这几个文件系统驱动提供的.
*           BufInfo.h                                                              *
*                   SiRF Technology, Inc. Platform Software               *
*                                                                         *
*    Copyright (c) 2008 by SiRF Technology, Inc.  All rights reserved.    *
*                                                                         *
*    This Software is protected by United States copyright laws and       *
*    international treaties.  You may not reverse engineer, decompile     *
*    or disassemble this Software.                                        *
*                                                                         *
*    WARNING:                                                             *
*    This Software contains SiRF Technology, Inc.'s confidential and      *
*    proprietary information. UNAUTHORIZED COPYING, USE, DISTRIBUTION,    *
*    PUBLICATION, TRANSFER, SALE, RENTAL OR DISCLOSURE IS PROHIBITED      *
*    AND MAY RESULT IN SERIOUS LEGAL CONSEQUENCES.  Do not copy this      *
*    Software without SiRF Technology, Inc.'s  express written            *
*    permission.   Use of any portion of the contents of this Software    *
*    is subject to and restricted by your written agreement with          *
*    SiRF Technology, Inc.                                                *
*                                                                         *
***************************************************************************/

#ifndef _BUF_INFO_H_
#define _BUF_INFO_H_

typedef struct _BUF_MAP_REQUEST_INFO
{
    DWORD dwSize;
    DWORD dwSrcAddress;
    BOOL  bPhysicalAddress;   
    BOOL  bNoCache;
}BUF_MAP_REQUEST_INFO, *PBUF_MAP_REQUEST_INFO;

typedef struct _BUF_REQUEST_INFO
{
    DWORD dwSize;
    DWORD dwAttribute;
    DWORD dwAlignmentMask;
}BUF_REQUEST_INFO, *PBUF_REQUEST_INFO;

typedef struct _BUF_INFO
{
    DWORD dwBufVir;
    DWORD dwBufPhy;
    DWORD dwBufLen;
}BUF_INFO, *PBUF_INFO;

#define ERR_

#endif // _BUF_INFO_H_

//utldrv.h
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
//
/***************************************************************************
*                                                                         *
*                   SiRF Technology, Inc. Platform Software               *
*                                                                         *
*    Copyright (c) 2008 by SiRF Technology, Inc.  All rights reserved.    *
*                                                                         *
*    This Software is protected by United States copyright laws and       *
*    international treaties.  You may not reverse engineer, decompile     *
*    or disassemble this Software.                                        *
*                                                                         *
*    WARNING:                                                             *
*    This Software contains SiRF Technology, Inc.'s confidential and      *
*    proprietary information. UNAUTHORIZED COPYING, USE, DISTRIBUTION,    *
*    PUBLICATION, TRANSFER, SALE, RENTAL OR DISCLOSURE IS PROHIBITED      *
*    AND MAY RESULT IN SERIOUS LEGAL CONSEQUENCES.  Do not copy this      *
*    Software without SiRF Technology, Inc.'s  express written            *
*    permission.   Use of any portion of the contents of this Software    *
*    is subject to and restricted by your written agreement with          *
*    SiRF Technology, Inc.                                                *
*                                                                         *
***************************************************************************/

/*++

THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
PARTICULAR PURPOSE.

Module Name:

    utldrv.h

Abstract:

   Private header file. Defines the data structure for utility driver

Functions:

Notes:

--*/
#ifndef _UTLDRV_H_
#define _UTLDRV_H_


#ifdef __cplusplus
extern "C"
{
#endif // __cplusplus

//  call back function definition
    typedef VOID (*PFN_PowerOnCallback)(void);

//
//  Driver to driver fast call context
//
    /*

    pContext is the UTLDRV driver context returned from CreateFile(L"UTL0:", ...) call.

     DWORD GetRegisterVA(PVOID pContext, DWORD dwAddr, DWORD dwSize, BOOL bPA, DWORD *pPVA);

        This function helps drivers to get the virtual address for the CPU registers they
        specified.

            dwAddr  :   is the address of the register you want to get virtual address. Depending
                        on the bPA flag, it could be the K-Mode virtuall address or physical
                        address.
            dwSize  :   Size of the memory.
            bPA     :   TRUE if the dwAddr is physical address. FALSE if it is K-Mode virtual
                        address.
            pVA     :   is the pointer to the process virtual address you want to use in your driver.

            Return Value: ERROR_SUCCESS if it is succeeds.

    DWORD GetMemVA(PVOID pContext, DWORD dwAddr, DWORD dwSize, BOOL bPA, DWORD dwFlags, DWORD *pVA);

        This function helps drivers to get the virtual address for the specified SDRAM.

            dwAddr  :   the address for the SDRAM you want to get virtual address. Depending on
                        the bPA flag, it could be the K-Mode virtual address or physical address.
            dwSize  :   size of the memory
            bPA     :   TRUE if the dwAddr is physical addresss. FALSE if it is K-Mode virtual
                        address.
            dwFlags :   Memory flags as you would pass to VirtualCopy.
            pVA     :   pointer to the process virtual address you requested.

            Return Value: ERROR_SUCCESS if it is succeeds.

    DWORD FreeMemVA(PVOID pContext, DWORD pVA);

        This function frees the allocated process virtual memory.

            pVA     :   this is the process virtual memory returned by GetMemVA function call.

    (*) For registers, UTLDRV won't free the virtual address until UTLDRV itself exits.

    typedef VOID (*PFN_PowerOnCallback)(void);

    4. DWORD RegisterStorageDrv(PVOID pContext, PFN_PowerOnCallback pfnCallback);

        This function registers the block driver to the UTL driver for PowerOn notification.

            pfnCallback: the callback function for UTLDRV to call when we come back from PowerOff.

            Return Value: 0xFFFFFFFF if the function failed. Use GetLastError() for error code.
                          Otherwise, it returns an ID which can be used to call UnRegisterStorageDrv
                          function.

    5. VOID UnRegisterStorageDrv(PVOID pContext, PFN_PowerOnCallback pfnCallback);

        This function un-registers the blcok driver from the UTL driver.


     */

    typedef struct _UTL_FASTCALL
    {
        BOOL        bValid;                // the UTL_FASTCALL valid flag (will be invalid if it's not in same process)
        PVOID   pContext;
        DWORD (*GetRegisterVA)(PVOID pContext, DWORD dwAddr, DWORD dwSize, BOOL bPA, DWORD *pPVA);
        DWORD (*GetMemVA)(PVOID pContext, DWORD dwAddr, DWORD dwSize, BOOL bPA, DWORD dwFlags, DWORD *pPVA);
        DWORD (*FreeMemVA)(PVOID pContext, DWORD pPVA);
        DWORD (*RegisterBlockDrv)(PVOID pContext, PFN_PowerOnCallback);
        DWORD (*UnRegisterBlockDrv)(PVOID pContext, PFN_PowerOnCallback);
        DWORD (*IssuePciDmaTransfer)(PVOID pContext, PVOID pPciInfo);
    } UTL_FASTCALL, *PUTL_FASTCALL;

//
//  Utility Ioctl
//
#define FILE_DEVICE_UTL FILE_DEVICE_CONTROLLER

//  OUT: UTL_FASTCALL
#define IOCTL_UTL_GET_FASTCALL  \
    CTL_CODE(FILE_DEVICE_UTL, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_UTL_CREATE_NAMED_CRITICALSECTION  \
        CTL_CODE(FILE_DEVICE_UTL, 3, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_UTL_DELETE_NAMED_CRITICALSECTION_BY_NAME  \
        CTL_CODE(FILE_DEVICE_UTL, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_UTL_DELETE_NAMED_CRITICALSECTION  \
        CTL_CODE(FILE_DEVICE_UTL, 5, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_UTL_ENTER_NAMED_CRITICALSECTION  \
        CTL_CODE(FILE_DEVICE_UTL, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_UTL_LEAVE_NAMED_CRITICALSECTION  \
        CTL_CODE(FILE_DEVICE_UTL, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_UTL_TCM_ALLOC  \
        CTL_CODE(FILE_DEVICE_UTL, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_UTL_TCM_FREE  \
        CTL_CODE(FILE_DEVICE_UTL, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_UTL_MEM_MAP  \
        CTL_CODE(FILE_DEVICE_UTL, 10, METHOD_BUFFERED, FILE_ANY_ACCESS)       

#ifdef __cplusplus
}

#endif // __cplusplus
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

35
 
//halio.h
#ifndef _HAL_IO_H
#define _HAL_IO_H

/* Wubin 2007327: For formatting hive partition. */
#define HIVE_FORMAT_FLAG 0xA5A5A5A5
#define FORMAT_HIVE_FLAG_ADDR *((volatile unsigned *)(0xAC008000 - 0x08))

#ifndef CTL_CODE
#define CTL_CODE( DeviceType, Function, Method, Access ) (                 \
    ((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method) \
)
#endif

#define MEASURE_ISR_PERFORMANCE

#ifdef MEASURE_ISR_PERFORMANCE

typedef struct tagISR_PER_COUNT
{
    DWORD        dwMinTime;
    DWORD        dwMaxTime;
    DWORD        dwTotalTime;
    DWORD        dwCount;
    DWORD        dwMaxTimeID;
}ISR_PER_COUNT, *PISR_PER_COUNT;

#endif

// define OEM Function start
// Function codes 0-2047 are reserved for Microsoft; codes 2048-4095 are reserved for OEMs and IHVs
//  A function code can be no larger than 4095
#define OEM_HAL_IO_CODE_START                                        2048

#define IOCTL_HAL_GET_SYS_CLOCK_INFO                        CTL_CODE(FILE_DEVICE_HAL, OEM_HAL_IO_CODE_START, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_HAL_SET_SYS_CLOCK_INFO                        CTL_CODE(FILE_DEVICE_HAL, OEM_HAL_IO_CODE_START + 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_HAL_INIT_DEEP_IDLE                                CTL_CODE(FILE_DEVICE_HAL, OEM_HAL_IO_CODE_START + 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_HAL_SET_DEEP_IDLE_WAKE_SOURCE                CTL_CODE(FILE_DEVICE_HAL, OEM_HAL_IO_CODE_START + 3, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_HAL_RESET_DEEP_IDLE_WAKE_SOURCE        CTL_CODE(FILE_DEVICE_HAL, OEM_HAL_IO_CODE_START + 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_HAL_ENTER_DEEP_IDLE                                CTL_CODE(FILE_DEVICE_HAL, OEM_HAL_IO_CODE_START + 5, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_HAL_INIT_ISR_MEASURE                                CTL_CODE(FILE_DEVICE_HAL, OEM_HAL_IO_CODE_START + 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_HAL_START_ISR_MEASURE                                CTL_CODE(FILE_DEVICE_HAL, OEM_HAL_IO_CODE_START + 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_HAL_STOP_ISR_MEASURE                                CTL_CODE(FILE_DEVICE_HAL, OEM_HAL_IO_CODE_START + 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_HAL_QUERY_ISR_MEASURE                                CTL_CODE(FILE_DEVICE_HAL, OEM_HAL_IO_CODE_START + 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_ENABLE_PLL2_FOR_USB                                CTL_CODE(FILE_DEVICE_HAL, OEM_HAL_IO_CODE_START + 10, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_DISABLE_PLL2                                                CTL_CODE(FILE_DEVICE_HAL, OEM_HAL_IO_CODE_START + 11, METHOD_BUFFERED, FILE_ANY_ACCESS)


#define IOCTL_HAL_GET_POWER_STATE                                CTL_CODE(FILE_DEVICE_HAL, OEM_HAL_IO_CODE_START + 13, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_HAL_SET_POWER_STATE                                CTL_CODE(FILE_DEVICE_HAL, OEM_HAL_IO_CODE_START + 14, METHOD_BUFFERED, FILE_ANY_ACCESS)

#define IOCTL_HAL_PM_GETIDLEMONTIME                                CTL_CODE(FILE_DEVICE_HAL, OEM_HAL_IO_CODE_START + 17, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_HAL_PM_SETIDLEMONTIME                                CTL_CODE(FILE_DEVICE_HAL, OEM_HAL_IO_CODE_START + 18, METHOD_BUFFERED, FILE_ANY_ACCESS)

#define IOCTL_HAL_PM_REQUESTTURBO                                CTL_CODE(FILE_DEVICE_HAL, OEM_HAL_IO_CODE_START + 19, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_HAL_PM_RELEASETURBO                                CTL_CODE(FILE_DEVICE_HAL, OEM_HAL_IO_CODE_START + 20, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_HAL_PM_GETTURBOREQ                                CTL_CODE(FILE_DEVICE_HAL, OEM_HAL_IO_CODE_START + 21, METHOD_BUFFERED, FILE_ANY_ACCESS)

#define IOCTL_HAL_INVALIDATE_DCACHE_LINES                CTL_CODE(FILE_DEVICE_HAL, OEM_HAL_IO_CODE_START + 22, METHOD_BUFFERED, FILE_ANY_ACCESS)

// yanfeng for test
#define IOCTL_SWITCH_EXTERNAL_CLOCK                                CTL_CODE(FILE_DEVICE_HAL, OEM_HAL_IO_CODE_START + 23, METHOD_BUFFERED, FILE_ANY_ACCESS)

#define IOCTL_SDHC_GET_WRITE_PROTECT_STATUS                CTL_CODE(FILE_DEVICE_HAL, OEM_HAL_IO_CODE_START + 24, METHOD_BUFFERED, FILE_ANY_ACCESS)
// clock switch
#define IOCTL_HAL_CLOCK_SWITCH                  CTL_CODE(FILE_DEVICE_HAL, OEM_HAL_IO_CODE_START + 25, METHOD_BUFFERED, FILE_ANY_ACCESS)

// zpzeng for max6900
//Customize for iGo Navigator
#define IOCTL_HAL_GET_DEVICE_CODE                      CTL_CODE(FILE_DEVICE_HAL, OEM_HAL_IO_CODE_START + 26, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_HAL_GET_MAP_CODE                      CTL_CODE(FILE_DEVICE_HAL, OEM_HAL_IO_CODE_START + 27, METHOD_BUFFERED, FILE_ANY_ACCESS)

#define IOCTL_HAL_GET_OALSYSINFO                                CTL_CODE(FILE_DEVICE_HAL, OEM_HAL_IO_CODE_START + 28, METHOD_BUFFERED, FILE_ANY_ACCESS)

// zhiguoxiong for test
#define IOCTL_SET_RTC_ALARM_TIME                                CTL_CODE(FILE_DEVICE_HAL, OEM_HAL_IO_CODE_START + 46, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_DISABLE_RTC_ALARM                                        CTL_CODE(FILE_DEVICE_HAL, OEM_HAL_IO_CODE_START + 47, METHOD_BUFFERED, FILE_ANY_ACCESS)

#define IOCTL_HAL_CLOCK_QUERY                                        CTL_CODE(FILE_DEVICE_HAL, OEM_HAL_IO_CODE_START + 48, METHOD_BUFFERED, FILE_ANY_ACCESS)

//
#define IOCTL_HAL_RELEASE_DMA_BUF               CTL_CODE(FILE_DEVICE_HAL, OEM_HAL_IO_CODE_START + 52, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_HAL_REQUEST_DMA_BUF               CTL_CODE(FILE_DEVICE_HAL, OEM_HAL_IO_CODE_START + 53, METHOD_BUFFERED, FILE_ANY_ACCESS)

// clock read
#define IOCTL_HAL_CLOCK_READ                                        CTL_CODE(FILE_DEVICE_HAL, OEM_HAL_IO_CODE_START + 54, METHOD_BUFFERED, FILE_ANY_ACCESS)

// get GPS data buf address
#define IOCTL_HAL_GET_GPS_DATA_BUF              CTL_CODE(FILE_DEVICE_HAL, OEM_HAL_IO_CODE_START + 55, METHOD_BUFFERED, FILE_ANY_ACCESS)

// get multimedia data buf address
#define IOCTL_HAL_GET_MM_DATA_BUF               CTL_CODE(FILE_DEVICE_HAL, OEM_HAL_IO_CODE_START + 56, METHOD_BUFFERED, FILE_ANY_ACCESS)

#define IOCTL_HAL_CORE_ADJUST                                        CTL_CODE(FILE_DEVICE_HAL, OEM_HAL_IO_CODE_START + 57, METHOD_BUFFERED, FILE_ANY_ACCESS)

// Lock cache
#define IOCTL_HAL_LOCK_CACHE                                        CTL_CODE(FILE_DEVICE_HAL, OEM_HAL_IO_CODE_START + 58, METHOD_BUFFERED, FILE_ANY_ACCESS)

// Unlock cache
#define IOCTL_HAL_FREE_CACHE                                        CTL_CODE(FILE_DEVICE_HAL, OEM_HAL_IO_CODE_START + 59, METHOD_BUFFERED, FILE_ANY_ACCESS)

// get Display data buf address
#define IOCTL_HAL_GET_DISPLAY_DATA_BUF          CTL_CODE(FILE_DEVICE_HAL, OEM_HAL_IO_CODE_START + 60, METHOD_BUFFERED, FILE_ANY_ACCESS)

// get VideoCodec data buf address
#define IOCTL_HAL_GET_VCODEC_DATA_BUF           CTL_CODE(FILE_DEVICE_HAL, OEM_HAL_IO_CODE_START + 61, METHOD_BUFFERED, FILE_ANY_ACCESS)

//  This IOCTL code is used by I2C driver to submit an i2c transaction to the
//  kernel for processing.
#define IOCTL_KERNELI2C_SUBMIT                               CTL_CODE(FILE_DEVICE_HAL, OEM_HAL_IO_CODE_START + 62, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_SET_RTC_WAKEUP_TIME                                CTL_CODE(FILE_DEVICE_HAL, OEM_HAL_IO_CODE_START + 63, METHOD_BUFFERED, FILE_ANY_ACCESS)

// get OEM specific value in EFuse
#define IOCTL_HAL_GET_BTMACADDR                CTL_CODE(FILE_DEVICE_HAL, OEM_HAL_IO_CODE_START + 64, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_HAL_GET_CUSTOMERNUM              CTL_CODE(FILE_DEVICE_HAL, OEM_HAL_IO_CODE_START + 65, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_HAL_GET_FURTURENUM               CTL_CODE(FILE_DEVICE_HAL, OEM_HAL_IO_CODE_START + 66, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_HAL_GET_OEMVALUE                 CTL_CODE(FILE_DEVICE_HAL, OEM_HAL_IO_CODE_START + 67, METHOD_BUFFERED, FILE_ANY_ACCESS)
// get OEM data buf address
#define IOCTL_HAL_GET_OEM_DATA_BUF             CTL_CODE(FILE_DEVICE_HAL, OEM_HAL_IO_CODE_START + 68, METHOD_BUFFERED, FILE_ANY_ACCESS)

#define IOCTL_HAL_GET_RTC                              CTL_CODE(FILE_DEVICE_HAL, OEM_HAL_IO_CODE_START + 69, METHOD_BUFFERED, FILE_ANY_ACCESS)

// get dbg data buf address
#define IOCTL_HAL_GET_DBG_DATA_BUF             CTL_CODE(FILE_DEVICE_HAL, OEM_HAL_IO_CODE_START + 70, METHOD_BUFFERED, FILE_ANY_ACCESS)

// Get Reg value
#define IOCTL_HAL_GET_REG_CLK_EN            CTL_CODE(FILE_DEVICE_HAL, OEM_HAL_IO_CODE_START + 71, METHOD_BUFFERED, FILE_ANY_ACCESS)


#define IOCTL_SET_EXT_REAL_TIME                                        CTL_CODE(FILE_DEVICE_HAL, OEM_HAL_IO_CODE_START + 72, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_GET_EXT_REAL_TIME                                        CTL_CODE(FILE_DEVICE_HAL, OEM_HAL_IO_CODE_START + 73, METHOD_BUFFERED, FILE_ANY_ACCESS)

// Set power manager pad's configuration
#define IOCTL_HAL_SET_PM_PAD_CFG            CTL_CODE(FILE_DEVICE_HAL, OEM_HAL_IO_CODE_START + 74, METHOD_BUFFERED, FILE_ANY_ACCESS)

// Get power manager pad's configuration
#define IOCTL_HAL_GET_PM_PAD_CFG            CTL_CODE(FILE_DEVICE_HAL, OEM_HAL_IO_CODE_START + 75, METHOD_BUFFERED, FILE_ANY_ACCESS)

// Get power manager pad's configuration
#define IOCTL_HAL_QUERY_PM_PAD_CFG_INFO   CTL_CODE(FILE_DEVICE_HAL, OEM_HAL_IO_CODE_START + 76, METHOD_BUFFERED, FILE_ANY_ACCESS)

#endif
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

36
 
你好,kieven2008

我将你提供的代码,放到common中,编译成功。但运行时:
if (!KernelIoControl(IOCTL_HAL_GET_DISPLAY_DATA_BUF,
                                NULL,
                                0,
                                &temp_p_fromkernel,
                                sizeof(BUF_INFO),
                                NULL))
                        {
                                RETAILMSG(1, (_T("KernelIoControl(IOCTL_HAL_GET_DISPLAY_DATA_BUF) Failed: %d\r\n"),GetLastError()));
                                return FALSE;
                        }
出现,输出:50,即不支持请求。

应该是驱动的问题吧,驱动没有实现这个IOCTL请求,是不?
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

37
 
再问一下kieven2008 ,你的TCPMP的视频播放引擎是什么?DirectDraw、GDI还是其它?
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

38
 
  难道还会出现致命错误吗??我没有遇到KernelIoControl类似的问题,TCPMP 针对A4移植花了很多时间.
   
   因本人不是做驱动的,不过记得好象驱动没有做什么针对修改,TCPMP修改部分全部就是这些了.
   建议把上述我修改的几个地方重点调试一下,有可能是CPU ID 问题,  
具体什么原因你得跟你们做驱动的programmer交流一下才行
 
 
 

回复

94

帖子

0

TA的资源

一粒金砂(初级)

39
 
当然是framebuffer
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

40
 
OK了

多谢!

我只增加了Sleep(50),然后使用GDI就可以了,不再出现错误。
结帖,给分。

我会再开一帖,请kieven2008去接分。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表