1/*
2 * Copyright (C) 2008-2009 SVOX AG, Baslerstr. 30, 8048 Zuerich, Switzerland
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *     http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16/**
17 * @file picoextapi.c
18 *
19 * API extension for development use
20 *
21 * Copyright (C) 2008-2009 SVOX AG, Baslerstr. 30, 8048 Zuerich, Switzerland
22 * All rights reserved.
23 *
24 * History:
25 * - 2009-04-20 -- initial version
26 *
27 */
28#include "picodefs.h"
29#include "picoos.h"
30#include "picoctrl.h"
31#include "picodbg.h"
32#include "picoapi.h"
33#include "picoextapi.h"
34#include "picoapid.h"
35
36#ifdef __cplusplus
37extern "C" {
38#endif
39#if 0
40}
41#endif
42
43/* this is not used anymore. For the picosh banner, set
44 * progv.progVers in picosh.c instead. */
45#define PICO_VERSION_INFO  (picoos_char *)"invalid"
46
47
48extern pico_Status pico_initialize_priv(
49        void *memory,
50        const pico_Uint32 size,
51        pico_Int16 enableMemProt,
52        pico_System *system);
53
54
55/* System initialization and termination functions ****************************/
56
57
58PICO_FUNC picoext_initialize(
59        void *memory,
60        const pico_Uint32 size,
61        pico_Int16 enableMemProt,
62        pico_System *outSystem
63        )
64{
65    return pico_initialize_priv(memory, size, enableMemProt, outSystem);
66}
67
68
69/* System and lingware inspection functions ***********************************/
70
71/* @todo : not supported yet */
72PICO_FUNC picoext_getVersionInfo(
73        pico_Retstring outInfo,
74        const pico_Int16 outInfoMaxLen
75        )
76{
77    if (outInfo == NULL) {
78        return PICO_ERR_NULLPTR_ACCESS;
79    }
80    picoos_strlcpy((picoos_char *) outInfo, PICO_VERSION_INFO, outInfoMaxLen);
81    return PICO_OK;
82}
83
84
85/* Debugging/testing support functions *****************************************/
86
87
88PICO_FUNC picoext_setTraceLevel(
89        pico_System system,
90        pico_Int32 level
91        )
92{
93    if (NULL == system) {
94        return PICO_ERR_NULLPTR_ACCESS;
95    }
96    if (level < 0) {
97        level = 0;
98    }
99    if (level > PICODBG_LOG_LEVEL_TRACE) {
100        level = PICODBG_LOG_LEVEL_TRACE;
101    }
102    PICODBG_SET_LOG_LEVEL(level);
103    return PICO_OK;
104}
105
106
107PICO_FUNC picoext_setTraceFilterFN(
108        pico_System system,
109        const pico_Char *name
110        )
111{
112
113    if (NULL == system) {
114        return PICO_ERR_NULLPTR_ACCESS;
115    }
116    name = name;        /*PP 13.10.08 : fix warning "var not used in this function"*/
117    PICODBG_SET_LOG_FILTERFN((const char *)name);
118    return PICO_OK;
119}
120
121
122PICO_FUNC picoext_setLogFile(
123        pico_System system,
124        const pico_Char *name
125        )
126{
127    if (NULL == system) {
128        return PICO_ERR_NULLPTR_ACCESS;
129    }
130    name = name;        /*PP 13.10.08 : fix warning "var not used in this function"*/
131    PICODBG_SET_LOG_FILE((const char *) name);
132    return PICO_OK;
133}
134
135
136/* Memory usage ***************************************************************/
137
138
139pico_Status getMemUsage(
140        picoos_Common common,
141        picoos_bool resetIncremental,
142        picoos_int32 *usedBytes,
143        picoos_int32 *incrUsedBytes,
144        picoos_int32 *maxUsedBytes
145        )
146{
147    pico_Status status = PICO_OK;
148
149    if (common == NULL) {
150        status =  PICO_ERR_NULLPTR_ACCESS;
151    } else {
152        picoos_emReset(common->em);
153        picoos_getMemUsage(common->mm, resetIncremental, usedBytes, incrUsedBytes, maxUsedBytes);
154        status = picoos_emGetExceptionCode(common->em);
155    }
156
157    return status;
158}
159
160
161PICO_FUNC picoext_getSystemMemUsage(
162        pico_System system,
163        pico_Int16 resetIncremental,
164        pico_Int32 *outUsedBytes,
165        pico_Int32 *outIncrUsedBytes,
166        pico_Int32 *outMaxUsedBytes
167        )
168{
169    pico_Status status = PICO_OK;
170
171    if (!is_valid_system_handle(system)) {
172        status = PICO_ERR_INVALID_HANDLE;
173    } else if ((outUsedBytes == NULL) || (outIncrUsedBytes == NULL) || (outMaxUsedBytes == NULL)) {
174        status = PICO_ERR_NULLPTR_ACCESS;
175    } else {
176        picoos_Common common = pico_sysGetCommon(system);
177        status = getMemUsage(common, resetIncremental != 0, outUsedBytes, outIncrUsedBytes, outMaxUsedBytes);
178    }
179
180    return status;
181}
182
183
184PICO_FUNC picoext_getEngineMemUsage(
185        pico_Engine engine,
186        pico_Int16 resetIncremental,
187        pico_Int32 *outUsedBytes,
188        pico_Int32 *outIncrUsedBytes,
189        pico_Int32 *outMaxUsedBytes
190        )
191{
192    pico_Status status = PICO_OK;
193
194    if (!picoctrl_isValidEngineHandle((picoctrl_Engine) engine)) {
195        status = PICO_ERR_INVALID_HANDLE;
196    } else if ((outUsedBytes == NULL) || (outIncrUsedBytes == NULL) || (outMaxUsedBytes == NULL)) {
197        status = PICO_ERR_NULLPTR_ACCESS;
198    } else {
199        picoos_Common common = picoctrl_engGetCommon((picoctrl_Engine) engine);
200        status = getMemUsage(common, resetIncremental != 0, outUsedBytes, outIncrUsedBytes, outMaxUsedBytes);
201    }
202
203    return status;
204}
205
206PICO_FUNC picoext_getLastScheduledPU(
207        pico_Engine engine
208        )
209{
210    pico_Status status = PICO_OK;
211    status = picoctrl_getLastScheduledPU((picoctrl_Engine) engine);
212    return status;
213}
214
215PICO_FUNC picoext_getLastProducedItemType(
216        pico_Engine engine
217        )
218{
219    pico_Status status = PICO_OK;
220    status = picoctrl_getLastProducedItemType((picoctrl_Engine) engine);
221    return status;
222}
223
224#ifdef __cplusplus
225}
226#endif
227
228/* end */
229