1. LIBRERÍA DEL USB: MPUSBAPI.DLL



Documentos relacionados
jpicusb: Clase Java para comunicación USB con PICs usando API de Microchip

Visual Basic 1. Empleo de módulos y Procedimientos. Procedimientos definidos por el usuario

Contenidos. Archivos en C++ Archivos en C++ Introducción

7. Manejo de Archivos en C.

Información sobre la configuración de una aplicación para transmitir datos ASCII por puerto serie, con pantallas terminales Magelis.

GRUPO SEMILLERO DE BIONANOELECTRÓNICA ING. LEWIN LÓPEZ JULIO 2009

Matemática de redes Representación binaria de datos Bits y bytes

Samsung Drive Manager Preguntas frecuentes

EL MODELO DE ESTRATIFICACIÓN POR CAPAS DE TCP/IP DE INTERNET

Interfaz de Programación del Controlador MCA

Objetivos de la práctica: - Practicar uso de ficheros: abrir, cerrar y tratamiento de información contenida en el fichero.

Tema 4. Gestión de entrada/salida

8. Sentencia return y métodos

Protocolo USB CDM /11/2012 Autor: Ing. Jorge R. Osio 1

EL MODELO DE ESTRATIFICACIÓN POR CAPAS DE TCP/IP DE INTERNET

Unidad I. 1.1 Sistemas numéricos (Binario, Octal, Decimal, Hexadecimal)

Anexo B. Comunicaciones entre mc y PC

Aprendiendo a programar Microcontroladores PIC en Lenguaje C con CCS

LnxComm. Linux Communication. Fernando Pujaico Rivera

Autor: Microsoft Licencia: Cita Fuente: Ayuda de Windows

En el presente capítulo se describe la programación del instrumento virtual y cómo

Cuestionario: Programación en C y máscaras (II)

AGREGAR UN EQUIPO A UNA RED Y COMPARTIR ARCHIVOS CON WINDOWS 7

INTERRUPCIONES. La comunicación asíncrona de los sistemas periféricos con la CPU, en ambos sentidos, se puede establecer de dos maneras fundamentales:

Direcciones IP IMPLANTACIÓN DE SISTEMAS OPERATIVOS 1º ASIR. En redes IPv4.

UNIDADES DE ALMACENAMIENTO DE DATOS

Capítulo 1 Documentos HTML5

SOLUCION EXAMEN junio 2006

Actividad 4: Comunicación entre PLC s vía Ethernet

Abelardo Pardo. Iria Estévez Ayres. Damaris Fuentes Lorenzo. Pablo Basanta Val. Pedro J. Muñoz Merino. Hugo A. Parada.

GENERACIÓN DE TRANSFERENCIAS

Introducción a la programación con sockets en C

Printer Driver. Esta guía describe la instalación del controlador de la impresora en Windows Vista y Windows XP.

GVisualPDA Módulo de Almacén

PROCESO DE SIMULACIÓN EN PROTEUS

CONSULTAS CON SQL. 3. Hacer clic sobre el botón Nuevo de la ventana de la base de datos. Aparecerá el siguiente cuadro de diálogo.

Temporizadores y contadores en tiempo real: El módulo Timer0 y el prescaler del PIC

Dropbox. Parte 2. Práctica 02-ud03 15/01/2013 Pág. 1 de 6

Curso de PHP con MySQL Gratis

Redes (IS20) Ingeniería Técnica en Informática de Sistemas. CAPÍTULO 8: El nivel de transporte en Internet

INSTRUMENTACIÓN AVANZADA Departamento de Ingeniería Eléctrica y Electromecánica Facultad de Ingeniería Universidad Nacional de Mar del Plata

GESTINLIB GESTIÓN PARA LIBRERÍAS, PAPELERÍAS Y KIOSCOS DESCRIPCIÓN DEL MÓDULO DE KIOSCOS

Bloqueo/Etiquetado 1

Año: 2008 Página 1 de 18

PS.Vending Almacén Pocket PC

