/* * 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 */