1e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood/*
2e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * Copyright (C) 2010 The Android Open Source Project
3e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood *
4e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * Licensed under the Apache License, Version 2.0 (the "License");
5e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * you may not use this file except in compliance with the License.
6e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * You may obtain a copy of the License at
7e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood *
8e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood *      http://www.apache.org/licenses/LICENSE-2.0
9e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood *
10e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * Unless required by applicable law or agreed to in writing, software
11e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * distributed under the License is distributed on an "AS IS" BASIS,
12e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * See the License for the specific language governing permissions and
14e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * limitations under the License.
15e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood */
16e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood
17e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood#define LOG_TAG "UsbDeviceJNI"
18e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood
19e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood#include "utils/Log.h"
20e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood
21e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood#include "jni.h"
22e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood#include "JNIHelp.h"
23e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood#include "android_runtime/AndroidRuntime.h"
24e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood
25e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood#include <usbhost/usbhost.h>
26e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood
27e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwoodusing namespace android;
28e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood
29e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwoodstatic jint
30e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwoodandroid_hardware_UsbDevice_get_device_id(JNIEnv *env, jobject clazz, jstring name)
31e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood{
32e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood    const char *nameStr = env->GetStringUTFChars(name, NULL);
33e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood    int id = usb_device_get_unique_id_from_name(nameStr);
34e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood    env->ReleaseStringUTFChars(name, nameStr);
35e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood    return id;
36e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood}
37e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood
38e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwoodstatic jstring
39e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwoodandroid_hardware_UsbDevice_get_device_name(JNIEnv *env, jobject clazz, jint id)
40e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood{
41e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood    char* name = usb_device_get_name_from_unique_id(id);
42e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood    jstring result = env->NewStringUTF(name);
43e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood    free(name);
44e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood    return result;
45e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood}
46e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood
47e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwoodstatic JNINativeMethod method_table[] = {
48e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood    // static methods
49e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood    { "native_get_device_id", "(Ljava/lang/String;)I",
50e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood                                        (void*)android_hardware_UsbDevice_get_device_id },
51e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood    { "native_get_device_name", "(I)Ljava/lang/String;",
52e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood                                        (void*)android_hardware_UsbDevice_get_device_name },
53e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood};
54e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood
55e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwoodint register_android_hardware_UsbDevice(JNIEnv *env)
56e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood{
57c4308f01c965571dc2354107c3574df113e397eeMike Lockwood    return AndroidRuntime::registerNativeMethods(env, "android/hardware/usb/UsbDevice",
58e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood            method_table, NELEM(method_table));
59e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood}
60