Completed the general data structures.

This commit is contained in:
Klaus Reimer 2011-01-22 18:42:55 +01:00
parent 1b2b7daf9e
commit 81a1b5b018
7 changed files with 653 additions and 0 deletions

View File

@ -0,0 +1,221 @@
/*
* Copyright (C) 2011 Klaus Reimer (k@ailis.de)
* See COPYING file for copying conditions
*/
/**
* @name USB_Endpoint_Descriptor
*
* Native methods for the USB_Endpoint_Descriptor class.
*
* @author Klaus Reimer <k@ailis.de>
*/
#include <jni.h>
#include <usb.h>
#include "usb4java.h"
/**
* Creates and returns a new USB endpoint descriptor wrapper object.
*
* @param env
* The JNI environment.
* @param descriptor
* The USB endpoint descriptor.
* @return The USB endpoint descriptor wrapper object.
*/
jobject wrap_usb_endpoint_descriptor(JNIEnv *env,
struct usb_endpoint_descriptor *descriptor)
{
if (!descriptor) return NULL;
jclass cls = (*env)->FindClass(env, PACKAGE_DIR"/USB_Endpoint_Descriptor");
if (cls == NULL) return NULL;
jmethodID constructor = (*env)->GetMethodID(env, cls, "<init>", "(J)V");
if (constructor == NULL) return NULL;
return (*env)->NewObject(env, cls, constructor, (long) descriptor);
}
/**
* Creates and returns an array with USB endpoint descriptor wrapper objects.
*
* @param env
* The JNI environment
* @param num_descriptors
* The number of descriptors
* @param descriptors
* The descriptors to wrap.
* @return The array with the USB endpoint descriptor wrappers.
*/
jobjectArray wrap_usb_endpoint_descriptors(JNIEnv *env, uint8_t num_descriptors,
struct usb_endpoint_descriptor *descriptors)
{
int i;
jobjectArray array = (jobjectArray) (*env)->NewObjectArray(env,
num_descriptors, (*env)->FindClass(env,
PACKAGE_DIR"/USB_Endpoint_Descriptor"), NULL);
for (i = 0; i < num_descriptors; i++)
(*env)->SetObjectArrayElement(env, array, i,
wrap_usb_endpoint_descriptor(env, &descriptors[i]));
return array;
}
/**
* Returns the wrapped USB endpoint descriptor object from the specified
* wrapper object.
*
* @param env
* The JNI environment.
* @param obj
* The USB endpoint descriptor wrapper object.
* @return The USB endpoint descriptor object.
*/
struct usb_endpoint_descriptor *unwrap_usb_endpoint_descriptor(JNIEnv *env,
jobject obj)
{
jclass cls = (*env)->GetObjectClass(env, obj);
jfieldID field = (*env)->GetFieldID(env, cls, "pointer", "J");
return (struct usb_endpoint_descriptor *) ((*env)->GetLongField(env,
obj, field));
}
/**
* short bLength()
*/
JNIEXPORT jshort JNICALL METHOD_NAME(USB_1Endpoint_1Descriptor, bLength)
(
JNIEnv *env, jobject this
)
{
return (jshort) unwrap_usb_endpoint_descriptor(env, this)->bLength;
}
/**
* short bDescriptorType()
*/
JNIEXPORT jshort JNICALL METHOD_NAME(USB_1Endpoint_1Descriptor, bDescriptorType)
(
JNIEnv *env, jobject this
)
{
return (jshort) unwrap_usb_endpoint_descriptor(env, this)->bDescriptorType;
}
/**
* short bEndpointAddress()
*/
JNIEXPORT jshort JNICALL METHOD_NAME(USB_1Endpoint_1Descriptor, bEndpointAddress)
(
JNIEnv *env, jobject this
)
{
return (jshort) unwrap_usb_endpoint_descriptor(env, this)->bEndpointAddress;
}
/**
* short bmAttributes()
*/
JNIEXPORT jshort JNICALL METHOD_NAME(USB_1Endpoint_1Descriptor, bmAttributes)
(
JNIEnv *env, jobject this
)
{
return (jshort) unwrap_usb_endpoint_descriptor(env, this)->bmAttributes;
}
/**
* int wMaxPacketSize()
*/
JNIEXPORT jint JNICALL METHOD_NAME(USB_1Endpoint_1Descriptor, wMaxPacketSize)
(
JNIEnv *env, jobject this
)
{
return (jshort) unwrap_usb_endpoint_descriptor(env, this)->wMaxPacketSize;
}
/**
* short bInterval()
*/
JNIEXPORT jshort JNICALL METHOD_NAME(USB_1Endpoint_1Descriptor, bInterval)
(
JNIEnv *env, jobject this
)
{
return (jshort) unwrap_usb_endpoint_descriptor(env, this)->bInterval;
}
/**
* short bRefresh()
*/
JNIEXPORT jshort JNICALL METHOD_NAME(USB_1Endpoint_1Descriptor, bRefresh)
(
JNIEnv *env, jobject this
)
{
return (jshort) unwrap_usb_endpoint_descriptor(env, this)->bRefresh;
}
/**
* short bSynchAddress()
*/
JNIEXPORT jshort JNICALL METHOD_NAME(USB_1Endpoint_1Descriptor, bSynchAddress)
(
JNIEnv *env, jobject this
)
{
return (jshort) unwrap_usb_endpoint_descriptor(env, this)->bSynchAddress;
}
/**
* int extralen()
*/
JNIEXPORT jint JNICALL METHOD_NAME(USB_1Endpoint_1Descriptor, extralen)
(
JNIEnv *env, jobject this
)
{
return unwrap_usb_endpoint_descriptor(env, this)->extralen;
}
/**
* byte[] extra()
*/
JNIEXPORT jbyteArray JNICALL METHOD_NAME(USB_1Endpoint_1Descriptor, extra)
(
JNIEnv *env, jobject this
)
{
struct usb_endpoint_descriptor *descriptor =
unwrap_usb_endpoint_descriptor(env, this);
jbyteArray array = (*env)->NewByteArray(env, descriptor->extralen);
(*env)->SetByteArrayRegion(env, array, 0, descriptor->extralen,
(const jbyte *) descriptor->extra);
return array;
}

