blob: e25e2d6f49e780a6f87eaef1aac198a22d9a65ec [file] [log] [blame]
// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// +build android
package discovery
import (
"fmt"
"unsafe"
jutil "v.io/x/jni/util"
"v.io/x/ref/lib/discovery"
)
// #include "jni.h"
import "C"
var (
// Global reference for io.v.android.libs.discovery.ble.BlePlugin
jBlePluginClass jutil.Class
// Global reference for io.v.x.ref.lib.discovery.Advertisement
jAdvertisementClass jutil.Class
// Global reference for java.util.UUID
jUUIdClass jutil.Class
// Global reference for io.v.android.libs.discovery.ble.NativeScanHandler
jNativeScanHandlerClass jutil.Class
)
func Init(env jutil.Env) error {
var err error
jUUIDClass, err = jutil.JFindClass(env, "java/util/UUID")
if err != nil {
return err
}
jNativeScanHandlerClass, err = jutil.JFindClass(env, "io/v/android/libs/discovery/ble/NativeScanHandler")
if err != nil {
return err
}
jBlePluginClass, err = jutil.JFindClass(env, "io/v/android/libs/discovery/ble/BlePlugin")
if err != nil {
return err
}
jAdvertisementClass, err = jutil.JFindClass(env, "io/v/x/ref/lib/discovery/Advertisement")
return err
}
//export Java_io_android_libs_discovery_ble_NativeScanHandler_nativeHandleUpdate
func Java_io_android_libs_discovery_ble_NativeScanHandler_nativeHandleUpdate(jenv *C.JNIEnv, _ C.jobject, jAdv C.jobject, goPtr C.jlong) {
env := jutil.Env(uintptr(unsafe.Pointer(jenv)))
c, ok := (*(*chan <- discovery.Advertisement)(jutil.NativePtr(goPtr)))
if !ok {
jutil.JThrow(env, fmt.Errorf("Internal error"))
return
}
advObject := jutil.Object(uintptr(unsafe.Pointer(jAdv)))
var adv discovery.Advertisement
if err := jutil.GoVomCopy(env, advObject, jAdvertisementClass, &adv); err != nil {
jutil.JThrow(env, err)
return
}
ch <-advObject
}
//export Java_io_android_libs_discovery_ble_NativeScanHandler_nativeCleanup
func Java_io_android_libs_discovery_ble_NativeScanHandler_nativeCleanup(jenv *C.JNIEnv, _ C.jobject, goPtr c.jlong) {
jutil.GoUnref(jutil.NativePtr(goPtr))
}