我的平台上连着USB 3G上网卡,想达到这样的效果:
1. 点击“我的连接”时,就启动USB电源;稍等一会点“连接”就可以拔号了
2. 点“断开连接”时,就断开USB电源
不知修改哪里的代码,电源的控制很简单,设置一个使能引脚而已
要达到你说的这种地步,估计你得自己写一个硬件驱动。来控制IO口。我们就是这样实现的。
想这样外部设备供电, 我们是采用一个GPIO实现对电源的控制,
当然需要在电源管理 添加相关设备的电源管理,从而能满足系统的电源管理要求吧
我解决了,
点“我的连接”时,我用Remote Process Viewer查看到是进程rnaapp;
于是找到rnaapp.c,在WinMain函数的入口打开USB电源,在出口关闭USB电源。
贴一下代码:
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));
}