Вы находитесь на странице: 1из 20

CONTROLES INTELIGENTES SAS

DEPARTAMENTO DE DESARROLLO

DOCUMENTACIN
SDK PUNTO DE PAGO MULTISERVICIOS
V 1.1.1

EDER MAURICIO ABELLO RODRGUEZ


INGENIERO DE DESARROLLO

BOGOT D.C.
SEPTIEMBRE, 2015

TABLA DE CONTENIDO

1. INTRODUCCIN
2. ESPECIFICACIONES Y USO DE LA LIBRERA
2.1. Uso de la librera
2.2. Estructura
3. CONTROL DE PERIFRICOS
3.1. ClassManejoDispositivos
3.2. ClassCerrojosPP
3.3. ClassDispensador
3.4. ClassHuellero
3.5. ClassScanner
3.6. ILectora
3.7. ClassImpresoraKiosko

1. INTRODUCCIN

Controles Inteligentes SAS ha desarrollado soluciones que buscan automatizar el proceso de


pago a travs de dispositivos que permiten el manejo automatizado de dinero. De acuerdo a las
necesidades observadas por los clientes de la compaa, se han integrado mecanismos para el
control y transporte de informacin a travs de tarjetas inteligentes, manejo de dinero por
medio de dispositivos de ingreso y entrega de efectivo e impresin de facturas de acuerdo a la
normatividad impuesta por las entidades Colombianas.
Aunque el principal campo de accin de la organizacin ha estado enfocado al control
automatizado en parqueaderos, se ha observado que los dispositivos de control de dinero
tienen un gran potencial en reas como el pago de facturas, adquisicin de servicios, cobro y
envo de giros, emisin de publicidad, y otras necesidades potenciales que cada compaa
puede aplicar a su organizacin o dirigir al servicio de sus clientes.
Gracias a su gran experiencia en equipos de control de dinero para parqueaderos y dispositivos
de recaudo diseados para Transmilenio, Controles Inteligentes ha producido una plataforma
que permite implementar las operaciones bsicas de los dispositivos de pago y manejo de
informacin, con el objetivo de que cada compaa pueda desarrollar una solucin de acuerdo
a sus necesidades, lo cual permite ahorrar tiempo de diseo, implementacin y pruebas de los
componentes fsicos e informticos que presenta un Kiosko.
En este documento se presentan los aspectos principales de la librera que realiza el control de
los perifricos que pueden estar presentes dentro del punto de pago. Se exponen los
requerimientos mnimos que los dispositivos y el sistema deben cumplir para que el sistema
opere de forma correcta, y se expone a detalle las clases y funciones que componen cada uno
de los elementos.

2.

ESPECIFICACIONES Y REQUERIMIENTOS

La librera de control se encuentra desarrollada y compilada para la plataforma .NET 4.5. En


algunos de los dispositivos el proceso de comunicacin se realiza en forma directa a travs del
control de un puerto serial, mientras que otros manejan sus propias funciones que requieren la
instalacin de controladores en el sistema. En la seccin CONTROL DE PERIFRICOS, se
especifican los requerimientos mnimos de software que requieren cada uno de los dispositivos
que se explican en este documento. Algunos de los dispositivos cuentan con un mdulo que
realiza la emulacin directa USB-Serial, mientras que otros requieren un componente adicional
de hardware que realice este procedimiento. Estos componentes suelen requerir la instalacin
de su respectivo controlador, por lo cual se recomienda revisar las especificaciones del
fabricante. La librera se encuentra compilada para sistemas operativos de 32 bits (x86).

2.1.

USO DE LA LIBRERA

