python

Dependencies:   TSI mbed

Fork of pymite by Norimasa Okamoto

Committer:
va009039
Date:
Tue Mar 12 11:40:41 2013 +0000
Revision:
2:a2bea117e22e
Child:
3:559c4bd38111
add NativeClassInterface, update mbed.py

Who changed what in which revision?

UserRevisionLine numberNew contents of line
va009039 2:a2bea117e22e 1 // NativeClassInterface.cpp 2013/3/12
va009039 2:a2bea117e22e 2 #include "mbed.h"
va009039 2:a2bea117e22e 3 #define __DEBUG__ 1
va009039 2:a2bea117e22e 4 #include "pm.h"
va009039 2:a2bea117e22e 5 #include "NativeClassInterface.h"
va009039 2:a2bea117e22e 6
va009039 2:a2bea117e22e 7 #undef __FILE_ID__
va009039 2:a2bea117e22e 8 #define __FILE_ID__ 0x71
va009039 2:a2bea117e22e 9
va009039 2:a2bea117e22e 10 template<>
va009039 2:a2bea117e22e 11 int NativeClassInterface::argv<int>(int n)
va009039 2:a2bea117e22e 12 {
va009039 2:a2bea117e22e 13 pPmObj_t pn = NATIVE_GET_LOCAL(n);
va009039 2:a2bea117e22e 14 if (OBJ_GET_TYPE(pn) == OBJ_TYPE_STR) {
va009039 2:a2bea117e22e 15 return ((pPmString_t)pn)->val[0];
va009039 2:a2bea117e22e 16 }
va009039 2:a2bea117e22e 17 return ((pPmInt_t)pn)->val;
va009039 2:a2bea117e22e 18 }
va009039 2:a2bea117e22e 19
va009039 2:a2bea117e22e 20 template<>
va009039 2:a2bea117e22e 21 bool NativeClassInterface::argv<bool>(int n)
va009039 2:a2bea117e22e 22 {
va009039 2:a2bea117e22e 23 pPmObj_t pn = NATIVE_GET_LOCAL(n);
va009039 2:a2bea117e22e 24 return ((pPmInt_t)pn)->val;
va009039 2:a2bea117e22e 25 }
va009039 2:a2bea117e22e 26
va009039 2:a2bea117e22e 27 template<>
va009039 2:a2bea117e22e 28 float NativeClassInterface::argv<float>(int n)
va009039 2:a2bea117e22e 29 {
va009039 2:a2bea117e22e 30 pPmObj_t pn = NATIVE_GET_LOCAL(n);
va009039 2:a2bea117e22e 31 return ((pPmFloat_t)pn)->val;
va009039 2:a2bea117e22e 32 }
va009039 2:a2bea117e22e 33
va009039 2:a2bea117e22e 34 template<>
va009039 2:a2bea117e22e 35 char NativeClassInterface::argv<char>(int n)
va009039 2:a2bea117e22e 36 {
va009039 2:a2bea117e22e 37 pPmObj_t pn = NATIVE_GET_LOCAL(n);
va009039 2:a2bea117e22e 38 return ((pPmString_t)pn)->val[0];
va009039 2:a2bea117e22e 39 }
va009039 2:a2bea117e22e 40
va009039 2:a2bea117e22e 41 template<>
va009039 2:a2bea117e22e 42 char* NativeClassInterface::argv<char*>(int n)
va009039 2:a2bea117e22e 43 {
va009039 2:a2bea117e22e 44 pPmObj_t pn = NATIVE_GET_LOCAL(n);
va009039 2:a2bea117e22e 45 return reinterpret_cast<char*>(((pPmString_t)pn)->val);
va009039 2:a2bea117e22e 46 }
va009039 2:a2bea117e22e 47
va009039 2:a2bea117e22e 48 template<>
va009039 2:a2bea117e22e 49 const char* NativeClassInterface::argv<const char*>(int n)
va009039 2:a2bea117e22e 50 {
va009039 2:a2bea117e22e 51 pPmObj_t pn = NATIVE_GET_LOCAL(n);
va009039 2:a2bea117e22e 52 return reinterpret_cast<const char*>(((pPmString_t)pn)->val);
va009039 2:a2bea117e22e 53 }
va009039 2:a2bea117e22e 54
va009039 2:a2bea117e22e 55 template<>
va009039 2:a2bea117e22e 56 uint16_t NativeClassInterface::argv<uint16_t>(int n)
va009039 2:a2bea117e22e 57 {
va009039 2:a2bea117e22e 58 pPmObj_t pn = NATIVE_GET_LOCAL(n);
va009039 2:a2bea117e22e 59 return ((pPmInt_t)pn)->val;
va009039 2:a2bea117e22e 60 }
va009039 2:a2bea117e22e 61
va009039 2:a2bea117e22e 62 template<>
va009039 2:a2bea117e22e 63 PinName NativeClassInterface::argv<PinName>(int n)
va009039 2:a2bea117e22e 64 {
va009039 2:a2bea117e22e 65 /* PinName lookup table. Converts pin number to PinName. */
va009039 2:a2bea117e22e 66 const PinName pinNumToName[] = {
va009039 2:a2bea117e22e 67 NC, LED1, LED2, LED3, LED4, p5, p6, p7, p8, p9,
va009039 2:a2bea117e22e 68 p10, p11, p12, p13, p14, p15, p16, p17, p18, p19,
va009039 2:a2bea117e22e 69 p20, p21, p22, p23, p24, p25, p26, p27, p28, p29,
va009039 2:a2bea117e22e 70 p30
va009039 2:a2bea117e22e 71 };
va009039 2:a2bea117e22e 72
va009039 2:a2bea117e22e 73 pPmObj_t pn = NATIVE_GET_LOCAL(n);
va009039 2:a2bea117e22e 74 return pinNumToName[((pPmInt_t)pn)->val];
va009039 2:a2bea117e22e 75 }
va009039 2:a2bea117e22e 76
va009039 2:a2bea117e22e 77
va009039 2:a2bea117e22e 78 template<>
va009039 2:a2bea117e22e 79 PmReturn_t NativeClassInterface::set_return_value<int>(PmType_t ret_type, int value)
va009039 2:a2bea117e22e 80 {
va009039 2:a2bea117e22e 81 pPmObj_t pn;
va009039 2:a2bea117e22e 82 PmReturn_t retval;
va009039 2:a2bea117e22e 83 if (ret_type == OBJ_TYPE_STR) {
va009039 2:a2bea117e22e 84 retval = string_newFromChar((uint8_t)value, &pn);
va009039 2:a2bea117e22e 85 } else {
va009039 2:a2bea117e22e 86 retval = int_new(value, &pn);
va009039 2:a2bea117e22e 87 }
va009039 2:a2bea117e22e 88 NATIVE_SET_TOS(pn);
va009039 2:a2bea117e22e 89 return retval;
va009039 2:a2bea117e22e 90 }
va009039 2:a2bea117e22e 91
va009039 2:a2bea117e22e 92 template<>
va009039 2:a2bea117e22e 93 PmReturn_t NativeClassInterface::set_return_value<uint16_t>(PmType_t ret_type, uint16_t value)
va009039 2:a2bea117e22e 94 {
va009039 2:a2bea117e22e 95 pPmObj_t pn;
va009039 2:a2bea117e22e 96 PmReturn_t retval = int_new(value, &pn);
va009039 2:a2bea117e22e 97 NATIVE_SET_TOS(pn);
va009039 2:a2bea117e22e 98 return retval;
va009039 2:a2bea117e22e 99 }
va009039 2:a2bea117e22e 100
va009039 2:a2bea117e22e 101 template<>
va009039 2:a2bea117e22e 102 PmReturn_t NativeClassInterface::set_return_value<float>(PmType_t ret_type, float value)
va009039 2:a2bea117e22e 103 {
va009039 2:a2bea117e22e 104 pPmObj_t pn;
va009039 2:a2bea117e22e 105 PmReturn_t retval = float_new(value, &pn);
va009039 2:a2bea117e22e 106 NATIVE_SET_TOS(pn);
va009039 2:a2bea117e22e 107 return retval;
va009039 2:a2bea117e22e 108 }
va009039 2:a2bea117e22e 109
va009039 2:a2bea117e22e 110 template<typename R>
va009039 2:a2bea117e22e 111 PmReturn_t NativeClassInterface::set_return_value(PmType_t ret_type, R value)
va009039 2:a2bea117e22e 112 {
va009039 2:a2bea117e22e 113 pPmObj_t pn;
va009039 2:a2bea117e22e 114 PmReturn_t retval;
va009039 2:a2bea117e22e 115 switch(ret_type) {
va009039 2:a2bea117e22e 116 case OBJ_TYPE_INT:
va009039 2:a2bea117e22e 117 retval = int_new(value, &pn);
va009039 2:a2bea117e22e 118 break;
va009039 2:a2bea117e22e 119 case OBJ_TYPE_FLT:
va009039 2:a2bea117e22e 120 retval = float_new(value, &pn);
va009039 2:a2bea117e22e 121 break;
va009039 2:a2bea117e22e 122 }
va009039 2:a2bea117e22e 123 NATIVE_SET_TOS(pn);
va009039 2:a2bea117e22e 124 return retval;
va009039 2:a2bea117e22e 125 }
va009039 2:a2bea117e22e 126
va009039 2:a2bea117e22e 127 PmReturn_t NativeClassInterface::check_argv_type(int arg_n, ...)
va009039 2:a2bea117e22e 128 {
va009039 2:a2bea117e22e 129 PmReturn_t retval = PM_RET_OK;
va009039 2:a2bea117e22e 130 if (NATIVE_GET_NUM_ARGS() != (arg_n+1)) {
va009039 2:a2bea117e22e 131 PM_RAISE(retval, PM_RET_EX_TYPE);
va009039 2:a2bea117e22e 132 return retval;
va009039 2:a2bea117e22e 133 }
va009039 2:a2bea117e22e 134 va_list vl;
va009039 2:a2bea117e22e 135 va_start(vl, arg_n);
va009039 2:a2bea117e22e 136 for(int n = 1; n <= arg_n; n++) {
va009039 2:a2bea117e22e 137 pPmObj_t pn = NATIVE_GET_LOCAL(n);
va009039 2:a2bea117e22e 138 int ty = va_arg(vl, int);
va009039 2:a2bea117e22e 139 if (OBJ_GET_TYPE(pn) != ty) {
va009039 2:a2bea117e22e 140 PM_RAISE(retval, PM_RET_EX_TYPE);
va009039 2:a2bea117e22e 141 return retval;
va009039 2:a2bea117e22e 142 }
va009039 2:a2bea117e22e 143 }
va009039 2:a2bea117e22e 144 return retval;
va009039 2:a2bea117e22e 145 }