SD卡的动态插入与拔出,在AP层怎么检测?必须自己写个小的驱动?还是只能用定时器不断查询其状态?

xqhrs232 2009-05-12 12:13:26
SD卡的动态插入与拔出,在AP层怎么检测?必须自己写个小的驱动?还是只能用定时器不断查询其状态?
...全文
429 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
Android_Tyro 2011-03-17
  • 打赏
  • 举报
回复
初始化代码:
#include <Storemgr.h>
#include <Msgqueue.h>

MSGQUEUEOPTIONS msgopt;
memset(&msgopt, 0, sizeof(MSGQUEUEOPTIONS));
msgopt.dwSize = sizeof(MSGQUEUEOPTIONS);
msgopt.cbMaxMessage = 128;
msgopt.bReadAccess = TRUE;

hMsgQueue = CreateMsgQueue(L"myqueue", &msgopt);
hNotify = RequestDeviceNotifications(&FATFS_MOUNT_GUID, hMsgQueue, FALSE);

监听代码:
BYTE data[256];
memset(data, 0, 256);
DWORD dwRead, dwFlags;
ReadMsgQueue(hMsgQueue, data, 256, &dwRead, INFINITE, &dwFlags);

当有插拔动作时,ReadMsgQueue()会返回,data中含有相应的数据信息DEVDETAIL。 hMsgQueue也可作为WatiForSingleObject()的参数。
xqhrs232 2009-05-14
  • 打赏
  • 举报
回复
wjf_zjut 2009-05-13
  • 打赏
  • 举报
回复
sd卡驱动里面,有个叫SD_DETECT 的中断,低电平有效;当SD卡插入的时候,这个中断会定时响应,拔出则不相应中断,如果判断到一定时间内没有中断响应的,就认为是拔出了!
xqhrs232 2009-05-13
  • 打赏
  • 举报
回复
[Quote=引用 32 楼 happypay 的回复:]
只需要在标示//add your func的消息下面写就可以了
前面的消息我也没用过
[/Quote]

有时间试一下
happypay 2009-05-13
  • 打赏
  • 举报
回复
只需要在标示//add your func的消息下面写就可以了
前面的消息我也没用过
xqhrs232 2009-05-13
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 singlerace 的回复:]
RequestDeviceNotifications这个API没人用过?这是标准的SD卡/U盘的检测方法。
[/Quote]

这个函数怎么用?是等事件?还是我们必须不断调用这个命令去查询SD/U盘的状态?
Sniper167 2009-05-13
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 singlerace 的回复:]
RequestDeviceNotifications这个API没人用过?这是标准的SD卡/U盘的检测方法。
[/Quote]

这个是正解
xqhrs232 2009-05-13
  • 打赏
  • 举报
回复
DBT_XXX系列消息是些什么消息?
happypay 2009-05-13
  • 打赏
  • 举报
回复
LRESULT CFileView::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class
if(message == WM_DEVICECHANGE) //0x8000,0x8004
{
CString str;
int test1 = 1;
int test2 = 0;
DEV_BROADCAST_HDR* dhr = (DEV_BROADCAST_HDR *)lParam;
switch(wParam)
{
case DBT_CONFIGCHANGECANCELED:
TRACE(L"DBT_CONFIGCHANGECANCELED");
printf("delete is %d\n",test1);
break;
case DBT_CONFIGCHANGED:
TRACE(L"DBT_CONFIGCHANGED");
printf("delete is %d\n",test1);
break;
case DBT_DEVICEQUERYREMOVE:
TRACE(L"DBT_DEVICEQUERYREMOVE");
printf("delete is %d\n",test1);
break;
case DBT_DEVICEQUERYREMOVEFAILED:
TRACE(L"DBT_DEVICEQUERYREMOVEFAILED");
printf("delete is %d\n",test1);
break;
case DBT_DEVICEREMOVEPENDING:
TRACE(L"DBT_DEVICEREMOVEPENDING");
printf("delete is %d\n",test1);
break;
case DBT_DEVICETYPESPECIFIC:
TRACE(L"DBT_DEVICETYPESPECIFIC");
printf("delete is %d\n",test1);
break;
case DBT_QUERYCHANGECONFIG:
TRACE(L"DBT_QUERYCHANGECONFIG");
printf("delete is %d\n",test1);
break;
case DBT_USERDEFINED:
TRACE(L"DBT_USERDEFINED");
printf("delete is %d\n",test1);
break;
case DBT_DEVICEARRIVAL:
//add your func
break;
case DBT_DEVICEREMOVECOMPLETE:
//add your func
break;
default:
break;
}
printf("delete is %d\n",test2);
}

return CDialog::WindowProc(message, wParam, lParam);
}
我就是这么做的
xqhrs232 2009-05-12
  • 打赏
  • 举报
回复
在SD卡的驱动(因为里面已经实现了SD卡的动态检测)里面直接用POSTMESSAGE( )发消息给应用?这样也觉得可以啊!
xqhrs232 2009-05-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 91program 的回复:]
SD插入与拔出的检测在驱动层实现,发消息到应用层
[/Quote]

自己写个驱动来弄?自己还要加根I/O线来做?
91program 2009-05-12
  • 打赏
  • 举报
回复
SD插入与拔出的检测在驱动层实现,发消息到应用层
xqhrs232 2009-05-12
  • 打赏
  • 举报
回复
SD卡的中断是那个,SD卡中断对应绑定的事件是那个?是不是有名称的事件?AP里面能不能去对应打开这个跟SD卡中断对应绑定的事件?--------在AP里面开个线程等这个事件的发生。
singlerace 2009-05-12
  • 打赏
  • 举报
回复
RequestDeviceNotifications这个API没人用过?这是标准的SD卡/U盘的检测方法。
xqhrs232 2009-05-12
  • 打赏
  • 举报
回复
http://blog.chinaunix.net/u2/60901/showart_1186582.html

WINDOWS下的消息方面的介绍文章
xqhrs232 2009-05-12
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 liangxd09 的回复:]
监听驱动 或者 改驱动 广播消息
[/Quote]

广播消息是那一个消息?
liangxd09 2009-05-12
  • 打赏
  • 举报
回复
监听驱动 或者 改驱动 广播消息
liangxd09 2009-05-12
  • 打赏
  • 举报
回复
写个事件监听 驱动 或者改驱动 广播消息
Reallyu 2009-05-12
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 Reallyu 的回复:]
在驱动里面 SendMessage(HWND_BROADCAST,...) 就不用findwindow了
[/Quote]
可能 PostMessage 比较好
Reallyu 2009-05-12
  • 打赏
  • 举报
回复
在驱动里面 SendMessage(HWND_BROADCAST,...) 就不用findwindow了
加载更多回复(15)

19,504

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