Para hacer uso de la librera se deben incluir en el proyecto los archivos que se muestran en la
siguiente tabla. Es importante incluir cada uno de los archivos en la carpeta que contiene el
ejecutable as no estn directamente referenciados en el proyecto, ya que algunas funciones
del SDK realizan el llamado directo a estas libreras.
NOMBRE DEL ARCHIVO
MultiserviciosSDK.dll
ApiIS.dll
ApiIS-dotnet.dll
BnrCtlDotNet40.dll
BnrXmlRpc.dll
CCNET.dll
CRT_285.dll
devcon.exe
DPUruNet.dll
evolib.dll
iomem.dll
ITLib.dll
log4net.dll
log4net.xml
pcsc-sharp.dll
XmlParse.dll
XmlTok.dll

COMPONENTE ASOCIADO
Todos
Scanner
Scanner
Mei BNR
Mei BNR
Bill to Bill
Lectora tipo 5
Control de puertos USB
Huellero
Impresora de Tarjetas
Impresora de Tarjetas
Monedero
Registro de eventos
Registro de eventos
Lectora ACR1222L
Mei BNR
Mei BNR

Luego de haber incluido todos los archivos al proyecto, se debe hacer referencia a la librera
MultiserviciosSDK.dll.

2.2.

ESTRUCTURA

La librera est compuesta por clases que contienen funciones para el control de los perifricos
que componen el punto de pago, siguiendo el paradigma de la programacin orientada a
objetos. Algunas de las clases requieren llamado de funciones asincrnicas y control de
eventos, mientras que otras funciones realizan el control de dispositivos mediante lgica
sincrnica y cdigos de error. En la siguiente tabla se mencionan cada una de las clases que
componen la librera, su lgica asociada y los dispositivos controlados.

NOMBRE DE LA CLASE
ClassCerrojosPP
ClassDispensador
ClassHuellero
ClassImpresoraKiosko
ClassImpresoraTarjetas
ILectora

TIPO DE LGICA
Asincrnica
Asincrnica
Sincrnica
Sincrnica
Sincrnica
Sincrnica / Asincrnica

DISPOSITIVOS ASOCIADOS
Tarjeta de Cerrojos
Dispensador de Tarjetas
Huellero UareU
Impresora de Facturas
Impresora de Tarjetas
Interfaz de control de lectores de
tarjetas inteligentes:
ACR1222L
SL025M

ClassScanner1000
ClassManejoDispositivos

3.

Tipo 5
Sincrnica
Scanner de documentos: Scanner
1000
Sincrnica / Asincrnica Dispositivos de manejo de billetes
y monedas:
Bill to Bill
Mei BNR
Fujitsu
SNR CashCode
Aceptor de billetes V7E
Smart Hopper

CONTROL DE PERIFRICOS

En esta seccin se describirn cada una de las propiedades y mtodos que componen las clases
del SDK, as como la forma correcta de invocarlos dependiendo de los procedimientos que se
requieren realizar dentro del Kiosko.

3.1.

ClassManejoDispositivos

DESCRIPCIN
Librera que realiza el control de los dispositivos de pago, as como los procesos de recepcin y
retiro de efectivo, control de errores, vaciados y recargas.
DISPOSITIVOS SOPORTADOS:
Bill to Bill
Mei BNR
Fujitsu
SNR CashCode
Aceptor de billetes V7E
Smart Hopper

REQUISITOS DE SOFTWARE

MEI BNR: Instalacin del controlador del billetero. BNR Mei Support Tools.
Fujitsu: Instalacin del Service Provider. Plantilla de pesos colombiana.
Smart Hopper: Instalacin del driver ITL device.

USO DE LA CLASE
Para el control de los dispositivos de dinero se debe crear una instancia de la clase
ClassManejoDinero, y se debe suscribir una funcin al evento IDispositivoEvent. Este evento
permite conocer el estado de los dispositivos durante el proceso de recepcin de dinero, as
como el valor recibido y los errores presentes durante la transaccin.
Antes de realizar cualquier operacin sobre los dispositivos se debe realizar el llamado a la
funcin LoadLibraries, la cual carga los ensamblados necesarios para la operacin de los
perifricos soportados por el SDK.
Todos los dispositivos de recepcin del dinero estn adaptados a una interfaz que contiene
todas las funciones bsicas. Para agregar un dispositivo, se utiliza la funcin
AdicionarDispositivo la cual recibe como argumento el tipo de mquina que se desea usar. A
continuacin se muestra la manera de inicializar la clase para un Kiosko que cuenta con un BNR
y un SmartHopper dentro de su lista de perifricos.
ClassManejoDispositivos.LoadLibraries();

