diff options
Diffstat (limited to 'ctrl/facemgr/src')
-rw-r--r-- | ctrl/facemgr/src/api.c | 81 | ||||
-rw-r--r-- | ctrl/facemgr/src/facelet.c | 6 | ||||
-rw-r--r-- | ctrl/facemgr/src/interfaces/android_utility/android_utility.c | 4 | ||||
-rw-r--r-- | ctrl/facemgr/src/interfaces/hicn_light/hicn_light.c | 5 | ||||
-rw-r--r-- | ctrl/facemgr/src/interfaces/priority_controller/priority_controller.c | 146 | ||||
-rw-r--r-- | ctrl/facemgr/src/interfaces/priority_controller/priority_controller.h | 45 |
6 files changed, 243 insertions, 44 deletions
diff --git a/ctrl/facemgr/src/api.c b/ctrl/facemgr/src/api.c index f934883de..9e029c5b7 100644 --- a/ctrl/facemgr/src/api.c +++ b/ctrl/facemgr/src/api.c @@ -21,12 +21,12 @@ #ifdef __ANDROID__ /* - * Use AndroidUtility to determine interface types + * Use FacemgrUtility to determine interface types * * NOTE: this is currently disabled as SDK APIs do not allow to determine the * type of interfaces that are DOWN */ -//#define WITH_ANDROID_UTILITY +//#define WITH_FACEMGR_UTILITY /* * Use priority controller interface @@ -59,9 +59,11 @@ #include "interfaces/bonjour/bonjour.h" #endif /* __linux__ */ -#ifdef WITH_ANDROID_UTILITY +#ifdef WITH_FACEMGR_UTILITY #include "interfaces/android_utility/android_utility.h" -#endif /* WITH_ANDROID_UTILITY */ +#endif /* WITH_FACEMGR_UTILITY */ + +#include "interfaces/priority_controller/priority_controller.h" #include <hicn/ctrl/face.h> #include <hicn/facemgr/facelet.h> @@ -100,9 +102,9 @@ extern interface_ops_t network_framework_ops; extern interface_ops_t netlink_ops; extern interface_ops_t bonjour_ops; #endif -#ifdef WITH_ANDROID_UTILITY +#ifdef WITH_FACEMGR_UTILITY extern interface_ops_t android_utility_ops; -#endif /* WITH_ANDROID_UTILITY */ +#endif /* WITH_FACEMGR_UTILITY */ #ifdef WITH_PRIORITY_CONTROLLER extern interface_ops_t priority_controller_ops; #endif @@ -162,9 +164,9 @@ struct facemgr_s { interface_t * hl; -#ifdef WITH_ANDROID_UTILITY +#ifdef WITH_FACEMGR_UTILITY interface_t * au; /* android_utility */ -#endif /* WITH_ANDROID_UTILITY */ +#endif /* WITH_FACEMGR_UTILITY */ #ifdef WITH_PRIORITY_CONTROLLER interface_t * pc; @@ -538,7 +540,7 @@ int facemgr_query_bonjour(facemgr_t * facemgr, netdevice_t * netdevice) } #endif /* __linux__ */ -#ifdef WITH_ANDROID_UTILITY +#ifdef WITH_FACEMGR_UTILITY int facemgr_query_android_utility(facemgr_t * facemgr, netdevice_t netdevice) { /* Send an event to the interface */ @@ -564,7 +566,7 @@ ERR_ND: ERR_MALLOC: return -1; } -#endif /* WITH_ANDROID_UTILITY */ +#endif /* WITH_FACEMGR_UTILITY */ /** @@ -640,7 +642,7 @@ facemgr_facelet_satisfy_rules(facemgr_t * facemgr, facelet_t * facelet) } netdevice_type_t netdevice_type = NETDEVICE_TYPE_UNDEFINED; -#ifndef WITH_ANDROID_UTILITY +#ifndef WITH_FACEMGR_UTILITY /* * In addition to netdevice, netdevice_type should be present to correctly * apply rules @@ -650,7 +652,7 @@ facemgr_facelet_satisfy_rules(facemgr_t * facemgr, facelet_t * facelet) ERROR("[facemgr_facelet_satisfy_rules] Error retrieving netdevice_type from facelet"); return -2; } -#endif /* WITH_ANDROID_UTILITY */ +#endif /* WITH_FACEMGR_UTILITY */ /* Default ignore list */ if ((netdevice_type == NETDEVICE_TYPE_LOOPBACK) || (netdevice_type == NETDEVICE_TYPE_UNDEFINED)) { @@ -705,7 +707,7 @@ facemgr_facelet_satisfy_rules(facemgr_t * facemgr, facelet_t * facelet) return 0; } -#ifdef WITH_ANDROID_UTILITY +#ifdef WITH_FACEMGR_UTILITY /** * \brief Complements facelet information through Android Utility interface * \return 0 if request was successful, -1 in case of error, and -2 if the @@ -741,7 +743,7 @@ facemgr_complement_facelet_au(facemgr_t * facemgr, facelet_t * facelet) facelet_set_au_done(facelet); return 0; } -#endif /* WITH_ANDROID_UTILITY */ +#endif /* WITH_FACEMGR_UTILITY */ #ifdef __linux__ /** @@ -763,7 +765,7 @@ facemgr_complement_facelet_bj(facemgr_t * facemgr, facelet_t * facelet) } netdevice_type_t netdevice_type = NETDEVICE_TYPE_UNDEFINED; -#ifndef WITH_ANDROID_UTILITY +#ifndef WITH_FACEMGR_UTILITY /* * In addition to netdevice, netdevice_type should be present to correctly * apply rules @@ -773,7 +775,7 @@ facemgr_complement_facelet_bj(facemgr_t * facemgr, facelet_t * facelet) ERROR("[facemgr_complement_facelet_bj] Error retrieving netdevice_type from facelet"); return -2; } -#endif /* WITH_ANDROID_UTILITY */ +#endif /* WITH_FACEMGR_UTILITY */ bool discovery; if (facemgr_cfg_get_discovery(facemgr->cfg, &netdevice, netdevice_type, @@ -835,7 +837,7 @@ facemgr_complement_facelet_manual(facemgr_t * facemgr, facelet_t * facelet) } netdevice_type_t netdevice_type = NETDEVICE_TYPE_UNDEFINED; -#ifndef WITH_ANDROID_UTILITY +#ifndef WITH_FACEMGR_UTILITY /* * In addition to netdevice, netdevice_type should be present to correctly * apply rules @@ -845,7 +847,7 @@ facemgr_complement_facelet_manual(facemgr_t * facemgr, facelet_t * facelet) ERROR("[facemgr_complement_facelet_manual] Error retrieving netdevice_type from facelet"); return -2; } -#endif /* WITH_ANDROID_UTILITY */ +#endif /* WITH_FACEMGR_UTILITY */ int family = AF_UNSPEC; if (facelet_has_family(facelet)) { @@ -957,11 +959,11 @@ facemgr_complement_facelet(facemgr_t * facemgr, facelet_t * facelet) if (!facelet_has_key(facelet)) return -2; -#ifdef WITH_ANDROID_UTILITY +#ifdef WITH_FACEMGR_UTILITY rc = facemgr_complement_facelet_au(facemgr, facelet); if (rc != -2) return rc; -#endif /* WITH_ANDROID_UTILITY */ +#endif /* WITH_FACEMGR_UTILITY */ #if 0 if (!facelet_has_netdevice_type(facelet)) { @@ -1008,7 +1010,7 @@ int facemgr_assign_face_type(facemgr_t * facemgr, facelet_t * facelet) } netdevice_type_t netdevice_type = NETDEVICE_TYPE_UNDEFINED; -#ifndef WITH_ANDROID_UTILITY +#ifndef WITH_FACEMGR_UTILITY /* * In addition to netdevice, netdevice_type should be present to correctly * apply rules @@ -1018,7 +1020,7 @@ int facemgr_assign_face_type(facemgr_t * facemgr, facelet_t * facelet) ERROR("[facemgr_assign_face_type] Error retrieving netdevice_type from facelet"); return -2; } -#endif /* WITH_ANDROID_UTILITY */ +#endif /* WITH_FACEMGR_UTILITY */ facemgr_face_type_t face_type = FACEMGR_FACE_TYPE_UNDEFINED; if (facemgr_cfg_get_face_type(facemgr->cfg, &netdevice, netdevice_type, &face_type) < 0) @@ -1153,9 +1155,9 @@ facemgr_process_facelet(facemgr_t * facemgr, facelet_t * facelet) facelet_unset_admin_state(facelet); facelet_unset_state(facelet); facelet_unset_bj_done(facelet); -#ifdef WITH_ANDROID_UTILITY +#ifdef WITH_FACEMGR_UTILITY facelet_unset_au_done(facelet); -#endif /* WITH_ANDROID_UTILITY */ +#endif /* WITH_FACEMGR_UTILITY */ facelet_set_status(facelet, FACELET_STATUS_DELETED); #if 0 @@ -1416,9 +1418,9 @@ facemgr_consider_static_facelet(facemgr_t * facemgr, facelet_t * facelet) facelet_unset_state(new_facelet); facelet_unset_bj_done(new_facelet); facelet_clear_routes(new_facelet); -#ifdef WITH_ANDROID_UTILITY +#ifdef WITH_FACEMGR_UTILITY facelet_unset_au_done(new_facelet); -#endif /* WITH_ANDROID_UTILITY */ +#endif /* WITH_FACEMGR_UTILITY */ /* We try to apply static_facelet over facelet */ if (!facelet_match(new_facelet, static_facelet)) { @@ -1650,9 +1652,9 @@ facemgr_process_facelet_delete(facemgr_t * facemgr, facelet_t * facelet) facelet_unset_admin_state(facelet); facelet_unset_state(facelet); facelet_unset_bj_done(facelet); -#ifdef WITH_ANDROID_UTILITY +#ifdef WITH_FACEMGR_UTILITY facelet_unset_au_done(facelet); -#endif /* WITH_ANDROID_UTILITY */ +#endif /* WITH_FACEMGR_UTILITY */ facelet_unset_error(facelet); facelet_set_status(facelet, FACELET_STATUS_DELETED); #if 0 @@ -2188,13 +2190,13 @@ facemgr_bootstrap(facemgr_t * facemgr) } #endif /* __linux__ */ -#ifdef WITH_ANDROID_UTILITY +#ifdef WITH_FACEMGR_UTILITY rc = interface_register(&android_utility_ops); if (rc < 0) { ERROR("[facemgr_bootstrap] Error registering android_utility interface"); goto ERR_REGISTER; } -#endif /* WITH_ANDROID_UTILITY */ +#endif /* WITH_FACEMGR_UTILITY */ #ifdef WITH_PRIORITY_CONTROLLER INFO("[facemgr_bootstrap] registering priority_controller interface"); @@ -2245,7 +2247,7 @@ facemgr_bootstrap(facemgr_t * facemgr) } #endif /* __linux__ */ -#ifdef WITH_ANDROID_UTILITY +#ifdef WITH_FACEMGR_UTILITY android_utility_cfg_t au_cfg = { .jvm = facemgr->jvm, }; @@ -2254,11 +2256,16 @@ facemgr_bootstrap(facemgr_t * facemgr) ERROR("Error creating 'Android Utility' interface\n"); goto ERR_AU_CREATE; } -#endif /* WITH_ANDROID_UTILITY */ +#endif /* WITH_FACEMGR_UTILITY */ #ifdef WITH_PRIORITY_CONTROLLER INFO("[facemgr_bootstrap] creating priority_controller interface"); - rc = facemgr_create_interface(facemgr, "pc", "priority_controller", NULL, &facemgr->pc); + priority_controller_cfg_t pc_cfg = { +#ifdef PRIORITY_CONTROLLER_INTERNAL + .jvm = facemgr->jvm, +#endif /* PRIORITY_CONTROLLER_INTERNAL */ + }; + rc = facemgr_create_interface(facemgr, "pc", "priority_controller", &pc_cfg, &facemgr->pc); if (rc < 0) { ERROR("Error creating 'Priority Controller' interface\n"); goto ERR_PC_CREATE; @@ -2293,10 +2300,10 @@ ERR_UPDOWN_CREATE: facemgr_delete_interface(facemgr, facemgr->dummy); ERR_DUMMY_CREATE: #endif -#ifdef WITH_ANDROID_UTILITY +#ifdef WITH_FACEMGR_UTILITY facemgr_delete_interface(facemgr, facemgr->au); ERR_AU_CREATE: -#endif /* WITH_ANDROID_UTILITY */ +#endif /* WITH_FACEMGR_UTILITY */ #ifdef WITH_PRIORITY_CONTROLLER facemgr_delete_interface(facemgr, facemgr->pc); ERR_PC_CREATE: @@ -2346,9 +2353,9 @@ void facemgr_stop(facemgr_t * facemgr) } #endif /* __linux__ */ -#ifdef WITH_ANDROID_UTILITY +#ifdef WITH_FACEMGR_UTILITY facemgr_delete_interface(facemgr, facemgr->au); -#endif /* WITH_ANDROID_UTILITY */ +#endif /* WITH_FACEMGR_UTILITY */ #ifdef WITH_PRIORITY_CONTROLLER facemgr_delete_interface(facemgr, facemgr->pc); diff --git a/ctrl/facemgr/src/facelet.c b/ctrl/facemgr/src/facelet.c index 0cf44d4dc..9e9f3f67f 100644 --- a/ctrl/facemgr/src/facelet.c +++ b/ctrl/facemgr/src/facelet.c @@ -356,8 +356,10 @@ facelet_create_from_face(face_t * face) facelet->error = 0; /* TODO Consistency check between face type and found attributes */ - if (facelet_validate_face(facelet) < 0) + if (facelet_validate_face(facelet) < 0) { + ERROR("[facelet_create_from_face] Cannot validate face"); goto ERR_FACE; + } facelet->bj_done = false; facelet->au_done = false; @@ -367,7 +369,7 @@ facelet_create_from_face(face_t * face) /* We need to get route set */ facelet->routes = route_set_create(); if (!facelet->routes) { - ERROR("[facelet_create] Cannot create route set"); + ERROR("[facelet_create_from_face] Cannot create route set"); goto ERR_ROUTE_SET; } facelet->routes_done = false; diff --git a/ctrl/facemgr/src/interfaces/android_utility/android_utility.c b/ctrl/facemgr/src/interfaces/android_utility/android_utility.c index d1fe324fb..d8e20659a 100644 --- a/ctrl/facemgr/src/interfaces/android_utility/android_utility.c +++ b/ctrl/facemgr/src/interfaces/android_utility/android_utility.c @@ -28,7 +28,7 @@ #include "android_utility.h" -#define FACEMGR_ANDROID_UTILITY_CLASS "com/cisco/hicn/forwarder/supportlibrary/AndroidUtility" +#define FACEMGR_UTILITY_CLASS "com/cisco/hicn/facemgrlibrary/supportlibrary/FacemgrUtility" #define AU_INTERFACE_TYPE_UNDEFINED 0 @@ -89,7 +89,7 @@ int au_on_event(interface_t * interface, facelet_t * facelet) JNIEnv *env; JavaVM *jvm = data->cfg.jvm; (*jvm)->AttachCurrentThread(jvm, &env, NULL); - jclass cls = (*env)->FindClass(env, FACEMGR_ANDROID_UTILITY_CLASS); + jclass cls = (*env)->FindClass(env, FACEMGR_UTILITY_CLASS); jmethodID getNetworkType = (*env)->GetStaticMethodID(env, cls, "getNetworkType", "(Ljava/lang/String;)I"); jint interface_type = (*env)->CallStaticIntMethod(env, cls, getNetworkType, diff --git a/ctrl/facemgr/src/interfaces/hicn_light/hicn_light.c b/ctrl/facemgr/src/interfaces/hicn_light/hicn_light.c index 508c0713b..74a0cd62b 100644 --- a/ctrl/facemgr/src/interfaces/hicn_light/hicn_light.c +++ b/ctrl/facemgr/src/interfaces/hicn_light/hicn_light.c @@ -642,6 +642,11 @@ int hl_callback(interface_t * interface, int fd, void * unused) /* We can ignore faces on localhost */ facelet_t * facelet = facelet_create_from_face(&f->face); + if (!facelet) { + ERROR("[hl_callback] Could not create facelet... skipping"); + continue; + } + foreach_route(r, data->polled_routes) { if (r->face_id != f->id) continue; diff --git a/ctrl/facemgr/src/interfaces/priority_controller/priority_controller.c b/ctrl/facemgr/src/interfaces/priority_controller/priority_controller.c index 76538185f..67edc5e39 100644 --- a/ctrl/facemgr/src/interfaces/priority_controller/priority_controller.c +++ b/ctrl/facemgr/src/interfaces/priority_controller/priority_controller.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017-2019 Cisco and/or its affiliates. + * Copyright (c) 2017-2020 Cisco and/or its affiliates. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at: @@ -27,19 +27,110 @@ #include <hicn/facemgr.h> +#include "priority_controller.h" #include "../../common.h" #include "../../interface.h" #define PC_DEFAULT_PORT 9533 typedef struct { + priority_controller_cfg_t cfg; int fd; +#ifdef PRIORITY_CONTROLLER_INTERNAL + unsigned state; + JNIEnv * env; + jclass cls; + jmethodID mid; +#endif /* PRIORITY_CONTROLLER_INTERNAL */ } pc_data_t; +#ifdef PRIORITY_CONTROLLER_INTERNAL +#include <jni.h> + +#define ERR_STR_JAVA "Java VM parameters are required in the interface configuration." + +#define PREFER_CELLULAR 0 +#define PREFER_WIFI 1 +#define PREFER_BOTH 2 + +#define INTERVAL_MS 500 + +const char * prefer_str[] = { "Cellular", "WiFi", "both" }; + +jclass find_class_global(JNIEnv* env, const char *name){ + jclass c = (*env)->FindClass(env, name); + jclass c_global = 0; + if (c){ + c_global = (jclass)(*env)->NewGlobalRef(env, c); + (*env)->DeleteLocalRef(env, c); + } + return c_global; +} + + +int priority_controller_tick(interface_t * interface, int fd, void * unused) +{ + pc_data_t * data = (pc_data_t*)interface->data; + unsigned new_state = PREFER_BOTH; + + jint rssi = (*data->env)->CallStaticIntMethod(data->env, data->cls, data->mid); + DEBUG("[priority_controller_tick] rssi=%d\n", rssi); + if (rssi > -67) { + new_state = PREFER_WIFI; + +#if 0 + } else if ((rssi < -67) && (rssi > -70)) { + new_state = PREFER_BOTH; +#endif + + } else { /* rssi < -70 */ + new_state = PREFER_CELLULAR; + } + + if (new_state == data->state) + return 0; + + ERROR("[priority_controller_tick] Setting priority to %s", prefer_str[new_state]); + + /* XXX Factor this */ + + facelet_t * facelet_w = facelet_create(); + facelet_t * facelet_c = facelet_create(); + facelet_set_netdevice_type(facelet_w, NETDEVICE_TYPE_WIFI); + facelet_set_netdevice_type(facelet_c, NETDEVICE_TYPE_CELLULAR); + facelet_set_attr_clean(facelet_w); + facelet_set_attr_clean(facelet_c); + + switch(new_state) { + case PREFER_CELLULAR: + facelet_set_priority(facelet_w, 0); + facelet_set_priority(facelet_c, 10); + break; + case PREFER_WIFI: + facelet_set_priority(facelet_w, 10); + facelet_set_priority(facelet_c, 0); + break; + case PREFER_BOTH: + facelet_set_priority(facelet_w, 0); + facelet_set_priority(facelet_c, 0); + break; + } + + facelet_set_event(facelet_w, FACELET_EVENT_UPDATE); + facelet_set_event(facelet_c, FACELET_EVENT_UPDATE); + + interface_raise_event(interface, facelet_w); + interface_raise_event(interface, facelet_c); + + data->state = new_state; + + return 0; +} +#endif /* PRIORITY_CONTROLLER_INTERNAL */ + int priority_controller_initialize(interface_t * interface, void * cfg) { INFO("Initializing priority controller"); - struct sockaddr_in addr; pc_data_t * data = malloc(sizeof(pc_data_t)); if (!data) { @@ -49,6 +140,33 @@ int priority_controller_initialize(interface_t * interface, void * cfg) interface->data = data; + data->cfg = * (priority_controller_cfg_t *) cfg; + +#ifdef PRIORITY_CONTROLLER_INTERNAL + + if (!cfg) { + ERROR(ERR_STR_JAVA); + goto ERR_CFG; + } + + /* Retrieve RSSI information from SDK through AndroidUtility class */ + (*data->cfg.jvm)->AttachCurrentThread(data->cfg.jvm, &data->env, NULL); + data->cls = find_class_global(data->env, FACEMGR_ANDROID_UTILITY_CLASS); + if (data->cls == 0) + goto ERR_JAVA; + data->mid = (*data->env)->GetStaticMethodID(data->env, data->cls, "getWifiRSSI", "()I"); + + data->fd = interface_register_timer(interface, INTERVAL_MS, + priority_controller_tick, interface); + if (data->fd < 0) { + ERROR("[priority_controller_initialize] Could not initialize timer"); + goto ERR_FD; + } + data->state = PREFER_BOTH; + +#else /* PRIORITY_CONTROLLER_INTERNAL */ + struct sockaddr_in addr; + data->fd = socket(AF_INET, SOCK_DGRAM, 0); //data->fd = socket(AF_INET, SOCK_STREAM, 0); if (data->fd < 0) { @@ -67,18 +185,28 @@ int priority_controller_initialize(interface_t * interface, void * cfg) perror("bind error"); goto ERR_BIND; } + + DEBUG("[priority_controller_initialize] register fd"); if (interface_register_fd(interface, data->fd, NULL) < 0) { ERROR("[priority_controller_initialize] Error registering fd"); goto ERR_FD; } +#endif /* PRIORITY_CONTROLLER_INTERNAL */ + INFO("Priority controller successfully initialized"); return 0; +#ifdef PRIORITY_CONTROLLER_INTERNAL +ERR_CFG: +ERR_JAVA: +#endif /* PRIORITY_CONTROLLER_INTERNAL */ ERR_FD: +#ifndef PRIORITY_CONTROLLER_INTERNAL ERR_BIND: close(data->fd); ERR_SOCKET: +#endif /* ! PRIORITY_CONTROLLER_INTERNAL */ free(data); ERR_MALLOC: return -1; @@ -88,12 +216,21 @@ int priority_controller_finalize(interface_t * interface) { pc_data_t * data = (pc_data_t*)interface->data; - if (data->fd > 0) {close(data->fd);} +#ifdef PRIORITY_CONTROLLER_INTERNAL + DEBUG("[priority_controller_finalize] unregister timer"); + interface_unregister_timer(interface, data->fd); +#else + if (data->fd > 0) { + interface_unregister_fd(interface, data->fd); + close(data->fd); + } free(data); +#endif /* PRIORITY_CONTROLLER_INTERNAL */ return 0; } +#ifndef PRIORITY_CONTROLLER_INTERNAL int priority_controller_callback(interface_t * interface, int fd, void * unused) { pc_data_t * data = (pc_data_t*)interface->data; @@ -148,10 +285,13 @@ int priority_controller_callback(interface_t * interface, int fd, void * unused) return 0; } +#endif /* ! PRIORITY_CONTROLLER_INTERNAL */ interface_ops_t priority_controller_ops = { .type = "priority_controller", .initialize = priority_controller_initialize, .finalize = priority_controller_finalize, +#ifndef PRIORITY_CONTROLLER_INTERNAL .callback = priority_controller_callback, +#endif /* ! PRIORITY_CONTROLLER_INTERNAL */ }; diff --git a/ctrl/facemgr/src/interfaces/priority_controller/priority_controller.h b/ctrl/facemgr/src/interfaces/priority_controller/priority_controller.h new file mode 100644 index 000000000..247fc3c57 --- /dev/null +++ b/ctrl/facemgr/src/interfaces/priority_controller/priority_controller.h @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2017-2020 Cisco and/or its affiliates. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * \file priority_controller.h + * \brief Priority Controller interface + */ + +#ifndef FACEMGR_INTERFACE_PRIORITY_CONTROLLER +#define FACEMGR_INTERFACE_PRIORITY_CONTROLLER + +#define FACEMGR_UTILITY_CLASS "com/cisco/hicn/facemgrlibrary/supportlibrary/FacemgrUtility" + +/* + * Uncomment this line to use a Priority controller interface internal to the + * face manager (only available in Android). + */ +// #define PRIORITY_CONTROLLER_INTERNAL + +#ifdef __ANDROID__ +#include <jni.h> +#endif /* __ANDROID__ */ + +typedef struct { +#ifdef __ANDROID__ +#ifdef PRIORITY_CONTROLLER_INTERNAL + JavaVM * jvm; +#endif /* PRIORITY_CONTROLLER_INTERNAL */ +#endif /* __ANDROID__ */ +} priority_controller_cfg_t; + + +#endif /* FACEMGR_INTERFACE_PRIORITY_CONTROLLER */ |