View File

@ -0,0 +1,19 @@
/*
* Copyright (C) 2011 Klaus Reimer (k@ailis.de)
* See COPYING file for copying conditions
*/
#ifndef USB_ENDPOINT_DESCRIPTOR_H
#define USB_ENDPOINT_DESCRIPTOR_H
#include <jni.h>
#include <usb.h>
extern jobject wrap_usb_endpoint_descriptor(JNIEnv *,
struct usb_endpoint_descriptor *);
extern jobjectArray wrap_usb_endpoint_descriptors(JNIEnv *, uint8_t,
struct usb_endpoint_descriptor *);
extern struct usb_endpoint_descriptor *unwrap_usb_endpoint_descriptor(
JNIEnv *, jobject);
#endif

View File

@ -0,0 +1,115 @@
/*
* Copyright (C) 2011 Klaus Reimer (k@ailis.de)
* See COPYING file for copying conditions
*/
/**
* @name USB_Interface
*
* Native methods for the USB_Interface class.
*
* @author Klaus Reimer <k@ailis.de>
*/
#include <jni.h>
#include <usb.h>
#include "usb4java.h"
#include "USB_Interface_Descriptor.h"
/**
* Creates and returns a new USB interface wrapper object.
*
* @param env
* The JNI environment.
* @param device
* The USB interface.
* @return The USB interface wrapper object.
*/
static jobject wrap_usb_interface(JNIEnv *env, struct usb_interface *interface)
{
if (!interface) return NULL;
jclass cls = (*env)->FindClass(env, PACKAGE_DIR"/USB_Interface");
if (cls == NULL) return NULL;
jmethodID constructor = (*env)->GetMethodID(env, cls, "<init>", "(J)V");
if (constructor == NULL) return NULL;
return (*env)->NewObject(env, cls, constructor, (long) interface);
}
/**
* Creates and returns an array with USB interface wrapper objects.
*
* @param env
* The JNI environment
* @param num_interfaces
* The number of interfaces
* @param interfaces
* The interfaces to wrap.
* @return The array with the USB interface wrappers.
*/
jobjectArray wrap_usb_interfaces(JNIEnv *env, uint8_t num_interfaces,
struct usb_interface *interfaces)
{
int i;
jobjectArray array = (jobjectArray) (*env)->NewObjectArray(env,
num_interfaces, (*env)->FindClass(env, PACKAGE_DIR"/USB_Interface"),
NULL);
for (i = 0; i < num_interfaces; i++)
(*env)->SetObjectArrayElement(env, array, i,
wrap_usb_interface(env, &interfaces[i]));
return array;
}
/**
* Returns the wrapped USB interface object from the specified wrapper object.
*
* @param env
* The JNI environment.
* @param obj
* The USB interface wrapper object.
* @return The USB interface object.
*/
struct usb_interface *unwrap_usb_interface(JNIEnv *env, jobject obj)
{
jclass cls = (*env)->GetObjectClass(env, obj);
jfieldID field = (*env)->GetFieldID(env, cls, "pointer", "J");
return (struct usb_interface *) ((*env)->GetLongField(env, obj, field));
}
/**
* Returns the number of available interface descriptors.
*
* @return The number of available interface descriptors.
*/
JNIEXPORT jshort JNICALL METHOD_NAME(USB_1Interface, num_1altsetting)
(
JNIEnv *env, jobject this
)
{
return (jshort) unwrap_usb_interface(env, this)->num_altsetting;
}
/**
* Returns the array with all available interface descriptors.
*
* @return The array with the interface descriptors.
*/
JNIEXPORT jobjectArray JNICALL METHOD_NAME(USB_1Interface, altsetting)
(
JNIEnv *env, jobject this
)
{
struct usb_interface *interface = unwrap_usb_interface(env, this);
return wrap_usb_interface_descriptors(env, interface->num_altsetting,
interface->altsetting);
}