dispositivos = new ClassManejoDispositivos();


dispositivos.IDispositivoEvent += NewDispositivoEvent;
dispositivos.AdicionarDispositivo(TipoDispositivo.Mei);
dispositivos.AdicionarDispositivo(TipoDispositivo.SmartHopper);

Antes de realizar cualquier operacin sobre los dispositivos, se deben verificar su


funcionamiento por medio del mtodo VerificarDispositivos. Al igual que muchos mtodos que
componen esta librera, VerificarDispositivos retorna un booleano cuyo valor es verdadero si la
funcin se realiza de forma correcta, o retorna falso en caso de que haya ocurrido algn
problema durante la operacin. Para el control de errores se usa la funcin
ObtenerListaDeErrores que permite conocer el dispositivo asociado y la descripcin del error.

bool result = dispositivos.VerificarDispositivos();


if (result == false)
{
Console.WriteLine("Error al verificar los dispositivos");
LeerListaErrores();

}
static void LeerListaErrores()
{
List<ClassErrorDispositivos> listaErrores = dispositivos.ObtenerListaDeErrores();
foreach (ClassErrorDispositivos errorDispositivos in listaErrores)
{
TipoDispositivo device = errorDispositivos.tipoDispositivo;
Console.WriteLine("Dispositivo: " + device.ToString());
}
}

RECEPCIN DE EFECTIVO
La recepcin de efectivo dentro del sistema se inicia con el mtodo Recibir. Existen varios
modos de recepcin que se pueden utilizar dependiendo de la aplicacin que se quiere
desarrollar. Las sobrecargas que pueden ser llamadas por este mtodo son las siguientes:
Recibir (bool preguntarAlPrimerBillete)
Inicia el modo de recepcin de efectivo. El sistema recibir billetes y monedas hasta el
momento que se llame a la funcin Detener y se reciben los eventos OK o ERROR. Para
el caso de los billeteros, el sistema tiene la opcin de recibir automticamente todos los
billetes que se insertan, o de notificar al programa la recepcin del primer billete
permitir su ingreso o rechazo a travs de la funcin AceptarEscrow y RechazarEscrow.
Recibir (int monto, bool validarVueltas, bool validarAltaDenominacion)
A diferencia de la anterior, esta sobrecarga detiene la recepcin de dinero en el
momento en que el valor recibido supera el monto ingresado como argumento. Para el
caso de los billeteros, el sistema permite realizar validacin de vueltas durante la
recepcin de billetes, revisando si el monto ingresado puede ser devuelto por el
sistema. En caso de no cumplirse esta condicin, el sistema devolver el dinero y lo
notificar mediante el evento rechazadoPorVueltas.
El sistema permite rechazar los billetes que superen una denominacin definida por el
sistema, fijando la variable validarAltaDenominacin. El sistema notificar el rechazo
disparando el evento rechazadoPorAltaDenominacin.

A continuacin se muestra un ejemplo bsico en donde se inicia un proceso de recepcin de


efectivo por valor de 5.000 pesos, activando las banderas de validacin de vueltas y validacin
de alta denominacin. En cualquier momento de la transaccin se puede conocer el total
recibido a travs del mtodo OtenerTotalRecibido
dispositivos.Recibir(montoARecibir, true, true);
while (true)
{
nuevoEvento.WaitOne();
EventosIDispositivo evento = nuevoEventArgs.evento;

montoRecibido = dispositivos.ObtenerTotalRecibido();
Console.WriteLine("Monto Recibido: " + montoRecibido);
if (evento == EventosIDispositivo.ok)
{
Console.WriteLine("Recepcion finalizada");
break;
}
else if (evento == EventosIDispositivo.error)
{
Console.WriteLine("Error");
LeerListaErrores();
break;
}
else if (evento == EventosIDispositivo.rechazadoPorVueltas)
{
Console.WriteLine("Rechazado por vueltas");
}
else if (evento == EventosIDispositivo.rechazadoPorVueltas)
{
Console.WriteLine("Rechazado por alta denominacion");
}
}
montoRecibido = dispositivos.ObtenerTotalRecibido();
Console.WriteLine("Monto Recibido: " + montoRecibido);

