documentación sdk

20
7/23/2019 Documentación SDK http://slidepdf.com/reader/full/documentacion-sdk 1/20  CONTROLES INTELIGENTES SAS DEPARTAMENTO DE DESARROLLO DOCUMENTACIÓN SDK PUNTO DE PAGO MULTISERVICIOS V 1.1.1 EDER MAURICIO ABELLO RODRÍGUEZ INGENIERO DE DESARROLLO BOGOTÁ D.C. SEPTIEMBRE, 2015 

Upload: mauricio-abello

Post on 18-Feb-2018

218 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Documentación SDK

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 

Page 2: Documentación SDK

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

Page 3: Documentación SDK

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.

Page 4: Documentación SDK

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.

Page 5: Documentación SDK

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

Page 6: Documentación SDK

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

Page 7: Documentación SDK

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();

Page 8: Documentación SDK

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;

Page 9: Documentación SDK

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");

Page 10: Documentación SDK

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

Page 11: Documentación SDK

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.

Page 12: Documentación SDK

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.

Page 13: Documentación SDK

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

Page 14: Documentación SDK

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

Page 15: Documentación SDK

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

Page 16: Documentación SDK

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());} 

Page 17: Documentación SDK

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.

Page 18: Documentación SDK

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;

}

Page 19: Documentación SDK

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.

Page 20: Documentación SDK

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;