One of the credit card processing modules I have done for ACE Retail POS 3000 is to integrate with Globalpayment, using Verifone PINPAD Vx510 or Vx810. The problem I had for one customer TOSS & SERVE was that sometimes the PINPAD would hold the POS for update to minutes and building the frustration for customers and cashiers.
Further analyzing from the processing logs, I found that some transactions (several out of hundreds) would hold POS for exactly 60 seconds and it happens after the POS got the response from the pinapd. I went over from the code, checking the documents and protocols (ECR Interface for Softpay V2 and V3), discussed the matter with support from Global, nothing seems wrong. But from this precise 60 seconds delay, it hardly could be a software mistake in my code. Unfortunately I have no access to get the inside information from Vx810.
After getting the response from the pinpad, there are only two related things happens regarding the pinpad, sening an acknowledgement signal, ACK, to the pinpad and close the serial port. it is so simple that no one could make mistake here. While all the efforts seem getting nowhere, one line of my code, just for precaution, actually solved the problem: I added a 100 milliseconds delay before sending ACK signal.
I guess that, somehow and sometimes, the Vx810 pinpad may not expect the ACK right away. Since I have no access to the internal process to the Vx810, why it would hold for exactly 60 seconds (several out of hundreds transactions) remains a mystery. But I am glad finally solved the issue: after adding the 100 milliseconds delay, there never been any report of such problem.