En cualquier caso, tampoco es demasiado importante el significado de la "B", si es que lo tiene, lo interesante realmente es el algoritmo.

Índice Objetivo... 2 Definición y utilidad de Movie Maker... 3 Cómo iniciar Movie Maker?... 3 Elementos de la ventana de Movie Maker...

COMISIÓN NACIONAL PARA EL AHORRO DE ENERGÍA

3.1. Guardar un libro de trabajo

FILE *nombre_puntero_fichero; fopen(char_nombre_archivo,char_modo_apertura ); MODOS DE APERTURA. Abre un archivo de texto para lectura.

Configuración de una conexión de acceso telefónico a redes (DUN) mediante USB

Introducción al Dev-C++

Introduccion al Lenguaje C. Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia

5. Diseño e Implementación del sistema (software)

Tutorial BMS Server Studio UDP

(decimal) (hexadecimal) 80.0A.02.1E (binario)

CAPÍTULO 2 INTERFASE VISUAL BASIC 6.0

Bases de datos y tablas

SEPARAR Y ADJUNTAR UNA BASE DE DATOS. Separar una base de datos

Instalación de ForMag en Windows Vista y en Windows 7

Unidad 1 Sistemas de numeración Binario, Decimal, Hexadecimal

Creación y administración de grupos de dominio

CONSULTAS DE RESUMEN SQL SERVER Manual de Referencia para usuarios. Salomón Ccance CCANCE WEBSITE

PROCEDIMIENTOS DE TÍTULOS. Para solicitar los títulos al finalizar determinadas enseñanzas es preciso seguir un proceso en la aplicación Plumier XXI.

LEER Y ESCRIBIR ARCHIVOS O FICHEROS EN C. FOPEN, FCLOSE, MODOS DE ACCESO READ, WRITE Y APPEND (CU00536F)

TEMA 5: EL TELNET SERVICIOS DE COMUNICACIONES

Apéndice 5 Manual de usuario de ColeXión. ColeXión 1.0. Manual de usuario

Manual para el uso del Correo Electrónico Institucional Via Webmail

Ejercicios - Persistencia en Android: ficheros y SQLite

Comunicación CPU S Vs CPU S por TCP

Práctica: Compartición y seguridad de los recursos de red

Grabas tus canciones como archivos de audio en una memoria USB?

SISTEMAS OPERATIVOS AVANZADOS

Auditoría en Windows NT INTRODUCCIÓN AL WINDOWS NT

Generación de código para funciones. Generación de código para funciones. Generación de código para funciones. Generación de código para funciones

Entorno de Ejecución del Procesador Intel Pentium

Práctica 3ProgramacionRS232: Programación básica de la RS232

Manual para la utilización de PrestaShop

Listados y Etiquetas personalizados de PrefGest WhitePaper Julio 2008

MANUAL PARA GESTIÓN DE INCIDENCIAS INFORMÁTICAS

Programación Orientada a Objetos

Instituto Tecnológico de Celaya

COMISIÓN NACIONAL PARA EL USO EFICIENTE DE LA ENERGÍA

Versión Página 2 de 29

T3-Rondas V 1.1. Help-Pc, S.L. C/ Pintor Pau Roig, 39 L Premià de Mar Barcelona Tel. (93) Fax marketing@t2app.

Traslado de Copias y Presentación de Escritos. Manual de Usuario V.3.1

Instalación de epass 3000 Token USB

Circuitos Electrónicos. Septiembre 2005/2006. Problema 1º parcial

Conexión de GPS a Open CPN.

Fundación Universitaria San. Direccionamiento IP

RESOLUCIÓN DE INCIDENCIAS PROCURADORES

Tema II Introducción a X-Lib (R-1.0)

Formas de Pago y Efectos en Facturas de Venta WhitePaper Febrero de 2007

Manual Instalación epass 2000 FT12 Token USB

A25. Informática aplicada a la gestión Curso 2005/2006 Word Tema 3. Formato de sección.

