diff --git a/PN532-Aime-Reader.sln.DotSettings.user b/PN532-Aime-Reader.sln.DotSettings.user index 8f7571e..7544c33 100644 --- a/PN532-Aime-Reader.sln.DotSettings.user +++ b/PN532-Aime-Reader.sln.DotSettings.user @@ -1,6 +1,7 @@  ForceIncluded ForceIncluded + ForceIncluded ForceIncluded C:\Program Files\Microsoft Visual Studio\18\Community\MSBuild\Current\Bin\MSBuild.exe 1179648 diff --git a/src/NfcAime.Cli/Pn532/SerialFrameTransport.cs b/src/NfcAime.Cli/Pn532/SerialFrameTransport.cs index 4075f40..d7b6a09 100644 --- a/src/NfcAime.Cli/Pn532/SerialFrameTransport.cs +++ b/src/NfcAime.Cli/Pn532/SerialFrameTransport.cs @@ -27,7 +27,7 @@ internal sealed class SerialFrameTransport : IPn532FrameTransport Parity = Parity.None, DataBits = 8, StopBits = StopBits.One, - DtrEnable = false, + DtrEnable = true, RtsEnable = false }; _readChunkTimeout = chunkTimeout; @@ -39,6 +39,9 @@ internal sealed class SerialFrameTransport : IPn532FrameTransport if (!_port.IsOpen) { _port.Open(); + _port.DtrEnable = true; + _port.RtsEnable = false; + Thread.Sleep(250); _port.DiscardInBuffer(); _port.DiscardOutBuffer(); SendWakeupPattern(); @@ -72,11 +75,11 @@ internal sealed class SerialFrameTransport : IPn532FrameTransport private void SendWakeupPattern() { - // Simple HSU wakeup: Just long preamble. - // We avoid sending SAMConfig here to keep the buffer clean for the first real command. - var wakeup = new byte[] { 0x55, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + var wakeup = new byte[] { 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; _port.Write(wakeup, 0, wakeup.Length); - Thread.Sleep(50); + var sam = Pn532HsuFrame.BuildDataFrame(Pn532HsuFrame.HostToPn532Tfi, new byte[] { 0x14, 0x01 }); + _port.Write(sam, 0, sam.Length); + Thread.Sleep(100); if (_port.IsOpen) { diff --git a/src/NfcAime.Cli/Program.cs b/src/NfcAime.Cli/Program.cs index e9ed895..620b74f 100644 --- a/src/NfcAime.Cli/Program.cs +++ b/src/NfcAime.Cli/Program.cs @@ -94,9 +94,19 @@ internal static class Program private static void RunDiag(CliOptions options) { - using var serial = new SerialPort(options.Port, options.Baud) { ReadTimeout = 500, WriteTimeout = 500 }; + using var serial = new SerialPort(options.Port, options.Baud) + { + ReadTimeout = 500, + WriteTimeout = 500, + DtrEnable = true, + RtsEnable = false + }; serial.Open(); - serial.Write(new byte[] { 0x55, 0x55, 0x00, 0x00, 0x00 }, 0, 5); + serial.DtrEnable = true; + serial.RtsEnable = false; + Thread.Sleep(250); + var wakeup = new byte[] { 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + serial.Write(wakeup, 0, wakeup.Length); Thread.Sleep(50); var fw = Pn532HsuFrame.BuildDataFrame(Pn532HsuFrame.HostToPn532Tfi, new byte[] { 0x02 }); serial.Write(fw, 0, fw.Length); @@ -113,7 +123,7 @@ internal static class Program private static FlowResult RunPn532FelicaFlow(Pn532Session session) { ExpectPn532ResponseCode(session.SendCommand(new byte[] { 0x02 }), expectedResponseCode: 0x03); - ExpectPn532StatusOk(session.SendCommand(new byte[] { 0x14, 0x01, 0x14, 0x01 }), expectedResponseCode: 0x15); + ExpectPn532StatusOk(session.SendCommand(new byte[] { 0x14, 0x01 }), expectedResponseCode: 0x15); ExpectPn532StatusOk(session.SendCommand(new byte[] { 0x32, 0x01, 0x03 }), expectedResponseCode: 0x33); var target = WaitForCard(session); diff --git a/src/NfcAime.Dll/AimeReader.cs b/src/NfcAime.Dll/AimeReader.cs index 9b01c97..fe6401e 100644 --- a/src/NfcAime.Dll/AimeReader.cs +++ b/src/NfcAime.Dll/AimeReader.cs @@ -62,7 +62,7 @@ public class AimeReader private FlowResult RunPn532Flow(Pn532Session session) { ExpectPn532ResponseCode(session.SendCommand(new byte[] { 0x02 }), expectedResponseCode: 0x03); - ExpectPn532StatusOk(session.SendCommand(new byte[] { 0x14, 0x01, 0x14, 0x01 }), expectedResponseCode: 0x15); + ExpectPn532StatusOk(session.SendCommand(new byte[] { 0x14, 0x01 }), expectedResponseCode: 0x15); ExpectPn532StatusOk(session.SendCommand(new byte[] { 0x32, 0x01, 0x03 }), expectedResponseCode: 0x33); var target = WaitForCard(session); diff --git a/src/NfcAime.Dll/NfcAime.Dll.csproj b/src/NfcAime.Dll/NfcAime.Dll.csproj index 67fe42d..8f53316 100644 --- a/src/NfcAime.Dll/NfcAime.Dll.csproj +++ b/src/NfcAime.Dll/NfcAime.Dll.csproj @@ -18,7 +18,7 @@ true - AnyCPU + x64 true full false diff --git a/src/NfcAime.Dll/PN532/SerialFrameTransport.cs b/src/NfcAime.Dll/PN532/SerialFrameTransport.cs index 74ed5f5..763f93a 100644 --- a/src/NfcAime.Dll/PN532/SerialFrameTransport.cs +++ b/src/NfcAime.Dll/PN532/SerialFrameTransport.cs @@ -29,7 +29,7 @@ namespace NfcAime.Dll.PN532 { Parity = Parity.None, DataBits = 8, StopBits = StopBits.One, - DtrEnable = false, + DtrEnable = true, RtsEnable = false }; _readChunkTimeout = chunkTimeout; @@ -41,6 +41,9 @@ namespace NfcAime.Dll.PN532 { if (!_port.IsOpen) { _port.Open(); + _port.DtrEnable = true; + _port.RtsEnable = false; + Thread.Sleep(250); _port.DiscardInBuffer(); _port.DiscardOutBuffer(); SendWakeupPattern(); @@ -76,9 +79,11 @@ namespace NfcAime.Dll.PN532 { { // Simple HSU wakeup: Just long preamble. // We avoid sending SAMConfig here to keep the buffer clean for the first real command. - var wakeup = new byte[] { 0x55, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + var wakeup = new byte[] { 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; _port.Write(wakeup, 0, wakeup.Length); - Thread.Sleep(50); + var sam = Pn532HsuFrame.BuildDataFrame(Pn532HsuFrame.HostToPn532Tfi, new byte[] { 0x14, 0x01 }); + _port.Write(sam, 0, sam.Length); + Thread.Sleep(100); if (_port.IsOpen) {