Как отключить зуммер устройства чтения смарт-карт?
Я новичок со считывателями смарт-карт. Я купил ACR1252u и застрял в отключении зуммера и привело. Я пробовал этот код: https://the--semicolon.blogspot.it/p/this-is-simple-way-to-restart-your.html?showComment=1468833507200
public void turnOffBuzzer()
{
retCode = Card.SCardConnect(hContext, readername, Card.SCARD_SHARE_SHARED, Card.SCARD_PROTOCOL_T0 | Card.SCARD_PROTOCOL_T1, ref hCard, ref Protocol);
byte data= 0x00 ;
byte[] control = new byte[] { 0xE0, 0x00, 0x00, 0x28, 0x01 };
uint value = BitConverter.ToUInt32(control, 0);
byte receivedBytes = new byte();
int pcbBytesReturned = 0;
long status = Card.SCardControl(hCard, value, ref data, 1,ref receivedBytes , 1, ref pcbBytesReturned);
MessageBox.Show(status.ToString());
}
но статус дает мне 1 не 0
1 ответ
Вы можете попробовать использовать "Card.SCARD_SHARE_DIRECT" в функции Card.SCardConnect, если вы хотите отправить некоторые команды ScardControl, когда рядом со считывателем нет тега rfid.
Хм, я узнал, как это работает!
Для выключения зуммера:
retCode = Card.SCardConnect(hContext, readername, Card.SCARD_SHARE_SHARED,
Card.SCARD_PROTOCOL_T0 | Card.SCARD_PROTOCOL_T1, ref hCard, ref Protocol);
Byte[] setBuzzerLoud = new Byte[6];
setBuzzerLoud[0] = 0xE0;
setBuzzerLoud[1] = 0x00;
setBuzzerLoud[2] = 0x00;
setBuzzerLoud[3] = 0x21;
setBuzzerLoud[4] = 0x01;
setBuzzerLoud[5] = 0x77;
uint pcBytesReturned = 0;
Byte[] RecieveBuff = new Byte[64];
uint controlcode = 3225264;
int status = Card.SCardControl(hCard, controlcode, ref setBuzzerLoud[0], 6, ref RecieveBuff[0], RecieveBuff.Length, ref pcBytesReturned);
MessageBox.Show(status.ToString());
Для выключения светодиода:
retCode = Card.SCardConnect(hContext, readername, Card.SCARD_SHARE_SHARED,
Card.SCARD_PROTOCOL_T0 | Card.SCARD_PROTOCOL_T1, ref hCard, ref Protocol);
Byte[] setLEDOFF = new Byte[6];
setLEDOFF[0] = 0xE0;
setLEDOFF[1] = 0x00;
setLEDOFF[2] = 0x00;
setLEDOFF[3] = 0x21;
setLEDOFF[4] = 0x01;
setLEDOFF[5] = 0x79;
uint pcBytesReturned = 0;
Byte[] RecieveBuff = new Byte[64];
uint controlcode = 3225264;
int status = Card.SCardControl(hCard, controlcode, ref setLEDOFF[0], 6, ref RecieveBuff[0], RecieveBuff.Length, ref pcBytesReturned);
MessageBox.Show(status.ToString());
Для выключения РФ:
retCode = Card.SCardConnect(hContext, readername, Card.SCARD_SHARE_SHARED,
Card.SCARD_PROTOCOL_T0 | Card.SCARD_PROTOCOL_T1, ref hCard, ref Protocol);
Byte[] setRFOff = new Byte[6];
setRFOff[0] = 0xE0;
setRFOff[1] = 0x00;
setRFOff[2] = 0x00;
setRFOff[3] = 0x23;
setRFOff[4] = 0x01;
setRFOff[5] = 0x80;
uint pcBytesReturned = 0;
Byte[] RecieveBuff = new Byte[64];
uint controlcode = 3225264;
int status = Card.SCardControl(hCard, controlcode, ref setRFOff[0], 6, ref RecieveBuff[0], RecieveBuff.Length, ref pcBytesReturned);
MessageBox.Show(status.ToString());
Интересным является контрольный код, в котором я отлаживал код C++, упомянутый в ссылке, чтобы найти его для этого устройства чтения смарт-карт:
DWORD controlcode = SCARD_CTL_CODE(3500);
Код выхода был написан на странице 41/77.
SCARD_CTL_CODE (3500)
Единственная проблема - как отключить настройки без rfid на картридере. Я также нашел статью, в которой говорится об изменении ключа реестра в параметрах usb, который я тоже собираюсь попробовать. Любой, кто может помочь мне в этом, я был бы также рад.
Готово! наслаждаться