14a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/*---------------------------------------------------------------------------*
24a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  android_speech_srec_Recognizer.cpp                                                              *
34a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *                                                                           *
44a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  Copyright 2007 Nuance Communciations, Inc.                               *
54a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *                                                                           *
64a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  Licensed under the Apache License, Version 2.0 (the 'License');          *
74a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  you may not use this file except in compliance with the License.         *
84a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *                                                                           *
94a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  You may obtain a copy of the License at                                  *
104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0                           *
114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *                                                                           *
124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  Unless required by applicable law or agreed to in writing, software      *
134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  distributed under the License is distributed on an 'AS IS' BASIS,        *
144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  See the License for the specific language governing permissions and      *
164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  limitations under the License.                                           *
174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *                                                                           *
184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *---------------------------------------------------------------------------*/
194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include <string.h>
224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include <stdio.h>
234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include <stdlib.h>
244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include <jni.h>
254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define LOG_TAG "srec_jni"
274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "utils/Log.h"
284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "passert.h"
304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "ESR_CommandLine.h"
314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "ESR_Session.h"
324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "LCHAR.h"
334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "PFile.h"
344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "PFileSystem.h"
354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "PANSIFileSystem.h"
364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project//#include "PMemoryFileSystem.h"
374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "plog.h"
384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "pmemory.h"
394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "ptypes.h"
404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "SR_Grammar.h"
414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "SR_Recognizer.h"
424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "SR_RecognizerImpl.h"
434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "SR_RecognizerResult.h"
444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "SR_Session.h"
454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "SR_Vocabulary.h"
464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "SR_AcousticState.h"
474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "SR_Nametag.h"
484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "PStackSize.h"
494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project//
534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project// helper function to throw an exception
544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project//
554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic void JNU_ThrowByName(JNIEnv *env, const char* name, const char* msg) {
564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    jclass cls = env->FindClass(name);
574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if (cls != NULL) {
584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        env->ThrowNew(cls, msg);
594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    env->DeleteLocalRef(cls);
614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic void unimplemented(JNIEnv* env) {
644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    JNU_ThrowByName(env, "java/lang/IllegalStateException", "unimplemented!!!");
654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic void checkEsrError(JNIEnv* env, ESR_ReturnCode esr_status) {
684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if (esr_status != ESR_SUCCESS) {
694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        JNU_ThrowByName(env, "java/lang/IllegalStateException", ESR_rc2str(esr_status));
704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project///////////////////////////////////////////////////////////////////////////
754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project// PMem JNI implementations
764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project///////////////////////////////////////////////////////////////////////////
774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_PMemInit
794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        (JNIEnv *env, jclass clazz) {
804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    checkEsrError(env, PMemInit());
814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_PMemShutdown
844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        (JNIEnv *env, jclass clazz) {
854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    checkEsrError(env, PMemShutdown());
864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project//////////////////////////////////////////////////////////////////////////
904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project// SR_Session JNI implementations
914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project//////////////////////////////////////////////////////////////////////////
924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_SR_1SessionCreate
944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        (JNIEnv *env, jclass clazz, jstring fileName) {
954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    // TODO: check for fileName NPE
964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    const char* fn = env->GetStringUTFChars(fileName, 0);
974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    checkEsrError(env, SR_SessionCreate(fn));  // TODO: can I post this before freeing the string?
984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    env->ReleaseStringUTFChars(fileName, fn);
994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
1004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_SR_1SessionDestroy
1024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        (JNIEnv *env, jclass clazz) {
1034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    checkEsrError(env, SR_SessionDestroy());
1044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
1054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project//////////////////////////////////////////////////////////////////////////
1084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project// SR_Recognizer JNI implementations
1094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project//////////////////////////////////////////////////////////////////////////
1104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerStart
1124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        (JNIEnv *env, jclass clazz, jint recognizer) {
1134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    checkEsrError(env, SR_RecognizerStart((SR_Recognizer*)recognizer));
1144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
1154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerStop
1174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        (JNIEnv *env, jclass clazz, jint recognizer) {
1184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    checkEsrError(env, SR_RecognizerStop((SR_Recognizer*)recognizer));
1194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
1204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT jint JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerCreate
1224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        (JNIEnv *env, jclass clazz) {
1234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    SR_Recognizer* recognizer = NULL;
1244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    // TODO: do we need to clean up the recognizer if this fails?
1254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    checkEsrError(env, SR_RecognizerCreate(&recognizer));
1264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return (jint)recognizer;
1274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
1284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerDestroy
1304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        (JNIEnv *env, jclass clazz, jint recognizer) {
1314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    checkEsrError(env, SR_RecognizerDestroy((SR_Recognizer*)recognizer));
1324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return;
1334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
1344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerSetup
1364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        (JNIEnv *env, jclass clazz, jint recognizer) {
1374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    checkEsrError(env, SR_RecognizerSetup((SR_Recognizer*)recognizer));
1384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return;
1394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
1404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerUnsetup
1424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        (JNIEnv *env, jclass clazz, jint recognizer) {
1434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    checkEsrError(env, SR_RecognizerUnsetup((SR_Recognizer*)recognizer));
1444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return;
1454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
1464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT jboolean JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerIsSetup
1484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        (JNIEnv *env, jclass clazz, jint recognizer) {
1494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    ESR_BOOL rtn = ESR_FALSE;
1504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    checkEsrError(env, SR_RecognizerIsSetup((SR_Recognizer*)recognizer, &rtn));
1514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return rtn;
1524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
1534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT jstring JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerGetParameter
1554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  (JNIEnv *env, jclass clazz, jint recognizer, jstring key) {
1564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    unimplemented(env);
1574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return 0;
1584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
1594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT jint JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerGetSize_1tParameter
1614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  (JNIEnv *env, jclass clazz, jint recognizer, jstring key) {
1624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    unimplemented(env);
1634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return 0;
1644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
1654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT jboolean JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerGetBoolParameter
1674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  (JNIEnv *env, jclass clazz, jint recognizer, jstring key) {
1684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    unimplemented(env);
1694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return JNI_FALSE;
1704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
1714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerSetParameter
1734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  (JNIEnv *env, jclass clazz, jint recognizer, jstring key, jstring value) {
1744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    unimplemented(env);
1754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return;
1764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
1774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerSetSize_1tParameter
1794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  (JNIEnv *env, jclass clazz, jint recognizer, jstring key, jint value) {
1804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    unimplemented(env);
1814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return;
1824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
1834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerSetBoolParameter
1854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  (JNIEnv *env, jclass clazz, jint recognizer, jstring key , jboolean value) {
1864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    unimplemented(env);
1874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return;
1884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
1894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerSetupRule
1914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        (JNIEnv *env, jclass clazz, jint recognizer, jint grammar, jstring ruleName) {
1924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    const char* rn = env->GetStringUTFChars(ruleName, 0);
1934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    checkEsrError(env, SR_RecognizerSetupRule((SR_Recognizer*)recognizer, (SR_Grammar*)grammar, rn));
1944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    env->ReleaseStringUTFChars(ruleName, rn);
1954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
1964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT jboolean JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerHasSetupRules
1984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        (JNIEnv *env, jclass clazz, jint recognizer) {
1994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    ESR_BOOL rtn = ESR_FALSE;
2004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    checkEsrError(env, SR_RecognizerHasSetupRules((SR_Recognizer*)recognizer, &rtn));
2014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return rtn;
2024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
2034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerActivateRule
2054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        (JNIEnv *env, jclass clazz, jint recognizer, jint grammar, jstring ruleName, jint weight) {
2064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    const char* rn = env->GetStringUTFChars(ruleName, 0);
2074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    checkEsrError(env, SR_RecognizerActivateRule((SR_Recognizer*)recognizer, (SR_Grammar*)grammar, rn, weight));
2084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    env->ReleaseStringUTFChars(ruleName, rn);
2094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
2104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerDeactivateRule
2124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        (JNIEnv *env, jclass clazz, jint recognizer, jint grammar, jstring ruleName) {
2134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    const char* rn = env->GetStringUTFChars(ruleName, 0);
2144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    checkEsrError(env, SR_RecognizerDeactivateRule((SR_Recognizer*)recognizer, (SR_Grammar*)grammar, rn));
2154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    env->ReleaseStringUTFChars(ruleName, rn);
2164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
2174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerDeactivateAllRules
2194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        (JNIEnv *env, jclass clazz, jint recognizer) {
2204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    checkEsrError(env, SR_RecognizerDeactivateAllRules((SR_Recognizer*)recognizer));
2214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
2224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT jboolean JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerIsActiveRule
2244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        (JNIEnv *env, jclass clazz, jint recognizer, jint grammar, jstring ruleName) {
2254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    ESR_BOOL rtn = ESR_FALSE;
2264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    const char* rn = env->GetStringUTFChars(ruleName, 0);
2274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    checkEsrError(env, SR_RecognizerIsActiveRule((SR_Recognizer*)recognizer, (SR_Grammar*)grammar, rn, &rtn));
2284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    env->ReleaseStringUTFChars(ruleName, rn);
2294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return rtn;
2304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
2314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT jboolean JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerCheckGrammarConsistency
2334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        (JNIEnv *env, jclass clazz, jint recognizer, jint grammar) {
2344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    ESR_BOOL rtn = ESR_FALSE;
2354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    checkEsrError(env, SR_RecognizerCheckGrammarConsistency((SR_Recognizer*)recognizer, (SR_Grammar*)grammar, &rtn));
2364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return rtn;
2374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
2384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT jint JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerPutAudio
2404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        (JNIEnv *env, jclass clazz, jint recognizer, jbyteArray audio, jint offset, jint length, jboolean isLast) {
2414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    // set the length
2424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    jbyte buffer[1024];
2434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if (length > (int)sizeof(buffer)) length = sizeof(buffer);
2444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    size_t samples = length / sizeof(asr_int16_t);
2454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    length = samples * sizeof(asr_int16_t);
2464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    // fetch data from java
2484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    env->GetByteArrayRegion(audio, offset, length, buffer);
2494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    // put the samples into the recognizer
2514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    checkEsrError(env, SR_RecognizerPutAudio((SR_Recognizer*)recognizer,
2524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project            (asr_int16_t*)buffer, &samples, isLast ? ESR_TRUE : ESR_FALSE));
2534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if (samples != length / sizeof(asr_int16_t)) {
2544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        checkEsrError(env, ESR_READ_ERROR);
2554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        return 0;
2564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
2574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return samples * sizeof(asr_int16_t);
2594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
2604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT jint JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerAdvance
2624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        (JNIEnv *env, jclass clazz, jint recognizer) {
2634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    SR_RecognizerStatus status = SR_RECOGNIZER_EVENT_INVALID;
2644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    SR_RecognizerResultType type = SR_RECOGNIZER_RESULT_TYPE_INVALID;
2654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    SR_RecognizerResult* recognizerResult = NULL;
2664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    checkEsrError(env, SR_RecognizerAdvance((SR_Recognizer*)recognizer, &status, &type, &recognizerResult));
2674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return status;
2684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
2694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT jboolean JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerIsSignalClipping
2714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        (JNIEnv *env, jclass clazz, jint recognizer) {
2724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    ESR_BOOL rtn = ESR_FALSE;
2734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    checkEsrError(env, SR_RecognizerIsSignalClipping((SR_Recognizer*)recognizer, &rtn));
2744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return rtn;
2754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
2764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT jboolean JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerIsSignalDCOffset
2784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        (JNIEnv *env, jclass clazz, jint recognizer) {
2794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    ESR_BOOL rtn = ESR_FALSE;
2804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    checkEsrError(env, SR_RecognizerIsSignalDCOffset((SR_Recognizer*)recognizer, &rtn));
2814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return rtn;
2824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
2834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT jboolean JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerIsSignalNoisy
2854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        (JNIEnv *env, jclass clazz, jint recognizer) {
2864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    ESR_BOOL rtn = ESR_FALSE;
2874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    checkEsrError(env, SR_RecognizerIsSignalNoisy((SR_Recognizer*)recognizer, &rtn));
2884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return rtn;
2894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
2904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT jboolean JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerIsSignalTooQuiet
2924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        (JNIEnv *env, jclass clazz, jint recognizer) {
2934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    ESR_BOOL rtn = ESR_FALSE;
2944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    checkEsrError(env, SR_RecognizerIsSignalTooQuiet((SR_Recognizer*)recognizer, &rtn));
2954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return rtn;
2964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
2974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT jboolean JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerIsSignalTooFewSamples
2994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        (JNIEnv *env, jclass clazz, jint recognizer) {
3004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    ESR_BOOL rtn = ESR_FALSE;
3014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    checkEsrError(env, SR_RecognizerIsSignalTooFewSamples((SR_Recognizer*)recognizer, &rtn));
3024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return rtn;
3034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
3044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT jboolean JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerIsSignalTooManySamples
3064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        (JNIEnv *env, jclass clazz, jint recognizer) {
3074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    ESR_BOOL rtn = ESR_FALSE;
3084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    checkEsrError(env, SR_RecognizerIsSignalTooManySamples((SR_Recognizer*)recognizer, &rtn));
3094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return rtn;
3104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
3114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project//////////////////////////////////////////////////////////////////////////
3144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project// SR_AcousticState JNI implementations
3154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project//////////////////////////////////////////////////////////////////////////
3164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_SR_1AcousticStateReset
3184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        (JNIEnv *env, jclass clazz, jint recognizer) {
3194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    checkEsrError(env, SR_AcousticStateReset((SR_Recognizer*)recognizer));
3204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
3214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_SR_1AcousticStateSet
3234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        (JNIEnv *env, jclass clazz, jint recognizer, jstring state) {
3244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    const char* st = env->GetStringUTFChars(state, 0);
3254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    checkEsrError(env, SR_AcousticStateSet((SR_Recognizer*)recognizer, st));
3264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    env->ReleaseStringUTFChars(state, st);
3274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
3284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT jstring JNICALL Java_android_speech_srec_Recognizer_SR_1AcousticStateGet
3304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        (JNIEnv *env, jclass clazz, jint recognizer) {
3314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    char rtn[1000];
3324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    size_t rtnLength = sizeof(rtn) - 1;
3334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    ESR_ReturnCode esr_status = SR_AcousticStateGet((SR_Recognizer*)recognizer, rtn, &rtnLength);
3344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if (esr_status) {
3354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        checkEsrError(env, esr_status);
3364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        return NULL;
3374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
3384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    rtn[rtnLength] = 0;
3394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return env->NewStringUTF(rtn);
3404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
3414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project//////////////////////////////////////////////////////////////////////////
3444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project// SR_Grammar JNI implementations
3454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project//////////////////////////////////////////////////////////////////////////
3464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_SR_1GrammarCompile
3484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        (JNIEnv *env, jclass clazz, jint grammar) {
3494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    checkEsrError(env, SR_GrammarCompile((SR_Grammar*)grammar));
3504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
3514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_SR_1GrammarAddWordToSlot
3534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        (JNIEnv *env, jclass clazz, jint grammar, jstring slot, jstring word, jstring pronunciation, jint weight, jstring tag) {
3544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    const char* sl = 0;
3554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    const char* wo = 0;
3564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    const char* pr = 0;
3574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    const char* ta = 0;
3584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if ((sl = env->GetStringUTFChars(slot, 0)) &&
3594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project            (wo = env->GetStringUTFChars(word, 0)) &&
3604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project            (!pronunciation || (pr = env->GetStringUTFChars(pronunciation, 0))) &&
3614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project            (ta = env->GetStringUTFChars(tag, 0))) {
3624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        checkEsrError(env, SR_GrammarAddWordToSlot((SR_Grammar*)grammar, sl, wo, pr, weight, ta));
3634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
3644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if (ta) env->ReleaseStringUTFChars(tag, ta);
3654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if (pr) env->ReleaseStringUTFChars(pronunciation, pr);
3664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if (wo) env->ReleaseStringUTFChars(word, wo);
3674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if (sl) env->ReleaseStringUTFChars(slot, sl);
3684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
3694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_SR_1GrammarResetAllSlots
3714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        (JNIEnv *env, jclass clazz, jint grammar) {
3724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    checkEsrError(env, SR_GrammarResetAllSlots((SR_Grammar*)grammar));
3734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
3744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_SR_1GrammarSetupVocabulary
3764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        (JNIEnv *env, jclass clazz, jint grammar, jint vocabulary) {
3774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    checkEsrError(env, SR_GrammarSetupVocabulary((SR_Grammar*)grammar, (SR_Vocabulary*)vocabulary));
3784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
3794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_SR_1GrammarSetupRecognizer
3814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        (JNIEnv *env, jclass clazz, jint grammar, jint recognizer) {
3824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    checkEsrError(env, SR_GrammarSetupRecognizer((SR_Grammar*)grammar, (SR_Recognizer*)recognizer));
3834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
3844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_SR_1GrammarUnsetupRecognizer
3864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        (JNIEnv *env, jclass clazz, jint grammar) {
3874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    checkEsrError(env, SR_GrammarUnsetupRecognizer((SR_Grammar*)grammar));
3884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
3894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT jint JNICALL Java_android_speech_srec_Recognizer_SR_1GrammarCreate
3914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        (JNIEnv *env, jclass clazz) {
3924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    SR_Grammar* grammar = 0;
3934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    checkEsrError(env, SR_GrammarCreate(&grammar));
3944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return (jint)grammar;
3954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
3964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_SR_1GrammarDestroy
3984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        (JNIEnv *env, jclass clazz, jint grammar) {
3994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    checkEsrError(env, SR_GrammarDestroy((SR_Grammar*)grammar));
4004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
4014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT jint JNICALL Java_android_speech_srec_Recognizer_SR_1GrammarLoad
4034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        (JNIEnv *env, jclass clazz, jstring fileName) {
4044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    // TODO: check for fileName NPE
4054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    SR_Grammar* grammar = 0;
4064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    const char* fn = env->GetStringUTFChars(fileName, 0);
4074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    checkEsrError(env, SR_GrammarLoad(fn, &grammar));
4084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    env->ReleaseStringUTFChars(fileName, fn);
4094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return (jint)grammar;
4104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
4114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_SR_1GrammarSave
4134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        (JNIEnv *env, jclass clazz, jint grammar, jstring fileName) {
4144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    const char* fn = env->GetStringUTFChars(fileName, 0);
4154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    checkEsrError(env, SR_GrammarSave((SR_Grammar*)grammar, fn));
4164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    env->ReleaseStringUTFChars(fileName, fn);
4174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
4184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_SR_1GrammarAllowOnly
4204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        (JNIEnv *env, jclass clazz, jint grammar, jstring transcription) {
4214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    const char* tr = env->GetStringUTFChars(transcription, 0);
4224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    checkEsrError(env, SR_GrammarSave((SR_Grammar*)grammar, tr));
4234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    env->ReleaseStringUTFChars(transcription, tr);
4244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
4254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_SR_1GrammarAllowAll
4274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        (JNIEnv *env, jclass clazz, jint grammar) {
4284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    checkEsrError(env, SR_GrammarAllowAll((SR_Grammar*)grammar));
4294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
4304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project//////////////////////////////////////////////////////////////////////////
4334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project// SR_Vocabulary JNI implementations
4344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project//////////////////////////////////////////////////////////////////////////
4354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT jint JNICALL Java_android_speech_srec_Recognizer_SR_1VocabularyLoad
4374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        (JNIEnv *env, jclass clazz) {
4384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    char filename[P_PATH_MAX];
4394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    size_t flen = sizeof(filename) - 1;
4404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    checkEsrError(env, ESR_SessionGetLCHAR ( L("cmdline.vocabulary"), filename, &flen ));
4414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    filename[sizeof(filename) - 1] = 0;
4424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    // TODO: do we need to clean up the recognizer if this fails?
4434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    SR_Vocabulary* vocabulary = NULL;
4444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    checkEsrError(env, SR_VocabularyLoad(filename, &vocabulary));
4454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return (jint)vocabulary;
4464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
4474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_SR_1VocabularyDestroy
4494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        (JNIEnv *env, jclass clazz, jint vocabulary) {
4504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    // TODO: do we need to clean up the recognizer if this fails?
4514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    checkEsrError(env, SR_VocabularyDestroy((SR_Vocabulary*)vocabulary));
4524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
4534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT jstring JNICALL Java_android_speech_srec_Recognizer_SR_1VocabularyGetPronunciation
4554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        (JNIEnv *env, jclass clazz, jint vocabulary, jstring word) {
4564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    char rtn[1000];
4574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    size_t rtnLength = sizeof(rtn) - 1;
4584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    const char* wo = env->GetStringUTFChars(word, 0);
4594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    ESR_ReturnCode esr_status = SR_VocabularyGetPronunciation((SR_Vocabulary*)vocabulary, wo, rtn, &rtnLength);
4604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    env->ReleaseStringUTFChars(word, wo);
4614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if (esr_status) {
4624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        checkEsrError(env, esr_status);
4634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        return NULL;
4644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
4654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    rtn[rtnLength] = 0;
4664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return env->NewStringUTF(rtn);
4674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
4684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project//////////////////////////////////////////////////////////////////////////
4714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project// SR_RecognizerResult JNI implementations
4724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project//////////////////////////////////////////////////////////////////////////
4734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT jbyteArray JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerResultGetWaveform
4754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        (JNIEnv *env, jclass clazz, jint recognizer) {
4764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    unimplemented(env);
4774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return 0;
4784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
4794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT jint JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerResultGetSize
4814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        (JNIEnv *env, jclass clazz, jint recognizer) {
4824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    size_t size = 0;
4834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    checkEsrError(env, SR_RecognizerResultGetSize(((SR_RecognizerImpl*)recognizer)->result, &size));
4844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return size;
4854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
4864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT jint JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerResultGetKeyCount
4884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        (JNIEnv *env, jclass clazz, jint recognizer, jint nbest) {
4894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    size_t size = 0;
4904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    checkEsrError(env, SR_RecognizerResultGetKeyCount(((SR_RecognizerImpl*)recognizer)->result, nbest, &size));
4914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return size;
4924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
4934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT jobjectArray JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerResultGetKeyList
4954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        (JNIEnv *env, jclass clazz, jint recognizer, jint nbest) {
4964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    // fetch list
4974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    LCHAR* list[200];
4984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    size_t listSize = sizeof(list) / sizeof(list[0]);
4994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    ESR_ReturnCode esr_status = SR_RecognizerResultGetKeyList(((SR_RecognizerImpl*)recognizer)->result, nbest, list, &listSize);
5004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if (esr_status) {
5014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        checkEsrError(env, esr_status);
5024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        return NULL;
5034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
5044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
5054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    // create String[] of keys
506af6bc004589c456d52a8858ec8e3b448d17077bcJohn Eckerdal    jclass stringClass = env->FindClass("java/lang/String");
5074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if (!stringClass) return NULL;
5084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    jobjectArray array = env->NewObjectArray(listSize, stringClass, NULL);
5094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if (!array) return NULL;
5104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
5114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    // fill it
5124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    for (size_t i = 0; i < listSize; i++) {
5134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        // generate new String for key
5144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        jstring key = env->NewStringUTF(list[i]);
5154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        if (!key) return NULL;
5164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        // set the array
5174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        env->SetObjectArrayElement(array, i, key);
5184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        env->DeleteLocalRef(key);
5194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
5204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
5214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return array;
5224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
5234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
5244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT jstring JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerResultGetValue
5254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        (JNIEnv *env, jclass clazz, jint recognizer, jint nbest, jstring key) {
5264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    char rtn[1000];
5274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    size_t rtnLength = sizeof(rtn) - 1;
5284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    const char* ke = env->GetStringUTFChars(key, 0);
5294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    ESR_ReturnCode esr_status = SR_RecognizerResultGetValue(((SR_RecognizerImpl*)recognizer)->result, nbest, ke, rtn, &rtnLength);
5304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    env->ReleaseStringUTFChars(key, ke);
5314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if (esr_status) {
5324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        checkEsrError(env, esr_status);
5334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        return NULL;
5344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
5354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    rtn[rtnLength] = 0;
5364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return env->NewStringUTF(rtn);
5374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
5384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
5394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
5404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/*
5414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Table of methods associated with a single class.
5424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */
5434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNINativeMethod gMethods[] = {
5444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    /* name, signature, funcPtr */
5454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    // PMem
5464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {"PMemInit",                           "()V",                     (void*)Java_android_speech_srec_Recognizer_PMemInit},
5474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {"PMemShutdown",                       "()V",                     (void*)Java_android_speech_srec_Recognizer_PMemShutdown},
5484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    // SR_Session
5494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {"SR_SessionCreate",                   "(Ljava/lang/String;)V",   (void*)Java_android_speech_srec_Recognizer_SR_1SessionCreate},
5504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {"SR_SessionDestroy",                  "()V",                     (void*)Java_android_speech_srec_Recognizer_SR_1SessionDestroy},
5514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    // SR_Recognizer
5524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {"SR_RecognizerStart",                 "(I)V",                    (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerStart},
5534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {"SR_RecognizerStop",                  "(I)V",                    (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerStop},
5544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {"SR_RecognizerCreate",                "()I",                     (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerCreate},
5554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {"SR_RecognizerDestroy",               "(I)V",                    (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerDestroy},
5564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {"SR_RecognizerSetup",                 "(I)V",                    (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerSetup},
5574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {"SR_RecognizerUnsetup",               "(I)V",                    (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerUnsetup},
5584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {"SR_RecognizerIsSetup",               "(I)Z",                    (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerIsSetup},
5594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {"SR_RecognizerGetParameter",          "(ILjava/lang/String;)Ljava/lang/String;", (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerGetParameter},
5604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {"SR_RecognizerGetSize_tParameter",    "(ILjava/lang/String;)I",  (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerGetSize_1tParameter},
5614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {"SR_RecognizerGetBoolParameter",      "(ILjava/lang/String;)Z",  (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerGetBoolParameter},
5624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {"SR_RecognizerSetParameter",          "(ILjava/lang/String;Ljava/lang/String;)V", (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerSetParameter},
5634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {"SR_RecognizerSetSize_tParameter",    "(ILjava/lang/String;I)V", (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerSetSize_1tParameter},
5644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {"SR_RecognizerSetBoolParameter",      "(ILjava/lang/String;Z)V", (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerSetBoolParameter},
5654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {"SR_RecognizerSetupRule",             "(IILjava/lang/String;)V", (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerSetupRule},
5664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {"SR_RecognizerHasSetupRules",         "(I)Z",                    (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerHasSetupRules},
5674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {"SR_RecognizerActivateRule",          "(IILjava/lang/String;I)V", (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerActivateRule},
5684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {"SR_RecognizerDeactivateRule",        "(IILjava/lang/String;)V", (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerDeactivateRule},
5694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {"SR_RecognizerDeactivateAllRules",    "(I)V",                    (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerDeactivateAllRules},
5704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {"SR_RecognizerIsActiveRule",          "(IILjava/lang/String;)Z", (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerIsActiveRule},
5714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {"SR_RecognizerCheckGrammarConsistency", "(II)Z",                 (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerCheckGrammarConsistency},
5724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {"SR_RecognizerPutAudio",              "(I[BIIZ)I",               (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerPutAudio},
5734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {"SR_RecognizerAdvance",               "(I)I",                    (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerAdvance},
5744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {"SR_RecognizerIsSignalClipping",      "(I)Z",                    (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerIsSignalClipping},
5754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {"SR_RecognizerIsSignalDCOffset",      "(I)Z",                    (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerIsSignalDCOffset},
5764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {"SR_RecognizerIsSignalNoisy",         "(I)Z",                    (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerIsSignalNoisy},
5774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {"SR_RecognizerIsSignalTooQuiet",      "(I)Z",                    (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerIsSignalTooQuiet},
5784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {"SR_RecognizerIsSignalTooFewSamples", "(I)Z",                    (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerIsSignalTooFewSamples},
5794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {"SR_RecognizerIsSignalTooManySamples", "(I)Z",                   (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerIsSignalTooManySamples},
5804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    // SR_AcousticState
5814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {"SR_AcousticStateReset",               "(I)V",                   (void*)Java_android_speech_srec_Recognizer_SR_1AcousticStateReset},
5824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {"SR_AcousticStateSet",                 "(ILjava/lang/String;)V", (void*)Java_android_speech_srec_Recognizer_SR_1AcousticStateSet},
5834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {"SR_AcousticStateGet",                 "(I)Ljava/lang/String;",  (void*)Java_android_speech_srec_Recognizer_SR_1AcousticStateGet},
5844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    // SR_Grammar
5854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {"SR_GrammarCompile",                  "(I)V",                    (void*)Java_android_speech_srec_Recognizer_SR_1GrammarCompile},
5864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {"SR_GrammarAddWordToSlot",            "(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;)V", (void*)Java_android_speech_srec_Recognizer_SR_1GrammarAddWordToSlot},
5874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {"SR_GrammarResetAllSlots",            "(I)V",                    (void*)Java_android_speech_srec_Recognizer_SR_1GrammarResetAllSlots},
5884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {"SR_GrammarSetupVocabulary",          "(II)V",                   (void*)Java_android_speech_srec_Recognizer_SR_1GrammarSetupVocabulary},
5894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {"SR_GrammarSetupRecognizer",          "(II)V",                   (void*)Java_android_speech_srec_Recognizer_SR_1GrammarSetupRecognizer},
5904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {"SR_GrammarUnsetupRecognizer",        "(I)V",                    (void*)Java_android_speech_srec_Recognizer_SR_1GrammarUnsetupRecognizer},
5914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {"SR_GrammarCreate",                   "()I",                     (void*)Java_android_speech_srec_Recognizer_SR_1GrammarCreate},
5924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {"SR_GrammarDestroy",                  "(I)V",                    (void*)Java_android_speech_srec_Recognizer_SR_1GrammarDestroy},
5934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {"SR_GrammarLoad",                     "(Ljava/lang/String;)I",   (void*)Java_android_speech_srec_Recognizer_SR_1GrammarLoad},
5944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {"SR_GrammarSave",                     "(ILjava/lang/String;)V",  (void*)Java_android_speech_srec_Recognizer_SR_1GrammarSave},
5954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {"SR_GrammarAllowOnly",                "(ILjava/lang/String;)V",  (void*)Java_android_speech_srec_Recognizer_SR_1GrammarAllowOnly},
5964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {"SR_GrammarAllowAll",                 "(I)V",                    (void*)Java_android_speech_srec_Recognizer_SR_1GrammarAllowAll},
5974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    // SR_Vocabulary
5984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {"SR_VocabularyLoad",                  "()I",                     (void*)Java_android_speech_srec_Recognizer_SR_1VocabularyLoad},
5994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {"SR_VocabularyDestroy",               "(I)V",                    (void*)Java_android_speech_srec_Recognizer_SR_1VocabularyDestroy},
6004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {"SR_VocabularyGetPronunciation",      "(ILjava/lang/String;)Ljava/lang/String;",  (void*)Java_android_speech_srec_Recognizer_SR_1VocabularyGetPronunciation},
6014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    // SR_RecognizerResult
6024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {"SR_RecognizerResultGetWaveform",     "(I)[B",                   (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerResultGetWaveform},
6034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {"SR_RecognizerResultGetSize",         "(I)I",                    (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerResultGetSize},
6044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {"SR_RecognizerResultGetKeyCount",     "(II)I",                   (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerResultGetKeyCount},
6054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {"SR_RecognizerResultGetKeyList",      "(II)[Ljava/lang/String;", (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerResultGetKeyList},
6064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {"SR_RecognizerResultGetValue",        "(IILjava/lang/String;)Ljava/lang/String;", (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerResultGetValue},
6074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project};
6084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
6094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/*
6104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Returns the JNI version on success, -1 on failure.
6114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */
6124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectjint register_android_speech_srec_Recognizer(JavaVM* vm, void* reserved)
6134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
6144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    JNIEnv* env = NULL;
6154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    jclass clazz = NULL;
6164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    const char* className = "android/speech/srec/Recognizer";
6174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
6184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
619040dcc36996cded4371cc59dfc3a9e53247a61f5Steve Block        ALOGE("ERROR: GetEnv failed\n");
6204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        return -1;
6214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
6224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    assert(env != NULL);
6234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
6244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    clazz = env->FindClass(className);
6254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if (clazz == NULL) {
626040dcc36996cded4371cc59dfc3a9e53247a61f5Steve Block        ALOGE("Native registration unable to find class '%s'\n", className);
6274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        return -1;
6284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
6294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if (env->RegisterNatives(clazz, gMethods,
6304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project            sizeof(gMethods) / sizeof(gMethods[0])) < 0) {
631040dcc36996cded4371cc59dfc3a9e53247a61f5Steve Block        ALOGE("RegisterNatives failed for '%s'\n", className);
6324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        return -1;
6334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
6344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
6354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    /* success -- return valid version number */
6364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return JNI_VERSION_1_4;
6374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
6384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
6394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
6404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectextern jint register_android_speech_srec_MicrophoneInputStream(JavaVM* vm, void* reserved);
6414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
6424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectjint JNI_OnLoad(JavaVM* vm, void* reserved)
6434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
6444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if (register_android_speech_srec_MicrophoneInputStream(vm, reserved) != JNI_VERSION_1_4 ||
6454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        register_android_speech_srec_Recognizer(vm, reserved) != JNI_VERSION_1_4) return -1;
6464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return JNI_VERSION_1_4;
6474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
648