View File

@ -0,0 +1,16 @@
/*
* Copyright (C) 2011 Klaus Reimer (k@ailis.de)
* See COPYING file for copying conditions
*/
#ifndef USB_INTERFACE_H
#define USB_INTERFACE_H
#include <jni.h>
#include <usb.h>
extern jobject wrap_usb_interface(JNIEnv *env, struct usb_interface *interface);
extern jobjectArray wrap_usb_interfaces(JNIEnv *env, uint8_t num_children,
struct usb_interface *interfaces);
#endif

View File

@ -0,0 +1,251 @@
/*
* Copyright (C) 2011 Klaus Reimer (k@ailis.de)
* See COPYING file for copying conditions
*/
/**
* @name USB_Interface_Descriptor
*
* Native methods for the USB_Interface_Descriptor class.
*
* @author Klaus Reimer <k@ailis.de>
*/
#include <jni.h>
#include <usb.h>
#include "usb4java.h"
#include "USB_Endpoint_Descriptor.h"
/**
* Creates and returns a new USB interface descriptor wrapper object.
*
* @param env
* The JNI environment.
* @param descriptor
* The USB interface descriptor.
* @return The USB interface descriptor wrapper object.
*/
jobject wrap_usb_interface_descriptor(JNIEnv *env,
struct usb_interface_descriptor *descriptor)
{
if (!descriptor) return NULL;
jclass cls = (*env)->FindClass(env, PACKAGE_DIR"/USB_Interface_Descriptor");
if (cls == NULL) return NULL;
jmethodID constructor = (*env)->GetMethodID(env, cls, "<init>", "(J)V");
if (constructor == NULL) return NULL;
return (*env)->NewObject(env, cls, constructor, (long) descriptor);
}
/**
* Creates and returns an array with USB interface descriptor wrapper objects.
*
* @param env
* The JNI environment
* @param num_descriptors
* The number of descriptors
* @param descriptors
* The descriptors to wrap.
* @return The array with the USB interface descriptor wrappers.
*/
jobjectArray wrap_usb_interface_descriptors(JNIEnv *env, uint8_t num_descriptors,
struct usb_interface_descriptor *descriptors)
{
int i;
jobjectArray array = (jobjectArray) (*env)->NewObjectArray(env,
num_descriptors, (*env)->FindClass(env,
PACKAGE_DIR"/USB_Interface_Descriptor"), NULL);
for (i = 0; i < num_descriptors; i++)
(*env)->SetObjectArrayElement(env, array, i,
wrap_usb_interface_descriptor(env, &descriptors[i]));
return array;
}
/**
* Returns the wrapped USB interface descriptor object from the specified
* wrapper object.
*
* @param env
* The JNI environment.
* @param obj
* The USB interface descriptor wrapper object.
* @return The USB interface descriptor object.
*/
struct usb_interface_descriptor *unwrap_usb_interface_descriptor(JNIEnv *env,
jobject obj)
{
jclass cls = (*env)->GetObjectClass(env, obj);
jfieldID field = (*env)->GetFieldID(env, cls, "pointer", "J");
return (struct usb_interface_descriptor *) ((*env)->GetLongField(env,
obj, field));
}
/**
* short bLength()
*/
JNIEXPORT jshort JNICALL METHOD_NAME(USB_1Interface_1Descriptor, bLength)
(
JNIEnv *env, jobject this
)
{
return (jshort) unwrap_usb_interface_descriptor(env, this)->bLength;
}
/**
* short bDescriptorType()
*/
JNIEXPORT jshort JNICALL METHOD_NAME(USB_1Interface_1Descriptor, bDescriptorType)
(
JNIEnv *env, jobject this
)
{
return (jshort) unwrap_usb_interface_descriptor(env, this)->bDescriptorType;
}
/**
* short bInterfaceNumber()
*/
JNIEXPORT jshort JNICALL METHOD_NAME(USB_1Interface_1Descriptor, bInterfaceNumber)
(
JNIEnv *env, jobject this
)
{
return (jshort) unwrap_usb_interface_descriptor(env, this)->bInterfaceNumber;
}
/**
* short bAlternateSetting()
*/
JNIEXPORT jshort JNICALL METHOD_NAME(USB_1Interface_1Descriptor, bAlternateSetting)
(
JNIEnv *env, jobject this
)
{
return (jshort) unwrap_usb_interface_descriptor(env, this)->bAlternateSetting;
}
/**
* short bNumEndpoints()
*/
JNIEXPORT jshort JNICALL METHOD_NAME(USB_1Interface_1Descriptor, bNumEndpoints)
(
JNIEnv *env, jobject this
)
{
return (jshort) unwrap_usb_interface_descriptor(env, this)->bNumEndpoints;
}
/**
* short bInterfaceClass()
*/
JNIEXPORT jshort JNICALL METHOD_NAME(USB_1Interface_1Descriptor, bInterfaceClass)
(
JNIEnv *env, jobject this
)
{
return (jshort) unwrap_usb_interface_descriptor(env, this)->bInterfaceClass;
}
/**
* short bInterfaceSubClass()
*/
JNIEXPORT jshort JNICALL METHOD_NAME(USB_1Interface_1Descriptor, bInterfaceSubClass)
(
JNIEnv *env, jobject this
)
{
return (jshort) unwrap_usb_interface_descriptor(env, this)->bInterfaceSubClass;
}
/**
* short bInterfaceProtocol()
*/
JNIEXPORT jshort JNICALL METHOD_NAME(USB_1Interface_1Descriptor, bInterfaceProtocol)
(
JNIEnv *env, jobject this
)
{
return (jshort) unwrap_usb_interface_descriptor(env, this)->bInterfaceProtocol;
}
/**
* short iInterface()
*/
JNIEXPORT jshort JNICALL METHOD_NAME(USB_1Interface_1Descriptor, iInterface)
(
JNIEnv *env, jobject this
)
{
return (jshort) unwrap_usb_interface_descriptor(env, this)->iInterface;
}
/**
* int extralen()
*/
JNIEXPORT jint JNICALL METHOD_NAME(USB_1Interface_1Descriptor, extralen)
(
JNIEnv *env, jobject this
)
{
return unwrap_usb_interface_descriptor(env, this)->extralen;
}
/**
* byte[] extra()
*/
JNIEXPORT jbyteArray JNICALL METHOD_NAME(USB_1Interface_1Descriptor, extra)
(
JNIEnv *env, jobject this
)
{
struct usb_interface_descriptor *descriptor =
unwrap_usb_interface_descriptor(env, this);
jbyteArray array = (*env)->NewByteArray(env, descriptor->extralen);
(*env)->SetByteArrayRegion(env, array, 0, descriptor->extralen,
(const jbyte *) descriptor->extra);
return array;
}
/**
* USB_Endpoint_Descriptor[] endpoint()
*/
JNIEXPORT jobjectArray JNICALL METHOD_NAME(USB_1Interface_1Descriptor, endpoint)
(
JNIEnv *env, jobject this
)
{
struct usb_interface_descriptor *descriptor =
unwrap_usb_interface_descriptor(env, this);
return wrap_usb_endpoint_descriptors(env, descriptor->bNumEndpoints,
descriptor->endpoint);
}

View File

@ -0,0 +1,19 @@
/*
* Copyright (C) 2011 Klaus Reimer (k@ailis.de)
* See COPYING file for copying conditions
*/
#ifndef USB_INTERFACE_DESCRIPTOR_H
#define USB_INTERFACE_DESCRIPTOR_H
#include <jni.h>
#include <usb.h>
extern jobject wrap_usb_interface_descriptor(JNIEnv *,
struct usb_interface_descriptor *);
extern jobjectArray wrap_usb_interface_descriptors(JNIEnv *, uint8_t,
struct usb_interface_descriptor *);
extern struct usb_interface_descriptor *unwrap_usb_interface_descriptor(
JNIEnv *, jobject);
#endif

View File

@ -0,0 +1,12 @@
/*
* Copyright (C) 2011 Klaus Reimer (k@ailis.de)
* See COPYING file for copying conditions
*/
#ifndef USB4JAVA_H
#define USB4JAVA_H
#define PACKAGE_DIR "de/ailis/usb4java"
#define METHOD_NAME(class, method) Java_de_ailis_usb4java_##class##_##method
#endif