PAGO DE EFECTIVO
El proceso de pago de efectivo se realiza mediante el mtodo Pagar, el cual recibe como
argumento el total de dinero a pagar y retorna el total pagado al usuario. Este mtodo permite
realizar el pago mediante todos los dispositivos de pago registrados durante la inicializacin, o
el pago individual mediante un dispositivo nico definido por el enumerado TipoDispositivo.
Para verificar si el sistema tiene cantidad suficiente de elementos para realizar la transaccin se
utiliza el mtodo VerificarPagoDisponible, el cual genera una lista de inventarios de los
dispositivos y genera la lista de pagos.
El siguiente ejemplo muestra un procedimiento bsico de pago. En caso de que el sistema
reporte error en el mtodo, se puede obtener la descripcin detallada del problema a travs
del mtodo ObtenerListaDeErrores.
int montoAPagar = 5000;
if (dispositivos.VerificarPagoDisponible(montoAPagar) == false)
{
Console.WriteLine("No se puede realizar el pago solicitado");
}
else
{
int totalPagado;
if (dispositivos.Pagar(montoAPagar, out totalPagado) == true)
{
Console.WriteLine("Pago Realizado con exito");

}
else
{
Console.WriteLine("Error en pago. Total Pagado: " + totalPagado);
LeerListaErrores();
}
}

VACIADO
Para llevar el procedimiento de vaciado en los recicladores se utiliza el mtodo Vaciar. Al igual
que el proceso de pago, este mtodo retorna el total vaciado por los dispositivos. En caso de
que se presente un error dentro del sistema, la descripcin del problema se puede obtener
mediante la funcin ObtenerListaDeErrores.
El sistema tambin soporta realizar vaciados parciales a los billeteros por medio del mtodo
Float, el cual opera de forma similar al proceso normal de vaciado, solo que en este caso, el
sistema recibe la lista de los billetes que se quieren almacenar en las caseteras. El ejemplo del
procedimiento de vaciado se muestra a continuacin:
int totalVaciado;
if (dispositivos.Vaciar(out totalVaciado) == true)
{
Console.WriteLine("Vaciado finalizado");
}
else
{
Console.WriteLine("Error. TotalVaciado: " + totalVaciado);
}

3.2.

ClassCerrojosPP

DESCRIPCIN
Librera que realiza el control de la tarjeta de cerrojos desarrollada por Controles Inteligentes.
Este componente, adems de controlar y obtener el estado de las puertas del punto de pago,
permite controlar las luces que estn conectadas a la boquilla del billetero y el dispensador.

DISPOSITIVOS SOPORTADOS:
Tarjeta de cerrojos Controles Inteligentes

REQUISITOS DE SOFTWARE

Instalacin del driver de la tarjeta que proporciona la emulacin USB-Serial. Se puede


comprobar su correcta instalacin en el administrador de dispositivos, verificando que el
elemento aparezca dentro de los puertos COM.

