documentación sdk
TRANSCRIPT
7/23/2019 Documentación SDK
http://slidepdf.com/reader/full/documentacion-sdk 1/20
CONTROLES INTELIGENTES SASDEPARTAMENTO DE DESARROLLO
DOCUMENTACIÓNSDK PUNTO DE PAGO MULTISERVICIOS
V 1.1.1
EDER MAURICIO ABELLO RODRÍGUEZ
INGENIERO DE DESARROLLO
BOGOTÁ D.C.SEPTIEMBRE, 2015
7/23/2019 Documentación SDK
http://slidepdf.com/reader/full/documentacion-sdk 2/20
TABLA DE CONTENIDO
1.
INTRODUCCIÓN
2. ESPECIFICACIONES Y USO DE LA LIBRERÍA2.1. Uso de la librería2.2. Estructura
3. CONTROL DE PERIFÉRICOS3.1. ClassManejoDispositivos3.2. ClassCerrojosPP
3.3. ClassDispensador3.4. ClassHuellero3.5. ClassScanner3.6. ILectora3.7. ClassImpresoraKiosko
7/23/2019 Documentación SDK
http://slidepdf.com/reader/full/documentacion-sdk 3/20
1. INTRODUCCIÓN
Controles Inteligentes SAS ha desarrollado soluciones que buscan automatizar el proceso de
pago a través de dispositivos que permiten el manejo automatizado de dinero. De acuerdo a las
necesidades observadas por los clientes de la compañía, se han integrado mecanismos para el
control y transporte de información a través de tarjetas inteligentes, manejo de dinero por
medio de dispositivos de ingreso y entrega de efectivo e impresión de facturas de acuerdo a la
normatividad impuesta por las entidades Colombianas.
Aunque el principal campo de acción de la organización 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, adquisición de servicios, cobro y
envío de giros, emisión de publicidad, y otras necesidades potenciales que cada compañía
puede aplicar a su organización o dirigir al servicio de sus clientes.
Gracias a su gran experiencia en equipos de control de dinero para parqueaderos y dispositivos
de recaudo diseñados para Transmilenio, Controles Inteligentes ha producido una plataforma
que permite implementar las operaciones básicas de los dispositivos de pago y manejo de
información, con el objetivo de que cada compañía pueda desarrollar una solución de acuerdo
a sus necesidades, lo cual permite ahorrar tiempo de diseño, implementación y pruebas de los
componentes físicos e informáticos que presenta un Kiosko.
En este documento se presentan los aspectos principales de la librería que realiza el control de
los periféricos que pueden estar presentes dentro del punto de pago. Se exponen los
requerimientos mínimos 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.
7/23/2019 Documentación SDK
http://slidepdf.com/reader/full/documentacion-sdk 4/20
2. ESPECIFICACIONES Y REQUERIMIENTOS
La librería de control se encuentra desarrollada y compilada para la plataforma .NET 4.5. En
algunos de los dispositivos el proceso de comunicación se realiza en forma directa a través del
control de un puerto serial, mientras que otros manejan sus propias funciones que requieren la
instalación de controladores en el sistema. En la sección CONTROL DE PERIFÉRICOS, se
especifican los requerimientos mínimos de software que requieren cada uno de los dispositivos
que se explican en este documento. Algunos de los dispositivos cuentan con un módulo que
realiza la emulación directa USB-Serial, mientras que otros requieren un componente adicional
de hardware que realice este procedimiento. Estos componentes suelen requerir la instalación
de su respectivo controlador, por lo cual se recomienda revisar las especificaciones del
fabricante. La librería se encuentra compilada para sistemas operativos de 32 bits (x86).
2.1. USO DE LA LIBRERÍA
Para hacer uso de la librería 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 estén directamente referenciados en el proyecto, ya que algunas funciones
del SDK realizan el llamado directo a estas librerías.
NOMBRE DEL ARCHIVO COMPONENTE ASOCIADO
MultiserviciosSDK.dll Todos
ApiIS.dll Scanner
ApiIS-dotnet.dll Scanner
BnrCtlDotNet40.dll Mei BNR BnrXmlRpc.dll Mei BNR
CCNET.dll Bill to Bill
CRT_285.dll Lectora tipo 5
devcon.exe Control de puertos USB
DPUruNet.dll Huellero
evolib.dll Impresora de Tarjetas
iomem.dll Impresora de Tarjetas
ITLib.dll Monedero
log4net.dll Registro de eventos
log4net.xml Registro de eventos pcsc-sharp.dll Lectora ACR1222L
XmlParse.dll Mei BNR
XmlTok.dll Mei BNR
Luego de haber incluido todos los archivos al proyecto, se debe hacer referencia a la librería
MultiserviciosSDK.dll.
7/23/2019 Documentación SDK
http://slidepdf.com/reader/full/documentacion-sdk 5/20
2.2. ESTRUCTURA
La librería está compuesta por clases que contienen funciones para el control de los periféricosque componen el punto de pago, siguiendo el paradigma de la programación orientada a
objetos. Algunas de las clases requieren llamado de funciones asincrónicas y control de
eventos, mientras que otras funciones realizan el control de dispositivos mediante lógica
sincrónica y códigos de error. En la siguiente tabla se mencionan cada una de las clases que
componen la librería, su lógica asociada y los dispositivos controlados.
NOMBRE DE LA CLASE TIPO DE LÓGICA DISPOSITIVOS ASOCIADOS
ClassCerrojosPP Asincrónica Tarjeta de Cerrojos
ClassDispensador Asincrónica Dispensador de Tarjetas
ClassHuellero Sincrónica Huellero UareU
ClassImpresoraKiosko Sincrónica Impresora de Facturas
ClassImpresoraTarjetas Sincrónica Impresora de Tarjetas
ILectora Sincrónica / Asincrónica Interfaz de control de lectores de
tarjetas inteligentes:
ACR1222L
SL025M
7/23/2019 Documentación SDK
http://slidepdf.com/reader/full/documentacion-sdk 6/20
Tipo 5
ClassScanner1000 Sincrónica Scanner de documentos: Scanner
1000
ClassManejoDispositivos Sincrónica / Asincrónica Dispositivos de manejo de billetes
y monedas:
Bill to Bill Mei BNR
Fujitsu
SNR CashCode
Aceptor de billetes V7E
Smart Hopper
3. CONTROL DE PERIFÉRICOS
En esta sección se describirán cada una de las propiedades y métodos 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
DESCRIPCIÓN
Librería que realiza el control de los dispositivos de pago, así como los procesos de recepción 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
7/23/2019 Documentación SDK
http://slidepdf.com/reader/full/documentacion-sdk 7/20
REQUISITOS DE SOFTWARE
MEI BNR: Instalación del controlador del billetero. BNR Mei Support Tools.
Fujitsu: Instalación del Service Provider. Plantilla de pesos colombiana.
Smart Hopper: Instalación 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 función al evento IDispositivoEvent. Este evento
permite conocer el estado de los dispositivos durante el proceso de recepción de dinero, así
como el valor recibido y los errores presentes durante la transacción.
Antes de realizar cualquier operación sobre los dispositivos se debe realizar el llamado a la
función LoadLibraries, la cual carga los ensamblados necesarios para la operación de losperiféricos soportados por el SDK.
Todos los dispositivos de recepción del dinero están adaptados a una interfaz que contiene
todas las funciones básicas. Para agregar un dispositivo, se utiliza la función
AdicionarDispositivo la cual recibe como argumento el tipo de máquina que se desea usar. A
continuación se muestra la manera de inicializar la clase para un Kiosko que cuenta con un BNR
y un SmartHopper dentro de su lista de periféricos.
ClassManejoDispositivos.LoadLibraries();
dispositivos = new ClassManejoDispositivos();dispositivos.IDispositivoEvent += NewDispositivoEvent;
dispositivos.AdicionarDispositivo( TipoDispositivo.Mei);dispositivos.AdicionarDispositivo( TipoDispositivo.SmartHopper);
Antes de realizar cualquier operación sobre los dispositivos, se deben verificar su
funcionamiento por medio del método VerificarDispositivos. Al igual que muchos métodos que
componen esta librería, VerificarDispositivos retorna un booleano cuyo valor es verdadero si la
función se realiza de forma correcta, o retorna falso en caso de que haya ocurrido algún
problema durante la operación. Para el control de errores se usa la funciónObtenerListaDeErrores que permite conocer el dispositivo asociado y la descripción del error.
bool result = dispositivos.VerificarDispositivos(); if (result == false){
Console.WriteLine("Error al verificar los dispositivos");LeerListaErrores();
7/23/2019 Documentación SDK
http://slidepdf.com/reader/full/documentacion-sdk 8/20
}
static void LeerListaErrores(){
List<ClassErrorDispositivos> listaErrores = dispositivos.ObtenerListaDeErrores(); foreach (ClassErrorDispositivos errorDispositivos in listaErrores){
TipoDispositivo device = errorDispositivos.tipoDispositivo;Console.WriteLine("Dispositivo: " + device.ToString());
}}
RECEPCIÓN DE EFECTIVO
La recepción de efectivo dentro del sistema se inicia con el método Recibir. Existen varios
modos de recepción que se pueden utilizar dependiendo de la aplicación que se quiere
desarrollar. Las sobrecargas que pueden ser llamadas por este método son las siguientes:
Recibir (bool preguntarAlPrimerBillete) Inicia el modo de recepción de efectivo. El sistema recibirá billetes y monedas hasta el
momento que se llame a la función Detener y se reciben los eventos OK o ERROR. Para
el caso de los billeteros, el sistema tiene la opción de recibir automáticamente todos los
billetes que se insertan, o de notificar al programa la recepción del primer billete
permitir su ingreso o rechazo a través de la función AceptarEscrow y RechazarEscrow.
Recibir (int monto, bool validarVueltas, bool validarAltaDenominacion) A diferencia de la anterior, esta sobrecarga detiene la recepción 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 validación de vueltas durante la
recepción de billetes, revisando si el monto ingresado puede ser devuelto por el
sistema. En caso de no cumplirse esta condición, el sistema devolverá el dinero y lo
notificará mediante el evento rechazadoPorVueltas.
El sistema permite rechazar los billetes que superen una denominación definida por el
sistema, fijando la variable validarAltaDenominación. El sistema notificará el rechazo
disparando el evento rechazadoPorAltaDenominación.
A continuación se muestra un ejemplo básico en donde se inicia un proceso de recepción de
efectivo por valor de 5.000 pesos, activando las banderas de validación de vueltas y validaciónde alta denominación. En cualquier momento de la transacción se puede conocer el total
recibido a través del método OtenerTotalRecibido
dispositivos.Recibir(montoARecibir, true, true); while (true){
nuevoEvento.WaitOne();EventosIDispositivo evento = nuevoEventArgs.evento;
7/23/2019 Documentación SDK
http://slidepdf.com/reader/full/documentacion-sdk 9/20
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 método Pagar, el cual recibe como
argumento el total de dinero a pagar y retorna el total pagado al usuario. Este método permite
realizar el pago mediante todos los dispositivos de pago registrados durante la inicialización, 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 transacción se
utiliza el método VerificarPagoDisponible, el cual genera una lista de inventarios de los
dispositivos y genera la lista de pagos.
El siguiente ejemplo muestra un procedimiento básico de pago. En caso de que el sistema
reporte error en el método, se puede obtener la descripción detallada del problema a través
del método 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");
7/23/2019 Documentación SDK
http://slidepdf.com/reader/full/documentacion-sdk 10/20
}else {
Console.WriteLine("Error en pago. Total Pagado: " + totalPagado);LeerListaErrores();
}}
VACIADO
Para llevar el procedimiento de vaciado en los recicladores se utiliza el método Vaciar. Al igual
que el proceso de pago, este método retorna el total vaciado por los dispositivos. En caso de
que se presente un error dentro del sistema, la descripción del problema se puede obtener
mediante la función ObtenerListaDeErrores.
El sistema también soporta realizar vaciados parciales a los billeteros por medio del método
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 continuación:
int totalVaciado; if (dispositivos.Vaciar(out totalVaciado) == true)
{Console.WriteLine("Vaciado finalizado");
} else {
Console.WriteLine("Error. TotalVaciado: " + totalVaciado);}
3.2. ClassCerrojosPP
DESCRIPCIÓN
Librería que realiza el control de la tarjeta de cerrojos desarrollada por Controles Inteligentes.
Este componente, además de controlar y obtener el estado de las puertas del punto de pago,permite controlar las luces que están conectadas a la boquilla del billetero y el dispensador.
DISPOSITIVOS SOPORTADOS:
Tarjeta de cerrojos – Controles Inteligentes
7/23/2019 Documentación SDK
http://slidepdf.com/reader/full/documentacion-sdk 11/20
REQUISITOS DE SOFTWARE
Instalación del driver de la tarjeta que proporciona la emulación USB-Serial. Se puede
comprobar su correcta instalación 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 creación de una instancia de la
ClaseCerrojosPP. Debido a que la lógica del dispositivo es asincrónica, se debe suscribir un
método 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
comunicación para la recepción de eventos, se debe llamar a la función 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 método StateDoors.
APERTURA Y CIERRE DE PUERTAS
La apertura y cierre de las puertas que controlan los cerrojos se realizan con los métodosOpenDoor1, OpenDoor2, CloseDoor1 y CloseDoor2. A diferencia de los métodos expuestos a lo
largo de este documento, estos se ejecutan de forma asincrónica y no generan un valor de
retorno, por lo cual se debe verificar el estado de las puertas a través de los eventos retornados
por cerrojosPPEvent.
7/23/2019 Documentación SDK
http://slidepdf.com/reader/full/documentacion-sdk 12/20
Estos métodos liberan o cierran el seguro electrónico 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 método
ActivarRGB. Esta función permite seleccionar el color a través de un código de colores RGB y
ofrece 3 modos de operación: Encendido, apagado y titilante. Dependiendo del lugar en donde
tenemos conectada la luz en nuestra tarjeta, se fijarán 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
DESCRIPCIÓN
Permite el envío de comandos y la recepción de eventos del dispensador de tarjetas.
DISPOSITIVOS SOPORTADOS
Dispensador de tarjetas
REQUISITOS DE SOFTWARE
La comunicación con el dispensador se debe realizar a través 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.
7/23/2019 Documentación SDK
http://slidepdf.com/reader/full/documentacion-sdk 13/20
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 asincrónica, por lo cualel control de notificaciones debe ser efectuado a través del evento IDispositivoEvent. Al igual
que las demás clases, el método Check debe ser llamado previamente con el objetivo de
comprobar conexiones e iniciar la comunicación para la recepción 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 operación sobre el
dispensador y se presenta un cambio en los sensores. Existen 3 estados básicos que permiten
conocer cuando el dispensador se encuentra inactivo, y pueden ser utilizados para conocer el
nivel de tarjetas o si existe algún problema en la operación:
DispensadorVacio: El dispensador se encuentra sin tarjetas
PocasTarjetas: El nivel de tarjetas del dispensador se encuentra por debajo del nivelsuperior
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
7/23/2019 Documentación SDK
http://slidepdf.com/reader/full/documentacion-sdk 14/20
dispensador se encuentra configurado con el modo de recepción automática, por lo cual la
clase notificará al sistema con el evento TarjetaEnLectura cuando un elemento haya sido
ingresado al dispositivo.
OPERACIONES BÁSICAS
A continuación se exponen los métodos con los cuales se efectúan las operaciones básicas que
pueden ser invocadas dentro de la clase ClassDispensador:
Lectura_Entregar: Entrega una tarjeta que se encuentre en posición de lectura.
Entregar: Entrega una tarjeta que se encuentre en posición de lectura o en la pila de
tarjetas.
Expulsa: Expulsa una tarjeta por la boquilla que se encuentre en posición de lectura o en
la pila de tarjetas.
Reciclar: Mueve una tarjeta al compartimiento inferior del dispensador que se
encuentre en posición de lectura.
3.4.
ClassHuellero
DESCRIPCIÓN
Genera la interfaz de comunicación 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 través de la detección delhuellero en el administrador de dispositivos y observando que la un espectro azul
encienda al momento de conectarlo.
USO DE LA CLASE
7/23/2019 Documentación SDK
http://slidepdf.com/reader/full/documentacion-sdk 15/20
Para poder realizar la extracción de huellas se deben utilizar los métodos estáticos contenidos
dentro de la clase ClassHuellero. A diferencia de las otras clases mencionadas anteriormente,
los métodos que componen ClassHuellero son ejecutados de forma sincrónica, por lo cual no es
necesario realizar la suscripción a un evento como en los casos anteriores.
Para realizar la extracción de la imagen de la huella se utiliza el método CapturarHuella, el cualrecibe 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 algún error con la captura, la función 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
DESCRIPCIÓN
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
7/23/2019 Documentación SDK
http://slidepdf.com/reader/full/documentacion-sdk 16/20
Controladores del scanner proporcionados por el fabricante. Se puede comprobar su
correcta instalación a través de la visualización 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 métodos que componen ClassScanner son ejecutados de forma
sincrónica, esta permite conocer el instante en que se inserta una tarjeta dentro del dispositivo
a través del evento scanner1000Event.
El proceso de escaneo de documentos inicia por medio del llamado al método Scan. En estemomento, el sistema espera un periodo de alrededor de 10 segundos a que el usuario inserte la
cédula por la ranura, y realiza un escaneo por ambas caras. En caso de que el periodo haya
expirado o que haya ocurrido algún problema con el proceso, el método retornará falso. En
caso contrario, el sistema retornará dos objetos tipo Bitmap que contendrán las imágenes
frontal y trasera del documento.
static void ProgramTestScanner1000(){
Console.WriteLine("Iniciando el proceso de escaneo");Console.WriteLine("Inserte la cédula 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 recepción");}else {
Console.WriteLine("Imagenes obtenidas");
}}
static void NuevoEventoScanner (object sender, Scanner1000EventArgs e){
Scanner1000EventType evento = e.eventType;
Console.WriteLine("Nuevo evento scanner: " + evento.ToString());}
7/23/2019 Documentación SDK
http://slidepdf.com/reader/full/documentacion-sdk 17/20
3.6. ILectora
DESCRIPCIÓN
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 instalación del controlador de la tarjeta integrada que
emula la comunicación USB-Serial
La lectora ACR1222L requiere la instalación de un controlador proporcionado por el
fabricante.
La lectora tipo 5 no requiere una configuración especial, ya que las librerías necesarias
para su funcionamiento se encuentran adjuntas al proyecto.
USO DE LA INTERFAZ
ILectora proporciona una interfaz genérica para el control de las lectoras descritas en la sección
anterior, y permite llamar las funciones de lectura y escritura para tarjetas Mifare. Existen 3
clases dentro de la librería 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 operación con la lectora, se debe verificar su conexión al sistema por
medio de la función Check, la cual retornará falso en caso de que haya ocurrido algún problema
con el procedimiento, o verdadero en caso contrario.
7/23/2019 Documentación SDK
http://slidepdf.com/reader/full/documentacion-sdk 18/20
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 función 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 método 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 método EscribirDatos, el cual además de solicitar el sector y el bloque, recibe el
array de bytes con la información 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;
}
7/23/2019 Documentación SDK
http://slidepdf.com/reader/full/documentacion-sdk 19/20
Console.WriteLine("Procedimiento ACR OK"); return true;
3.7.
ClassImpresoraKiosko
DESCRIPCIÓN
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 comunicación USB-Serial que se utiliza para poder establecer
conexión 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 demás clases, la verificación de
conexión se realiza por medio del método SeekPortDispenser, el cual realiza un barrido por
todos los puertos seriales verificando si existe respuesta del dispositivo.
Para realizar la impresión de una factura en el sistema, se debe invocar al método print, el cual
recibe como argumento una cadena de caracteres con el texto que se quiere mostrar. Cabe
resaltar que para realizar esta función, la impresora debe contar con papel dentro de su
compartimiento.
Antes de comenzar el proceso de impresión, se debe verificar que la impresora se encuentre en
un estado adecuado para realizar la operación. Para esto se debe utilizar el método status, el
cual envía 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 conexión.
7/23/2019 Documentación SDK
http://slidepdf.com/reader/full/documentacion-sdk 20/20
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;
}