summaryrefslogtreecommitdiffstats
path: root/lib/picoextapi.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/picoextapi.c')
-rw-r--r--lib/picoextapi.c228
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 */