ACR122U-A9のビープ音を消す方法
このネタ、あまり需要はないと思いますが、 情報が少ないのでいつか誰かのお役に立てば・・・と思います。
ACR122U-A9は、NFC非接触ICカードリーダーライターです。 簡単に言うと、ICカードをかざすとカード内のデータを読み書きできる製品です。 国内製品ではsonyのPaSoRiが有名で、電子決済や、交通機関などのアプリと 連携して利用されています。
で、本題です。 ACR122U-A9を入手し、カードをかざしたところ「ビッ」というビープ音がしました。 今回作成しているアプリケーションでは、アプリからも音を出していたので、 カードをかざした時にアプリから出す優しげな音と、ACR122Uからでる「ビッ」っという 力強い音がけんかしてしまうという状態になってしまいました・・・。
聞くところによると、以前のバージョンではそんな音は出なかったそうです。 最新のバージョンではデフォルトで音が出るように設定されているとのことで・・。 マニュアルは英語・・・、製品付属のサンプルコードにも、肝心のビープ音制御部分はなし・・・、 その後、あの手この手で調査した結果、ビープ音を消すことに成功しました。
それが以下のサンプルコードです。 VB6のコードですが他言語でも同様の方法で可能です。 SCardConnect、SCardControlは、APIとして提供されているファンクションになります。
Public Function muteACR122() As Long 'reset rtnCode = CardDisConnectACR122() 'connect rtnCode = SCardConnect(hContext, frmMain.cbReader.Text, _ SCARD_SHARE_DIRECT, 0, hCard, Protocol) 'beep control Dim rtnByte As Long Call ClearBuffers SendBuff(0) = &HFF 'Class SendBuff(1) = &H0 'INS SendBuff(2) = &H52 'P1 SendBuff(3) = &H0 'P2 SendBuff(4) = &H0 'Lc SendLen = 5 RecvLen = UBound(RecvBuff) rtnCode = SCardControl(hCard, IOCTL_CCID_ESCAPE_SCARD_CTL_CODE, _ SendBuff(0), SendLen, RecvBuff(0), RecvLen, rtnByte) muteACR122 = rtnCode End Function