Aseba  1.5.5
natives.h
Go to the documentation of this file.
1 /*
2  Aseba - an event-based framework for distributed robot control
3  Copyright (C) 2007--2016:
4  Stephane Magnenat <stephane at magnenat dot net>
5  (http://stephane.magnenat.net)
6  and other contributors, see authors.txt for details
7 
8  This program is free software: you can redistribute it and/or modify
9  it under the terms of the GNU Lesser General Public License as published
10  by the Free Software Foundation, version 3 of the License.
11 
12  This program is distributed in the hope that it will be useful,
13  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  GNU Lesser General Public License for more details.
16 
17  You should have received a copy of the GNU Lesser General Public License
18  along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20 
21 #ifndef __ASEBA_NATIVES_H
22 #define __ASEBA_NATIVES_H
23 
24 #ifdef __cplusplus
25 extern "C" {
26 #endif
27 
28 #include "../common/types.h"
29 #include "vm.h"
30 
31 #ifdef _MSC_VER
32 #pragma warning( disable: 4200) // disable 0 size arrays warning
33 #define inline __inline // msvc does not support the standart C99/C++ static inline construct
34 #endif
35 
43 
44 // data structures
45 
47 typedef struct
48 {
50  const char* name;
52 
54 typedef struct
55 {
56  const char* name;
59 
61 typedef struct
62 {
63  const char* name;
64  const char* doc;
66 
69 
71 typedef struct
72 {
74  const char* name;
76 
78 typedef struct
79 {
80  const char* name;
81  const char* doc;
84 
85 // support functions
86 
88 static inline sint16 AsebaNativePopArg(AsebaVMState *vm)
89 {
90  return vm->stack[vm->sp--];
91 }
92 
93 // standard natives functions
94 
99 
104 
109 
114 
119 
124 
129 
134 
139 
144 
149 
154 
159 
164 
169 
174 
179 
184 
189 
194 
199 
201 void AsebaSetRandomSeed(uint16 seed);
203 uint16 AsebaGetRandom(void);
208 
210 #define ASEBA_NATIVES_STD_COUNT 21
211 
213 #define ASEBA_NATIVES_STD_FUNCTIONS \
214  AsebaNative_veccopy, \
215  AsebaNative_vecfill, \
216  AsebaNative_vecaddscalar, \
217  AsebaNative_vecadd, \
218  AsebaNative_vecsub, \
219  AsebaNative_vecmul, \
220  AsebaNative_vecdiv, \
221  AsebaNative_vecmin, \
222  AsebaNative_vecmax, \
223  AsebaNative_vecclamp, \
224  AsebaNative_vecdot, \
225  AsebaNative_vecstat, \
226  AsebaNative_vecargbounds, \
227  AsebaNative_vecsort, \
228  AsebaNative_mathmuldiv, \
229  AsebaNative_mathatan2, \
230  AsebaNative_mathsin, \
231  AsebaNative_mathcos, \
232  AsebaNative_mathrot2, \
233  AsebaNative_mathsqrt, \
234  AsebaNative_rand
235 
237 #define ASEBA_NATIVES_STD_DESCRIPTIONS \
238  &AsebaNativeDescription_veccopy, \
239  &AsebaNativeDescription_vecfill, \
240  &AsebaNativeDescription_vecaddscalar, \
241  &AsebaNativeDescription_vecadd, \
242  &AsebaNativeDescription_vecsub, \
243  &AsebaNativeDescription_vecmul, \
244  &AsebaNativeDescription_vecdiv, \
245  &AsebaNativeDescription_vecmin, \
246  &AsebaNativeDescription_vecmax, \
247  &AsebaNativeDescription_vecclamp, \
248  &AsebaNativeDescription_vecdot, \
249  &AsebaNativeDescription_vecstat, \
250  &AsebaNativeDescription_vecargbounds, \
251  &AsebaNativeDescription_vecsort, \
252  &AsebaNativeDescription_mathmuldiv, \
253  &AsebaNativeDescription_mathatan2, \
254  &AsebaNativeDescription_mathsin, \
255  &AsebaNativeDescription_mathcos, \
256  &AsebaNativeDescription_mathrot2, \
257  &AsebaNativeDescription_mathsqrt, \
258  &AsebaNativeDescription_rand
259 
262 #ifdef __cplusplus
263 } /* closing brace for extern "C" */
264 #endif
265 
266 #endif
void AsebaNative_vecargbounds(AsebaVMState *vm)
Function to get indices of the bounds of a vector.
Definition: natives.c:734
const char * name
name of the variable
Definition: natives.h:50
Description of all variable.
Definition: natives.h:54
void AsebaNative_mathsin(AsebaVMState *vm)
Function to perform sin.
Definition: natives.c:876
const AsebaNativeFunctionDescription AsebaNativeDescription_vecsub
Description of AsebaNative_vecsub.
Definition: natives.c:424
Description of a local event.
Definition: natives.h:61
void AsebaNative_vecsub(AsebaVMState *vm)
Function to substract two vectors.
Definition: natives.c:407
const AsebaNativeFunctionDescription AsebaNativeDescription_vecmin
Description of AsebaNative_vecmin.
Definition: natives.c:529
const AsebaNativeFunctionDescription AsebaNativeDescription_vecargbounds
Description of AsebaNative_vecargbounds.
Definition: natives.c:767
void AsebaNative_mathatan2(AsebaVMState *vm)
Function to perform atan2.
Definition: natives.c:845
This structure contains the state of the Aseba VM.
Definition: vm.h:69
const AsebaNativeFunctionDescription AsebaNativeDescription_veccopy
Description of AsebaNative_veccopy.
Definition: natives.c:305
const AsebaNativeFunctionDescription AsebaNativeDescription_mathatan2
Description of AsebaNative_mathatan2.
Definition: natives.c:864
void(* AsebaNativeFunctionPointer)(AsebaVMState *vm)
Signature of a native function.
Definition: natives.h:68
const AsebaNativeFunctionDescription AsebaNativeDescription_mathcos
Description of AsebaNative_mathcos.
Definition: natives.c:921
const AsebaNativeFunctionDescription AsebaNativeDescription_vecadd
Description of AsebaNative_vecadd.
Definition: natives.c:394
const char * doc
documentation of the local event
Definition: natives.h:64
void AsebaNative_vecmul(AsebaVMState *vm)
Function to multiply two vectors elements by elements.
Definition: natives.c:437
void AsebaNative_vecsort(AsebaVMState *vm)
Function to sort a vector.
Definition: natives.c:780
const AsebaNativeFunctionDescription AsebaNativeDescription_vecsort
Description of AsebaNative_vecsort.
Definition: natives.c:791
void AsebaNative_rand(AsebaVMState *vm)
Function to get a 16-bit signed random number.
Definition: natives.c:1116
const AsebaNativeFunctionDescription AsebaNativeDescription_vecfill
Description of AsebaNative_vecfill.
Definition: natives.c:334
const char * name
name of the microcontroller
Definition: natives.h:56
const char * name
name of the function
Definition: natives.h:80
const AsebaNativeFunctionDescription AsebaNativeDescription_vecclamp
Description of AsebaNative_vecclamp.
Definition: natives.c:596
const char * doc
documentation of the function
Definition: natives.h:81
sint16 size
size of the argument in number of values; if negative, template parameter
Definition: natives.h:73
void AsebaNative_veccopy(AsebaVMState *vm)
Function to copy a vector.
Definition: natives.c:288
void AsebaNative_vecstat(AsebaVMState *vm)
Function to perform statistics on a vector.
Definition: natives.c:685
Description of a variable.
Definition: natives.h:47
const AsebaNativeFunctionDescription AsebaNativeDescription_mathsqrt
Description of AsebaNative_mathsqrt.
Definition: natives.c:983
void AsebaNative_mathsqrt(AsebaVMState *vm)
Function to perform sqrt.
Definition: natives.c:966
const char * name
name of the function
Definition: natives.h:63
void AsebaNative_vecclamp(AsebaVMState *vm)
Function to clamp a vector of values element by element.
Definition: natives.c:574
void AsebaNative_vecmax(AsebaVMState *vm)
Function to take the element by element maximum.
Definition: natives.c:542
void AsebaNative_vecfill(AsebaVMState *vm)
Function to fill all the elements of a vector to a specific value.
Definition: natives.c:317
void AsebaNative_vecmin(AsebaVMState *vm)
Function to take the element by element minimum.
Definition: natives.c:509
void AsebaNative_vecaddscalar(AsebaVMState *vm)
Function to add a scalar to each element of a vector.
Definition: natives.c:346
void AsebaNative_vecadd(AsebaVMState *vm)
Function to add two vectors.
Definition: natives.c:377
unsigned short uint16
16 bits unsigned integer
Definition: types.h:36
void AsebaNative_vecdot(AsebaVMState *vm)
Function to perform a dot product on a vector.
Definition: natives.c:609
signed short sint16
16 bits signed integer
Definition: types.h:35
void AsebaNative_vecdiv(AsebaVMState *vm)
Function to divide two vectors elements by elements.
Definition: natives.c:467
void AsebaNative_mathrot2(AsebaVMState *vm)
Function to perform the rotation of a vector.
Definition: natives.c:932
const AsebaNativeFunctionDescription AsebaNativeDescription_vecdiv
Description of AsebaNative_vecsub.
Definition: natives.c:496
const AsebaNativeFunctionDescription AsebaNativeDescription_vecmax
Description of AsebaNative_vecsmax.
Definition: natives.c:562
const AsebaNativeFunctionDescription AsebaNativeDescription_vecdot
Description of AsebaNative_vecdot.
Definition: natives.c:671
Description of a native function.
Definition: natives.h:78
uint16 size
size of the variable
Definition: natives.h:49
const char * name
name of the argument
Definition: natives.h:74
const AsebaNativeFunctionDescription AsebaNativeDescription_vecmul
Description of AsebaNative_vecadd.
Definition: natives.c:454
Description of an argument of a native function.
Definition: natives.h:71
sint16 * stack
execution stack of size stackSize
Definition: vm.h:84
const AsebaNativeFunctionDescription AsebaNativeDescription_vecaddscalar
Description of AsebaNative_vecaddscalar.
Definition: natives.c:364
const AsebaNativeFunctionDescription AsebaNativeDescription_mathrot2
Description of AsebaNative_mathrot2.
Definition: natives.c:954
const AsebaNativeFunctionDescription AsebaNativeDescription_vecstat
Description of AsebaNative_vecstat.
Definition: natives.c:720
void AsebaNative_mathmuldiv(AsebaVMState *vm)
Function to perform dest = (a*b)/c in 32 bits.
Definition: natives.c:802
void AsebaNative_vecnonzerosequence(AsebaVMState *vm)
Function to get the middle index of the largest sequence of non-zero elements.
Definition: natives.c:994
Definition of Aseba Virtual Machine.
const AsebaNativeFunctionDescription AsebaNativeDescription_rand
Description of AsebaNative_rand.
Definition: natives.c:1131
void AsebaSetRandomSeed(uint16 seed)
Functon to set the seed of random generator.
Definition: natives.c:1105
const AsebaNativeFunctionDescription AsebaNativeDescription_mathsin
Description of AsebaNative_mathsin.
Definition: natives.c:893
const AsebaNativeFunctionDescription AsebaNativeDescription_mathmuldiv
Description of AsebaNative_mathmuldiv.
Definition: natives.c:832
const AsebaNativeFunctionDescription AsebaNativeDescription_vecnonzerosequence
Description of AsebaNative_vecnonzerosequence.
Definition: natives.c:1091
void AsebaNative_mathcos(AsebaVMState *vm)
Function to perform cos.
Definition: natives.c:904
uint16 AsebaGetRandom()
Functon to get a random number.
Definition: natives.c:1110