CN105718388A - 一种基于usb设备的异步调用方法和装置 - Google Patents

一种基于usb设备的异步调用方法和装置 Download PDF

Info

Publication number
CN105718388A
CN105718388A CN201610037716.8A CN201610037716A CN105718388A CN 105718388 A CN105718388 A CN 105718388A CN 201610037716 A CN201610037716 A CN 201610037716A CN 105718388 A CN105718388 A CN 105718388A
Authority
CN
China
Prior art keywords
usb device
master control
module
returns
response data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201610037716.8A
Other languages
English (en)
Other versions
CN105718388B (zh
Inventor
陆舟
于华章
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Feitian Technologies Co Ltd
Original Assignee
Feitian Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Feitian Technologies Co Ltd filed Critical Feitian Technologies Co Ltd
Priority to CN201610037716.8A priority Critical patent/CN105718388B/zh
Publication of CN105718388A publication Critical patent/CN105718388A/zh
Application granted granted Critical
Publication of CN105718388B publication Critical patent/CN105718388B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/10Program control for peripheral devices
    • G06F13/102Program control for peripheral devices where the programme performs an interfacing function, e.g. device driver
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/0042Universal serial bus [USB]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Transfer Systems (AREA)

Abstract

本发明公开一种基于USB设备的异步调用方法和装置,该方法包括:S1:接收主控装置发送的上位机指令,向主控装置返回接收成功信息,向设备发送上位机指令,接收第一响应数据;S2:判断返回码是否为第七预设值,是则将查询标识置位,否则执行S3;S3:通过调用回调函数,将第一响应数据返回给主控,结束;该方法还包括:A1:判断查询标识是否置位,是则执行A2,否则返回A1;A2:向设备发送查询指令,接收第二响应数据;A3:对返回码进行判断,若返回码为第六预设值则将查询标识复位,执行A4,若返回码为第五预设值则返回A1,若是其他值则执行A4;A4:通过调用回调函数,将第二响应数据返回给主控,返回A1。

Description

一种基于USB设备的异步调用方法和装置
技术领域
本发明涉及通信领域,尤其涉及一种基于USB设备的异步调用方法和装置。
背景技术
现有技术中,上位机与USB设备之间的通信方式为同步通信,上位机向USB设备发送一条指令后,等待接收USB设备返回的响应,当上位机接收到USB设备返回的响应之后,才能够继续进行其他操作。因此,在这种通信方式中,上位机向USB设备发送指令后,只能阻塞等待USB设备处理完返回响应,不能进行其他操作,上位机的灵活性差,工作效率低。
发明内容
本发明的目的是为了克服现有技术的不足,提供一种基于USB设备的异步调用方法和装置,在上位机中增加通信库,上位机中的主控装置通过通信库向USB设备发送指令,通信库通过回调函数的方式将USB设备的响应返回给上位机中的主控装置,主控装置在发送指令之后不必等待接收响应。
本发明提供的一种基于USB设备的异步调用方法,包括:
步骤S1:接收主控装置发送的上位机指令,向所述主控装置返回接收成功信息,根据USB设备的设备句柄,向USB设备发送所述上位机指令,接收所述USB设备返回的第一响应数据;
步骤S2:判断所述第一响应数据中的返回码是否为第七预设值,是则将查询标识置位,结束,否则执行步骤S3;
步骤S3:通过调用回调函数,将所述第一响应数据返回给所述主控装置,结束;
所述方法还包括:
步骤A01:判断所述查询标识是否置位,是则执行步骤A02,否则返回步骤A01;
步骤A02:根据所述USB设备的设备句柄,向所述USB设备发送查询指令,接收所述USB设备返回的第二响应数据;
步骤A03:对所述第二响应数据中的返回码进行判断,若所述返回码为第六预设值则将所述查询标识复位,执行步骤A04,若所述返回码为第五预设值则返回步骤A01,若是其他值则执行步骤A04;
步骤A04:通过调用所述回调函数,将所述第二响应数据返回给所述主控装置,返回步骤A01。
本发明提供一种基于USB设备的异步调用装置,所述装置包括:第一发送接收模块、第一判断模块、置位模块和第一回调模块;
所述第一发送接收模块,用于接收主控装置发送的上位机指令,向所述主控装置返回接收成功信息,根据USB设备的设备句柄,向USB设备发送所述上位机指令,接收所述USB设备返回的第一响应数据;
所述第一判断模块,用于当所述第一发送接收模块接收到USB设备返回的第一响应数据后,判断所述第一响应数据中的返回码是否为第七预设值;
所述置位模块,用于当所述第一判断模块判断出所述返回码为第七预设值时,将查询标识置位;
所述第一回调模块,用于当所述第一判断模块判断出返回码不为第七预设值时,通过调用回调函数,将所述第一发送接收模块接收到的所述第一响应数据返回给所述主控装置;
所述装置还包括:第二判断模块、第二发送接收模块、第三判断模块、复位模块和第二回调模块;
所述第二判断模块,用于判断所述查询标识是否置位,若所述查询标识未置位,则所述第二判断模块继续判断查询标识是否置位;
所述第二发送接收模块,用于当所述第二判断模块判断出所述查询标识置位时,根据所述USB设备的设备句柄,向所述USB设备发送查询指令,接收所述USB设备返回的第二响应数据;
所述第三判断模块,用于对所述第二发送接收模块接收到的所述第二响应数据中的返回码进行判断,若所述返回码为第五预设值则触发所述第二判断模块进行工作;
所述复位模块,用于当所述第三判断模块判断出所述返回码为第六预设值时,将所述查询标识复;
所述第二回调模块,用于当所述第三判断模块判断出所述返回码为除第五预设值之外的其他值时,通过调用所述回调函数,将所述第二发送接收模块接收到的所述第二响应数据返回给所述主控装置,触发所述第二判断模块进行工作。
本发明与现有技术相比,具有以下优点:
本发明提供的一种基于USB设备的异步调用方法和装置,在上位机中增加通信库,上位机中的主控装置通过通信库向USB设备发送指令,通信库通过回调函数的方式将USB设备的响应返回给上位机中的主控装置,主控装置在发送指令之后不必等待接收响应,提高上位机的工作效率。
附图说明
图1和图2是本发明实施例2提供的一种基于USB设备的异步调用方法的主线程的流程图;
图3是本发明实施例2提供的一种基于USB设备的异步调用方法的查询子线程的流程图;
图4是本发明实施例3提供的一种基于USB设备的异步调用装置的模块图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例1
本发明的实施例1提供了一种基于USB设备的异步调用方法,应用于包括上位机和USB设备的系统中,其中,上位机包括主控装置和通信库,该方法包括:
步骤S1:通信库接收主控装置发送的上位机指令,向主控装置返回接收成功信息,根据USB设备的设备句柄,向USB设备发送上位机指令,接收USB设备返回的第一响应数据;
步骤S2:通信库根据判断第一响应数据中的返回码是否为第七预设值,是则将查询标识置位,结束,否则执行步骤S3;
步骤S3:通信库通过调用回调函数,将第一响应数据返回给主控装置,结束;
该方法还包括:
步骤A01:通信库判断查询标识是否置位,是则执行步骤A02,否则返回步骤A01;
步骤A02:通信库根据USB设备的设备句柄,向USB设备发送查询指令,接收USB设备返回的第二响应数据;
步骤A03:通信库对第二响应数据中的返回码进行判断,若返回码为第六预设值则将查询标识复位,返回步骤A04,若返回码为第五预设值则返回步骤A01,若是其他值则执行步骤A04;
步骤A04:通信库通过调用回调函数,将第二响应数据返回给主控装置,返回步骤A01;
本实施例中,步骤S1至S3可以在通信库的主线程中实现,步骤A01至A04可以在通信库的查询子线程中实现;
本实施例中,在启动查询子线程之前,还可以包括:
步骤P1:通信库枚举与上位机相连的USB设备,获取USB设备的设备名称和设备名称长度;
步骤P2:通信库根据设备名称长度,判断设备名称是否正确,是则执行步骤P3,否则向主控装置返回错误信息,结束;
步骤P3:通信库根据设备名称和设备名称长度,打开并连接USB设备;
步骤P4:通信库判断是否成功打开并连接USB设备,是则执行步骤P5,否则向主控装置返回错误信息,结束;
步骤P5:通信库获取USB设备的设备句柄,将查询标识复位,设置向主控装置返回USB设备响应的回调函数指针;启动查询子线程;
本实施例中,通信库完成与USB设备的通信之后,还可以包括:
通信库关闭USB设备,清除USB设备的设备句柄。
本实施例中提供的一种基于USB设备的异步调用方法,在上位机中增加通信库,上位机中的主控装置通过通信库向USB设备发送指令,通信库通过回调函数的方式将USB设备的响应返回给上位机中的主控装置,主控装置在发送指令之后不必等待接收响应,提高上位机的工作效率。
实施例2
本发明的实施例2提供了一种基于USB设备的异步调用方法,如图1至图3所示,应用于包括上位机和USB设备的系统中,其中,上位机包括主控装置和通信库,通信库中包括:主线程和查询子线程;
主线程的流程包括:
当通信库的初始化接口被调用时,执行以下步骤:
步骤101:通信库枚举与上位机相连的USB设备,获取USB设备的设备名称和设备名称长度;
具体地,该步骤包括:
步骤101-1:通信库建立上下文环境,判断是否成功建立上下文环境,是则获取上下文句柄,执行步骤101-2,否则向主控装置返回错误信息,结束;
具体地,通信库通过调用SCardEstablishContext函数建立上下文环境;
通信库判断SCardEstablishContext函数返回值是否为第一预设值,是则确定成功建立上下文环境,否则确定未成功建立上下文环境;例如,第一预设值为SCARD_S_SUCCESS;
当通信库判断出成功建立上下文环境时,通信库获取SCardEstablishContext函数的hContext参数中的数据作为上下文句柄;
步骤101-2:通信库枚举USB设备,判断是否存在与上位机相连的USB设备,是则获取USB设备列表,执行步骤101-3,否则向主控装置返回错误信息,结束;
具体地,通信库以上下文句柄为参数,通过调用SCardListReaders函数获取USB设备列表;
通信库判断SCardListReaders函数返回值是否为第二预设值,是则确定不存在与上位机相连的USB设备,否则确定存在与上位机相连的USB设备;例如,第二预设值为SCARD_E_NO_SMARTCARD_READER;
通信库获取SCardListReaders函数的szReaders参数作为USB设备列表;
除此之外,通信库还可以调用HidD_GetHidGuid系统函数获取全局统一标识符,根据全局统一标识符调用SetupDiGetClassDevs系统函数获取设备信息,根据设备信息调用SetupDiEnumDeviceInterfaces系统函数枚举设备接口,根据枚举到的设备接口调用SetupDiGetDeviceInterfaceDetail系统函数获取设备接口详细信息,根据设备接口详细信息调用CreateFile系统函数打开设备接口,调用HidD_GetAttributes系统函数获取设备名称;
步骤101-3:通信库判断USB设备列表中是否存在与预设关键字匹配的设备名称,是则获取与预设关键字匹配的设备名称和设备名称长度,否则向主控装置返回错误信息,结束;
步骤102:通信库根据设备名称长度,判断设备名称是否正确,是则执行步骤103,否则向主控装置返回错误信息,结束;
具体地,通信库判断设备名称长度是否大于0,则确定设备名称正确,否则确定设备名称不正确;
步骤103:通信库根据设备名称和设备名称长度,打开并连接USB设备;
具体地,通信库以上下文句柄和设备名称为参数,通过调用SCardConnect函数打开并连接USB设备;
该步骤之前还可以包括:通信库判断上下文句柄是否为空,是则建立上下文环境,获取上下文句柄,执行步骤103,否则执行步骤103;
除此之外,通信库还可以根据设备接口详细信息调用CreateFile系统函数打开设备接口;
步骤104:通信库判断是否成功打开并连接USB设备,是则执行步骤105,否则向主控装置返回错误信息,结束;
具体地,通信库判断SCardConnect函数返回值是否为第三预设值,是则确定成功打开并连接USB设备,否则确定未成功打开并连接USB设备;例如,第三与设置为SCARD_S_SUCCESS;
步骤105:通信库获取USB设备的设备句柄,将查询标识复位,设置向主控装置返回USB设备响应的回调函数指针;
具体地,通信库获取SCardConnect函数中hCard参数中的数据作为USB设备的设备句柄;
步骤106:通信库启动查询子线程;
具体地,通信库通过调用CreateThread函数启动查询子线程;
查询子线程的流程如图3所示,包括:
步骤201:通信库判断USB设备的设备句柄是否为空,是则查询子线程结束,否则执行步骤202;
步骤202:通信库判断查询标识是否置位,是则执行步骤203,否则返回步骤201;
具体地,当通信库判断查询标识未置位时,还可以包括:通信库等待第一预设时间;例如,第一预设时间为10毫秒;查询标识的初始状态为复位;
步骤203:通信库根据USB设备的设备句柄,向USB设备发送查询指令,接收USB设备返回的第二响应数据;
具体地,该步骤包括:
步骤203-1:通信库获取卡片状态,判断卡片状态是否为重置,是则执行步骤203-2,否则执行步骤203-3;
具体地,通信库以USB设备的设备句柄为参数,通过调用SCardStatus函数获取卡片状态,判断卡片状态是否为第四预设值,是则确定卡片状态为重置,否则确定卡片状态不为重置;例如,第四预设值为SCARD_W_RESET_CARD;
步骤203-2:通信库重新与USB设备建立连接,执行步骤203-3;
具体地,通信库以USB设备的设备句柄为参数,通过调用SCardReconnect函数重新与USB设备建立连接;
步骤203-3:通信库根据USB设备的设备句柄,向USB设备发送查询指令,接收USB设备返回的第二响应数据;
具体地,通信库以USB设备的设备句柄和查询指令为参数,通过调用SCardTransmit函数向USB设备发送查询指令;通信库根据SCardTransmit函数中pbRecvBuffer参数中的数据获取USB设备返回的第二响应数据;
例如,查询指令为0x00000000;接收到的第二响应数据为01001903010a7765206c696e6b20746f0a746865206164647265731e499000;
除此之外,通信库还可以调用WriteFile系统函数向USB设备发送查询指令,调用ReadFile系统函数接收USB设备返回的第二响应数据;
步骤204:通信库判断接收到的第二响应数据的长度是否不小于第一预设长度,是则执行步骤205,否则返回步骤201;
具体地,第一预设长度为2个字节;
步骤205:通信库获取第二响应数据中的返回码,对返回码进行判断,若返回码为第六预设值则执行步骤206,若返回码为第五预设值则返回步骤201,若是其他值则执行步骤207;
具体地,通信库获取第二响应数据的最后2个字节的数据作为返回码;通信库对返回码进行判断,若返回码为第五预设值,则确定返回码为正在处理信息;若返回码为第六预设值,则确定返回码为处理完成信息;
例如,第五预设值为0x6F00,第六预设值为0x9001;
步骤206:通信库将查询标识复位,执行步骤207;
步骤207:通信库判断向主控装置返回USB设备响应的回调函数指针是否为空,是则返回步骤201,否则执行步骤208;
步骤208:通信库通过调用回调函数,将第二响应数据返回给主控装置,返回步骤201;
具体地,通信库以第二响应数据为参数,通过调用sCallbackFunc函数将响应数据返回给主控装置;
例如,通信库返回给主控装置的第二响应数据为01001903010a7765206c696e6b20746f0a746865206164647265731e499000;
该步骤之后还可以包括:通信库等待第二预设时间;例如,第二预设时间为100毫秒;
如图2所示,当通信库的通信接口被调用时,执行以下步骤:
步骤107:通信库接收主控装置发送的上位机指令,向主控装置返回接收成功信息,通信库判断查询标识是否置位,是则向主控装置返回错误信息,结束,否则执行步骤108;
步骤108:通信库根据USB设备的设备句柄,向USB设备发送上位机指令,接收USB设备返回的第一响应数据;
具体地,该步骤包括:
步骤108-1:通信库获取卡片状态,判断卡片状态是否为重置,是则执行步骤108-2,否则执行步骤108-3;
具体地,通信库以USB设备的设备句柄为参数,通过调用SCardStatus函数获取卡片状态,判断卡片状态是否为第四预设值,是则确定卡片状态为重置,否则确定卡片状态不为重置;例如,第四预设值为SCARD_W_RESET_CARD;
步骤108-2:通信库重新与USB设备建立连接,执行步骤108-3;
具体地,通信库以USB设备的设备句柄为参数,通过调用SCardReconnect函数重新与USB设备建立连接;
步骤108-3:通信库根据USB设备的设备句柄,向USB设备发送上位机指令,接收USB设备返回的第一响应数据;
具体地,通信库以USB设备的设备句柄和上位机指令为参数,通过调用SCardTransmit函数向USB设备发送上位机指令;通信库根据SCardTransmit函数中pbRecvBuffer参数中的数据获取USB设备返回的第一响应数据;
例如,通信库向USB设备发送的上位机指令为0x0084000008,接收到的第一响应数据为0x11223344556677889000;
例如,通信库向USB设备发送的上位机指令为0x7e500000000c81000801030000003030346800,接收到的第一响应数据为0x9002;
除此之外,通信库还可以调用WriteFile系统函数向USB设备发送上位机指令,调用ReadFile系统函数接收USB设备返回的第一响应数据;
步骤109:通信库判断接收到的第一响应数据中的返回码是否为第七预设值,是则执行步骤112,否则执行步骤110;
具体地,通信库判断接收到的第一响应数据中的返回码是否为第七预设值,是则确定需要发送查询指令,否则确定不需要发送查询指令;
具体地,通信库获取第一响应数据的最后2个字节的数据作为返回码;例如,第七预设值为0x9002;
步骤110:通信库判断向主控装置返回USB设备响应的回调函数指针是否为空,是则结束,否则执行步骤111;
步骤111:通信库通过调用回调函数,将第一响应数据返回给主控装置,结束;
具体地,通信库以响应数据为参数,通过调用sCallbackFunc函数将第一响应数据返回给主控装置;
例如,通信库返回给主控装置的第一响应数据为0x11223344556677889000;
步骤112:通信库将查询标识置位,结束;
具体地,查询标识的初始状态为复位;
当通信库的关闭接口被调用时,执行以下步骤:
通信库关闭USB设备,清除USB设备的设备句柄;
具体地,通信库以USB设备的设备句柄为参数,通过调用PCSC_Disconnect函数关闭USB设备;
除此之外,通信库还可以调用CloseHandle系统函数关闭USB设备;
本实施例中提供的一种基于USB设备的异步调用方法,在上位机中增加通信库,上位机中的主控装置通过通信库向USB设备发送指令,通信库通过回调函数的方式将USB设备的响应返回给上位机中的主控装置,主控装置在发送指令之后不必等待接收响应,提高上位机的工作效率。
实施例3
本发明的实施例3提供了一种基于USB设备的异步调用装置,如图4所示,包括:第一发送接收模块301、第一判断模块302、置位模块303和第一回调模块304;
第一发送接收模块301,用于接收主控装置发送的上位机指令,向主控装置返回接收成功信息,根据USB设备的设备句柄,向USB设备发送上位机指令,接收USB设备返回的第一响应数据;
第一判断模块302,用于当第一发送接收模块301接收到USB设备返回的第一响应数据后,判断第一响应数据中的返回码是否为第七预设值;
置位模块303,用于当第一判断模块302判断出返回码为第七预设值时,将查询标识置位;
第一回调模块304,用于当第一判断模块302判断出返回码不为第七预设值时,通过调用回调函数,将第一发送接收模块301接收到的第一响应数据返回给主控装置;
异步调用装置还包括:第二判断模块305、第二发送接收模块306、第三判断模块307、复位模块308和第二回调模块309;
第二判断模块305,用于判断查询标识是否置位,若查询标识未置位,则第二判断模块305继续判断查询标识是否置位;
第二发送接收模块306,用于当第二判断模块305判断出查询标识置位时,根据USB设备的设备句柄,向USB设备发送查询指令,接收USB设备返回的第二响应数据;
第三判断模块307,用于对第二发送接收模块306接收到的第二响应数据中的返回码进行判断,若返回码为第五预设值则触发第二判断模块305进行工作;
复位模块308,用于当第三判断模块307判断出返回码为第六预设值时,将查询标识复;
第二回调模块309,用于当第三判断模块307判断出返回码为除第五预设值之外的其他值时,通过调用回调函数,将第二发送接收模块306接收到的第二响应数据返回给主控装置,触发第二判断模块305进行工作。
异步调用装置还包括:第四判断模块,用于判断查询标识是否置位,是则向主控装置返回错误信息,否则触发第一发送接收模块301进行工作。
第一发送接收模块301包括:第一判断单元、第一连接单元、第一发送接收单元;
第一判断单元,用于获取卡片状态,判断卡片状态是否为重置;
第一连接单元,用于当第一判断单元判断出卡片状态为重置时,重新与USB设备建立连接;
第一发送接收单元,当第一判断单元判断出卡片状态不为重置时,或者第一连接单元重新与USB设备建立连接后,根据USB设备的设备句柄,向USB设备发送上位机指令,接收USB设备返回的第一响应数据。
异步调用装置还包括:第五判断模块,用于判断向主控装置返回USB设备响应的回调函数指针是否为空,若不为空则触发第一回调模块304进行工作。
异步调用装置还包括:第六判断模块,用于判断USB设备的设备句柄是否为空,若不为空则触发第二判断模块305进行工作。
第二发送接收模块306包括:第二判断单元、第二连接单元、第二发送接收单元;
第二判断单元,用于获取卡片状态,判断卡片状态是否为重置;
第二连接单元,用于当第二判断单元判断出卡片状态为重置时,重新与USB设备建立连接;
第二发送接收单元,当第二判断单元判断出卡片状态不为重置时,或者第二连接单元重新与USB设备建立连接后,根据USB设备的设备句柄,向USB设备发送查询指令,接收USB设备返回的第二响应数据。
异步调用装置还包括:第七判断模块,用于判断第二响应数据的长度是否不小于第一预设长度,是则触发第三判断模块307进行工作,否则触发第二判断模块305进行工作。
异步调用装置还包括:第八判断模块,用于判断向主控装置返回USB设备响应的回调函数指针是否为空,是则触发第二判断模块305进行工作,否则触发第二回调模块309进行工作。
异步调用装置还包括:枚举模块、第九判断模块、连接模块、第十判断模块和设置模块;
枚举模块,用于枚举与上位机相连的USB设备,获取USB设备的设备名称和设备名称长度;
第九判断模块,用于根据设备名称长度,判断设备名称是否正确,若不正确则向主控装置返回错误信息;
连接模块,用于当第十判断模块判断出设备名称正确时,根据设备名称和设备名称长度,打开并连接USB设备;
第十判断模块,用于判断是否成功打开并连接USB设备,若不成功则向主控装置返回错误信息;
设置模块,用于当第十判断模块判断出成功打开并连接USB设备时,获取USB设备的设备句柄,将查询标识复位,设置向主控装置返回USB设备响应的回调函数指针,触发查询模块进行工作。
枚举模块包括:第三判断单元、第四判断单元和第五判断单元;
第三判断单元,用于建立上下文环境,判断是否成功建立上下文环境,是则获取上下文句柄,若不成功则向主控装置返回错误信息;
第四判断单元,用于当第三判断单元判断出成功建立上下文环境时,枚举USB设备,判断是否存在与上位机相连的USB设备,是则获取USB设备列表,若不成功则向主控装置返回错误信息;
第五判断单元,用于当第四判断单元判断出存在与上位机相连的USB设备时,判断USB设备列表中是否存在与预设关键字匹配的设备名称,是则获取与预设关键字匹配的设备名称和设备名称长度,否则向主控装置返回错误信息。
异步调用装置还包括:关闭模块,用于关闭USB设备,清除USB设备的设备句柄。
本实施例中提供的一种基于USB设备的异步调用装置,上位机中的主控装置通过异步调用装置向USB设备发送指令,异步调用装置通过回调函数的方式将USB设备的响应返回给上位机的主控装置,主控装置在发送指令之后不必等待接收响应。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明公开的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。

Claims (22)

1.一种基于USB设备的异步调用方法,其特征在于,所述方法包括:
步骤S1:接收主控装置发送的上位机指令,向所述主控装置返回接收成功信息,根据USB设备的设备句柄,向USB设备发送所述上位机指令,接收所述USB设备返回的第一响应数据;
步骤S2:判断所述第一响应数据中的返回码是否为第七预设值,是则将查询标识置位,结束,否则执行步骤S3;
步骤S3:通过调用回调函数,将所述第一响应数据返回给所述主控装置,结束;
所述方法还包括:
步骤A01:判断所述查询标识是否置位,是则执行步骤A02,否则返回步骤A01;
步骤A02:根据所述USB设备的设备句柄,向所述USB设备发送查询指令,接收所述USB设备返回的第二响应数据;
步骤A03:对所述第二响应数据中的返回码进行判断,若所述返回码为第六预设值则将所述查询标识复位,执行步骤A04,若所述返回码为第五预设值则返回步骤A01,若是其他值则执行步骤A04;
步骤A04:通过调用所述回调函数,将所述第二响应数据返回给所述主控装置,返回步骤A01。
2.根据权利要求1所述的方法,其特征在于,所述步骤S1之前包括:判断所述查询标识是否置位,是则向所述主控装置返回错误信息,结束,否则执行步骤S1。
3.根据权利要求1所述的方法,其特征在于,所述根据USB设备的设备句柄,向USB设备发送所述上位机指令,接收所述USB设备返回的第一响应数据,包括:
步骤S1-1:获取卡片状态,判断所述卡片状态是否为重置,是则执行步骤S1-2,否则执行步骤S1-3;
步骤S1-2:重新与所述USB设备建立连接,执行步骤S1-3;
步骤S1-3:根据所述USB设备的设备句柄,向所述USB设备发送所述上位机指令,接收所述USB设备返回的第一响应数据。
4.根据权利要求1所述的方法,其特征在于,所述步骤S3之前包括:判断向所述主控装置返回USB设备响应的回调函数指针是否为空,是则结束,否则执行步骤S3。
5.根据权利要求1所述的方法,其特征在于,所述步骤A01之前包括:判断所述USB设备的设备句柄是否为空,是则结束,否则执行步骤A01。
6.根据权利要求1所述的方法,其特征在于,所述根据USB设备的设备句柄,向所述USB设备发送查询指令,接收所述USB设备返回的响应数据,包括:
步骤A02-1:获取卡片状态,判断所述卡片状态是否为重置,是则执行步骤A02-2,否则执行步骤A02-3;
步骤A02-2:重新与所述USB设备建立连接,执行步骤A02-3;
步骤A02-3:根据所述USB设备的设备句柄,向所述USB设备发送所述查询指令,接收所述USB设备返回的第二响应数据。
7.根据权利要求1所述的方法,其特征在于,所述步骤A03之前包括:判断所述第二响应数据的长度是否不小于第一预设长度,是则执行步骤A03,否则返回步骤A01。
8.根据权利要求1所述的方法,其特征在于,所述步骤A04之前包括:判断向所述主控装置返回USB设备响应的回调函数指针是否为空,是则返回步骤A01,否则执行步骤A04。
9.根据权利要求1所述的方法,其特征在于,所述步骤A01之前还包括:
步骤P1:枚举与上位机相连的USB设备,获取所述USB设备的设备名称和设备名称长度;
步骤P2:根据所述设备名称长度,判断所述设备名称是否正确,是则执行步骤P3,否则向所述主控装置返回错误信息,结束;
步骤P3:根据所述设备名称和所述设备名称长度,打开并连接所述USB设备;
步骤P4:判断是否成功打开并连接所述USB设备,是则执行步骤P5,否则向所述主控装置返回错误信息,结束;
步骤P5:获取所述USB设备的设备句柄,将所述查询标识复位,设置向所述主控装置返回USB设备响应的回调函数指针,执行步骤A01。
10.根据权利要求9所述的方法,其特征在于,所述步骤P1包括:
步骤P1-1:建立上下文环境,判断是否成功建立上下文环境,是则获取上下文句柄,执行步骤P1-2,否则向所述主控装置返回错误信息;
步骤P1-2:枚举USB设备,判断是否存在与所述上位机相连的USB设备,是则获取USB设备列表,执行步骤P1-3,否则向所述主控装置返回错误信息,结束;
步骤P1-3:判断所述USB设备列表中是否存在与预设关键字匹配的设备名称,是则获取与所述预设关键字匹配的设备名称和设备名称长度,否则向所述主控装置返回错误信息,结束。
11.根据权利要求1所述的方法,其特征在于,所述方法还包括:关闭所述USB设备,清除所述USB设备的设备句柄。
12.一种基于USB设备的异步调用装置,其特征在于,所述异步调用装置包括:第一发送接收模块、第一判断模块、置位模块和第一回调模块;
所述第一发送接收模块,用于接收主控装置发送的上位机指令,向所述主控装置返回接收成功信息,根据USB设备的设备句柄,向USB设备发送所述上位机指令,接收所述USB设备返回的第一响应数据;
所述第一判断模块,用于当所述第一发送接收模块接收到USB设备返回的第一响应数据后,判断所述第一响应数据中的返回码是否为第七预设值;
所述置位模块,用于当所述第一判断模块判断出所述返回码为第七预设值时,将查询标识置位;
所述第一回调模块,用于当所述第一判断模块判断出所述返回码不为第七预设值时,通过调用回调函数,将所述第一发送接收模块接收到的所述第一响应数据返回给所述主控装置;
所述装置还包括:第二判断模块、第二发送接收模块、第三判断模块、复位模块和第二回调模块;
所述第二判断模块,用于判断所述查询标识是否置位,若所述查询标识未置位,则所述第二判断模块继续判断查询标识是否置位;
所述第二发送接收模块,用于当所述第二判断模块判断出所述查询标识置位时,根据所述USB设备的设备句柄,向所述USB设备发送查询指令,接收所述USB设备返回的第二响应数据;
所述第三判断模块,用于对所述第二发送接收模块接收到的所述第二响应数据中的返回码进行判断,若所述返回码为第五预设值则触发所述第二判断模块进行工作;
所述复位模块,用于当所述第三判断模块判断出所述返回码为第六预设值时,将所述查询标识复;
所述第二回调模块,用于当所述第三判断模块判断出所述返回码为除第五预设值之外的其他值时,通过调用所述回调函数,将所述第二发送接收模块接收到的所述第二响应数据返回给所述主控装置,触发所述第二判断模块进行工作。
13.根据权利要求12所述的装置,其特征在于,所述装置还包括:第四判断模块,用于判断所述查询标识是否置位,是则向所述主控装置返回错误信息,否则触发所述第一发送接收模块进行工作。
14.根据权利要求12所述的装置,其特征在于,所述第一发送接收模块包括:第一判断单元、第一连接单元、第一发送接收单元;
所述第一判断单元,用于获取卡片状态,判断所述卡片状态是否为重置;
所述第一连接单元,用于当所述第一判断单元判断出卡片状态为重置时,重新与所述USB设备建立连接;
所述第一发送接收单元,当所述第一判断单元判断出卡片状态不为重置时,或者所述第一连接单元重新与所述USB设备建立连接后,根据所述USB设备的设备句柄,向所述USB设备发送所述上位机指令,接收所述USB设备返回的第一响应数据。
15.根据权利要求12所述的装置,其特征在于,所述装置还包括:第五判断模块,用于判断向所述主控装置返回USB设备响应的回调函数指针是否为空,若不为空则触发所述第一回调模块进行工作。
16.根据权利要求12所述的装置,其特征在于,所述装置还包括:第六判断模块,用于判断所述USB设备的设备句柄是否为空,若不为空则触发所述第二判断模块进行工作。
17.根据权利要求12所述的装置,其特征在于,所述第二发送接收模块包括:第二判断单元、第二连接单元、第二发送接收单元;
所述第二判断单元,用于获取卡片状态,判断所述卡片状态是否为重置;
所述第二连接单元,用于当所述第二判断单元判断出卡片状态为重置时,重新与所述USB设备建立连接;
所述第二发送接收单元,当所述第二判断单元判断出卡片状态不为重置时,或者所述第二连接单元重新与所述USB设备建立连接后,根据所述USB设备的设备句柄,向所述USB设备发送所述查询指令,接收所述USB设备返回的第二响应数据。
18.根据权利要求12所述的装置,其特征在于,所述装置还包括:第七判断模块,用于判断所述第二响应数据的长度是否不小于第一预设长度,是则触发所述第三判断模块进行工作,否则触发所述第二判断模块进行工作。
19.根据权利要求12所述的装置,其特征在于,所述装置还包括:第八判断模块,用于判断向所述主控装置返回USB设备响应的回调函数指针是否为空,是则触发所述第二判断模块进行工作,否则触发所述第二回调模块进行工作。
20.根据权利要求12所述的装置,其特征在于,所述装置还包括:枚举模块、第九判断模块、连接模块、第十判断模块和设置模块;
所述枚举模块,用于枚举与上位机相连的USB设备,获取所述USB设备的设备名称和设备名称长度;
所述第九判断模块,用于根据所述设备名称长度,判断所述设备名称是否正确,若不正确则向所述主控装置返回错误信息;
所述连接模块,用于当所述第十判断模块判断出所述设备名称正确时,根据所述设备名称和所述设备名称长度,打开并连接所述USB设备;
所述第十判断模块,用于判断是否成功打开并连接所述USB设备,若不成功则向所述主控装置返回错误信息;
所述设置模块,用于当所述第十判断模块判断出成功打开并连接所述USB设备时,获取所述USB设备的设备句柄,将所述查询标识复位,设置向所述主控装置返回USB设备响应的回调函数指针,触发所述查询模块进行工作。
21.根据权利要求20所述的装置,其特征在于,所述枚举模块包括:第三判断单元、第四判断单元和第五判断单元;
所述第三判断单元,用于建立上下文环境,判断是否成功建立上下文环境,是则获取上下文句柄,若不成功则向所述主控装置返回错误信息;
所述第四判断单元,用于当所述第三判断单元判断出成功建立上下文环境时,枚举USB设备,判断是否存在与所述上位机相连的USB设备,是则获取USB设备列表,若不成功则向所述主控装置返回错误信息;
所述第五判断单元,用于当所述第四判断单元判断出存在与所述上位机相连的USB设备时,判断所述USB设备列表中是否存在与预设关键字匹配的设备名称,是则获取与所述预设关键字匹配的设备名称和设备名称长度,否则向所述主控装置返回错误信息。
22.根据权利要求12所述的装置,其特征在于,所述装置还包括:关闭模块,用于关闭所述USB设备,清除所述USB设备的设备句柄。
CN201610037716.8A 2016-01-20 2016-01-20 一种基于usb设备的异步调用方法和装置 Active CN105718388B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610037716.8A CN105718388B (zh) 2016-01-20 2016-01-20 一种基于usb设备的异步调用方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610037716.8A CN105718388B (zh) 2016-01-20 2016-01-20 一种基于usb设备的异步调用方法和装置

Publications (2)

Publication Number Publication Date
CN105718388A true CN105718388A (zh) 2016-06-29
CN105718388B CN105718388B (zh) 2018-09-25

Family

ID=56148007

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610037716.8A Active CN105718388B (zh) 2016-01-20 2016-01-20 一种基于usb设备的异步调用方法和装置

Country Status (1)

Country Link
CN (1) CN105718388B (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108196981A (zh) * 2017-12-29 2018-06-22 成都三零嘉微电子有限公司 一种密码tf卡通信时掉电的业务保护策略
CN111190659A (zh) * 2019-12-09 2020-05-22 航天信息股份有限公司 上位机与传动机构的通信方法、装置、电子设备及介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2004040428A1 (ja) * 2002-11-01 2004-05-13 Shinya Kobayashi 着脱式デバイス、制御回路、制御回路のファームウェアプログラム、制御回路における情報処理方法及び回路設計パターン、ログイン方法
EP0853402B1 (en) * 1996-12-26 2006-10-25 Hitachi, Ltd. Audiovisual device and system and their control method
CN101277362A (zh) * 2007-03-28 2008-10-01 兄弟工业株式会社 多功能外围设备和设备控制系统
CN102929823A (zh) * 2012-09-08 2013-02-13 佳都新太科技股份有限公司 一种基于线程池的多串口通讯系统及方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0853402B1 (en) * 1996-12-26 2006-10-25 Hitachi, Ltd. Audiovisual device and system and their control method
WO2004040428A1 (ja) * 2002-11-01 2004-05-13 Shinya Kobayashi 着脱式デバイス、制御回路、制御回路のファームウェアプログラム、制御回路における情報処理方法及び回路設計パターン、ログイン方法
CN101277362A (zh) * 2007-03-28 2008-10-01 兄弟工业株式会社 多功能外围设备和设备控制系统
CN102929823A (zh) * 2012-09-08 2013-02-13 佳都新太科技股份有限公司 一种基于线程池的多串口通讯系统及方法

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108196981A (zh) * 2017-12-29 2018-06-22 成都三零嘉微电子有限公司 一种密码tf卡通信时掉电的业务保护策略
CN108196981B (zh) * 2017-12-29 2021-08-27 成都三零嘉微电子有限公司 一种密码tf卡通信时掉电的业务保护策略
CN111190659A (zh) * 2019-12-09 2020-05-22 航天信息股份有限公司 上位机与传动机构的通信方法、装置、电子设备及介质
CN111190659B (zh) * 2019-12-09 2023-05-30 航天信息股份有限公司 上位机与传动机构的通信方法、装置、电子设备及介质

Also Published As

Publication number Publication date
CN105718388B (zh) 2018-09-25

Similar Documents

Publication Publication Date Title
CN102932695B (zh) 一种遥控方法、智能终端及智能遥控系统
EP3046393B1 (en) Switching device and method for automatically connecting to nfc chip and switching security element
US8499104B2 (en) Method for switching working mode, USB device, and host device
CN101977382B (zh) 音视频集成控制电路及其接入接入点的方法
EP3726925B1 (en) Mobile terminal, power adapter, and upgrade method thereof
CN101656974A (zh) 一种sim卡兼容性自动化测试方法及装置
CN102510458A (zh) 电视的控制方法及控制系统
CN107708223B (zh) 一种信息交互方法、设备及计算机可读存储介质
CN107135476B (zh) 一种蓝牙适配器及其工作方法
CN104023257A (zh) 移动终端控制电视终端的方法及系统
CN104572188A (zh) 一种移动设备的系统升级方法及装置
KR20130097381A (ko) 휴대용 단말기에서 호스트 디바이스의 운영 체제를 확인하기 위한 장치 및 방법
CN102255947A (zh) 机顶盒的人机交互方法及机顶盒
CN105718388A (zh) 一种基于usb设备的异步调用方法和装置
CN106714084B (zh) 安卓智能设备快速连接蓝牙的方法
CN104270740A (zh) 一种共卡槽t卡和sim卡的检测方法
CN113054716B (zh) 一种充电芯片、充电装置及移动终端
CN109445806B (zh) 基于Ble的多设备升级方法、装置、系统及终端
CN103546531A (zh) 一种智能电视的参数快速设置方法及系统
CN101848202A (zh) 存储通信协议的方法,外接设备通信协议自动匹配方法和装置
CN103118242A (zh) 视频通话图像纠正方法
US20100180064A1 (en) Method and device for implementing USB endpoint multiplexing
EP2515601B1 (en) Dial-up connection method and device of mobile data terminal
CN109618329B (zh) 一种兼容多制式sim卡自动拨号装置及方法
US20080104284A1 (en) Device switching methods and computer systems

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant