elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


  Mostrar Temas
Páginas: [1]
1  Programación / Java / Diferenciar USBs en uso en: 18 Noviembre 2015, 18:03 pm
Buenas,

Estoy realizando un proyecto en Java con el que necesito saber qué USB está siendo usado, me explico:

Estoy programando en un portátil que tiene 3 entradas USB:
  • USB 3.0
  • USB 2.0
  • USB 2.0

Y por otro lado, tengo un escaner de huella dactilar que se conecta por USB.

He estado mirando la librería jUSB pero esta necesita instalar un driver para poder usarla así que la he descartado.
Luego he estado indagando sobre la librería usb4java y he visto sus ejemplos. Copiando y pegando he preparado este pequeño código:

Código
  1. package pruebausb;
  2.  
  3. import org.usb4java.Context;
  4. import org.usb4java.Device;
  5. import org.usb4java.DeviceDescriptor;
  6. import org.usb4java.DeviceList;
  7. import org.usb4java.LibUsb;
  8. import org.usb4java.LibUsbException;
  9.  
  10. public class PruebaUSB {
  11.  
  12.    public static void main(String[] args) {
  13.          // Create the libusb context
  14.        Context context = new Context();
  15.  
  16.        // Initialize the libusb context
  17.        int result = LibUsb.init(context);
  18.        if (result < 0)
  19.            throw new LibUsbException("Unable to initialize libusb", result);
  20.  
  21.        // Read the USB device list
  22.        DeviceList list = new DeviceList();
  23.        result = LibUsb.getDeviceList(context, list);
  24.        if (result < 0)
  25.            throw new LibUsbException("Unable to get device list", result);
  26.  
  27.        try {
  28.            // Iterate over all devices and list them
  29.            for (Device device: list) {
  30.  
  31.                DeviceDescriptor descriptor = new DeviceDescriptor();
  32.                result = LibUsb.getDeviceDescriptor(device, descriptor);
  33.                if (result < 0)
  34.                    throw new LibUsbException("Unable to read device descriptor", result);                
  35.                System.out.println(descriptor.dump());
  36.            }
  37.        } finally {
  38.            // Ensure the allocated device list is freed
  39.            LibUsb.freeDeviceList(list, true);
  40.        }
  41.  
  42.        // Deinitialize the libusb context
  43.        LibUsb.exit(context);
  44.    }
  45. }

Y al ejecutarlo me aparece esto:

Device Descriptor:
  bLength                 18
  bDescriptorType          1
  bcdUSB                0.00
  bDeviceClass             0 Per Interface
  bDeviceSubClass          0
  bDeviceProtocol          0
  bMaxPacketSize0          0
  idVendor            0x1022
  idProduct           0x7809
  bcdDevice             0.00
  iManufacturer            0
  iProduct                 0
  iSerial                  0
  bNumConfigurations       1

Device Descriptor:
  bLength                 18
  bDescriptorType          1
  bcdUSB                0.00
  bDeviceClass             0 Per Interface
  bDeviceSubClass          0
  bDeviceProtocol          0
  bMaxPacketSize0          0
  idVendor            0x1022
  idProduct           0x7807
  bcdDevice             0.00
  iManufacturer            0
  iProduct                 0
  iSerial                  0
  bNumConfigurations       1

Device Descriptor:
  bLength                 18
  bDescriptorType          1
  bcdUSB                0.00
  bDeviceClass             0 Per Interface
  bDeviceSubClass          0
  bDeviceProtocol          0
  bMaxPacketSize0          0
  idVendor            0x1022
  idProduct           0x7807
  bcdDevice             0.00
  iManufacturer            0
  iProduct                 0
  iSerial                  0
  bNumConfigurations       1

Device Descriptor:
  bLength                 18
  bDescriptorType          1
  bcdUSB                0.00
  bDeviceClass             0 Per Interface
  bDeviceSubClass          0
  bDeviceProtocol          0
  bMaxPacketSize0          0
  idVendor            0x1022
  idProduct           0x7808
  bcdDevice             0.00
  iManufacturer            0
  iProduct                 0
  iSerial                  0
  bNumConfigurations       1

Device Descriptor:
  bLength                 18
  bDescriptorType          1
  bcdUSB                0.00
  bDeviceClass             0 Per Interface
  bDeviceSubClass          0
  bDeviceProtocol          0
  bMaxPacketSize0          0
  idVendor            0x1022
  idProduct           0x7808
  bcdDevice             0.00
  iManufacturer            0
  iProduct                 0
  iSerial                  0
  bNumConfigurations       1

