diff options
Diffstat (limited to 'lib/picoextapi.c')
-rw-r--r-- | lib/picoextapi.c | 228 |
1 files changed, 228 insertions, 0 deletions
diff --git a/lib/picoextapi.c b/lib/picoextapi.c new file mode 100644 index 0000000..4c5d30c --- /dev/null +++ b/lib/picoextapi.c @@ -0,0 +1,228 @@ +/* + * 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 picoextapi.c + * + * API extension for development use + * + * Copyright (C) 2008-2009 SVOX AG, Baslerstr. 30, 8048 Zuerich, Switzerland + * All rights reserved. + * + * History: + * - 2009-04-20 -- initial version + * + */ +#include "picodefs.h" +#include "picoos.h" +#include "picoctrl.h" +#include "picodbg.h" +#include "picoapi.h" +#include "picoextapi.h" +#include "picoapid.h" + +#ifdef __cplusplus +extern "C" { +#endif +#if 0 +} +#endif + +/* this is not used anymore. For the picosh banner, set + * progv.progVers in picosh.c instead. */ +#define PICO_VERSION_INFO (picoos_char *)"invalid" + + +extern pico_Status pico_initialize_priv( + void *memory, + const pico_Uint32 size, + pico_Int16 enableMemProt, + pico_System *system); + + +/* System initialization and termination functions ****************************/ + + +PICO_FUNC picoext_initialize( + void *memory, + const pico_Uint32 size, + pico_Int16 enableMemProt, + pico_System *outSystem + ) +{ + return pico_initialize_priv(memory, size, enableMemProt, outSystem); +} + + +/* System and lingware inspection functions ***********************************/ + +/* @todo : not supported yet */ +PICO_FUNC picoext_getVersionInfo( + pico_Retstring outInfo, + const pico_Int16 outInfoMaxLen + ) +{ + if (outInfo == NULL) { + return PICO_ERR_NULLPTR_ACCESS; + } + picoos_strlcpy((picoos_char *) outInfo, PICO_VERSION_INFO, outInfoMaxLen); + return PICO_OK; +} + + +/* Debugging/testing support functions *****************************************/ + + +PICO_FUNC picoext_setTraceLevel( + pico_System system, + pico_Int32 level + ) +{ + if (NULL == system) { + return PICO_ERR_NULLPTR_ACCESS; + } + if (level < 0) { + level = 0; + } + if (level > PICODBG_LOG_LEVEL_TRACE) { + level = PICODBG_LOG_LEVEL_TRACE; + } + PICODBG_SET_LOG_LEVEL(level); + return PICO_OK; +} + + +PICO_FUNC picoext_setTraceFilterFN( + pico_System system, + const pico_Char *name + ) +{ + + if (NULL == system) { + return PICO_ERR_NULLPTR_ACCESS; + } + name = name; /*PP 13.10.08 : fix warning "var not used in this function"*/ + PICODBG_SET_LOG_FILTERFN((const char *)name); + return PICO_OK; +} + + +PICO_FUNC picoext_setLogFile( + pico_System system, + const pico_Char *name + ) +{ + if (NULL == system) { + return PICO_ERR_NULLPTR_ACCESS; + } + name = name; /*PP 13.10.08 : fix warning "var not used in this function"*/ + PICODBG_SET_LOG_FILE((const char *) name); + return PICO_OK; +} + + +/* Memory usage ***************************************************************/ + + +pico_Status getMemUsage( + picoos_Common common, + picoos_bool resetIncremental, + picoos_int32 *usedBytes, + picoos_int32 *incrUsedBytes, + picoos_int32 *maxUsedBytes + ) +{ + pico_Status status = PICO_OK; + + if (common == NULL) { + status = PICO_ERR_NULLPTR_ACCESS; + } else { + picoos_emReset(common->em); + picoos_getMemUsage(common->mm, resetIncremental, usedBytes, incrUsedBytes, maxUsedBytes); + status = picoos_emGetExceptionCode(common->em); + } + + return status; +} + + +PICO_FUNC picoext_getSystemMemUsage( + pico_System system, + pico_Int16 resetIncremental, + pico_Int32 *outUsedBytes, + pico_Int32 *outIncrUsedBytes, + pico_Int32 *outMaxUsedBytes + ) +{ + pico_Status status = PICO_OK; + + if (!is_valid_system_handle(system)) { + status = PICO_ERR_INVALID_HANDLE; + } else if ((outUsedBytes == NULL) || (outIncrUsedBytes == NULL) || (outMaxUsedBytes == NULL)) { + status = PICO_ERR_NULLPTR_ACCESS; + } else { + picoos_Common common = pico_sysGetCommon(system); + status = getMemUsage(common, resetIncremental != 0, outUsedBytes, outIncrUsedBytes, outMaxUsedBytes); + } + + return status; +} + + +PICO_FUNC picoext_getEngineMemUsage( + pico_Engine engine, + pico_Int16 resetIncremental, + pico_Int32 *outUsedBytes, + pico_Int32 *outIncrUsedBytes, + pico_Int32 *outMaxUsedBytes + ) +{ + pico_Status status = PICO_OK; + + if (!picoctrl_isValidEngineHandle((picoctrl_Engine) engine)) { + status = PICO_ERR_INVALID_HANDLE; + } else if ((outUsedBytes == NULL) || (outIncrUsedBytes == NULL) || (outMaxUsedBytes == NULL)) { + status = PICO_ERR_NULLPTR_ACCESS; + } else { + picoos_Common common = picoctrl_engGetCommon((picoctrl_Engine) engine); + status = getMemUsage(common, resetIncremental != 0, outUsedBytes, outIncrUsedBytes, outMaxUsedBytes); + } + + return status; +} + +PICO_FUNC picoext_getLastScheduledPU( + pico_Engine engine + ) +{ + pico_Status status = PICO_OK; + status = picoctrl_getLastScheduledPU((picoctrl_Engine) engine); + return status; +} + +PICO_FUNC picoext_getLastProducedItemType( + pico_Engine engine + ) +{ + pico_Status status = PICO_OK; + status = picoctrl_getLastProducedItemType((picoctrl_Engine) engine); + return status; +} + +#ifdef __cplusplus +} +#endif + +/* end */ |