bom dia
em relação ao conflito da porta do pinpad tive o mesmo problema ao tentar exibir qrcode de pix no pinpad
mesmo fazendo assim
tefapi.DesInicializar;
freeandnil(tefapi);
application.ProcessMessages;
sleep(5000);
TACBrAbecsPinPad.IsEnabled := true; // erro de acesso negado
o que eu percebi foi o seguinte:
na Tef, quando a dll da paygo finaliza uma transação ela envia um comando CLO para o pinpad
pra fechar a conexão do pinpad, e daí o display do pinpad "apaga"
mas alguns comandos do TefApi comunicam com o pinpad mas não enviam um CLO,
daí o pinpad fica "aceso", como se a conexão ficasse ativa
isso acontece em
* tefapi.Inicializar;
* tefapi.ExibirMensagemPinPad();
* se cancelar uma transação de pagamento no meio dela, a dll da paygo encerra enviando um CLO mas depois
o TefApi envia uma mensagem de "operacao cancelada" e como não há CLO o pinpad fica "aceso"
* em algumas operações Administrativas também acontece isso
daí quando eu chamo tefapi.DesInicializar; se o pinpad estiver "aceso" a porta fica bloqueada, só fechando
o EXE para o TACBrAbecsPinPad poder conectar
o ideal seria que dentro da função tefapi.DesInicializar, o componente pudesse enviar através da dll da paygo
um comando CLO para o pinpad.
eu contornei isso com uma Gambiarra.... aqui no meu ppc930 deu certo
tefapi.EfetuarAdministrativa(tefopTesteComunicacao, '');
// dar um tempo para operação administrativa terminar
tefapi.DesInicializar;
TACBrAbecsPinPad.IsEnabled := true;
a operação de Teste de comunicação no final envia um CLO e "apaga" o pinpad, daí desbloqueia a porta
na verdade eu coloquei tefapi.EfetuarAdministrativa(tefopTesteComunicacao, '') após todas as operação
de Tef em que ao serem concluídas o pinpad fica "aceso"
o ideal é que o pinpad sempre ficasse "apagado"(CLO) após as rotinas de Tef terminarem