Device Descriptor:
  bLength                 18
  bDescriptorType          1
  bcdUSB                2.00
  bDeviceClass           239 Unknown
  bDeviceSubClass          2
  bDeviceProtocol          1
  bMaxPacketSize0         64
  idVendor            0x04f2
  idProduct           0xb3b1
  bcdDevice            57.16
  iManufacturer            3
  iProduct                 1
  iSerial                  2
  bNumConfigurations       1

Por esto deduzco que usb4java no soporta USB 3.0 (no se si estoy en lo cierto), pero lo que me confunde es que deberían aparecer bcdUSB con valor 2.00 (que creo que es la versión del puerto USB si estoy en lo cierto).

Necesito saber si hay alguna forma de darle a cada puerto USB un nombre estilo COM1, COM2, etc. para distinguir cuándo conecto el escaner de huella dactilar a un USB u otro.
2  Programación / Java / UrU 4500 o UrU5000 fingerprint scanner en: 7 Octubre 2015, 19:14 pm
Buenas,

Estoy realizando un proyecto en Java y necesito comprar un detector de huellas dactilares. Me decidido a comprar el UrU 4500 de DigitalPerson pero cuando he comenzado a buscar dónde comprarlo comparando precios me he encontrado con que existe un modelo llamado UrU 5000 que es mas fácil de adquirir.

¿Alguien sabe las diferencias entre ambos modelos?
3  Programación / Programación C/C++ / Problema con remove_if en: 8 Abril 2014, 17:48 pm
Buenas, estoy intentando usar la función remove_if para eliminar espacios en blanco de una cadena de caracteres de bajo nivel. He aquí la función que he diseñado:

Código
  1. #include <iostream>
  2. #include <cstring>
  3. #include <algorithm>
  4. #include <cctype>
  5. #include <string>
  6. using namespace std;
  7.  
  8. class EsBlanco {
  9. public:
  10.  bool operator() (const char& c) const { return std::isspace(c); }
  11. };
  12.  
  13. int main() {
  14.  string s = "4539 4512 0398 7356";
  15.  char *letras = new char [s.length() + 1];
  16.  strcpy (letras, s.c_str());
  17.  
  18.  char * inicio = letras;
  19.  char * fin = letras + s.length();
  20.  
  21.  fin = std::remove_if(inicio,fin,EsBlanco());
  22.  
  23.  for (char * p = inicio; p != fin; ++p)
  24.     cout  << *p;
  25.  return 0;
  26. }

El problema que ocurre es que elimina los 3 espacios en blanco que hay en el string pero el numero resultante es: 4539451203987356356

Creo que se vuelven a repetir los 3 últimos números porque se eliminaron los otros 3 huecos de los espacios. Alguien podría guiarme para encontrar una solución
4  Programación / Programación C/C++ / unary_negate en: 7 Abril 2014, 22:53 pm
Buenas estoy escribiendo la siguiente funcion


Código
  1. #include <iostream>
  2. #include <cstring>
  3. #include <functional>
  4. #include <algorithm>
  5.  
  6. using namespace std;
  7.  
  8. class EsDigito {
  9. public:
  10. bool operator() (const char& c) const { return isdigit(c); }
  11. };
  12.  
  13. int main() {
  14. unary_negate<bool> EsAlfabetico (EsDigito);
  15.  
  16. char letras2[] = " 452485A56321";
  17. inicio = letras;
  18. fin = letras + sizeof(letras)/sizeof(char);
  19.  
  20. if (find_if(inicio,fin,EsAlfabetico()))
  21.  
  22.   cout << "Alfabetico" << endl;
  23.  
  24.  return 0;
  25.  
  26. }
  27.  



Cuando compilo me sale el siguiente error:

prueba.cpp:35:39: error: faltan argumentos para la función ‘std::unary_negate<bool> EsAlfabetico(EsDigito)’
prueba.cpp:30:22: nota: se declara aquí

Alguien me puede explicar el por qué

 
 
 
5  Programación / Programación C/C++ / Pasar 'this' como parametro en: 2 Abril 2014, 21:44 pm
Buenas,

Estoy realizando una clase Tarjeta, la cual tiene el siguiente constructor:
Código
  1. #include "tarjeta.h"
  2. #include "usuario.h"
  3.  
  4. using namespace std;
  5.  
  6. Tarjeta::Tarjeta (const Numero& numero, const Usuario &user, const Fecha& caducidad) : numero_(numero), user_(&user), caducidad_(caducidad) {
  7.  Fecha f_actual;
  8.  titular_ = user.nombre() + " " + user.apellidos();
  9.  
  10.  if (caducidad_ < f_actual)
  11.    throw(Tarjeta::Caducada(caducidad_));
  12.  //(&user).es_titular_de(*this);
  13. }
  14.  

Por otro lado, aquí tenemos la cabecera tarjeta.h

