python

Dependencies:   TSI mbed

Fork of pymite by Norimasa Okamoto

Committer:
va009039
Date:
Wed Mar 13 10:05:34 2013 +0000
Revision:
3:559c4bd38111
Parent:
2:a2bea117e22e
Child:
4:23becb24acb8
add TARGET_KL25Z

Who changed what in which revision?

UserRevisionLine numberNew contents of line
va009039 3:559c4bd38111 1 // NativeClassInterface.cpp 2013/3/13
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 3:559c4bd38111 6 #include "PinNameTable.h"
va009039 2:a2bea117e22e 7
va009039 2:a2bea117e22e 8 #undef __FILE_ID__
va009039 2:a2bea117e22e 9 #define __FILE_ID__ 0x71
va009039 2:a2bea117e22e 10
va009039 2:a2bea117e22e 11 template<>
va009039 2:a2bea117e22e 12 int NativeClassInterface::argv<int>(int n)
va009039 2:a2bea117e22e 13 {
va009039 2:a2bea117e22e 14 pPmObj_t pn = NATIVE_GET_LOCAL(n);
va009039 2:a2bea117e22e 15 if (OBJ_GET_TYPE(pn) == OBJ_TYPE_STR) {
va009039 2:a2bea117e22e 16 return ((pPmString_t)pn)->val[0];
va009039 2:a2bea117e22e 17 }
va009039 2:a2bea117e22e 18 return ((pPmInt_t)pn)->val;
va009039 2:a2bea117e22e 19 }
va009039 2:a2bea117e22e 20
va009039 2:a2bea117e22e 21 template<>
va009039 2:a2bea117e22e 22 bool NativeClassInterface::argv<bool>(int n)
va009039 2:a2bea117e22e 23 {
va009039 2:a2bea117e22e 24 pPmObj_t pn = NATIVE_GET_LOCAL(n);
va009039 2:a2bea117e22e 25 return ((pPmInt_t)pn)->val;
va009039 2:a2bea117e22e 26 }
va009039 2:a2bea117e22e 27
va009039 2:a2bea117e22e 28 template<>
va009039 2:a2bea117e22e 29 float NativeClassInterface::argv<float>(int n)
va009039 2:a2bea117e22e 30 {
va009039 2:a2bea117e22e 31 pPmObj_t pn = NATIVE_GET_LOCAL(n);
va009039 2:a2bea117e22e 32 return ((pPmFloat_t)pn)->val;
va009039 2:a2bea117e22e 33 }
va009039 2:a2bea117e22e 34
va009039 2:a2bea117e22e 35 template<>
va009039 2:a2bea117e22e 36 char NativeClassInterface::argv<char>(int n)
va009039 2:a2bea117e22e 37 {
va009039 2:a2bea117e22e 38 pPmObj_t pn = NATIVE_GET_LOCAL(n);
va009039 2:a2bea117e22e 39 return ((pPmString_t)pn)->val[0];
va009039 2:a2bea117e22e 40 }
va009039 2:a2bea117e22e 41
va009039 2:a2bea117e22e 42 template<>
va009039 2:a2bea117e22e 43 char* NativeClassInterface::argv<char*>(int n)
va009039 2:a2bea117e22e 44 {
va009039 2:a2bea117e22e 45 pPmObj_t pn = NATIVE_GET_LOCAL(n);
va009039 2:a2bea117e22e 46 return reinterpret_cast<char*>(((pPmString_t)pn)->val);
va009039 2:a2bea117e22e 47 }
va009039 2:a2bea117e22e 48
va009039 2:a2bea117e22e 49 template<>
va009039 2:a2bea117e22e 50 const char* NativeClassInterface::argv<const char*>(int n)
va009039 2:a2bea117e22e 51 {
va009039 2:a2bea117e22e 52 pPmObj_t pn = NATIVE_GET_LOCAL(n);
va009039 2:a2bea117e22e 53 return reinterpret_cast<const char*>(((pPmString_t)pn)->val);
va009039 2:a2bea117e22e 54 }
va009039 2:a2bea117e22e 55
va009039 2:a2bea117e22e 56 template<>
va009039 2:a2bea117e22e 57 uint16_t NativeClassInterface::argv<uint16_t>(int n)
va009039 2:a2bea117e22e 58 {
va009039 2:a2bea117e22e 59 pPmObj_t pn = NATIVE_GET_LOCAL(n);
va009039 2:a2bea117e22e 60 return ((pPmInt_t)pn)->val;
va009039 2:a2bea117e22e 61 }
va009039 2:a2bea117e22e 62
va009039 2:a2bea117e22e 63 template<>
va009039 2:a2bea117e22e 64 PinName NativeClassInterface::argv<PinName>(int n)
va009039 2:a2bea117e22e 65 {
va009039 2:a2bea117e22e 66 pPmObj_t pn = NATIVE_GET_LOCAL(n);
va009039 3:559c4bd38111 67 if (OBJ_GET_TYPE(pn) == OBJ_TYPE_INT) {
va009039 3:559c4bd38111 68 return (PinName)(((pPmInt_t)pn)->val);
va009039 3:559c4bd38111 69 }
va009039 3:559c4bd38111 70 if (OBJ_GET_TYPE(pn) != OBJ_TYPE_STR) {
va009039 3:559c4bd38111 71 return NC;
va009039 3:559c4bd38111 72 }
va009039 3:559c4bd38111 73 int imin = 0;
va009039 3:559c4bd38111 74 int imax = sizeof(pinname_table) / sizeof(pinNameStr) - 1;
va009039 3:559c4bd38111 75 char *key = reinterpret_cast<char*>(((pPmString_t)pn)->val);
va009039 3:559c4bd38111 76 while(imax >= imin) {
va009039 3:559c4bd38111 77 int i = (imin + imax) / 2;
va009039 3:559c4bd38111 78 int c = strcmp(key, pinname_table[i].name);
va009039 3:559c4bd38111 79 if (c == 0) {
va009039 3:559c4bd38111 80 return pinname_table[i].pin;
va009039 3:559c4bd38111 81 } else if (c > 0) {
va009039 3:559c4bd38111 82 imin = i + 1;
va009039 3:559c4bd38111 83 } else {
va009039 3:559c4bd38111 84 imax = i - 1;
va009039 3:559c4bd38111 85 }
va009039 3:559c4bd38111 86 }
va009039 3:559c4bd38111 87 return NC;
va009039 2:a2bea117e22e 88 }
va009039 2:a2bea117e22e 89
va009039 2:a2bea117e22e 90 template<>
va009039 2:a2bea117e22e 91 PmReturn_t NativeClassInterface::set_return_value<int>(PmType_t ret_type, int value)
va009039 2:a2bea117e22e 92 {
va009039 2:a2bea117e22e 93 pPmObj_t pn;
va009039 2:a2bea117e22e 94 PmReturn_t retval;
va009039 2:a2bea117e22e 95 if (ret_type == OBJ_TYPE_STR) {
va009039 2:a2bea117e22e 96 retval = string_newFromChar((uint8_t)value, &pn);
va009039 2:a2bea117e22e 97 } else {
va009039 2:a2bea117e22e 98 retval = int_new(value, &pn);
va009039 2:a2bea117e22e 99 }
va009039 2:a2bea117e22e 100 NATIVE_SET_TOS(pn);
va009039 2:a2bea117e22e 101 return retval;
va009039 2:a2bea117e22e 102 }
va009039 2:a2bea117e22e 103
va009039 2:a2bea117e22e 104 template<>
va009039 2:a2bea117e22e 105 PmReturn_t NativeClassInterface::set_return_value<uint16_t>(PmType_t ret_type, uint16_t value)
va009039 2:a2bea117e22e 106 {
va009039 2:a2bea117e22e 107 pPmObj_t pn;
va009039 2:a2bea117e22e 108 PmReturn_t retval = int_new(value, &pn);
va009039 2:a2bea117e22e 109 NATIVE_SET_TOS(pn);
va009039 2:a2bea117e22e 110 return retval;
va009039 2:a2bea117e22e 111 }
va009039 2:a2bea117e22e 112
va009039 2:a2bea117e22e 113 template<>
va009039 2:a2bea117e22e 114 PmReturn_t NativeClassInterface::set_return_value<float>(PmType_t ret_type, float value)
va009039 2:a2bea117e22e 115 {
va009039 2:a2bea117e22e 116 pPmObj_t pn;
va009039 2:a2bea117e22e 117 PmReturn_t retval = float_new(value, &pn);
va009039 2:a2bea117e22e 118 NATIVE_SET_TOS(pn);
va009039 2:a2bea117e22e 119 return retval;
va009039 2:a2bea117e22e 120 }
va009039 2:a2bea117e22e 121
va009039 2:a2bea117e22e 122 template<typename R>
va009039 2:a2bea117e22e 123 PmReturn_t NativeClassInterface::set_return_value(PmType_t ret_type, R value)
va009039 2:a2bea117e22e 124 {
va009039 2:a2bea117e22e 125 pPmObj_t pn;
va009039 2:a2bea117e22e 126 PmReturn_t retval;
va009039 2:a2bea117e22e 127 switch(ret_type) {
va009039 2:a2bea117e22e 128 case OBJ_TYPE_INT:
va009039 2:a2bea117e22e 129 retval = int_new(value, &pn);
va009039 2:a2bea117e22e 130 break;
va009039 2:a2bea117e22e 131 case OBJ_TYPE_FLT:
va009039 2:a2bea117e22e 132 retval = float_new(value, &pn);
va009039 2:a2bea117e22e 133 break;
va009039 2:a2bea117e22e 134 }
va009039 2:a2bea117e22e 135 NATIVE_SET_TOS(pn);
va009039 2:a2bea117e22e 136 return retval;
va009039 2:a2bea117e22e 137 }
va009039 2:a2bea117e22e 138
va009039 2:a2bea117e22e 139 PmReturn_t NativeClassInterface::check_argv_type(int arg_n, ...)
va009039 2:a2bea117e22e 140 {
va009039 2:a2bea117e22e 141 PmReturn_t retval = PM_RET_OK;
va009039 2:a2bea117e22e 142 if (NATIVE_GET_NUM_ARGS() != (arg_n+1)) {
va009039 2:a2bea117e22e 143 PM_RAISE(retval, PM_RET_EX_TYPE);
va009039 2:a2bea117e22e 144 return retval;
va009039 2:a2bea117e22e 145 }
va009039 2:a2bea117e22e 146 va_list vl;
va009039 2:a2bea117e22e 147 va_start(vl, arg_n);
va009039 2:a2bea117e22e 148 for(int n = 1; n <= arg_n; n++) {
va009039 2:a2bea117e22e 149 pPmObj_t pn = NATIVE_GET_LOCAL(n);
va009039 2:a2bea117e22e 150 int ty = va_arg(vl, int);
va009039 2:a2bea117e22e 151 if (OBJ_GET_TYPE(pn) != ty) {
va009039 2:a2bea117e22e 152 PM_RAISE(retval, PM_RET_EX_TYPE);
va009039 2:a2bea117e22e 153 return retval;
va009039 2:a2bea117e22e 154 }
va009039 2:a2bea117e22e 155 }
va009039 2:a2bea117e22e 156 return retval;
va009039 2:a2bea117e22e 157 }