INSTALACIÓN DE LAS IMPRESORAS DEL CRAI

COMUNICACION DE PLC S MEDIANTE EL PUERTO RS- 485 Y MONITOREADO POR PANTALLA.

Modulo 1 El lenguaje Java

Transcripción:

1. LIBRERÍA DEL USB: MPUSBAPI.DLL 1.1. INRODUCCIÓN Para una mayor facilidad de desarrollo de aplicaciones basadas en el bus USB, Microchip ha creado un archivo dll en el que proporciona las funciones de acceso al puerto USB con un microcontrolador de la familia PIC18Fxx5x. Para un funcionamiento correcto, se necesita el driver mchpusb.sys. Este archivo sirve tanto para Visual Basic como para Visual C, entre otros. 1.2. FUNCIONES 1.2.1. MPUSBGETDLLVERSION(VOID) Lee el nivel de revisión del MPUSAPI.dll. Es un nivel de revisión de 32bits. Esta función no devuelve la versión del código, no realiza nada con el USB. Devuelve la versión de la dll en formato hexadecimal de 32bits. MPUSBGetDLLVersion() 1.2.2. MPUSBGETDEVICECOUNT(PVID_PID) Devuelve el número de dispositivo con VID_PID asignado. pvid_pid: Input: cadena de caracteres del número de identificación asignado. MPUSBGetDeviceCount(vid_pid)

Documento creado por Slalen para Electronics Strange World 1.2.3. MPUSBOPEN(INSTANCE, PVID_PID, PEP, DWDIR, DWRESERVED) Devuelve el acceso al pipe del Endpoint con el VID_PID asignado. Todas las pipes se abren con el atributo FILE_FLAG_OVERLAPPED. Esto permite que MPUSBRead, MPUSBWrite y MPUSBReadInt tengan un valor de timeout. Nota: el valor del time-out no tiene sentido en una pipe síncrona. instance: Input: Un número de dispositivo para abrir. Normalmente, se utiliza primero la llamada de MPUSBGetDeviceCount para saber cuantos dispositivos hay. Es importante entender que el driver lo comparten distintos dispositivos. El número devuelto por el MPUSBGetDeviceCount tiene que ser igual o menor que el número de todos los dispositivos actualmente conectados y usando el driver genérico. Ejemplo: Si hay tres dispositivos con los siguientes PID_VID conectados: Dispositivo tipo 0, VID 0x04d8, PID 0x0001 Dispositivo tipo 1, VID 0x04d8, PID 0x0002 Dispositivo tipo 2, VID 0x04d8, PID 0x0003 Si el dispositivo que nos interesa tiene VID=0x04d8 y PID=0x0002 el MPUSBGetDeviceCount devolverá un 1. Al llamar la función tiene que haber un mecanismo que intente llamar MPUSOpen() desde 0 hasta MAX_NUM_MPUSB_DEV. Se tiene que contar el número de llamadas exitosas. Cuando este número sea igual al número devuelto por MPUSBGetDeviceCount, hay que dejar de hacer las llamadas porque no puede haber más dispositivos con el mismo VID_PID. pvid_pid: Input: String que contiene el PID&VID del dispositivo objetivo. El formato es vid_xxxx&pid_yyyy. Donde xxxx es el valor del VID y el yyyy el del PID, los dos en hexadecimal. Ejemplo: Si un dispositivo tiene un VID=0x04d8 y un PID=0x000b, el string de entrada es: vid_0x04d8&pid_0x000b. pep: Input: String con el número del Endpoint que se va a abrir. El formato es \\MCHP_EPz o \MCHP_EPz dependiendo del lenguaje de programación. Donde z es el número del Endpoint en decimal. Ejemplo: \\MCHP_EP1 o \MCHP_EP1 Este argumento puede ser NULL (nulo) para crear lazos con Endpoints de funciones no específicas. Las funciones específicas son: MPUSBRead, MPUSBWrite, MPUSBReadInt. 2