USO DE LA CLASE
El control de la tarjeta de cerrojos se realiza mediante la creacin de una instancia de la
ClaseCerrojosPP. Debido a que la lgica del dispositivo es asincrnica, se debe suscribir un
mtodo al evento cerrojosPPEvent, el cual nos permite obtener notificaciones de la apertura y
cierre de las puertas. Para verificar conexiones con la tarjeta de cerrojos e iniciar la
comunicacin para la recepcin de eventos, se debe llamar a la funcin Check.
static void TestCerrojosPP()
{
ClassCerrojosPP cerrojosPP = new ClassCerrojosPP();
cerrojosPP.cerrojosPPEvent += NuevoEventoCerrojos;
if (cerrojosPP.Check() == false)
{
Console.WriteLine("Error en la verificacion");
}
}
static void NuevoEventoCerrojos(object sender, ClassCerrojosPPEventArgs e)
{
Console.WriteLine("Estado Puerta 1: " + e.SW1);
Console.WriteLine("Estado Puerta 2: " + e.SW2);
}

El evento cerrojosPPEvent se activar en el momento en que se realiza la apertura o cierre de


alguna de las puertas que controla la tarjeta. Los estados de cada uno de los sensores que
controlan las puertas se pueden verificar con las propiedades SW1 y SW2. En caso de que se
desee conocer el estado de las puertas sin tener que abrir o cerrar alguna de ellas, se puede
invocar al mtodo StateDoors.

APERTURA Y CIERRE DE PUERTAS


La apertura y cierre de las puertas que controlan los cerrojos se realizan con los mtodos
OpenDoor1, OpenDoor2, CloseDoor1 y CloseDoor2. A diferencia de los mtodos expuestos a lo
largo de este documento, estos se ejecutan de forma asincrnica y no generan un valor de
retorno, por lo cual se debe verificar el estado de las puertas a travs de los eventos retornados
por cerrojosPPEvent.

Estos mtodos liberan o cierran el seguro electrnico que compone el sistema de cierre de las
puertas. En el caso de las funciones de apertura, el mecanismo se libera por un espacio de 10
segundos para evitar el sobrecalentamiento de los solenoides.
cerrojosPP.OpenDoor1();
Console.WriteLine("Puerta 1 Abierta");
cerrojosPP.OpenDoor2();
Console.WriteLine("Puerta 2 Abierta");
cerrojosPP.CloseDoor1();
Console.WriteLine("Puerta 1 Cerrada");
cerrojosPP.CloseDoor2();
Console.WriteLine("Puerta 2 Cerrada");

CONTROL DE LUCES
El encendido y apagado de las luces de la tarjeta de cerrojos se realiza por medio del mtodo
ActivarRGB. Esta funcin permite seleccionar el color a travs de un cdigo de colores RGB y
ofrece 3 modos de operacin: Encendido, apagado y titilante. Dependiendo del lugar en donde
tenemos conectada la luz en nuestra tarjeta, se fijarn los argumentos de luz y puerto
correspondientes.
Console.WriteLine("Encendiendo luz blanca - Luz 1 Puerto 1");
cerrojosPP.ActivarRGB(255, 255, 255, TipoLuzCerrojos.TITILANDO, 0x01, 0x01);

3.3. ClassDispensador
DESCRIPCIN
Permite el envo de comandos y la recepcin de eventos del dispensador de tarjetas.

DISPOSITIVOS SOPORTADOS
Dispensador de tarjetas

REQUISITOS DE SOFTWARE
La comunicacin con el dispensador se debe realizar a travs de un convertidor de
puerto USB RS232. Se debe asegurar que el controlador de este dispositivo se
encuentre instalado en el sistema, y que sea reconocido como un puerto COM en el
administrador de dispositivos.

USO DE LA CLASE
Para obtener control del dispensador se debe crear una instancia de la clase ClassDispensador.
Al igual que la clase de cerrojos, los procedimientos se realizan de forma asincrnica, por lo cual
el control de notificaciones debe ser efectuado a travs del evento IDispositivoEvent. Al igual
que las dems clases, el mtodo Check debe ser llamado previamente con el objetivo de
comprobar conexiones e iniciar la comunicacin para la recepcin de eventos.
static bool TestCheckDispensador()
{
Console.WriteLine("Inicio del programa TestDispensador");
dispensador = new ClassDispensador();
dispensador.EventDispenser += NuevoEventoDispensador;
if (dispensador.Check() == false)
{
Console.WriteLine("Error al verificar el dispensador");
return false;
}
return true;
}
static void NuevoEventoDispensador (object sender, ClassEventDispensador ev)
{
EventosDispensador nuevoEvento = ev.eventoDescription;
Console.WriteLine("Llega nuevo evento del dispensador: " + nuevoEvento.ToString());
}

