17f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde/*
2956f54b391677d78379729dd14518edddf3c7660Etan Cohen * Copyright 2016, The Android Open Source Project
37f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde *
47f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde * Licensed under the Apache License, Version 2.0 (the "License");
57f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde * you may not use this file except in compliance with the License.
67f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde * You may obtain a copy of the License at
77f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde *
87f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde *     http://www.apache.org/licenses/LICENSE-2.0
97f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde *
107f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde * Unless required by applicable law or agreed to in writing, software
117f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde * distributed under the License is distributed on an "AS IS" BASIS,
127f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde * See the License for the specific language governing permissions and
147f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde * limitations under the License.
157f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde */
167f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde
177f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde#define LOG_TAG "wifi"
187f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde
19f8a283f4fc2f103fdf68062a50e516141d1e881dChristopher Wiley#include <hardware_legacy/wifi_hal.h>
20f8a283f4fc2f103fdf68062a50e516141d1e881dChristopher Wiley#include <nativehelper/ScopedUtfChars.h>
217f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde#include <utils/Log.h>
227f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde#include <utils/String16.h>
23f8a283f4fc2f103fdf68062a50e516141d1e881dChristopher Wiley#include <utils/misc.h>
247f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde
257f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde#include "jni_helper.h"
267f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde
277f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapndenamespace android {
287f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde
297f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde/* JNI Helpers for wifi_hal implementation */
307f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde
317d519b6686ece717fd3890c0656b46155c22a377Vinit DeshpandeJNIHelper::JNIHelper(JavaVM *vm)
327d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande{
337d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    vm->AttachCurrentThread(&mEnv, NULL);
347d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    mVM = vm;
357d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande}
367d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande
377d519b6686ece717fd3890c0656b46155c22a377Vinit DeshpandeJNIHelper::JNIHelper(JNIEnv *env)
387d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande{
397d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    mVM  = NULL;
407d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    mEnv = env;
417d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande}
427d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande
437d519b6686ece717fd3890c0656b46155c22a377Vinit DeshpandeJNIHelper::~JNIHelper()
447d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande{
457d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    if (mVM != NULL) {
467d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        // mVM->DetachCurrentThread();  /* 'attempting to detach while still running code' */
477d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        mVM = NULL;                     /* not really required; but may help debugging */
487d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        mEnv = NULL;                    /* not really required; but may help debugging */
497d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    }
507d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande}
517d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande
527d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpandejobject JNIHelper::newLocalRef(jobject obj) {
53b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Pius      return mEnv->NewLocalRef(obj);
547d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande}
557d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande
567d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpandevoid JNIHelper::deleteLocalRef(jobject obj) {
57b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Pius      mEnv->DeleteLocalRef(obj);
587d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande}
597d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande
607d519b6686ece717fd3890c0656b46155c22a377Vinit DeshpandeJNIObject<jbyteArray> JNIHelper::newByteArray(int num) {
617d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    return JNIObject<jbyteArray>(*this, mEnv->NewByteArray(num));
627d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande}
637d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande
643592af2adb0c30244a46db03164ca0f7e6d3b613mukesh agrawalvoid JNIHelper::setByteArrayRegion(jbyteArray array, int from, int to, const jbyte *bytes) {
657d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    mEnv->SetByteArrayRegion(array, from, to, bytes);
667d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande}
677f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde}; // namespace android
68