Librería MPUSBApi Nota: Para utilizar MPUSBReadInt(), el formato de pep tiene que ser \\MCHP_EPz_ASYNC. Esta opción sólo está disponible para un Endpoint interrupción IN. La pipe de datos abierta con _ASYNC debe almacenar datos con el intervalo especificado en el Endpoint descriptor con un máximo de 100 recepciones. Cualquier otro dato recibido después de llenar el buffer del driver se ignora. La aplicación del usuario tiene que llamar MPUSBReadInt() a menudo sin superar el máximo de 100. dwdir: Especifica la dirección del Endpoint: MP_READ: para MPUSBRead y MPUSBReadInt MP_Write: para MPUSBWrite dwreserved: por ahora nada. MPUSBOpen(0, vid_pid, out_pipe, MP_WRITE, 0) 1.2.4. MPUSBREAD(HANDLE, PDATA, DWLEN, PLENGTH, DWMILLISECONDS) handle: Input: Identifica la pipe del Endpoint que se va a leer. La pipe unida tiene que crearse con el atributo de acceso MP_READ. pdata: Output: Puntero al buffer que recibe el dato leído de la pipe. dwlen: Input: Especifica el número de bytes que hay que leer de la pipe. plenght: Output: Puntero al número de bytes leídos. MPUSBRead pone este valor a cero antes de cualquier lectura o de chequear un error. dwmilliseconds: Input: Especifica el intervalo de time-out en milisegundos. La función vuelve si transcurre el intervalo aunque no se complete la operación. Si dwmilliseconds=0, la función comprueba los datos de la pipe y vuelve inmediatamente. Si dwmilliseconds es infinito, el intervalo de time-out nunca termina. MPUSBRead(myInPipe, VarPtr(s(0)), DatosDeseados, Datos, 1000) 3

Documento creado por Slalen para Electronics Strange World 1.2.5. MPUSBWRITE(HANDLE, PDATA, DWLEN, PLENGTH, DWMILLISECONDS) handle: Input: Identifica la pipe del Endpoint que se va a escribir. La pipe unida tiene que crearse con el atributo de acceso MP_WRITE. pdata: Output: Puntero al buffer que contiene los datos que se van a escribir en la pipe. dwlen: Input: Especifica el número de bytes que se van a escribir en la pipe. plenght: Output: Puntero al número de bytes que se escriben al llamar esta función. MPUSBWrite pone este valor a cero antes de cualquier lectura o de chequear un error. dwmilliseconds: Input: Especifica el intervalo de time-out en milisegundos. La función vuelve si transcurre el intervalo aunque no se complete la operación. Si dwmilliseconds=0, la función comprueba los datos de la pipe y vuelve inmediatamente. Si dwmilliseconds es infinito, el intervalo de time-out nunca termina. MPUSBWrite(myOutPipe, VarPtr(SendData(0)), bytes, VarPtr(bytes), 1000) 1.2.6. MPUSBREADINT(HANDLE, PDATA, DWLEN, PLENGTH, DWMILLISECONDS) handle: Input: Identifica la pipe del Endpoint que se va a leer. La pipe unida tiene que crearse con el atributo de acceso MP_READ. pdata: Output: Puntero al buffer que recibe el dato leído de la pipe. dwlen: Input: Especifica el número de bytes que hay que leer de la pipe. plenght: Output: Puntero al número de bytes leídos. MPUSBRead pone este valor a cero antes de cualquier lectura o de chequear un error. dwmilliseconds: Input: Especifica el intervalo de time-out en milisegundos. La función vuelve si transcurre el intervalo aunque no se complete la operación. Si dwmilliseconds=0, la función comprueba los datos de la pipe y vuelve inmediatamente. Si dwmilliseconds es infinito, el intervalo de time-out nunca termina. MPUSBReadInt(myOutPipe, VarPtr(SendData(0)), bytes, VarPtr(bytes), 1000) 1.2.7. MPUSBCLOSE(HANDLE) Cierra una determinada unión. handle: Input: Identifica la pipe del Endpoint que se va a cerrar. MPUSBClose (myoutpipe) 4