ESTADOS DEL DISPENSADOR


El evento IDispositivoEvent se dispara cada vez que efectuamos una operacin sobre el
dispensador y se presenta un cambio en los sensores. Existen 3 estados bsicos que permiten
conocer cuando el dispensador se encuentra inactivo, y pueden ser utilizados para conocer el
nivel de tarjetas o si existe algn problema en la operacin:

DispensadorVacio: El dispensador se encuentra sin tarjetas


PocasTarjetas: El nivel de tarjetas del dispensador se encuentra por debajo del nivel
superior
Ready: El nivel de tarjetas del dispensador es ptimo.
TarjetaAtascada: Hay una tarjeta atascada presente en el dispensador.

Cuando el ltimo evento del dispensador corresponde a DispensadorVacio, PocasTarjetas o


Ready, podemos realizar operaciones de lectura y reciclaje de tarjetas. Por defecto el

dispensador se encuentra configurado con el modo de recepcin automtica, por lo cual la


clase notificar al sistema con el evento TarjetaEnLectura cuando un elemento haya sido
ingresado al dispositivo.

OPERACIONES BSICAS
A continuacin se exponen los mtodos con los cuales se efectan las operaciones bsicas que
pueden ser invocadas dentro de la clase ClassDispensador:

Lectura_Entregar: Entrega una tarjeta que se encuentre en posicin de lectura.


Entregar: Entrega una tarjeta que se encuentre en posicin de lectura o en la pila de
tarjetas.
Expulsa: Expulsa una tarjeta por la boquilla que se encuentre en posicin de lectura o en
la pila de tarjetas.
Reciclar: Mueve una tarjeta al compartimiento inferior del dispensador que se
encuentre en posicin de lectura.

3.4. ClassHuellero
DESCRIPCIN
Genera la interfaz de comunicacin con el huellero y realiza la captura de la huella.

DISPOSITIVOS SOPORTADOS

Huellero Digital Persona UareU 4500

REQUISITOS DEL SISTEMA

SDK proporcionado por Digital Persona para el huellero UareU 4500. Se puede
comprobar que el SDK ha sido instalado de forma correcta a travs de la deteccin del
huellero en el administrador de dispositivos y observando que la un espectro azul
encienda al momento de conectarlo.

USO DE LA CLASE

Para poder realizar la extraccin de huellas se deben utilizar los mtodos estticos contenidos
dentro de la clase ClassHuellero. A diferencia de las otras clases mencionadas anteriormente,
los mtodos que componen ClassHuellero son ejecutados de forma sincrnica, por lo cual no es
necesario realizar la suscripcin a un evento como en los casos anteriores.
Para realizar la extraccin de la imagen de la huella se utiliza el mtodo CapturarHuella, el cual
recibe como argumento un entero que corresponde al timeout del proceso. En caso de que el
dispositivo no est conectado, el usuario no haya posicionado el dedo dentro del timeout
especificado o haya ocurrido algn error con la captura, la funcin retornar falso. En caso
contrario, retornar un Bitmap que contendr la imagen de la huella.
static void ProgramTestHuellero()
{
Console.WriteLine("Iniciando captura de huella");
Console.WriteLine("Ubique su dedo en el huellero");
int timeoutMs = 10 * 1000;
Bitmap imagenHuella;
if (ClassHuellero.CapturarHuella(timeoutMs, out imagenHuella) == false)
{
Console.WriteLine("Error Capturando Huella");
}
else
{
Console.WriteLine("Imagen Capturada");
Console.WriteLine("Ancho: " + imagenHuella.Width);
Console.WriteLine("Alto: " + imagenHuella.Height);
}
}

