/*
* Copyright (C) 2008-2009 SVOX AG, Baslerstr. 30, 8048 Zuerich, Switzerland
*
* 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 picorsrc.h
*
* Copyright (C) 2008-2009 SVOX AG, Baslerstr. 30, 8048 Zuerich, Switzerland
* All rights reserved.
*
* History:
* - 2009-04-20 -- initial version
*
*/
/**
* @addtogroup picorsrc
*
* <b> Pico Resource Management module </b>\n
*
*/
#ifndef PICORSRC_H_
#define PICORSRC_H_
#include "picodefs.h"
#include "picoos.h"
#include "picoknow.h"
#ifdef __cplusplus
extern "C" {
#endif
#if 0
}
#endif
#define PICORSRC_MAX_RSRC_NAME_SIZ PICO_MAX_RESOURCE_NAME_SIZE /* including terminating NULLC */
#define PICORSRC_MAX_NUM_VOICES 64
/* size of kb array of a voice */
#define PICORSRC_KB_ARRAY_SIZE 64
typedef picoos_char picorsrc_resource_name_t[PICORSRC_MAX_RSRC_NAME_SIZ];
typedef enum picorsrc_resource_type {
PICORSRC_TYPE_NULL,
PICORSRC_TYPE_TEXTANA,
PICORSRC_TYPE_SIGGEN,
PICORSRC_TYPE_USER_LEX,
PICORSRC_TYPE_USER_PREPROC,
PICORSRC_TYPE_OTHER
} picorsrc_resource_type_t;
#define PICORSRC_FIELD_VALUE_TEXTANA (picoos_char *) "TEXTANA"
#define PICORSRC_FIELD_VALUE_SIGGEN (picoos_char *) "SIGGEN"
#define PICORSRC_FIELD_VALUE_USERLEX (picoos_char *) "USERLEX"
#define PICORSRC_FIELD_VALUE_USERTPP (picoos_char *) "USERTPP"
typedef struct picorsrc_resource_manager * picorsrc_ResourceManager;
typedef struct picorsrc_voice * picorsrc_Voice;
typedef struct picorsrc_resource * picorsrc_Resource;
/* **************************************************************************
*
* file name extensions
*
****************************************************************************/
#define PICO_BIN_EXTENSION ".bin"
#define PICO_INPLACE_EXTENSION ".inp"
/* **************************************************************************
*
* construct/destruct resource manager
*
****************************************************************************/
/* create resource manager, given a config file name (or default name, if empty) */
picorsrc_ResourceManager picorsrc_newResourceManager(picoos_MemoryManager mm, picoos_Common common /* , picoos_char * configFile */);
void picorsrc_disposeResourceManager(picoos_MemoryManager mm, picorsrc_ResourceManager * this);
/* **************************************************************************
*
* resources
*
****************************************************************************/
/**
* Returns non-zero if 'resource' is a valid resource handle, zero otherwise.
*/
picoos_int16 picoctrl_isValidResourceHandle(picorsrc_Resource resource);
/* load resource file. the type of resource file, magic numbers, checksum etc. are in the header, then follows the directory
* (with fixed structure per resource type), then the knowledge bases themselves (as byte streams) */
pico_status_t picorsrc_loadResource(picorsrc_ResourceManager this,
picoos_char * fileName, picorsrc_Resource * resource);
/* unload resource file. (warn if resource file is busy) */
pico_status_t picorsrc_unloadResource(picorsrc_ResourceManager this, picorsrc_Resource * rsrc);
pico_status_t picorsrc_createDefaultResource(picorsrc_ResourceManager this /*,
picorsrc_Resource * resource */);
pico_status_t picorsrc_rsrcGetName(picorsrc_Resource resource,
picoos_char * name, picoos_uint32 maxlen);
/* **************************************************************************
*
* voice definitions
*
****************************************************************************/
pico_status_t picorsrc_createVoiceDefinition(picorsrc_ResourceManager this,
picoos_char * voiceName);
pico_status_t picorsrc_releaseVoiceDefinition(picorsrc_ResourceManager this,
picoos_char * voiceName);
pico_status_t picorsrc_addResourceToVoiceDefinition(picorsrc_ResourceManager this,
picoos_char * voiceName, picoos_char * resourceName);
/* **************************************************************************
*
* voices
*
****************************************************************************/
/** object : Voice
* shortcut : voice
*
*/
typedef struct picorsrc_voice {
picorsrc_Voice next;
picoknow_KnowledgeBase kbArray[PICORSRC_KB_ARRAY_SIZE];
picoos_uint8 numResources;
picorsrc_Resource resourceArray[PICO_MAX_NUM_RSRC_PER_VOICE];
} picorsrc_voice_t;
/* create voice, given a voice name. the corresponding lock counts are incremented */
pico_status_t picorsrc_createVoice(picorsrc_ResourceManager this, const picoos_char * voiceName, picorsrc_Voice * voice);
/* dispose voice. the corresponding lock counts are decremented. */
pico_status_t picorsrc_releaseVoice(picorsrc_ResourceManager this, picorsrc_Voice * voice);
#ifdef __cplusplus
}
#endif
#endif /*PICORSRC_H_*/