1.3. TIPOS DE TRANSFERENCIAS Librería MPUSBApi En este apartado se recomienda que función utilizar dependiendo del tipo de transferencia. Tipo Función Aplicable time-out? Interrupt IN MPUSRead, MPUSReadInt si Interrupt OUT MPUSBWrite si Bulk IN MPUSBRead si Bulk OUT MPUSWrite si Isochronous IN MPUSBRead no Isochronous OUT MPUSBWrite no Interrupt: tipo interrupción Isochronous: tipo síncrono Nota: Input y output se refiere a los parámetros designados en las llamadas a estas funciones, que son lo opuesto a los sentidos comunes desde la perspectiva de una aplicación haciendo llamadas. 1.4. DECLARACIÓN DE CONSTANTES Y VARIABLES Aquí aparecen las constantes y variables que el fabricante recomienda usar. Todas son optativas, dejando la elección al programador. También, se comentan las pequeñas variaciones que existen al declarar estas variables en los distintos lenguajes. MPUS_FAIL=0 MPUSB_SUCCESS=1 MP_WRITE=0 MP_READ=1 MAX_NUM_MPUSB_DEV=127 vid_pid= vid_04d8&pid_0011 En Visual Basic: out_pipe= \MCHP_EPx in_pipe= \MCHP_EPy En C y Delphi: out_pipe= \\MCHP_EPx in_pipe= \\MCHP_EPy Siendo x e y números del Endpoint por los que se van a realizar las transmisiones. 5

Documento creado por Slalen para Electronics Strange World 1.5. DECLARACIÓN DE LAS FUNCIONES En el último punto de la librería, se comenta como incluir las funiones en varios lenguajes de programación. 1.5.1. C Se declara con #include "_mpusbapi.h". Los datos devueltos son: DWORD _MPUSBGetDLLVersion(void) DWORD _MPUSBGetDeviceCount(PCHAR pvid_pid) HANDLE _MPUSBOpen(DWORD instance, PCHAR pvid_pid, PCHAR pep, DWORD dwdir, DWORD dwreserved); BOOLEAN _MPUSBClose(HANDLE handle); DWORD _MPUSBRead(HANDLE handle, PVOID pdata, DWORD dwlen, PDWORD plength, DWORD dwmilliseconds); DWORD _MPUSBWrite(HANDLE handle, PVOID pdata, DWORD dwlen, PDWORD plength, DWORD dwmilliseconds); DWORD _MPUSBReadInt(HANDLE handle, PVOID pdata, DWORD dwlen, PDWORD plength, DWORD dwmilliseconds); 1.5.2. VB Public Declare Function MPUSBGetDLLVersion Lib "mpusbapi.dll" () As Long Public Declare Function MPUSBGetDeviceCount Lib "mpusbapi.dll" (ByVal pvid_pid As String) As Long Public Declare Function MPUSBOpen Lib "mpusbapi.dll" (ByVal instance As Long, ByVal pvid_pid As String, ByVal pep As String, ByVal dwdir As Long, ByVal dwreserved As Long) As Long Public Declare Function MPUSBClose Lib "mpusbapi.dll" (ByVal handle As Long) As Long Public Declare Function MPUSBRead Lib "mpusbapi.dll" (ByVal handle As Long, ByVal pdata As Long, ByVal dwlen As Long, ByRef plength As Long, ByVal dwmilliseconds As Long) As Long Public Declare Function MPUSBWrite Lib "mpusbapi.dll" (ByVal handle As Long, ByVal pdata As Long, ByVal dwlen As Long, ByRef plength As Long, ByVal dwmilliseconds As Long) As Long Public Declare Function MPUSBReadInt Lib "mpusbapi.dll" (ByVal handle As Long, ByVal pdata As Long, ByVal dwlen As Long, ByRef plength As Long, ByVal dwmilliseconds As Long) As Long 6