3.5. ClassScanner
DESCRIPCIN
Realiza la interfaz de control del scanner y genera el procedimiento de captura de imagen de
documentos.

DISPOSITIVOS SOPORTADOS

Scanner de documentos Scanner1000.

REQUISITOS DEL SISTEMA

Controladores del scanner proporcionados por el fabricante. Se puede comprobar su


correcta instalacin a travs de la visualizacin del scanner dentro del administrador de
dispositivos, y comprobando que el LED ubicado en la parte frontal se encuentre en
color naranja al momento de conectarlo.

USO DE LA CLASE
Para realizar el control y la captura de imagen de documentos, se debe crear una instancia de la
clase ClassScanner. Aunque los mtodos que componen ClassScanner son ejecutados de forma
sincrnica, esta permite conocer el instante en que se inserta una tarjeta dentro del dispositivo
a travs del evento scanner1000Event.
El proceso de escaneo de documentos inicia por medio del llamado al mtodo Scan. En este
momento, el sistema espera un periodo de alrededor de 10 segundos a que el usuario inserte la
cdula por la ranura, y realiza un escaneo por ambas caras. En caso de que el periodo haya
expirado o que haya ocurrido algn problema con el proceso, el mtodo retornar falso. En
caso contrario, el sistema retornar dos objetos tipo Bitmap que contendrn las imgenes
frontal y trasera del documento.
static void ProgramTestScanner1000()
{
Console.WriteLine("Iniciando el proceso de escaneo");
Console.WriteLine("Inserte la cdula por la ranura");
ClassScanner1000 scanner1000 = new ClassScanner1000();
Bitmap imageFront;
Bitmap imageBack;
if (scanner1000.Scan(out imageFront, out imageBack) == false)
{
Console.WriteLine("Hubo un error en la recepcin");
}
else
{
Console.WriteLine("Imagenes obtenidas");
}
}
static void NuevoEventoScanner (object sender, Scanner1000EventArgs e)
{
Scanner1000EventType evento = e.eventType;
Console.WriteLine("Nuevo evento scanner: " + evento.ToString());
}

3.6. ILectora
DESCRIPCIN
Proporciona una interfaz de control para la lectura y escritura de tarjetas inteligentes.

DISPOSITIVOS SOPORTADOS

Lectora SL025M
Lectora ACR1222L
Lectora Tipo 5

REQUISITOS DEL SISTEMA

La lectora SL025M requiere la instalacin del controlador de la tarjeta integrada que


emula la comunicacin USB-Serial
La lectora ACR1222L requiere la instalacin de un controlador proporcionado por el
fabricante.
La lectora tipo 5 no requiere una configuracin especial, ya que las libreras necesarias
para su funcionamiento se encuentran adjuntas al proyecto.

USO DE LA INTERFAZ
ILectora proporciona una interfaz genrica para el control de las lectoras descritas en la seccin
anterior, y permite llamar las funciones de lectura y escritura para tarjetas Mifare. Existen 3
clases dentro de la librera que pueden ser instanciadas dependiendo del tipo de lectora que se
desee utilizar:

ClassLectoraRecaudo: Para las lectoras ACR1222L


ClassLectoraSL025M: Para las lectoras SL025M
ClassLectoraTipo5: Para las lectoras Tipo 5

Para crear una instancia de cada una de las clases anteriores, se puede crear un objeto con el
tipo de clase que se quiere implementar, o se puede utilizar la interfaz ILectora para brindar un
control transparente entre los 3 dispositivos soportados.
Antes de realizar cualquier operacin con la lectora, se debe verificar su conexin al sistema por
medio de la funcin Check, la cual retornar falso en caso de que haya ocurrido algn problema
con el procedimiento, o verdadero en caso contrario.

Console.WriteLine("Creando una instancia de la clase ACR1222L");