Código
  1. #ifndef _TARJETA_H_
  2. #define _TARJETA_H_
  3.  
  4. #include "fecha.h"
  5. #include "cadena.h"
  6. #include "numero.h"
  7.  
  8. class Usuario;
  9.  
  10. class Tarjeta {
  11. public:
  12.  class Caducada {
  13.  public:
  14.    Caducada (const Fecha& f) : fecha_(f) {}
  15.    Fecha cuando() const { return fecha_; }
  16.  private:
  17.    Fecha fecha_;
  18.  };
  19.  
  20.  Tarjeta (const Numero&, const Usuario&, const Fecha&);
  21.  
  22.  Numero numero() const { return numero_; }
  23.  Fecha caducidad() const { return caducidad_; }
  24.  Cadena titular_facial() const { return titular_; }
  25.  const Usuario* titular() const { return user_; }
  26.  void anula_titular();
  27.  
  28.  friend std::ostream& operator << (std::ostream&, const Tarjeta&);
  29. private:
  30.  Numero numero_; //Numero de identificacion de la tarjeta
  31.  const Usuario * const user_; //Puntero constante al usuario dueño
  32.  Fecha caducidad_; //Fecha de caducidad
  33.  Cadena titular_; // Nombre y apellidos del dueño
  34.  
  35.  Tarjeta (const Tarjeta&);//Deshabilitamos copia de una tarjeta
  36. };
  37. #endif

Y por otro lado, los archivos de USUARIO:

Código
  1. #ifndef _USUARIO_H_
  2. #define _USUARIO_H_
  3.  
  4. #include "cadena.h"
  5. #include "clave.h"
  6. #include "articulo.h"
  7. #include "tarjeta.h"
  8. #include "numero.h"
  9.  
  10. #include <sstream> //ostringstream
  11. #include <map>
  12. #include <set>
  13. using std::map;
  14. using std::set;
  15.  
  16. class Tarjeta;
  17.  
  18. class Usuario {
  19. public:
  20.  //CONSTRUCTOR Y DESTRUCTOR
  21.  Usuario (const Cadena&, const Cadena&, const Cadena&, const Cadena&, const char*);
  22.  //~Usuario();
  23.  
  24.  class Id_duplicado {
  25.  public:
  26.    Id_duplicado (const Cadena& id) : id_duplicado(id) {}
  27.    const Cadena idd() { return id_duplicado; }
  28.  private:
  29.    const Cadena id_duplicado;
  30.  };
  31.  //FUNCIONES OBSERVADORAS
  32.  Cadena id() const { return identificador_; }
  33.  Cadena nombre() const { return nombre_; }
  34.  Cadena apellidos() const { return apellidos_; }
  35.  Cadena direccion() const { return direccion_; }
  36.  Cadena password() const { return password_.clave(); }
  37.  
  38.  //FUNCIONES CON TARJETAS
  39.  typedef map<Numero, Tarjeta*> Tarjetas;
  40.  void es_titular_de(Tarjeta&);
  41.  /*
  42.  
  43.   void no_es_titular_de(Tarjeta&);
  44.   const Tarjetas& tarjetas() const;
  45.   */
  46.  
  47.  //FUNCIONES CON LOS ARTICULOS
  48.  typedef map<Articulo*, unsigned> Articulos;
  49.  void compra(Articulo&, unsigned);
  50.  const Articulos& compra() const { return articulos_; }
  51.  size_t n_articulos() const { return articulos_.size(); }
  52.  
  53.  //SOBRECARGA OPERADOR
  54.  friend std::ostream& operator << (std::ostream&, const Usuario&);
  55.  
  56. private:
  57.  Cadena identificador_;
  58.  Cadena nombre_;
  59.  Cadena apellidos_;
  60.  Cadena direccion_;
  61.  Clave password_;
  62.  /*  
  63.       Tarjetas tarjetas_;*/
  64.  Articulos articulos_;
  65.  
  66.  static set<Cadena> identificadores;
  67.  bool IdValido() const throw(Usuario::Id_duplicado);
  68.  Usuario (const Usuario&); //Deshabilitamos la copia de un usuario
  69. };
  70.  
  71. void mostrar_carro(std::ostringstream&, const Usuario&);
  72. //inline const Tarjetas& tarjetas() const { return tarjetas_; }
  73.  
  74. #endif

El problema es que cada vez que se crea una tarjeta, su constructor, debe asociar al usuario dueño la existencia de dicha tarjeta con la función void es_titular_de(Tarjeta&);

Pero no sé hacerlo ya que me sale un error diciendo:

pasar ‘const Usuario’ como el argumento ‘this’ de ‘void Usuario::es_titular_de(Tarjeta&)’ descarta a los calificadores
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines