请教:拔号连接、断开连接的代码在哪里?

allanfy   2010-2-2 10:43 楼主
我的平台上连着USB 3G上网卡,想达到这样的效果:
1. 点击“我的连接”时,就启动USB电源;稍等一会点“连接”就可以拔号了
2. 点“断开连接”时,就断开USB电源

不知修改哪里的代码,电源的控制很简单,设置一个使能引脚而已

回复评论 (9)

帮顶一下.
点赞  2010-2-2 13:40
要达到你说的这种地步,估计你得自己写一个硬件驱动。来控制IO口。我们就是这样实现的。
点赞  2010-2-2 16:28
这好像只能驱动来做吧
点赞  2010-2-2 16:51
想这样外部设备供电, 我们是采用一个GPIO实现对电源的控制,
当然需要在电源管理 添加相关设备的电源管理,从而能满足系统的电源管理要求吧
点赞  2010-2-2 16:51
我解决了,
点“我的连接”时,我用Remote Process Viewer查看到是进程rnaapp;
于是找到rnaapp.c,在WinMain函数的入口打开USB电源,在出口关闭USB电源。
点赞  2010-2-2 17:01
贴一下代码:
        pBaseAddressGPIO = VirtualAlloc(0, GPIO_SIZE_PHY, MEM_RESERVE, PAGE_NOACCESS);
        if(pBaseAddressGPIO){
                nTmpVal = VirtualCopy(pBaseAddressGPIO,(LPVOID)(GPACON_BASE_PHY >> 8),
                                                                GPIO_SIZE_PHY, PAGE_READWRITE | PAGE_NOCACHE | PAGE_PHYSICAL);
                if (nTmpVal != TRUE){
                        pBaseAddressGPIO = NULL;
                }
        }
    RETAILMSG (1, (TEXT("pBaseAddressGPIO = 0x%x\r\n"),
        pBaseAddressGPIO));

        if (pBaseAddressGPIO)
        {
                nTmpVal = *(pBaseAddressGPIO + 4);
                nTmpVal &= ~(3<<7*2);
                nTmpVal        |= (1<<7*2);
                *(pBaseAddressGPIO + 4) = nTmpVal;

                RETAILMSG (1, (TEXT("GPBCON = 0x%x\r\n"),
                        nTmpVal));
               
                nTmpVal = *(pBaseAddressGPIO + 5);
                nTmpVal        |= (1<<7);
                *(pBaseAddressGPIO + 5) = nTmpVal;
                RETAILMSG (1, (TEXT("GPBDAT = 0x%x\r\n"),
                        nTmpVal));
        }
点赞  2010-2-2 17:02

8楼 ele 

多谢分享!!好东西!!
点赞  2010-2-5 21:33
感谢楼主的分享。
点赞  2010-2-6 09:19
引用: 引用 6 楼 thisway_diy 的回复:
贴一下代码:
        pBaseAddressGPIO = VirtualAlloc(0, GPIO_SIZE_PHY, MEM_RESERVE, PAGE_NOACCESS);
        if(pBaseAddressGPIO){
                nTmpVal = VirtualCopy(pBaseAddressGPIO,(LPVOID)(GPACON_BASE_PHY >> 8),
                                                                GPIO_SIZE_PHY, PAGE_READWRITE | PAGE_NOCACHE | PAGE_PHYSICAL);
                if (nTmpVal != TRUE){
                        pBaseAddressGPIO = NULL;
                }
        }
? ? RETAILMSG (1, (TEXT("pBaseAddressGPIO = 0x%x\r\n"),
? ? ? ? pBaseAddressGPIO));

        if (pBaseAddressGPIO)
        {
                nTmpVal = *(pBaseAddressGPIO + 4);
                nTmpVal &= ~(3 < <7*2);
                nTmpVal        |= (1 < <7*2);
                *(pBaseAddressGPIO + 4) = nTmpVal;

                RETAILMSG (1, (TEXT("GPBCON = 0x%x\r\n"),
                        nTmpVal));

                nTmpVal = *(pBaseAddressGPIO + 5);
                nTmpVal        |= (1 < <7);
                *(pBaseAddressGPIO + 5) = nTmpVal;
                RETAILMSG (1, (TEXT("GPBDAT = 0x%x\r\n"),
                        nTmpVal));
        }
学习,学习,呵呵。
点赞  2010-2-7 09:56
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复