ILectora lectora = new ClassLectoraACR1222L();
lectoraTipo5.ILectoraEvent += NuevoEventoLectora;
if (lectora.Check() == false)
{
Console.WriteLine("Error verificando la lectora");
return false;
}
private static void NuevoEventoLectora (object sender, ILectoraEventArgs e)
{
ClassLogger.LogMsg("Llega nuevo evento lectora: " + e.evento.ToString());
switch (e.evento)
{
case ILectoraEvents.TarjetaIngresada:
window.CambiarTextoBotonBloquear("Tarjeta Ingresada");
break;
case ILectoraEvents.NoHayTarjeta:
window.CambiarTextoBotonBloquear("No hay tarjeta");
break;
}
}

Para poder leer y escribir datos sobre un sector y bloque de la tarjeta, se debe cargar la llave de
acceso a la clase por medio de la funcin CargarLlave. La llave corresponde a un array de bytes
de 6 posiciones que permite acceder a cada uno de los bloques de memoria.
Para leer los datos sobre un bloque de memoria se debe invocar al mtodo LeerDatos, el cual
recibe como argumentos el sector y el bloque de memoria que se quiere leer, y retorna un
array de bytes con los datos obtenidos. Por otro lado, el proceso de escritura de datos se realiza
por medio del mtodo EscribirDatos, el cual adems de solicitar el sector y el bloque, recibe el
array de bytes con la informacin que se quiere escribir.
lectora.CargarLlave(new byte[] { 255, 255, 255, 255, 255, 255 });
byte[] data = new byte[] { 87, 46, 182, 89, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
if (lectora.EscribirDatos(0, 1, data) == false)
{
Console.WriteLine("Error escribiendo datos");
return false;
}
byte[] dataReaded;
if (lectora.LeerDatos(0, 1, out dataReaded) == false)
{
Console.WriteLine("Error leyendo datos");
return false;
}

Console.WriteLine("Procedimiento ACR OK");


return true;

3.7.

ClassImpresoraKiosko

DESCRIPCIN
Interfaz de control para realizar las impresiones de las facturas y conocer el estado de la
impresora.

DISPOSITIVOS SOPORTADOS

IPI-K3 Thermal Printer Series

REQUISITOS DEL SISTEMA

Driver del cable de comunicacin USB-Serial que se utiliza para poder establecer
conexin con la impresora.

USO DE LA CLASE
Para poder realizar el control de la impresora es necesario crear una instancia de la clase
ClassImpresoraKiosko dentro del proyecto. A diferencia de las dems clases, la verificacin de
conexin se realiza por medio del mtodo SeekPortDispenser, el cual realiza un barrido por
todos los puertos seriales verificando si existe respuesta del dispositivo.
Para realizar la impresin de una factura en el sistema, se debe invocar al mtodo print, el cual
recibe como argumento una cadena de caracteres con el texto que se quiere mostrar. Cabe
resaltar que para realizar esta funcin, la impresora debe contar con papel dentro de su
compartimiento.
Antes de comenzar el proceso de impresin, se debe verificar que la impresora se encuentre en
un estado adecuado para realizar la operacin. Para esto se debe utilizar el mtodo status, el
cual enva un comando por el puerto serial y obtiene una respuesta. En caso de fallo, se genera
un error y se debe mostrar un mensaje de advertencia para revisar la conexin.

static bool TestCheckImpresoraKiosko()


{
ClassImpresoraKiosko impresora = new ClassImpresoraKiosko();
Console.WriteLine("Obteniendo status");
if (impresora.status() == false)
{
Console.WriteLine("Error obteniendo status de la impresora");
return false;
}
bool isOk = false;
if (impresora.Papel == true && impresora.Feed == true && impresora.Door == false)
isOk = false;
if (!isOk)
{
Console.WriteLine("Error en el estado de la impresora");
return false;
}
Console.WriteLine("Imprimiendo factura");
impresora.print("Aca va el texto de la factura");
Console.WriteLine("Factura Impresa");
return true;
}

Вам также может понравиться