
python
Fork of pymite by
platform/mbed/main_nat.cpp@0:65f1469d6bfb, 2013-03-02 (annotated)
- Committer:
- va009039
- Date:
- Sat Mar 02 11:54:20 2013 +0000
- Revision:
- 0:65f1469d6bfb
- Child:
- 1:28afb064a41c
first commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
va009039 | 0:65f1469d6bfb | 1 | #undef __FILE_ID__ |
va009039 | 0:65f1469d6bfb | 2 | #define __FILE_ID__ 0x0A |
va009039 | 0:65f1469d6bfb | 3 | /** |
va009039 | 0:65f1469d6bfb | 4 | * PyMite usr native function file |
va009039 | 0:65f1469d6bfb | 5 | * |
va009039 | 0:65f1469d6bfb | 6 | * automatically created by pmImgCreator.py |
va009039 | 0:65f1469d6bfb | 7 | * on Sat Mar 02 20:27:03 2013 |
va009039 | 0:65f1469d6bfb | 8 | * |
va009039 | 0:65f1469d6bfb | 9 | * DO NOT EDIT THIS FILE. |
va009039 | 0:65f1469d6bfb | 10 | * ANY CHANGES WILL BE LOST. |
va009039 | 0:65f1469d6bfb | 11 | * |
va009039 | 0:65f1469d6bfb | 12 | * @file main_nat.cpp |
va009039 | 0:65f1469d6bfb | 13 | */ |
va009039 | 0:65f1469d6bfb | 14 | |
va009039 | 0:65f1469d6bfb | 15 | #define __IN_LIBNATIVE_C__ |
va009039 | 0:65f1469d6bfb | 16 | #include "pm.h" |
va009039 | 0:65f1469d6bfb | 17 | |
va009039 | 0:65f1469d6bfb | 18 | /* From: mbed.py */ |
va009039 | 0:65f1469d6bfb | 19 | #include "mbed.h" |
va009039 | 0:65f1469d6bfb | 20 | |
va009039 | 0:65f1469d6bfb | 21 | static DigitalOut led1(LED1); |
va009039 | 0:65f1469d6bfb | 22 | static DigitalOut led2(LED2); |
va009039 | 0:65f1469d6bfb | 23 | static DigitalOut led3(LED3); |
va009039 | 0:65f1469d6bfb | 24 | static DigitalOut led4(LED4); |
va009039 | 0:65f1469d6bfb | 25 | |
va009039 | 0:65f1469d6bfb | 26 | /* PinName lookup table. Converts pin number to PinName. */ |
va009039 | 0:65f1469d6bfb | 27 | static PinName const pinNumToName[] = { |
va009039 | 0:65f1469d6bfb | 28 | NC, LED1, LED2, LED3, LED4, p5, p6, p7, p8, p9, |
va009039 | 0:65f1469d6bfb | 29 | p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, |
va009039 | 0:65f1469d6bfb | 30 | p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, |
va009039 | 0:65f1469d6bfb | 31 | p30 |
va009039 | 0:65f1469d6bfb | 32 | }; |
va009039 | 0:65f1469d6bfb | 33 | |
va009039 | 0:65f1469d6bfb | 34 | PmReturn_t |
va009039 | 0:65f1469d6bfb | 35 | nat_placeholder_func(pPmFrame_t *ppframe) |
va009039 | 0:65f1469d6bfb | 36 | { |
va009039 | 0:65f1469d6bfb | 37 | |
va009039 | 0:65f1469d6bfb | 38 | /* |
va009039 | 0:65f1469d6bfb | 39 | * Use placeholder because an index |
va009039 | 0:65f1469d6bfb | 40 | * value of zero denotes the stdlib. |
va009039 | 0:65f1469d6bfb | 41 | * This function should not be called. |
va009039 | 0:65f1469d6bfb | 42 | */ |
va009039 | 0:65f1469d6bfb | 43 | PmReturn_t retval; |
va009039 | 0:65f1469d6bfb | 44 | PM_RAISE(retval, PM_RET_EX_SYS); |
va009039 | 0:65f1469d6bfb | 45 | return retval; |
va009039 | 0:65f1469d6bfb | 46 | |
va009039 | 0:65f1469d6bfb | 47 | } |
va009039 | 0:65f1469d6bfb | 48 | |
va009039 | 0:65f1469d6bfb | 49 | PmReturn_t |
va009039 | 0:65f1469d6bfb | 50 | nat_01_mbed___init__(pPmFrame_t *ppframe) |
va009039 | 0:65f1469d6bfb | 51 | { |
va009039 | 0:65f1469d6bfb | 52 | |
va009039 | 0:65f1469d6bfb | 53 | pPmObj_t pself; |
va009039 | 0:65f1469d6bfb | 54 | pPmObj_t pn; |
va009039 | 0:65f1469d6bfb | 55 | pPmObj_t pattrs; |
va009039 | 0:65f1469d6bfb | 56 | PmReturn_t retval = PM_RET_OK; |
va009039 | 0:65f1469d6bfb | 57 | AnalogIn *adc; |
va009039 | 0:65f1469d6bfb | 58 | uint8_t objid; |
va009039 | 0:65f1469d6bfb | 59 | |
va009039 | 0:65f1469d6bfb | 60 | /* Raise TypeError if wrong number of args */ |
va009039 | 0:65f1469d6bfb | 61 | if (NATIVE_GET_NUM_ARGS() != 2) |
va009039 | 0:65f1469d6bfb | 62 | { |
va009039 | 0:65f1469d6bfb | 63 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 64 | return retval; |
va009039 | 0:65f1469d6bfb | 65 | } |
va009039 | 0:65f1469d6bfb | 66 | pself = NATIVE_GET_LOCAL(0); |
va009039 | 0:65f1469d6bfb | 67 | |
va009039 | 0:65f1469d6bfb | 68 | /* Raise TypeError if arg is not the right type */ |
va009039 | 0:65f1469d6bfb | 69 | pn = NATIVE_GET_LOCAL(1); |
va009039 | 0:65f1469d6bfb | 70 | if (OBJ_GET_TYPE(pn) != OBJ_TYPE_INT) |
va009039 | 0:65f1469d6bfb | 71 | { |
va009039 | 0:65f1469d6bfb | 72 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 73 | return retval; |
va009039 | 0:65f1469d6bfb | 74 | } |
va009039 | 0:65f1469d6bfb | 75 | |
va009039 | 0:65f1469d6bfb | 76 | /* Instantiate the C++ object */ |
va009039 | 0:65f1469d6bfb | 77 | adc = new AnalogIn(pinNumToName[((pPmInt_t)pn)->val]); |
va009039 | 0:65f1469d6bfb | 78 | |
va009039 | 0:65f1469d6bfb | 79 | /* Save the pointer to adc as an inaccessible attribute */ |
va009039 | 0:65f1469d6bfb | 80 | pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; |
va009039 | 0:65f1469d6bfb | 81 | retval = int_new((uint32_t)adc, &pn); |
va009039 | 0:65f1469d6bfb | 82 | PM_RETURN_IF_ERROR(retval); |
va009039 | 0:65f1469d6bfb | 83 | heap_gcPushTempRoot(pn, &objid); |
va009039 | 0:65f1469d6bfb | 84 | retval = dict_setItem(pattrs, PM_NONE, pn); |
va009039 | 0:65f1469d6bfb | 85 | heap_gcPopTempRoot(objid); |
va009039 | 0:65f1469d6bfb | 86 | PM_RETURN_IF_ERROR(retval); |
va009039 | 0:65f1469d6bfb | 87 | |
va009039 | 0:65f1469d6bfb | 88 | NATIVE_SET_TOS(PM_NONE); |
va009039 | 0:65f1469d6bfb | 89 | return retval; |
va009039 | 0:65f1469d6bfb | 90 | |
va009039 | 0:65f1469d6bfb | 91 | } |
va009039 | 0:65f1469d6bfb | 92 | |
va009039 | 0:65f1469d6bfb | 93 | PmReturn_t |
va009039 | 0:65f1469d6bfb | 94 | nat_02_mbed_read_u16(pPmFrame_t *ppframe) |
va009039 | 0:65f1469d6bfb | 95 | { |
va009039 | 0:65f1469d6bfb | 96 | |
va009039 | 0:65f1469d6bfb | 97 | pPmObj_t pself; |
va009039 | 0:65f1469d6bfb | 98 | pPmObj_t pn; |
va009039 | 0:65f1469d6bfb | 99 | pPmObj_t pattrs; |
va009039 | 0:65f1469d6bfb | 100 | PmReturn_t retval = PM_RET_OK; |
va009039 | 0:65f1469d6bfb | 101 | AnalogIn *adc; |
va009039 | 0:65f1469d6bfb | 102 | int32_t n; |
va009039 | 0:65f1469d6bfb | 103 | |
va009039 | 0:65f1469d6bfb | 104 | /* If wrong number of args, throw type exception */ |
va009039 | 0:65f1469d6bfb | 105 | if (NATIVE_GET_NUM_ARGS() != 1) |
va009039 | 0:65f1469d6bfb | 106 | { |
va009039 | 0:65f1469d6bfb | 107 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 108 | return retval; |
va009039 | 0:65f1469d6bfb | 109 | } |
va009039 | 0:65f1469d6bfb | 110 | pself = NATIVE_GET_LOCAL(0); |
va009039 | 0:65f1469d6bfb | 111 | |
va009039 | 0:65f1469d6bfb | 112 | /* Get the the C++ instance */ |
va009039 | 0:65f1469d6bfb | 113 | pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; |
va009039 | 0:65f1469d6bfb | 114 | retval = dict_getItem(pattrs, PM_NONE, &pn); |
va009039 | 0:65f1469d6bfb | 115 | PM_RETURN_IF_ERROR(retval); |
va009039 | 0:65f1469d6bfb | 116 | adc = (AnalogIn *)((pPmInt_t)pn)->val; |
va009039 | 0:65f1469d6bfb | 117 | |
va009039 | 0:65f1469d6bfb | 118 | /* Return input value on the stack */ |
va009039 | 0:65f1469d6bfb | 119 | n = adc->read_u16(); |
va009039 | 0:65f1469d6bfb | 120 | retval = int_new(n, &pn); |
va009039 | 0:65f1469d6bfb | 121 | NATIVE_SET_TOS(pn); |
va009039 | 0:65f1469d6bfb | 122 | |
va009039 | 0:65f1469d6bfb | 123 | return retval; |
va009039 | 0:65f1469d6bfb | 124 | |
va009039 | 0:65f1469d6bfb | 125 | } |
va009039 | 0:65f1469d6bfb | 126 | |
va009039 | 0:65f1469d6bfb | 127 | PmReturn_t |
va009039 | 0:65f1469d6bfb | 128 | nat_03_mbed_read(pPmFrame_t *ppframe) |
va009039 | 0:65f1469d6bfb | 129 | { |
va009039 | 0:65f1469d6bfb | 130 | |
va009039 | 0:65f1469d6bfb | 131 | pPmObj_t pself; |
va009039 | 0:65f1469d6bfb | 132 | pPmObj_t pn; |
va009039 | 0:65f1469d6bfb | 133 | pPmObj_t pattrs; |
va009039 | 0:65f1469d6bfb | 134 | PmReturn_t retval = PM_RET_OK; |
va009039 | 0:65f1469d6bfb | 135 | AnalogIn *adc; |
va009039 | 0:65f1469d6bfb | 136 | float n; |
va009039 | 0:65f1469d6bfb | 137 | |
va009039 | 0:65f1469d6bfb | 138 | /* Raise TypeError if wrong number of args */ |
va009039 | 0:65f1469d6bfb | 139 | if (NATIVE_GET_NUM_ARGS() != 1) |
va009039 | 0:65f1469d6bfb | 140 | { |
va009039 | 0:65f1469d6bfb | 141 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 142 | return retval; |
va009039 | 0:65f1469d6bfb | 143 | } |
va009039 | 0:65f1469d6bfb | 144 | pself = NATIVE_GET_LOCAL(0); |
va009039 | 0:65f1469d6bfb | 145 | |
va009039 | 0:65f1469d6bfb | 146 | /* Get the the C++ instance */ |
va009039 | 0:65f1469d6bfb | 147 | pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; |
va009039 | 0:65f1469d6bfb | 148 | retval = dict_getItem(pattrs, PM_NONE, &pn); |
va009039 | 0:65f1469d6bfb | 149 | PM_RETURN_IF_ERROR(retval); |
va009039 | 0:65f1469d6bfb | 150 | adc = (AnalogIn *)((pPmInt_t)pn)->val; |
va009039 | 0:65f1469d6bfb | 151 | |
va009039 | 0:65f1469d6bfb | 152 | /* Return input value on the stack */ |
va009039 | 0:65f1469d6bfb | 153 | n = adc->read(); |
va009039 | 0:65f1469d6bfb | 154 | retval = float_new(n, &pn); |
va009039 | 0:65f1469d6bfb | 155 | NATIVE_SET_TOS(pn); |
va009039 | 0:65f1469d6bfb | 156 | |
va009039 | 0:65f1469d6bfb | 157 | return retval; |
va009039 | 0:65f1469d6bfb | 158 | |
va009039 | 0:65f1469d6bfb | 159 | } |
va009039 | 0:65f1469d6bfb | 160 | |
va009039 | 0:65f1469d6bfb | 161 | PmReturn_t |
va009039 | 0:65f1469d6bfb | 162 | nat_04_mbed___init__(pPmFrame_t *ppframe) |
va009039 | 0:65f1469d6bfb | 163 | { |
va009039 | 0:65f1469d6bfb | 164 | |
va009039 | 0:65f1469d6bfb | 165 | pPmObj_t pself; |
va009039 | 0:65f1469d6bfb | 166 | pPmObj_t pn; |
va009039 | 0:65f1469d6bfb | 167 | pPmObj_t pattrs; |
va009039 | 0:65f1469d6bfb | 168 | PmReturn_t retval = PM_RET_OK; |
va009039 | 0:65f1469d6bfb | 169 | AnalogOut *dac; |
va009039 | 0:65f1469d6bfb | 170 | uint8_t objid; |
va009039 | 0:65f1469d6bfb | 171 | |
va009039 | 0:65f1469d6bfb | 172 | |
va009039 | 0:65f1469d6bfb | 173 | /* Raise TypeError if wrong number of args */ |
va009039 | 0:65f1469d6bfb | 174 | if (NATIVE_GET_NUM_ARGS() != 2) |
va009039 | 0:65f1469d6bfb | 175 | { |
va009039 | 0:65f1469d6bfb | 176 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 177 | return retval; |
va009039 | 0:65f1469d6bfb | 178 | } |
va009039 | 0:65f1469d6bfb | 179 | pself = NATIVE_GET_LOCAL(0); |
va009039 | 0:65f1469d6bfb | 180 | |
va009039 | 0:65f1469d6bfb | 181 | /* Raise TypeError if arg is not the right type */ |
va009039 | 0:65f1469d6bfb | 182 | pn = NATIVE_GET_LOCAL(1); |
va009039 | 0:65f1469d6bfb | 183 | if (OBJ_GET_TYPE(pn) != OBJ_TYPE_INT) |
va009039 | 0:65f1469d6bfb | 184 | { |
va009039 | 0:65f1469d6bfb | 185 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 186 | return retval; |
va009039 | 0:65f1469d6bfb | 187 | } |
va009039 | 0:65f1469d6bfb | 188 | |
va009039 | 0:65f1469d6bfb | 189 | /* Instantiate the object */ |
va009039 | 0:65f1469d6bfb | 190 | dac = new AnalogOut(pinNumToName[((pPmInt_t)pn)->val]); |
va009039 | 0:65f1469d6bfb | 191 | |
va009039 | 0:65f1469d6bfb | 192 | /* Save the pointer to adc as an inaccessible attribute */ |
va009039 | 0:65f1469d6bfb | 193 | pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; |
va009039 | 0:65f1469d6bfb | 194 | retval = int_new((uint32_t)dac, &pn); |
va009039 | 0:65f1469d6bfb | 195 | PM_RETURN_IF_ERROR(retval); |
va009039 | 0:65f1469d6bfb | 196 | heap_gcPushTempRoot(pn, &objid); |
va009039 | 0:65f1469d6bfb | 197 | retval = dict_setItem(pattrs, PM_NONE, pn); |
va009039 | 0:65f1469d6bfb | 198 | heap_gcPopTempRoot(objid); |
va009039 | 0:65f1469d6bfb | 199 | PM_RETURN_IF_ERROR(retval); |
va009039 | 0:65f1469d6bfb | 200 | |
va009039 | 0:65f1469d6bfb | 201 | NATIVE_SET_TOS(PM_NONE); |
va009039 | 0:65f1469d6bfb | 202 | return retval; |
va009039 | 0:65f1469d6bfb | 203 | |
va009039 | 0:65f1469d6bfb | 204 | } |
va009039 | 0:65f1469d6bfb | 205 | |
va009039 | 0:65f1469d6bfb | 206 | PmReturn_t |
va009039 | 0:65f1469d6bfb | 207 | nat_05_mbed_write_u16(pPmFrame_t *ppframe) |
va009039 | 0:65f1469d6bfb | 208 | { |
va009039 | 0:65f1469d6bfb | 209 | |
va009039 | 0:65f1469d6bfb | 210 | pPmObj_t pself; |
va009039 | 0:65f1469d6bfb | 211 | pPmObj_t pn; |
va009039 | 0:65f1469d6bfb | 212 | pPmObj_t pattrs; |
va009039 | 0:65f1469d6bfb | 213 | PmReturn_t retval = PM_RET_OK; |
va009039 | 0:65f1469d6bfb | 214 | AnalogOut *dac; |
va009039 | 0:65f1469d6bfb | 215 | |
va009039 | 0:65f1469d6bfb | 216 | /* Raise TypeError if wrong number of args */ |
va009039 | 0:65f1469d6bfb | 217 | if (NATIVE_GET_NUM_ARGS() != 2) |
va009039 | 0:65f1469d6bfb | 218 | { |
va009039 | 0:65f1469d6bfb | 219 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 220 | return retval; |
va009039 | 0:65f1469d6bfb | 221 | } |
va009039 | 0:65f1469d6bfb | 222 | pself = NATIVE_GET_LOCAL(0); |
va009039 | 0:65f1469d6bfb | 223 | |
va009039 | 0:65f1469d6bfb | 224 | /* Raise TypeError if arg is not the right type */ |
va009039 | 0:65f1469d6bfb | 225 | pn = NATIVE_GET_LOCAL(1); |
va009039 | 0:65f1469d6bfb | 226 | if (OBJ_GET_TYPE(pn) != OBJ_TYPE_INT) |
va009039 | 0:65f1469d6bfb | 227 | { |
va009039 | 0:65f1469d6bfb | 228 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 229 | return retval; |
va009039 | 0:65f1469d6bfb | 230 | } |
va009039 | 0:65f1469d6bfb | 231 | |
va009039 | 0:65f1469d6bfb | 232 | /* Get the the C++ instance */ |
va009039 | 0:65f1469d6bfb | 233 | pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; |
va009039 | 0:65f1469d6bfb | 234 | retval = dict_getItem(pattrs, PM_NONE, &pn); |
va009039 | 0:65f1469d6bfb | 235 | PM_RETURN_IF_ERROR(retval); |
va009039 | 0:65f1469d6bfb | 236 | dac = (AnalogOut *)((pPmInt_t)pn)->val; |
va009039 | 0:65f1469d6bfb | 237 | |
va009039 | 0:65f1469d6bfb | 238 | /* Write value to DAC */ |
va009039 | 0:65f1469d6bfb | 239 | pn = NATIVE_GET_LOCAL(1); |
va009039 | 0:65f1469d6bfb | 240 | dac->write_u16(((pPmInt_t)pn)->val); |
va009039 | 0:65f1469d6bfb | 241 | |
va009039 | 0:65f1469d6bfb | 242 | NATIVE_SET_TOS(PM_NONE); |
va009039 | 0:65f1469d6bfb | 243 | return retval; |
va009039 | 0:65f1469d6bfb | 244 | |
va009039 | 0:65f1469d6bfb | 245 | } |
va009039 | 0:65f1469d6bfb | 246 | |
va009039 | 0:65f1469d6bfb | 247 | PmReturn_t |
va009039 | 0:65f1469d6bfb | 248 | nat_06_mbed_write(pPmFrame_t *ppframe) |
va009039 | 0:65f1469d6bfb | 249 | { |
va009039 | 0:65f1469d6bfb | 250 | |
va009039 | 0:65f1469d6bfb | 251 | pPmObj_t pself; |
va009039 | 0:65f1469d6bfb | 252 | pPmObj_t pn; |
va009039 | 0:65f1469d6bfb | 253 | pPmObj_t pattrs; |
va009039 | 0:65f1469d6bfb | 254 | PmReturn_t retval = PM_RET_OK; |
va009039 | 0:65f1469d6bfb | 255 | AnalogOut *dac; |
va009039 | 0:65f1469d6bfb | 256 | float n; |
va009039 | 0:65f1469d6bfb | 257 | |
va009039 | 0:65f1469d6bfb | 258 | /* Raise TypeError if wrong number of args */ |
va009039 | 0:65f1469d6bfb | 259 | if (NATIVE_GET_NUM_ARGS() != 2) |
va009039 | 0:65f1469d6bfb | 260 | { |
va009039 | 0:65f1469d6bfb | 261 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 262 | return retval; |
va009039 | 0:65f1469d6bfb | 263 | } |
va009039 | 0:65f1469d6bfb | 264 | pself = NATIVE_GET_LOCAL(0); |
va009039 | 0:65f1469d6bfb | 265 | |
va009039 | 0:65f1469d6bfb | 266 | /* Raise TypeError if arg is not the right type */ |
va009039 | 0:65f1469d6bfb | 267 | pn = NATIVE_GET_LOCAL(1); |
va009039 | 0:65f1469d6bfb | 268 | if (OBJ_GET_TYPE(pn) != OBJ_TYPE_FLT) |
va009039 | 0:65f1469d6bfb | 269 | { |
va009039 | 0:65f1469d6bfb | 270 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 271 | return retval; |
va009039 | 0:65f1469d6bfb | 272 | } |
va009039 | 0:65f1469d6bfb | 273 | |
va009039 | 0:65f1469d6bfb | 274 | /* Get the the C++ instance */ |
va009039 | 0:65f1469d6bfb | 275 | pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; |
va009039 | 0:65f1469d6bfb | 276 | retval = dict_getItem(pattrs, PM_NONE, &pn); |
va009039 | 0:65f1469d6bfb | 277 | PM_RETURN_IF_ERROR(retval); |
va009039 | 0:65f1469d6bfb | 278 | dac = (AnalogOut *)((pPmInt_t)pn)->val; |
va009039 | 0:65f1469d6bfb | 279 | |
va009039 | 0:65f1469d6bfb | 280 | /* Saturate and write value to DAC */ |
va009039 | 0:65f1469d6bfb | 281 | pn = NATIVE_GET_LOCAL(1); |
va009039 | 0:65f1469d6bfb | 282 | n = ((pPmFloat_t)pn)->val; |
va009039 | 0:65f1469d6bfb | 283 | if (n < 0.0) |
va009039 | 0:65f1469d6bfb | 284 | { |
va009039 | 0:65f1469d6bfb | 285 | n = 0.0; |
va009039 | 0:65f1469d6bfb | 286 | } |
va009039 | 0:65f1469d6bfb | 287 | else if (n > 1.0) |
va009039 | 0:65f1469d6bfb | 288 | { |
va009039 | 0:65f1469d6bfb | 289 | n = 1.0; |
va009039 | 0:65f1469d6bfb | 290 | } |
va009039 | 0:65f1469d6bfb | 291 | dac->write(n); |
va009039 | 0:65f1469d6bfb | 292 | |
va009039 | 0:65f1469d6bfb | 293 | NATIVE_SET_TOS(PM_NONE); |
va009039 | 0:65f1469d6bfb | 294 | return retval; |
va009039 | 0:65f1469d6bfb | 295 | |
va009039 | 0:65f1469d6bfb | 296 | } |
va009039 | 0:65f1469d6bfb | 297 | |
va009039 | 0:65f1469d6bfb | 298 | PmReturn_t |
va009039 | 0:65f1469d6bfb | 299 | nat_07_mbed_read(pPmFrame_t *ppframe) |
va009039 | 0:65f1469d6bfb | 300 | { |
va009039 | 0:65f1469d6bfb | 301 | |
va009039 | 0:65f1469d6bfb | 302 | pPmObj_t pself; |
va009039 | 0:65f1469d6bfb | 303 | pPmObj_t pn; |
va009039 | 0:65f1469d6bfb | 304 | pPmObj_t pattrs; |
va009039 | 0:65f1469d6bfb | 305 | PmReturn_t retval = PM_RET_OK; |
va009039 | 0:65f1469d6bfb | 306 | AnalogOut *dac; |
va009039 | 0:65f1469d6bfb | 307 | float n; |
va009039 | 0:65f1469d6bfb | 308 | |
va009039 | 0:65f1469d6bfb | 309 | /* Raise TypeError if wrong number of args */ |
va009039 | 0:65f1469d6bfb | 310 | if (NATIVE_GET_NUM_ARGS() != 1) |
va009039 | 0:65f1469d6bfb | 311 | { |
va009039 | 0:65f1469d6bfb | 312 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 313 | return retval; |
va009039 | 0:65f1469d6bfb | 314 | } |
va009039 | 0:65f1469d6bfb | 315 | pself = NATIVE_GET_LOCAL(0); |
va009039 | 0:65f1469d6bfb | 316 | |
va009039 | 0:65f1469d6bfb | 317 | /* Get the the C++ instance */ |
va009039 | 0:65f1469d6bfb | 318 | pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; |
va009039 | 0:65f1469d6bfb | 319 | retval = dict_getItem(pattrs, PM_NONE, &pn); |
va009039 | 0:65f1469d6bfb | 320 | PM_RETURN_IF_ERROR(retval); |
va009039 | 0:65f1469d6bfb | 321 | dac = (AnalogOut *)((pPmInt_t)pn)->val; |
va009039 | 0:65f1469d6bfb | 322 | |
va009039 | 0:65f1469d6bfb | 323 | /* Return output value on the stack */ |
va009039 | 0:65f1469d6bfb | 324 | n = dac->read(); |
va009039 | 0:65f1469d6bfb | 325 | retval = float_new(n, &pn); |
va009039 | 0:65f1469d6bfb | 326 | NATIVE_SET_TOS(pn); |
va009039 | 0:65f1469d6bfb | 327 | |
va009039 | 0:65f1469d6bfb | 328 | return retval; |
va009039 | 0:65f1469d6bfb | 329 | |
va009039 | 0:65f1469d6bfb | 330 | } |
va009039 | 0:65f1469d6bfb | 331 | |
va009039 | 0:65f1469d6bfb | 332 | PmReturn_t |
va009039 | 0:65f1469d6bfb | 333 | nat_08_mbed___init__(pPmFrame_t *ppframe) |
va009039 | 0:65f1469d6bfb | 334 | { |
va009039 | 0:65f1469d6bfb | 335 | |
va009039 | 0:65f1469d6bfb | 336 | pPmObj_t pself; |
va009039 | 0:65f1469d6bfb | 337 | pPmObj_t pn; |
va009039 | 0:65f1469d6bfb | 338 | pPmObj_t pattrs; |
va009039 | 0:65f1469d6bfb | 339 | PmReturn_t retval = PM_RET_OK; |
va009039 | 0:65f1469d6bfb | 340 | DigitalIn *din; |
va009039 | 0:65f1469d6bfb | 341 | uint8_t objid; |
va009039 | 0:65f1469d6bfb | 342 | |
va009039 | 0:65f1469d6bfb | 343 | /* Raise TypeError if wrong number of args */ |
va009039 | 0:65f1469d6bfb | 344 | if (NATIVE_GET_NUM_ARGS() != 2) |
va009039 | 0:65f1469d6bfb | 345 | { |
va009039 | 0:65f1469d6bfb | 346 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 347 | return retval; |
va009039 | 0:65f1469d6bfb | 348 | } |
va009039 | 0:65f1469d6bfb | 349 | pself = NATIVE_GET_LOCAL(0); |
va009039 | 0:65f1469d6bfb | 350 | |
va009039 | 0:65f1469d6bfb | 351 | /* Raise TypeError if arg is not the right type */ |
va009039 | 0:65f1469d6bfb | 352 | pn = NATIVE_GET_LOCAL(1); |
va009039 | 0:65f1469d6bfb | 353 | if (OBJ_GET_TYPE(pn) != OBJ_TYPE_INT) |
va009039 | 0:65f1469d6bfb | 354 | { |
va009039 | 0:65f1469d6bfb | 355 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 356 | return retval; |
va009039 | 0:65f1469d6bfb | 357 | } |
va009039 | 0:65f1469d6bfb | 358 | |
va009039 | 0:65f1469d6bfb | 359 | /* Instantiate the C++ object */ |
va009039 | 0:65f1469d6bfb | 360 | din = new DigitalIn(pinNumToName[((pPmInt_t)pn)->val]); |
va009039 | 0:65f1469d6bfb | 361 | |
va009039 | 0:65f1469d6bfb | 362 | /* Save the pointer to adc as an inaccessible attribute */ |
va009039 | 0:65f1469d6bfb | 363 | pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; |
va009039 | 0:65f1469d6bfb | 364 | retval = int_new((uint32_t)din, &pn); |
va009039 | 0:65f1469d6bfb | 365 | PM_RETURN_IF_ERROR(retval); |
va009039 | 0:65f1469d6bfb | 366 | heap_gcPushTempRoot(pn, &objid); |
va009039 | 0:65f1469d6bfb | 367 | retval = dict_setItem(pattrs, PM_NONE, pn); |
va009039 | 0:65f1469d6bfb | 368 | heap_gcPopTempRoot(objid); |
va009039 | 0:65f1469d6bfb | 369 | PM_RETURN_IF_ERROR(retval); |
va009039 | 0:65f1469d6bfb | 370 | |
va009039 | 0:65f1469d6bfb | 371 | NATIVE_SET_TOS(PM_NONE); |
va009039 | 0:65f1469d6bfb | 372 | return retval; |
va009039 | 0:65f1469d6bfb | 373 | |
va009039 | 0:65f1469d6bfb | 374 | } |
va009039 | 0:65f1469d6bfb | 375 | |
va009039 | 0:65f1469d6bfb | 376 | PmReturn_t |
va009039 | 0:65f1469d6bfb | 377 | nat_09_mbed_read(pPmFrame_t *ppframe) |
va009039 | 0:65f1469d6bfb | 378 | { |
va009039 | 0:65f1469d6bfb | 379 | |
va009039 | 0:65f1469d6bfb | 380 | pPmObj_t pself; |
va009039 | 0:65f1469d6bfb | 381 | pPmObj_t pn; |
va009039 | 0:65f1469d6bfb | 382 | pPmObj_t pattrs; |
va009039 | 0:65f1469d6bfb | 383 | PmReturn_t retval = PM_RET_OK; |
va009039 | 0:65f1469d6bfb | 384 | DigitalIn *din; |
va009039 | 0:65f1469d6bfb | 385 | int32_t n; |
va009039 | 0:65f1469d6bfb | 386 | |
va009039 | 0:65f1469d6bfb | 387 | /* If wrong number of args, throw type exception */ |
va009039 | 0:65f1469d6bfb | 388 | if (NATIVE_GET_NUM_ARGS() != 1) |
va009039 | 0:65f1469d6bfb | 389 | { |
va009039 | 0:65f1469d6bfb | 390 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 391 | return retval; |
va009039 | 0:65f1469d6bfb | 392 | } |
va009039 | 0:65f1469d6bfb | 393 | pself = NATIVE_GET_LOCAL(0); |
va009039 | 0:65f1469d6bfb | 394 | |
va009039 | 0:65f1469d6bfb | 395 | /* Get the the C++ instance */ |
va009039 | 0:65f1469d6bfb | 396 | pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; |
va009039 | 0:65f1469d6bfb | 397 | retval = dict_getItem(pattrs, PM_NONE, &pn); |
va009039 | 0:65f1469d6bfb | 398 | PM_RETURN_IF_ERROR(retval); |
va009039 | 0:65f1469d6bfb | 399 | din = (DigitalIn *)((pPmInt_t)pn)->val; |
va009039 | 0:65f1469d6bfb | 400 | |
va009039 | 0:65f1469d6bfb | 401 | /* Return input value on the stack */ |
va009039 | 0:65f1469d6bfb | 402 | n = din->read(); |
va009039 | 0:65f1469d6bfb | 403 | retval = int_new(n, &pn); |
va009039 | 0:65f1469d6bfb | 404 | NATIVE_SET_TOS(pn); |
va009039 | 0:65f1469d6bfb | 405 | |
va009039 | 0:65f1469d6bfb | 406 | return retval; |
va009039 | 0:65f1469d6bfb | 407 | |
va009039 | 0:65f1469d6bfb | 408 | } |
va009039 | 0:65f1469d6bfb | 409 | |
va009039 | 0:65f1469d6bfb | 410 | PmReturn_t |
va009039 | 0:65f1469d6bfb | 411 | nat_10_mbed___init__(pPmFrame_t *ppframe) |
va009039 | 0:65f1469d6bfb | 412 | { |
va009039 | 0:65f1469d6bfb | 413 | |
va009039 | 0:65f1469d6bfb | 414 | pPmObj_t pself; |
va009039 | 0:65f1469d6bfb | 415 | pPmObj_t pn; |
va009039 | 0:65f1469d6bfb | 416 | pPmObj_t pattrs; |
va009039 | 0:65f1469d6bfb | 417 | PmReturn_t retval = PM_RET_OK; |
va009039 | 0:65f1469d6bfb | 418 | DigitalOut *dout; |
va009039 | 0:65f1469d6bfb | 419 | uint8_t objid; |
va009039 | 0:65f1469d6bfb | 420 | |
va009039 | 0:65f1469d6bfb | 421 | /* Raise TypeError if wrong number of args */ |
va009039 | 0:65f1469d6bfb | 422 | if (NATIVE_GET_NUM_ARGS() != 2) |
va009039 | 0:65f1469d6bfb | 423 | { |
va009039 | 0:65f1469d6bfb | 424 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 425 | return retval; |
va009039 | 0:65f1469d6bfb | 426 | } |
va009039 | 0:65f1469d6bfb | 427 | pself = NATIVE_GET_LOCAL(0); |
va009039 | 0:65f1469d6bfb | 428 | |
va009039 | 0:65f1469d6bfb | 429 | /* Raise TypeError if arg is not the right type */ |
va009039 | 0:65f1469d6bfb | 430 | pn = NATIVE_GET_LOCAL(1); |
va009039 | 0:65f1469d6bfb | 431 | if (OBJ_GET_TYPE(pn) != OBJ_TYPE_INT) |
va009039 | 0:65f1469d6bfb | 432 | { |
va009039 | 0:65f1469d6bfb | 433 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 434 | return retval; |
va009039 | 0:65f1469d6bfb | 435 | } |
va009039 | 0:65f1469d6bfb | 436 | |
va009039 | 0:65f1469d6bfb | 437 | /* Instantiate the C++ object */ |
va009039 | 0:65f1469d6bfb | 438 | dout = new DigitalOut(pinNumToName[((pPmInt_t)pn)->val]); |
va009039 | 0:65f1469d6bfb | 439 | |
va009039 | 0:65f1469d6bfb | 440 | /* Save the pointer to adc as an inaccessible attribute */ |
va009039 | 0:65f1469d6bfb | 441 | pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; |
va009039 | 0:65f1469d6bfb | 442 | retval = int_new((uint32_t)dout, &pn); |
va009039 | 0:65f1469d6bfb | 443 | PM_RETURN_IF_ERROR(retval); |
va009039 | 0:65f1469d6bfb | 444 | heap_gcPushTempRoot(pn, &objid); |
va009039 | 0:65f1469d6bfb | 445 | retval = dict_setItem(pattrs, PM_NONE, pn); |
va009039 | 0:65f1469d6bfb | 446 | heap_gcPopTempRoot(objid); |
va009039 | 0:65f1469d6bfb | 447 | PM_RETURN_IF_ERROR(retval); |
va009039 | 0:65f1469d6bfb | 448 | |
va009039 | 0:65f1469d6bfb | 449 | NATIVE_SET_TOS(PM_NONE); |
va009039 | 0:65f1469d6bfb | 450 | return retval; |
va009039 | 0:65f1469d6bfb | 451 | |
va009039 | 0:65f1469d6bfb | 452 | } |
va009039 | 0:65f1469d6bfb | 453 | |
va009039 | 0:65f1469d6bfb | 454 | PmReturn_t |
va009039 | 0:65f1469d6bfb | 455 | nat_11_mbed_read(pPmFrame_t *ppframe) |
va009039 | 0:65f1469d6bfb | 456 | { |
va009039 | 0:65f1469d6bfb | 457 | |
va009039 | 0:65f1469d6bfb | 458 | pPmObj_t pself; |
va009039 | 0:65f1469d6bfb | 459 | pPmObj_t pn; |
va009039 | 0:65f1469d6bfb | 460 | pPmObj_t pattrs; |
va009039 | 0:65f1469d6bfb | 461 | PmReturn_t retval = PM_RET_OK; |
va009039 | 0:65f1469d6bfb | 462 | DigitalOut *dout; |
va009039 | 0:65f1469d6bfb | 463 | int32_t n; |
va009039 | 0:65f1469d6bfb | 464 | |
va009039 | 0:65f1469d6bfb | 465 | /* If wrong number of args, throw type exception */ |
va009039 | 0:65f1469d6bfb | 466 | if (NATIVE_GET_NUM_ARGS() != 1) |
va009039 | 0:65f1469d6bfb | 467 | { |
va009039 | 0:65f1469d6bfb | 468 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 469 | return retval; |
va009039 | 0:65f1469d6bfb | 470 | } |
va009039 | 0:65f1469d6bfb | 471 | pself = NATIVE_GET_LOCAL(0); |
va009039 | 0:65f1469d6bfb | 472 | |
va009039 | 0:65f1469d6bfb | 473 | /* Get the the C++ instance */ |
va009039 | 0:65f1469d6bfb | 474 | pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; |
va009039 | 0:65f1469d6bfb | 475 | retval = dict_getItem(pattrs, PM_NONE, &pn); |
va009039 | 0:65f1469d6bfb | 476 | PM_RETURN_IF_ERROR(retval); |
va009039 | 0:65f1469d6bfb | 477 | dout = (DigitalOut *)((pPmInt_t)pn)->val; |
va009039 | 0:65f1469d6bfb | 478 | |
va009039 | 0:65f1469d6bfb | 479 | /* Return input value on the stack */ |
va009039 | 0:65f1469d6bfb | 480 | n = dout->read(); |
va009039 | 0:65f1469d6bfb | 481 | retval = int_new(n, &pn); |
va009039 | 0:65f1469d6bfb | 482 | NATIVE_SET_TOS(pn); |
va009039 | 0:65f1469d6bfb | 483 | |
va009039 | 0:65f1469d6bfb | 484 | return retval; |
va009039 | 0:65f1469d6bfb | 485 | |
va009039 | 0:65f1469d6bfb | 486 | } |
va009039 | 0:65f1469d6bfb | 487 | |
va009039 | 0:65f1469d6bfb | 488 | PmReturn_t |
va009039 | 0:65f1469d6bfb | 489 | nat_12_mbed_write(pPmFrame_t *ppframe) |
va009039 | 0:65f1469d6bfb | 490 | { |
va009039 | 0:65f1469d6bfb | 491 | |
va009039 | 0:65f1469d6bfb | 492 | pPmObj_t pself; |
va009039 | 0:65f1469d6bfb | 493 | pPmObj_t pn; |
va009039 | 0:65f1469d6bfb | 494 | pPmObj_t pattrs; |
va009039 | 0:65f1469d6bfb | 495 | PmReturn_t retval = PM_RET_OK; |
va009039 | 0:65f1469d6bfb | 496 | DigitalOut *dout; |
va009039 | 0:65f1469d6bfb | 497 | |
va009039 | 0:65f1469d6bfb | 498 | /* Raise TypeError if wrong number of args */ |
va009039 | 0:65f1469d6bfb | 499 | if (NATIVE_GET_NUM_ARGS() != 2) |
va009039 | 0:65f1469d6bfb | 500 | { |
va009039 | 0:65f1469d6bfb | 501 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 502 | return retval; |
va009039 | 0:65f1469d6bfb | 503 | } |
va009039 | 0:65f1469d6bfb | 504 | pself = NATIVE_GET_LOCAL(0); |
va009039 | 0:65f1469d6bfb | 505 | |
va009039 | 0:65f1469d6bfb | 506 | /* Raise TypeError if arg is not the right type */ |
va009039 | 0:65f1469d6bfb | 507 | pn = NATIVE_GET_LOCAL(1); |
va009039 | 0:65f1469d6bfb | 508 | if (OBJ_GET_TYPE(pn) != OBJ_TYPE_INT) |
va009039 | 0:65f1469d6bfb | 509 | { |
va009039 | 0:65f1469d6bfb | 510 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 511 | return retval; |
va009039 | 0:65f1469d6bfb | 512 | } |
va009039 | 0:65f1469d6bfb | 513 | |
va009039 | 0:65f1469d6bfb | 514 | /* Get the the C++ instance */ |
va009039 | 0:65f1469d6bfb | 515 | pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; |
va009039 | 0:65f1469d6bfb | 516 | retval = dict_getItem(pattrs, PM_NONE, &pn); |
va009039 | 0:65f1469d6bfb | 517 | PM_RETURN_IF_ERROR(retval); |
va009039 | 0:65f1469d6bfb | 518 | dout = (DigitalOut *)((pPmInt_t)pn)->val; |
va009039 | 0:65f1469d6bfb | 519 | |
va009039 | 0:65f1469d6bfb | 520 | /* Write value to DAC */ |
va009039 | 0:65f1469d6bfb | 521 | pn = NATIVE_GET_LOCAL(1); |
va009039 | 0:65f1469d6bfb | 522 | dout->write(((pPmInt_t)pn)->val); |
va009039 | 0:65f1469d6bfb | 523 | |
va009039 | 0:65f1469d6bfb | 524 | NATIVE_SET_TOS(PM_NONE); |
va009039 | 0:65f1469d6bfb | 525 | return retval; |
va009039 | 0:65f1469d6bfb | 526 | |
va009039 | 0:65f1469d6bfb | 527 | } |
va009039 | 0:65f1469d6bfb | 528 | |
va009039 | 0:65f1469d6bfb | 529 | PmReturn_t |
va009039 | 0:65f1469d6bfb | 530 | nat_13_mbed___init__(pPmFrame_t *ppframe) |
va009039 | 0:65f1469d6bfb | 531 | { |
va009039 | 0:65f1469d6bfb | 532 | |
va009039 | 0:65f1469d6bfb | 533 | pPmObj_t pself; |
va009039 | 0:65f1469d6bfb | 534 | pPmObj_t pn; |
va009039 | 0:65f1469d6bfb | 535 | pPmObj_t pattrs; |
va009039 | 0:65f1469d6bfb | 536 | PmReturn_t retval = PM_RET_OK; |
va009039 | 0:65f1469d6bfb | 537 | PwmOut *pwm; |
va009039 | 0:65f1469d6bfb | 538 | uint8_t objid; |
va009039 | 0:65f1469d6bfb | 539 | |
va009039 | 0:65f1469d6bfb | 540 | /* Raise TypeError if wrong number of args */ |
va009039 | 0:65f1469d6bfb | 541 | if (NATIVE_GET_NUM_ARGS() != 2) |
va009039 | 0:65f1469d6bfb | 542 | { |
va009039 | 0:65f1469d6bfb | 543 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 544 | return retval; |
va009039 | 0:65f1469d6bfb | 545 | } |
va009039 | 0:65f1469d6bfb | 546 | pself = NATIVE_GET_LOCAL(0); |
va009039 | 0:65f1469d6bfb | 547 | |
va009039 | 0:65f1469d6bfb | 548 | /* Raise TypeError if arg is not the right type */ |
va009039 | 0:65f1469d6bfb | 549 | pn = NATIVE_GET_LOCAL(1); |
va009039 | 0:65f1469d6bfb | 550 | if (OBJ_GET_TYPE(pn) != OBJ_TYPE_INT) |
va009039 | 0:65f1469d6bfb | 551 | { |
va009039 | 0:65f1469d6bfb | 552 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 553 | return retval; |
va009039 | 0:65f1469d6bfb | 554 | } |
va009039 | 0:65f1469d6bfb | 555 | |
va009039 | 0:65f1469d6bfb | 556 | /* Instantiate the C++ object */ |
va009039 | 0:65f1469d6bfb | 557 | pwm = new PwmOut(pinNumToName[((pPmInt_t)pn)->val]); |
va009039 | 0:65f1469d6bfb | 558 | |
va009039 | 0:65f1469d6bfb | 559 | /* Save the pointer to pwm as an inaccessible attribute */ |
va009039 | 0:65f1469d6bfb | 560 | pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; |
va009039 | 0:65f1469d6bfb | 561 | retval = int_new((uint32_t)pwm, &pn); |
va009039 | 0:65f1469d6bfb | 562 | PM_RETURN_IF_ERROR(retval); |
va009039 | 0:65f1469d6bfb | 563 | heap_gcPushTempRoot(pn, &objid); |
va009039 | 0:65f1469d6bfb | 564 | retval = dict_setItem(pattrs, PM_NONE, pn); |
va009039 | 0:65f1469d6bfb | 565 | heap_gcPopTempRoot(objid); |
va009039 | 0:65f1469d6bfb | 566 | PM_RETURN_IF_ERROR(retval); |
va009039 | 0:65f1469d6bfb | 567 | |
va009039 | 0:65f1469d6bfb | 568 | NATIVE_SET_TOS(PM_NONE); |
va009039 | 0:65f1469d6bfb | 569 | return retval; |
va009039 | 0:65f1469d6bfb | 570 | |
va009039 | 0:65f1469d6bfb | 571 | } |
va009039 | 0:65f1469d6bfb | 572 | |
va009039 | 0:65f1469d6bfb | 573 | PmReturn_t |
va009039 | 0:65f1469d6bfb | 574 | nat_14_mbed_read(pPmFrame_t *ppframe) |
va009039 | 0:65f1469d6bfb | 575 | { |
va009039 | 0:65f1469d6bfb | 576 | |
va009039 | 0:65f1469d6bfb | 577 | pPmObj_t pself; |
va009039 | 0:65f1469d6bfb | 578 | pPmObj_t pn; |
va009039 | 0:65f1469d6bfb | 579 | pPmObj_t pattrs; |
va009039 | 0:65f1469d6bfb | 580 | PmReturn_t retval = PM_RET_OK; |
va009039 | 0:65f1469d6bfb | 581 | DigitalOut *dout; |
va009039 | 0:65f1469d6bfb | 582 | int32_t n; |
va009039 | 0:65f1469d6bfb | 583 | |
va009039 | 0:65f1469d6bfb | 584 | /* If wrong number of args, throw type exception */ |
va009039 | 0:65f1469d6bfb | 585 | if (NATIVE_GET_NUM_ARGS() != 1) |
va009039 | 0:65f1469d6bfb | 586 | { |
va009039 | 0:65f1469d6bfb | 587 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 588 | return retval; |
va009039 | 0:65f1469d6bfb | 589 | } |
va009039 | 0:65f1469d6bfb | 590 | pself = NATIVE_GET_LOCAL(0); |
va009039 | 0:65f1469d6bfb | 591 | |
va009039 | 0:65f1469d6bfb | 592 | /* Get the the C++ instance */ |
va009039 | 0:65f1469d6bfb | 593 | pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; |
va009039 | 0:65f1469d6bfb | 594 | retval = dict_getItem(pattrs, PM_NONE, &pn); |
va009039 | 0:65f1469d6bfb | 595 | PM_RETURN_IF_ERROR(retval); |
va009039 | 0:65f1469d6bfb | 596 | dout = (DigitalOut *)((pPmInt_t)pn)->val; |
va009039 | 0:65f1469d6bfb | 597 | |
va009039 | 0:65f1469d6bfb | 598 | /* Return input value on the stack */ |
va009039 | 0:65f1469d6bfb | 599 | n = dout->read(); |
va009039 | 0:65f1469d6bfb | 600 | retval = int_new(n, &pn); |
va009039 | 0:65f1469d6bfb | 601 | NATIVE_SET_TOS(pn); |
va009039 | 0:65f1469d6bfb | 602 | |
va009039 | 0:65f1469d6bfb | 603 | return retval; |
va009039 | 0:65f1469d6bfb | 604 | |
va009039 | 0:65f1469d6bfb | 605 | } |
va009039 | 0:65f1469d6bfb | 606 | |
va009039 | 0:65f1469d6bfb | 607 | PmReturn_t |
va009039 | 0:65f1469d6bfb | 608 | nat_15_mbed_period(pPmFrame_t *ppframe) |
va009039 | 0:65f1469d6bfb | 609 | { |
va009039 | 0:65f1469d6bfb | 610 | |
va009039 | 0:65f1469d6bfb | 611 | pPmObj_t pself; |
va009039 | 0:65f1469d6bfb | 612 | pPmObj_t pn; |
va009039 | 0:65f1469d6bfb | 613 | pPmObj_t pattrs; |
va009039 | 0:65f1469d6bfb | 614 | PmReturn_t retval = PM_RET_OK; |
va009039 | 0:65f1469d6bfb | 615 | PwmOut *pwm; |
va009039 | 0:65f1469d6bfb | 616 | |
va009039 | 0:65f1469d6bfb | 617 | /* Raise TypeError if wrong number of args */ |
va009039 | 0:65f1469d6bfb | 618 | if (NATIVE_GET_NUM_ARGS() != 2) |
va009039 | 0:65f1469d6bfb | 619 | { |
va009039 | 0:65f1469d6bfb | 620 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 621 | return retval; |
va009039 | 0:65f1469d6bfb | 622 | } |
va009039 | 0:65f1469d6bfb | 623 | pself = NATIVE_GET_LOCAL(0); |
va009039 | 0:65f1469d6bfb | 624 | |
va009039 | 0:65f1469d6bfb | 625 | /* Raise TypeError if arg is not the right type */ |
va009039 | 0:65f1469d6bfb | 626 | pn = NATIVE_GET_LOCAL(1); |
va009039 | 0:65f1469d6bfb | 627 | if (OBJ_GET_TYPE(pn) != OBJ_TYPE_INT) |
va009039 | 0:65f1469d6bfb | 628 | { |
va009039 | 0:65f1469d6bfb | 629 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 630 | return retval; |
va009039 | 0:65f1469d6bfb | 631 | } |
va009039 | 0:65f1469d6bfb | 632 | |
va009039 | 0:65f1469d6bfb | 633 | /* Get the the C++ instance */ |
va009039 | 0:65f1469d6bfb | 634 | pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; |
va009039 | 0:65f1469d6bfb | 635 | retval = dict_getItem(pattrs, PM_NONE, &pn); |
va009039 | 0:65f1469d6bfb | 636 | PM_RETURN_IF_ERROR(retval); |
va009039 | 0:65f1469d6bfb | 637 | pwm = (PwmOut *)((pPmInt_t)pn)->val; |
va009039 | 0:65f1469d6bfb | 638 | |
va009039 | 0:65f1469d6bfb | 639 | /* Write value to DAC */ |
va009039 | 0:65f1469d6bfb | 640 | pn = NATIVE_GET_LOCAL(1); |
va009039 | 0:65f1469d6bfb | 641 | pwm->period(((pPmInt_t)pn)->val); |
va009039 | 0:65f1469d6bfb | 642 | |
va009039 | 0:65f1469d6bfb | 643 | NATIVE_SET_TOS(PM_NONE); |
va009039 | 0:65f1469d6bfb | 644 | return retval; |
va009039 | 0:65f1469d6bfb | 645 | |
va009039 | 0:65f1469d6bfb | 646 | } |
va009039 | 0:65f1469d6bfb | 647 | |
va009039 | 0:65f1469d6bfb | 648 | PmReturn_t |
va009039 | 0:65f1469d6bfb | 649 | nat_16_mbed_period_ms(pPmFrame_t *ppframe) |
va009039 | 0:65f1469d6bfb | 650 | { |
va009039 | 0:65f1469d6bfb | 651 | |
va009039 | 0:65f1469d6bfb | 652 | pPmObj_t pself; |
va009039 | 0:65f1469d6bfb | 653 | pPmObj_t pn; |
va009039 | 0:65f1469d6bfb | 654 | pPmObj_t pattrs; |
va009039 | 0:65f1469d6bfb | 655 | PmReturn_t retval = PM_RET_OK; |
va009039 | 0:65f1469d6bfb | 656 | PwmOut *pwm; |
va009039 | 0:65f1469d6bfb | 657 | |
va009039 | 0:65f1469d6bfb | 658 | /* Raise TypeError if wrong number of args */ |
va009039 | 0:65f1469d6bfb | 659 | if (NATIVE_GET_NUM_ARGS() != 2) |
va009039 | 0:65f1469d6bfb | 660 | { |
va009039 | 0:65f1469d6bfb | 661 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 662 | return retval; |
va009039 | 0:65f1469d6bfb | 663 | } |
va009039 | 0:65f1469d6bfb | 664 | pself = NATIVE_GET_LOCAL(0); |
va009039 | 0:65f1469d6bfb | 665 | |
va009039 | 0:65f1469d6bfb | 666 | /* Raise TypeError if arg is not the right type */ |
va009039 | 0:65f1469d6bfb | 667 | pn = NATIVE_GET_LOCAL(1); |
va009039 | 0:65f1469d6bfb | 668 | if (OBJ_GET_TYPE(pn) != OBJ_TYPE_INT) |
va009039 | 0:65f1469d6bfb | 669 | { |
va009039 | 0:65f1469d6bfb | 670 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 671 | return retval; |
va009039 | 0:65f1469d6bfb | 672 | } |
va009039 | 0:65f1469d6bfb | 673 | |
va009039 | 0:65f1469d6bfb | 674 | /* Get the the C++ instance */ |
va009039 | 0:65f1469d6bfb | 675 | pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; |
va009039 | 0:65f1469d6bfb | 676 | retval = dict_getItem(pattrs, PM_NONE, &pn); |
va009039 | 0:65f1469d6bfb | 677 | PM_RETURN_IF_ERROR(retval); |
va009039 | 0:65f1469d6bfb | 678 | pwm = (PwmOut *)((pPmInt_t)pn)->val; |
va009039 | 0:65f1469d6bfb | 679 | |
va009039 | 0:65f1469d6bfb | 680 | /* Write value to DAC */ |
va009039 | 0:65f1469d6bfb | 681 | pn = NATIVE_GET_LOCAL(1); |
va009039 | 0:65f1469d6bfb | 682 | pwm->period_ms(((pPmInt_t)pn)->val); |
va009039 | 0:65f1469d6bfb | 683 | |
va009039 | 0:65f1469d6bfb | 684 | NATIVE_SET_TOS(PM_NONE); |
va009039 | 0:65f1469d6bfb | 685 | return retval; |
va009039 | 0:65f1469d6bfb | 686 | |
va009039 | 0:65f1469d6bfb | 687 | } |
va009039 | 0:65f1469d6bfb | 688 | |
va009039 | 0:65f1469d6bfb | 689 | PmReturn_t |
va009039 | 0:65f1469d6bfb | 690 | nat_17_mbed_period_us(pPmFrame_t *ppframe) |
va009039 | 0:65f1469d6bfb | 691 | { |
va009039 | 0:65f1469d6bfb | 692 | |
va009039 | 0:65f1469d6bfb | 693 | pPmObj_t pself; |
va009039 | 0:65f1469d6bfb | 694 | pPmObj_t pn; |
va009039 | 0:65f1469d6bfb | 695 | pPmObj_t pattrs; |
va009039 | 0:65f1469d6bfb | 696 | PmReturn_t retval = PM_RET_OK; |
va009039 | 0:65f1469d6bfb | 697 | PwmOut *pwm; |
va009039 | 0:65f1469d6bfb | 698 | |
va009039 | 0:65f1469d6bfb | 699 | /* Raise TypeError if wrong number of args */ |
va009039 | 0:65f1469d6bfb | 700 | if (NATIVE_GET_NUM_ARGS() != 2) |
va009039 | 0:65f1469d6bfb | 701 | { |
va009039 | 0:65f1469d6bfb | 702 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 703 | return retval; |
va009039 | 0:65f1469d6bfb | 704 | } |
va009039 | 0:65f1469d6bfb | 705 | pself = NATIVE_GET_LOCAL(0); |
va009039 | 0:65f1469d6bfb | 706 | |
va009039 | 0:65f1469d6bfb | 707 | /* Raise TypeError if arg is not the right type */ |
va009039 | 0:65f1469d6bfb | 708 | pn = NATIVE_GET_LOCAL(1); |
va009039 | 0:65f1469d6bfb | 709 | if (OBJ_GET_TYPE(pn) != OBJ_TYPE_INT) |
va009039 | 0:65f1469d6bfb | 710 | { |
va009039 | 0:65f1469d6bfb | 711 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 712 | return retval; |
va009039 | 0:65f1469d6bfb | 713 | } |
va009039 | 0:65f1469d6bfb | 714 | |
va009039 | 0:65f1469d6bfb | 715 | /* Get the the C++ instance */ |
va009039 | 0:65f1469d6bfb | 716 | pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; |
va009039 | 0:65f1469d6bfb | 717 | retval = dict_getItem(pattrs, PM_NONE, &pn); |
va009039 | 0:65f1469d6bfb | 718 | PM_RETURN_IF_ERROR(retval); |
va009039 | 0:65f1469d6bfb | 719 | pwm = (PwmOut *)((pPmInt_t)pn)->val; |
va009039 | 0:65f1469d6bfb | 720 | |
va009039 | 0:65f1469d6bfb | 721 | /* Write value to DAC */ |
va009039 | 0:65f1469d6bfb | 722 | pn = NATIVE_GET_LOCAL(1); |
va009039 | 0:65f1469d6bfb | 723 | pwm->period_us(((pPmInt_t)pn)->val); |
va009039 | 0:65f1469d6bfb | 724 | |
va009039 | 0:65f1469d6bfb | 725 | NATIVE_SET_TOS(PM_NONE); |
va009039 | 0:65f1469d6bfb | 726 | return retval; |
va009039 | 0:65f1469d6bfb | 727 | |
va009039 | 0:65f1469d6bfb | 728 | } |
va009039 | 0:65f1469d6bfb | 729 | |
va009039 | 0:65f1469d6bfb | 730 | PmReturn_t |
va009039 | 0:65f1469d6bfb | 731 | nat_18_mbed_pulsewidth(pPmFrame_t *ppframe) |
va009039 | 0:65f1469d6bfb | 732 | { |
va009039 | 0:65f1469d6bfb | 733 | |
va009039 | 0:65f1469d6bfb | 734 | pPmObj_t pself; |
va009039 | 0:65f1469d6bfb | 735 | pPmObj_t pn; |
va009039 | 0:65f1469d6bfb | 736 | pPmObj_t pattrs; |
va009039 | 0:65f1469d6bfb | 737 | PmReturn_t retval = PM_RET_OK; |
va009039 | 0:65f1469d6bfb | 738 | PwmOut *pwm; |
va009039 | 0:65f1469d6bfb | 739 | |
va009039 | 0:65f1469d6bfb | 740 | /* Raise TypeError if wrong number of args */ |
va009039 | 0:65f1469d6bfb | 741 | if (NATIVE_GET_NUM_ARGS() != 2) |
va009039 | 0:65f1469d6bfb | 742 | { |
va009039 | 0:65f1469d6bfb | 743 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 744 | return retval; |
va009039 | 0:65f1469d6bfb | 745 | } |
va009039 | 0:65f1469d6bfb | 746 | pself = NATIVE_GET_LOCAL(0); |
va009039 | 0:65f1469d6bfb | 747 | |
va009039 | 0:65f1469d6bfb | 748 | /* Raise TypeError if arg is not the right type */ |
va009039 | 0:65f1469d6bfb | 749 | pn = NATIVE_GET_LOCAL(1); |
va009039 | 0:65f1469d6bfb | 750 | if (OBJ_GET_TYPE(pn) != OBJ_TYPE_INT) |
va009039 | 0:65f1469d6bfb | 751 | { |
va009039 | 0:65f1469d6bfb | 752 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 753 | return retval; |
va009039 | 0:65f1469d6bfb | 754 | } |
va009039 | 0:65f1469d6bfb | 755 | |
va009039 | 0:65f1469d6bfb | 756 | /* Get the the C++ instance */ |
va009039 | 0:65f1469d6bfb | 757 | pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; |
va009039 | 0:65f1469d6bfb | 758 | retval = dict_getItem(pattrs, PM_NONE, &pn); |
va009039 | 0:65f1469d6bfb | 759 | PM_RETURN_IF_ERROR(retval); |
va009039 | 0:65f1469d6bfb | 760 | pwm = (PwmOut *)((pPmInt_t)pn)->val; |
va009039 | 0:65f1469d6bfb | 761 | |
va009039 | 0:65f1469d6bfb | 762 | /* Write value to DAC */ |
va009039 | 0:65f1469d6bfb | 763 | pn = NATIVE_GET_LOCAL(1); |
va009039 | 0:65f1469d6bfb | 764 | pwm->pulsewidth(((pPmInt_t)pn)->val); |
va009039 | 0:65f1469d6bfb | 765 | |
va009039 | 0:65f1469d6bfb | 766 | NATIVE_SET_TOS(PM_NONE); |
va009039 | 0:65f1469d6bfb | 767 | return retval; |
va009039 | 0:65f1469d6bfb | 768 | |
va009039 | 0:65f1469d6bfb | 769 | } |
va009039 | 0:65f1469d6bfb | 770 | |
va009039 | 0:65f1469d6bfb | 771 | PmReturn_t |
va009039 | 0:65f1469d6bfb | 772 | nat_19_mbed_puslewidth_ms(pPmFrame_t *ppframe) |
va009039 | 0:65f1469d6bfb | 773 | { |
va009039 | 0:65f1469d6bfb | 774 | |
va009039 | 0:65f1469d6bfb | 775 | pPmObj_t pself; |
va009039 | 0:65f1469d6bfb | 776 | pPmObj_t pn; |
va009039 | 0:65f1469d6bfb | 777 | pPmObj_t pattrs; |
va009039 | 0:65f1469d6bfb | 778 | PmReturn_t retval = PM_RET_OK; |
va009039 | 0:65f1469d6bfb | 779 | PwmOut *pwm; |
va009039 | 0:65f1469d6bfb | 780 | |
va009039 | 0:65f1469d6bfb | 781 | /* Raise TypeError if wrong number of args */ |
va009039 | 0:65f1469d6bfb | 782 | if (NATIVE_GET_NUM_ARGS() != 2) |
va009039 | 0:65f1469d6bfb | 783 | { |
va009039 | 0:65f1469d6bfb | 784 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 785 | return retval; |
va009039 | 0:65f1469d6bfb | 786 | } |
va009039 | 0:65f1469d6bfb | 787 | pself = NATIVE_GET_LOCAL(0); |
va009039 | 0:65f1469d6bfb | 788 | |
va009039 | 0:65f1469d6bfb | 789 | /* Raise TypeError if arg is not the right type */ |
va009039 | 0:65f1469d6bfb | 790 | pn = NATIVE_GET_LOCAL(1); |
va009039 | 0:65f1469d6bfb | 791 | if (OBJ_GET_TYPE(pn) != OBJ_TYPE_INT) |
va009039 | 0:65f1469d6bfb | 792 | { |
va009039 | 0:65f1469d6bfb | 793 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 794 | return retval; |
va009039 | 0:65f1469d6bfb | 795 | } |
va009039 | 0:65f1469d6bfb | 796 | |
va009039 | 0:65f1469d6bfb | 797 | /* Get the the C++ instance */ |
va009039 | 0:65f1469d6bfb | 798 | pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; |
va009039 | 0:65f1469d6bfb | 799 | retval = dict_getItem(pattrs, PM_NONE, &pn); |
va009039 | 0:65f1469d6bfb | 800 | PM_RETURN_IF_ERROR(retval); |
va009039 | 0:65f1469d6bfb | 801 | pwm = (PwmOut *)((pPmInt_t)pn)->val; |
va009039 | 0:65f1469d6bfb | 802 | |
va009039 | 0:65f1469d6bfb | 803 | /* Write value to DAC */ |
va009039 | 0:65f1469d6bfb | 804 | pn = NATIVE_GET_LOCAL(1); |
va009039 | 0:65f1469d6bfb | 805 | pwm->pulsewidth_ms(((pPmInt_t)pn)->val); |
va009039 | 0:65f1469d6bfb | 806 | |
va009039 | 0:65f1469d6bfb | 807 | NATIVE_SET_TOS(PM_NONE); |
va009039 | 0:65f1469d6bfb | 808 | return retval; |
va009039 | 0:65f1469d6bfb | 809 | |
va009039 | 0:65f1469d6bfb | 810 | } |
va009039 | 0:65f1469d6bfb | 811 | |
va009039 | 0:65f1469d6bfb | 812 | PmReturn_t |
va009039 | 0:65f1469d6bfb | 813 | nat_20_mbed_pulsewidth_us(pPmFrame_t *ppframe) |
va009039 | 0:65f1469d6bfb | 814 | { |
va009039 | 0:65f1469d6bfb | 815 | |
va009039 | 0:65f1469d6bfb | 816 | pPmObj_t pself; |
va009039 | 0:65f1469d6bfb | 817 | pPmObj_t pn; |
va009039 | 0:65f1469d6bfb | 818 | pPmObj_t pattrs; |
va009039 | 0:65f1469d6bfb | 819 | PmReturn_t retval = PM_RET_OK; |
va009039 | 0:65f1469d6bfb | 820 | PwmOut *pwm; |
va009039 | 0:65f1469d6bfb | 821 | |
va009039 | 0:65f1469d6bfb | 822 | /* Raise TypeError if wrong number of args */ |
va009039 | 0:65f1469d6bfb | 823 | if (NATIVE_GET_NUM_ARGS() != 2) |
va009039 | 0:65f1469d6bfb | 824 | { |
va009039 | 0:65f1469d6bfb | 825 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 826 | return retval; |
va009039 | 0:65f1469d6bfb | 827 | } |
va009039 | 0:65f1469d6bfb | 828 | pself = NATIVE_GET_LOCAL(0); |
va009039 | 0:65f1469d6bfb | 829 | |
va009039 | 0:65f1469d6bfb | 830 | /* Raise TypeError if arg is not the right type */ |
va009039 | 0:65f1469d6bfb | 831 | pn = NATIVE_GET_LOCAL(1); |
va009039 | 0:65f1469d6bfb | 832 | if (OBJ_GET_TYPE(pn) != OBJ_TYPE_INT) |
va009039 | 0:65f1469d6bfb | 833 | { |
va009039 | 0:65f1469d6bfb | 834 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 835 | return retval; |
va009039 | 0:65f1469d6bfb | 836 | } |
va009039 | 0:65f1469d6bfb | 837 | |
va009039 | 0:65f1469d6bfb | 838 | /* Get the the C++ instance */ |
va009039 | 0:65f1469d6bfb | 839 | pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; |
va009039 | 0:65f1469d6bfb | 840 | retval = dict_getItem(pattrs, PM_NONE, &pn); |
va009039 | 0:65f1469d6bfb | 841 | PM_RETURN_IF_ERROR(retval); |
va009039 | 0:65f1469d6bfb | 842 | pwm = (PwmOut *)((pPmInt_t)pn)->val; |
va009039 | 0:65f1469d6bfb | 843 | |
va009039 | 0:65f1469d6bfb | 844 | /* Write value to DAC */ |
va009039 | 0:65f1469d6bfb | 845 | pn = NATIVE_GET_LOCAL(1); |
va009039 | 0:65f1469d6bfb | 846 | pwm->pulsewidth_us(((pPmInt_t)pn)->val); |
va009039 | 0:65f1469d6bfb | 847 | |
va009039 | 0:65f1469d6bfb | 848 | NATIVE_SET_TOS(PM_NONE); |
va009039 | 0:65f1469d6bfb | 849 | return retval; |
va009039 | 0:65f1469d6bfb | 850 | |
va009039 | 0:65f1469d6bfb | 851 | } |
va009039 | 0:65f1469d6bfb | 852 | |
va009039 | 0:65f1469d6bfb | 853 | PmReturn_t |
va009039 | 0:65f1469d6bfb | 854 | nat_21_mbed___init__(pPmFrame_t *ppframe) |
va009039 | 0:65f1469d6bfb | 855 | { |
va009039 | 0:65f1469d6bfb | 856 | |
va009039 | 0:65f1469d6bfb | 857 | pPmObj_t pself; |
va009039 | 0:65f1469d6bfb | 858 | pPmObj_t pn; |
va009039 | 0:65f1469d6bfb | 859 | pPmObj_t ptx; |
va009039 | 0:65f1469d6bfb | 860 | pPmObj_t prx; |
va009039 | 0:65f1469d6bfb | 861 | pPmObj_t pattrs; |
va009039 | 0:65f1469d6bfb | 862 | PmReturn_t retval = PM_RET_OK; |
va009039 | 0:65f1469d6bfb | 863 | Serial *ser; |
va009039 | 0:65f1469d6bfb | 864 | uint8_t objid; |
va009039 | 0:65f1469d6bfb | 865 | |
va009039 | 0:65f1469d6bfb | 866 | /* Raise TypeError if wrong number of args */ |
va009039 | 0:65f1469d6bfb | 867 | if (NATIVE_GET_NUM_ARGS() != 3) |
va009039 | 0:65f1469d6bfb | 868 | { |
va009039 | 0:65f1469d6bfb | 869 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 870 | return retval; |
va009039 | 0:65f1469d6bfb | 871 | } |
va009039 | 0:65f1469d6bfb | 872 | pself = NATIVE_GET_LOCAL(0); |
va009039 | 0:65f1469d6bfb | 873 | |
va009039 | 0:65f1469d6bfb | 874 | /* Raise TypeError if arg is not the right type */ |
va009039 | 0:65f1469d6bfb | 875 | ptx = NATIVE_GET_LOCAL(1); |
va009039 | 0:65f1469d6bfb | 876 | prx = NATIVE_GET_LOCAL(2); |
va009039 | 0:65f1469d6bfb | 877 | if ((OBJ_GET_TYPE(ptx) != OBJ_TYPE_INT) |
va009039 | 0:65f1469d6bfb | 878 | || (OBJ_GET_TYPE(prx) != OBJ_TYPE_INT)) |
va009039 | 0:65f1469d6bfb | 879 | { |
va009039 | 0:65f1469d6bfb | 880 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 881 | return retval; |
va009039 | 0:65f1469d6bfb | 882 | } |
va009039 | 0:65f1469d6bfb | 883 | |
va009039 | 0:65f1469d6bfb | 884 | /* Instantiate the C++ object */ |
va009039 | 0:65f1469d6bfb | 885 | ser = new Serial(pinNumToName[((pPmInt_t)ptx)->val], |
va009039 | 0:65f1469d6bfb | 886 | pinNumToName[((pPmInt_t)prx)->val]); |
va009039 | 0:65f1469d6bfb | 887 | |
va009039 | 0:65f1469d6bfb | 888 | /* Save the pointer to ser as an inaccessible attribute */ |
va009039 | 0:65f1469d6bfb | 889 | pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; |
va009039 | 0:65f1469d6bfb | 890 | retval = int_new((uint32_t)ser, &pn); |
va009039 | 0:65f1469d6bfb | 891 | PM_RETURN_IF_ERROR(retval); |
va009039 | 0:65f1469d6bfb | 892 | heap_gcPushTempRoot(pn, &objid); |
va009039 | 0:65f1469d6bfb | 893 | retval = dict_setItem(pattrs, PM_NONE, pn); |
va009039 | 0:65f1469d6bfb | 894 | heap_gcPopTempRoot(objid); |
va009039 | 0:65f1469d6bfb | 895 | PM_RETURN_IF_ERROR(retval); |
va009039 | 0:65f1469d6bfb | 896 | |
va009039 | 0:65f1469d6bfb | 897 | NATIVE_SET_TOS(PM_NONE); |
va009039 | 0:65f1469d6bfb | 898 | return retval; |
va009039 | 0:65f1469d6bfb | 899 | |
va009039 | 0:65f1469d6bfb | 900 | } |
va009039 | 0:65f1469d6bfb | 901 | |
va009039 | 0:65f1469d6bfb | 902 | PmReturn_t |
va009039 | 0:65f1469d6bfb | 903 | nat_22_mbed_putc(pPmFrame_t *ppframe) |
va009039 | 0:65f1469d6bfb | 904 | { |
va009039 | 0:65f1469d6bfb | 905 | |
va009039 | 0:65f1469d6bfb | 906 | pPmObj_t pself; |
va009039 | 0:65f1469d6bfb | 907 | pPmObj_t pn; |
va009039 | 0:65f1469d6bfb | 908 | pPmObj_t pattrs; |
va009039 | 0:65f1469d6bfb | 909 | PmReturn_t retval = PM_RET_OK; |
va009039 | 0:65f1469d6bfb | 910 | Serial *ser; |
va009039 | 0:65f1469d6bfb | 911 | |
va009039 | 0:65f1469d6bfb | 912 | /* Raise TypeError if wrong number of args */ |
va009039 | 0:65f1469d6bfb | 913 | if (NATIVE_GET_NUM_ARGS() != 2) |
va009039 | 0:65f1469d6bfb | 914 | { |
va009039 | 0:65f1469d6bfb | 915 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 916 | return retval; |
va009039 | 0:65f1469d6bfb | 917 | } |
va009039 | 0:65f1469d6bfb | 918 | pself = NATIVE_GET_LOCAL(0); |
va009039 | 0:65f1469d6bfb | 919 | |
va009039 | 0:65f1469d6bfb | 920 | /* Raise TypeError if arg is not the right type */ |
va009039 | 0:65f1469d6bfb | 921 | pn = NATIVE_GET_LOCAL(1); |
va009039 | 0:65f1469d6bfb | 922 | if (OBJ_GET_TYPE(pn) != OBJ_TYPE_STR) |
va009039 | 0:65f1469d6bfb | 923 | { |
va009039 | 0:65f1469d6bfb | 924 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 925 | return retval; |
va009039 | 0:65f1469d6bfb | 926 | } |
va009039 | 0:65f1469d6bfb | 927 | |
va009039 | 0:65f1469d6bfb | 928 | /* Get the the C++ instance */ |
va009039 | 0:65f1469d6bfb | 929 | pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; |
va009039 | 0:65f1469d6bfb | 930 | retval = dict_getItem(pattrs, PM_NONE, &pn); |
va009039 | 0:65f1469d6bfb | 931 | PM_RETURN_IF_ERROR(retval); |
va009039 | 0:65f1469d6bfb | 932 | ser = (Serial *)((pPmInt_t)pn)->val; |
va009039 | 0:65f1469d6bfb | 933 | |
va009039 | 0:65f1469d6bfb | 934 | /* Write value to DAC */ |
va009039 | 0:65f1469d6bfb | 935 | pn = NATIVE_GET_LOCAL(1); |
va009039 | 0:65f1469d6bfb | 936 | ser->putc(((pPmString_t)pn)->val[0]); |
va009039 | 0:65f1469d6bfb | 937 | |
va009039 | 0:65f1469d6bfb | 938 | NATIVE_SET_TOS(PM_NONE); |
va009039 | 0:65f1469d6bfb | 939 | return retval; |
va009039 | 0:65f1469d6bfb | 940 | |
va009039 | 0:65f1469d6bfb | 941 | } |
va009039 | 0:65f1469d6bfb | 942 | |
va009039 | 0:65f1469d6bfb | 943 | PmReturn_t |
va009039 | 0:65f1469d6bfb | 944 | nat_23_mbed_puts(pPmFrame_t *ppframe) |
va009039 | 0:65f1469d6bfb | 945 | { |
va009039 | 0:65f1469d6bfb | 946 | |
va009039 | 0:65f1469d6bfb | 947 | pPmObj_t pself; |
va009039 | 0:65f1469d6bfb | 948 | pPmObj_t pn; |
va009039 | 0:65f1469d6bfb | 949 | pPmObj_t pattrs; |
va009039 | 0:65f1469d6bfb | 950 | PmReturn_t retval = PM_RET_OK; |
va009039 | 0:65f1469d6bfb | 951 | Serial *ser; |
va009039 | 0:65f1469d6bfb | 952 | |
va009039 | 0:65f1469d6bfb | 953 | /* Raise TypeError if wrong number of args */ |
va009039 | 0:65f1469d6bfb | 954 | if (NATIVE_GET_NUM_ARGS() != 2) |
va009039 | 0:65f1469d6bfb | 955 | { |
va009039 | 0:65f1469d6bfb | 956 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 957 | return retval; |
va009039 | 0:65f1469d6bfb | 958 | } |
va009039 | 0:65f1469d6bfb | 959 | pself = NATIVE_GET_LOCAL(0); |
va009039 | 0:65f1469d6bfb | 960 | |
va009039 | 0:65f1469d6bfb | 961 | /* Raise TypeError if arg is not the right type */ |
va009039 | 0:65f1469d6bfb | 962 | pn = NATIVE_GET_LOCAL(1); |
va009039 | 0:65f1469d6bfb | 963 | if (OBJ_GET_TYPE(pn) != OBJ_TYPE_STR) |
va009039 | 0:65f1469d6bfb | 964 | { |
va009039 | 0:65f1469d6bfb | 965 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 966 | return retval; |
va009039 | 0:65f1469d6bfb | 967 | } |
va009039 | 0:65f1469d6bfb | 968 | |
va009039 | 0:65f1469d6bfb | 969 | /* Get the the C++ instance */ |
va009039 | 0:65f1469d6bfb | 970 | pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; |
va009039 | 0:65f1469d6bfb | 971 | retval = dict_getItem(pattrs, PM_NONE, &pn); |
va009039 | 0:65f1469d6bfb | 972 | PM_RETURN_IF_ERROR(retval); |
va009039 | 0:65f1469d6bfb | 973 | ser = (Serial *)((pPmInt_t)pn)->val; |
va009039 | 0:65f1469d6bfb | 974 | |
va009039 | 0:65f1469d6bfb | 975 | /* Write value to DAC */ |
va009039 | 0:65f1469d6bfb | 976 | pn = NATIVE_GET_LOCAL(1); |
va009039 | 0:65f1469d6bfb | 977 | ser->puts((const char *)((pPmString_t)pn)->val); |
va009039 | 0:65f1469d6bfb | 978 | |
va009039 | 0:65f1469d6bfb | 979 | NATIVE_SET_TOS(PM_NONE); |
va009039 | 0:65f1469d6bfb | 980 | return retval; |
va009039 | 0:65f1469d6bfb | 981 | |
va009039 | 0:65f1469d6bfb | 982 | } |
va009039 | 0:65f1469d6bfb | 983 | |
va009039 | 0:65f1469d6bfb | 984 | PmReturn_t |
va009039 | 0:65f1469d6bfb | 985 | nat_24_mbed_getc(pPmFrame_t *ppframe) |
va009039 | 0:65f1469d6bfb | 986 | { |
va009039 | 0:65f1469d6bfb | 987 | |
va009039 | 0:65f1469d6bfb | 988 | pPmObj_t pself; |
va009039 | 0:65f1469d6bfb | 989 | pPmObj_t pn; |
va009039 | 0:65f1469d6bfb | 990 | pPmObj_t pattrs; |
va009039 | 0:65f1469d6bfb | 991 | PmReturn_t retval = PM_RET_OK; |
va009039 | 0:65f1469d6bfb | 992 | Serial *ser; |
va009039 | 0:65f1469d6bfb | 993 | int32_t n; |
va009039 | 0:65f1469d6bfb | 994 | |
va009039 | 0:65f1469d6bfb | 995 | /* If wrong number of args, throw type exception */ |
va009039 | 0:65f1469d6bfb | 996 | if (NATIVE_GET_NUM_ARGS() != 1) |
va009039 | 0:65f1469d6bfb | 997 | { |
va009039 | 0:65f1469d6bfb | 998 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 999 | return retval; |
va009039 | 0:65f1469d6bfb | 1000 | } |
va009039 | 0:65f1469d6bfb | 1001 | pself = NATIVE_GET_LOCAL(0); |
va009039 | 0:65f1469d6bfb | 1002 | |
va009039 | 0:65f1469d6bfb | 1003 | /* Get the the C++ instance */ |
va009039 | 0:65f1469d6bfb | 1004 | pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; |
va009039 | 0:65f1469d6bfb | 1005 | retval = dict_getItem(pattrs, PM_NONE, &pn); |
va009039 | 0:65f1469d6bfb | 1006 | PM_RETURN_IF_ERROR(retval); |
va009039 | 0:65f1469d6bfb | 1007 | ser = (Serial *)((pPmInt_t)pn)->val; |
va009039 | 0:65f1469d6bfb | 1008 | |
va009039 | 0:65f1469d6bfb | 1009 | /* Return char (as string) on the stack */ |
va009039 | 0:65f1469d6bfb | 1010 | n = ser->getc(); |
va009039 | 0:65f1469d6bfb | 1011 | retval = string_newFromChar((uint8_t)n, &pn); |
va009039 | 0:65f1469d6bfb | 1012 | NATIVE_SET_TOS(pn); |
va009039 | 0:65f1469d6bfb | 1013 | |
va009039 | 0:65f1469d6bfb | 1014 | return retval; |
va009039 | 0:65f1469d6bfb | 1015 | |
va009039 | 0:65f1469d6bfb | 1016 | } |
va009039 | 0:65f1469d6bfb | 1017 | |
va009039 | 0:65f1469d6bfb | 1018 | PmReturn_t |
va009039 | 0:65f1469d6bfb | 1019 | nat_25_mbed___init__(pPmFrame_t *ppframe) |
va009039 | 0:65f1469d6bfb | 1020 | { |
va009039 | 0:65f1469d6bfb | 1021 | |
va009039 | 0:65f1469d6bfb | 1022 | pPmObj_t pself; |
va009039 | 0:65f1469d6bfb | 1023 | pPmObj_t pn; |
va009039 | 0:65f1469d6bfb | 1024 | pPmObj_t pmosi; |
va009039 | 0:65f1469d6bfb | 1025 | pPmObj_t pmiso; |
va009039 | 0:65f1469d6bfb | 1026 | pPmObj_t psclk; |
va009039 | 0:65f1469d6bfb | 1027 | pPmObj_t pattrs; |
va009039 | 0:65f1469d6bfb | 1028 | PmReturn_t retval = PM_RET_OK; |
va009039 | 0:65f1469d6bfb | 1029 | SPI *spi; |
va009039 | 0:65f1469d6bfb | 1030 | uint8_t objid; |
va009039 | 0:65f1469d6bfb | 1031 | |
va009039 | 0:65f1469d6bfb | 1032 | /* Raise TypeError if wrong number of args */ |
va009039 | 0:65f1469d6bfb | 1033 | if (NATIVE_GET_NUM_ARGS() != 4) |
va009039 | 0:65f1469d6bfb | 1034 | { |
va009039 | 0:65f1469d6bfb | 1035 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 1036 | return retval; |
va009039 | 0:65f1469d6bfb | 1037 | } |
va009039 | 0:65f1469d6bfb | 1038 | pself = NATIVE_GET_LOCAL(0); |
va009039 | 0:65f1469d6bfb | 1039 | |
va009039 | 0:65f1469d6bfb | 1040 | /* Raise TypeError if arg is not the right type */ |
va009039 | 0:65f1469d6bfb | 1041 | pmosi = NATIVE_GET_LOCAL(1); |
va009039 | 0:65f1469d6bfb | 1042 | pmiso = NATIVE_GET_LOCAL(2); |
va009039 | 0:65f1469d6bfb | 1043 | psclk = NATIVE_GET_LOCAL(3); |
va009039 | 0:65f1469d6bfb | 1044 | if ((OBJ_GET_TYPE(pmosi) != OBJ_TYPE_INT) |
va009039 | 0:65f1469d6bfb | 1045 | || (OBJ_GET_TYPE(pmiso) != OBJ_TYPE_INT) |
va009039 | 0:65f1469d6bfb | 1046 | || (OBJ_GET_TYPE(psclk) != OBJ_TYPE_INT)) |
va009039 | 0:65f1469d6bfb | 1047 | { |
va009039 | 0:65f1469d6bfb | 1048 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 1049 | return retval; |
va009039 | 0:65f1469d6bfb | 1050 | } |
va009039 | 0:65f1469d6bfb | 1051 | |
va009039 | 0:65f1469d6bfb | 1052 | /* Instantiate the C++ object */ |
va009039 | 0:65f1469d6bfb | 1053 | spi = new SPI(pinNumToName[((pPmInt_t)pmosi)->val], |
va009039 | 0:65f1469d6bfb | 1054 | pinNumToName[((pPmInt_t)pmiso)->val], |
va009039 | 0:65f1469d6bfb | 1055 | pinNumToName[((pPmInt_t)psclk)->val]); |
va009039 | 0:65f1469d6bfb | 1056 | |
va009039 | 0:65f1469d6bfb | 1057 | /* Save the pointer to ser as an inaccessible attribute */ |
va009039 | 0:65f1469d6bfb | 1058 | pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; |
va009039 | 0:65f1469d6bfb | 1059 | retval = int_new((uint32_t)spi, &pn); |
va009039 | 0:65f1469d6bfb | 1060 | PM_RETURN_IF_ERROR(retval); |
va009039 | 0:65f1469d6bfb | 1061 | heap_gcPushTempRoot(pn, &objid); |
va009039 | 0:65f1469d6bfb | 1062 | retval = dict_setItem(pattrs, PM_NONE, pn); |
va009039 | 0:65f1469d6bfb | 1063 | heap_gcPopTempRoot(objid); |
va009039 | 0:65f1469d6bfb | 1064 | PM_RETURN_IF_ERROR(retval); |
va009039 | 0:65f1469d6bfb | 1065 | |
va009039 | 0:65f1469d6bfb | 1066 | NATIVE_SET_TOS(PM_NONE); |
va009039 | 0:65f1469d6bfb | 1067 | return retval; |
va009039 | 0:65f1469d6bfb | 1068 | |
va009039 | 0:65f1469d6bfb | 1069 | } |
va009039 | 0:65f1469d6bfb | 1070 | |
va009039 | 0:65f1469d6bfb | 1071 | PmReturn_t |
va009039 | 0:65f1469d6bfb | 1072 | nat_26_mbed_format(pPmFrame_t *ppframe) |
va009039 | 0:65f1469d6bfb | 1073 | { |
va009039 | 0:65f1469d6bfb | 1074 | |
va009039 | 0:65f1469d6bfb | 1075 | pPmObj_t pself; |
va009039 | 0:65f1469d6bfb | 1076 | pPmObj_t pn; |
va009039 | 0:65f1469d6bfb | 1077 | pPmObj_t pbits; |
va009039 | 0:65f1469d6bfb | 1078 | pPmObj_t pmode; |
va009039 | 0:65f1469d6bfb | 1079 | pPmObj_t pattrs; |
va009039 | 0:65f1469d6bfb | 1080 | PmReturn_t retval = PM_RET_OK; |
va009039 | 0:65f1469d6bfb | 1081 | SPI *spi; |
va009039 | 0:65f1469d6bfb | 1082 | |
va009039 | 0:65f1469d6bfb | 1083 | /* Raise TypeError if wrong number of args */ |
va009039 | 0:65f1469d6bfb | 1084 | if ((NATIVE_GET_NUM_ARGS() < 2) || (NATIVE_GET_NUM_ARGS() > 3)) |
va009039 | 0:65f1469d6bfb | 1085 | { |
va009039 | 0:65f1469d6bfb | 1086 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 1087 | return retval; |
va009039 | 0:65f1469d6bfb | 1088 | } |
va009039 | 0:65f1469d6bfb | 1089 | pself = NATIVE_GET_LOCAL(0); |
va009039 | 0:65f1469d6bfb | 1090 | |
va009039 | 0:65f1469d6bfb | 1091 | /* Raise TypeError if arg is not the right type */ |
va009039 | 0:65f1469d6bfb | 1092 | pbits = NATIVE_GET_LOCAL(1); |
va009039 | 0:65f1469d6bfb | 1093 | if (OBJ_GET_TYPE(pbits) != OBJ_TYPE_INT) |
va009039 | 0:65f1469d6bfb | 1094 | { |
va009039 | 0:65f1469d6bfb | 1095 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 1096 | return retval; |
va009039 | 0:65f1469d6bfb | 1097 | } |
va009039 | 0:65f1469d6bfb | 1098 | |
va009039 | 0:65f1469d6bfb | 1099 | /* Get the mode arg if it exists */ |
va009039 | 0:65f1469d6bfb | 1100 | pmode = PM_ZERO; |
va009039 | 0:65f1469d6bfb | 1101 | if (NATIVE_GET_NUM_ARGS() == 3) |
va009039 | 0:65f1469d6bfb | 1102 | { |
va009039 | 0:65f1469d6bfb | 1103 | pmode = NATIVE_GET_LOCAL(3); |
va009039 | 0:65f1469d6bfb | 1104 | } |
va009039 | 0:65f1469d6bfb | 1105 | |
va009039 | 0:65f1469d6bfb | 1106 | /* Get the the C++ instance */ |
va009039 | 0:65f1469d6bfb | 1107 | pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; |
va009039 | 0:65f1469d6bfb | 1108 | retval = dict_getItem(pattrs, PM_NONE, &pn); |
va009039 | 0:65f1469d6bfb | 1109 | PM_RETURN_IF_ERROR(retval); |
va009039 | 0:65f1469d6bfb | 1110 | spi = (SPI *)((pPmInt_t)pn)->val; |
va009039 | 0:65f1469d6bfb | 1111 | |
va009039 | 0:65f1469d6bfb | 1112 | /* Set format args */ |
va009039 | 0:65f1469d6bfb | 1113 | spi->format(((pPmInt_t)pbits)->val, ((pPmInt_t)pmode)->val); |
va009039 | 0:65f1469d6bfb | 1114 | |
va009039 | 0:65f1469d6bfb | 1115 | NATIVE_SET_TOS(PM_NONE); |
va009039 | 0:65f1469d6bfb | 1116 | return retval; |
va009039 | 0:65f1469d6bfb | 1117 | |
va009039 | 0:65f1469d6bfb | 1118 | } |
va009039 | 0:65f1469d6bfb | 1119 | |
va009039 | 0:65f1469d6bfb | 1120 | PmReturn_t |
va009039 | 0:65f1469d6bfb | 1121 | nat_27_mbed_frequency(pPmFrame_t *ppframe) |
va009039 | 0:65f1469d6bfb | 1122 | { |
va009039 | 0:65f1469d6bfb | 1123 | |
va009039 | 0:65f1469d6bfb | 1124 | pPmObj_t pself; |
va009039 | 0:65f1469d6bfb | 1125 | pPmObj_t pn; |
va009039 | 0:65f1469d6bfb | 1126 | pPmObj_t phz; |
va009039 | 0:65f1469d6bfb | 1127 | pPmObj_t pattrs; |
va009039 | 0:65f1469d6bfb | 1128 | PmReturn_t retval = PM_RET_OK; |
va009039 | 0:65f1469d6bfb | 1129 | SPI *spi; |
va009039 | 0:65f1469d6bfb | 1130 | |
va009039 | 0:65f1469d6bfb | 1131 | /* Raise TypeError if wrong number of args */ |
va009039 | 0:65f1469d6bfb | 1132 | if (NATIVE_GET_NUM_ARGS() != 2) |
va009039 | 0:65f1469d6bfb | 1133 | { |
va009039 | 0:65f1469d6bfb | 1134 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 1135 | return retval; |
va009039 | 0:65f1469d6bfb | 1136 | } |
va009039 | 0:65f1469d6bfb | 1137 | pself = NATIVE_GET_LOCAL(0); |
va009039 | 0:65f1469d6bfb | 1138 | |
va009039 | 0:65f1469d6bfb | 1139 | /* Raise TypeError if arg is not the right type */ |
va009039 | 0:65f1469d6bfb | 1140 | phz = NATIVE_GET_LOCAL(1); |
va009039 | 0:65f1469d6bfb | 1141 | if (OBJ_GET_TYPE(phz) != OBJ_TYPE_INT) |
va009039 | 0:65f1469d6bfb | 1142 | { |
va009039 | 0:65f1469d6bfb | 1143 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 1144 | return retval; |
va009039 | 0:65f1469d6bfb | 1145 | } |
va009039 | 0:65f1469d6bfb | 1146 | |
va009039 | 0:65f1469d6bfb | 1147 | /* Get the the C++ instance */ |
va009039 | 0:65f1469d6bfb | 1148 | pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; |
va009039 | 0:65f1469d6bfb | 1149 | retval = dict_getItem(pattrs, PM_NONE, &pn); |
va009039 | 0:65f1469d6bfb | 1150 | PM_RETURN_IF_ERROR(retval); |
va009039 | 0:65f1469d6bfb | 1151 | spi = (SPI *)((pPmInt_t)pn)->val; |
va009039 | 0:65f1469d6bfb | 1152 | |
va009039 | 0:65f1469d6bfb | 1153 | /* Set frequency */ |
va009039 | 0:65f1469d6bfb | 1154 | spi->frequency(((pPmInt_t)phz)->val); |
va009039 | 0:65f1469d6bfb | 1155 | |
va009039 | 0:65f1469d6bfb | 1156 | NATIVE_SET_TOS(PM_NONE); |
va009039 | 0:65f1469d6bfb | 1157 | return retval; |
va009039 | 0:65f1469d6bfb | 1158 | |
va009039 | 0:65f1469d6bfb | 1159 | } |
va009039 | 0:65f1469d6bfb | 1160 | |
va009039 | 0:65f1469d6bfb | 1161 | PmReturn_t |
va009039 | 0:65f1469d6bfb | 1162 | nat_28_mbed_write(pPmFrame_t *ppframe) |
va009039 | 0:65f1469d6bfb | 1163 | { |
va009039 | 0:65f1469d6bfb | 1164 | |
va009039 | 0:65f1469d6bfb | 1165 | pPmObj_t pself; |
va009039 | 0:65f1469d6bfb | 1166 | pPmObj_t pn; |
va009039 | 0:65f1469d6bfb | 1167 | pPmObj_t pv; |
va009039 | 0:65f1469d6bfb | 1168 | pPmObj_t pattrs; |
va009039 | 0:65f1469d6bfb | 1169 | PmReturn_t retval = PM_RET_OK; |
va009039 | 0:65f1469d6bfb | 1170 | SPI *spi; |
va009039 | 0:65f1469d6bfb | 1171 | int32_t r; |
va009039 | 0:65f1469d6bfb | 1172 | |
va009039 | 0:65f1469d6bfb | 1173 | /* Raise TypeError if wrong number of args */ |
va009039 | 0:65f1469d6bfb | 1174 | if (NATIVE_GET_NUM_ARGS() != 2) |
va009039 | 0:65f1469d6bfb | 1175 | { |
va009039 | 0:65f1469d6bfb | 1176 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 1177 | return retval; |
va009039 | 0:65f1469d6bfb | 1178 | } |
va009039 | 0:65f1469d6bfb | 1179 | pself = NATIVE_GET_LOCAL(0); |
va009039 | 0:65f1469d6bfb | 1180 | |
va009039 | 0:65f1469d6bfb | 1181 | /* Raise TypeError if arg is not the right type */ |
va009039 | 0:65f1469d6bfb | 1182 | pv = NATIVE_GET_LOCAL(1); |
va009039 | 0:65f1469d6bfb | 1183 | if (OBJ_GET_TYPE(pv) != OBJ_TYPE_INT) |
va009039 | 0:65f1469d6bfb | 1184 | { |
va009039 | 0:65f1469d6bfb | 1185 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 1186 | return retval; |
va009039 | 0:65f1469d6bfb | 1187 | } |
va009039 | 0:65f1469d6bfb | 1188 | |
va009039 | 0:65f1469d6bfb | 1189 | /* Get the the C++ instance */ |
va009039 | 0:65f1469d6bfb | 1190 | pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; |
va009039 | 0:65f1469d6bfb | 1191 | retval = dict_getItem(pattrs, PM_NONE, &pn); |
va009039 | 0:65f1469d6bfb | 1192 | PM_RETURN_IF_ERROR(retval); |
va009039 | 0:65f1469d6bfb | 1193 | spi = (SPI *)((pPmInt_t)pn)->val; |
va009039 | 0:65f1469d6bfb | 1194 | |
va009039 | 0:65f1469d6bfb | 1195 | /* Write the value and return the response */ |
va009039 | 0:65f1469d6bfb | 1196 | r = spi->write(((pPmInt_t)pv)->val); |
va009039 | 0:65f1469d6bfb | 1197 | retval = int_new(r, &pn); |
va009039 | 0:65f1469d6bfb | 1198 | NATIVE_SET_TOS(pn); |
va009039 | 0:65f1469d6bfb | 1199 | return retval; |
va009039 | 0:65f1469d6bfb | 1200 | |
va009039 | 0:65f1469d6bfb | 1201 | } |
va009039 | 0:65f1469d6bfb | 1202 | |
va009039 | 0:65f1469d6bfb | 1203 | PmReturn_t |
va009039 | 0:65f1469d6bfb | 1204 | nat_29_mbed___init__(pPmFrame_t *ppframe) |
va009039 | 0:65f1469d6bfb | 1205 | { |
va009039 | 0:65f1469d6bfb | 1206 | |
va009039 | 0:65f1469d6bfb | 1207 | pPmObj_t pself; |
va009039 | 0:65f1469d6bfb | 1208 | pPmObj_t pn; |
va009039 | 0:65f1469d6bfb | 1209 | pPmObj_t psda; |
va009039 | 0:65f1469d6bfb | 1210 | pPmObj_t pscl; |
va009039 | 0:65f1469d6bfb | 1211 | pPmObj_t pattrs; |
va009039 | 0:65f1469d6bfb | 1212 | PmReturn_t retval = PM_RET_OK; |
va009039 | 0:65f1469d6bfb | 1213 | I2C *i2c; |
va009039 | 0:65f1469d6bfb | 1214 | uint8_t objid; |
va009039 | 0:65f1469d6bfb | 1215 | |
va009039 | 0:65f1469d6bfb | 1216 | /* Raise TypeError if wrong number of args */ |
va009039 | 0:65f1469d6bfb | 1217 | if (NATIVE_GET_NUM_ARGS() != 3) |
va009039 | 0:65f1469d6bfb | 1218 | { |
va009039 | 0:65f1469d6bfb | 1219 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 1220 | return retval; |
va009039 | 0:65f1469d6bfb | 1221 | } |
va009039 | 0:65f1469d6bfb | 1222 | pself = NATIVE_GET_LOCAL(0); |
va009039 | 0:65f1469d6bfb | 1223 | |
va009039 | 0:65f1469d6bfb | 1224 | /* Raise TypeError if arg is not the right type */ |
va009039 | 0:65f1469d6bfb | 1225 | psda = NATIVE_GET_LOCAL(1); |
va009039 | 0:65f1469d6bfb | 1226 | pscl = NATIVE_GET_LOCAL(2); |
va009039 | 0:65f1469d6bfb | 1227 | if ((OBJ_GET_TYPE(psda) != OBJ_TYPE_INT) |
va009039 | 0:65f1469d6bfb | 1228 | || (OBJ_GET_TYPE(pscl) != OBJ_TYPE_INT)) |
va009039 | 0:65f1469d6bfb | 1229 | { |
va009039 | 0:65f1469d6bfb | 1230 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 1231 | return retval; |
va009039 | 0:65f1469d6bfb | 1232 | } |
va009039 | 0:65f1469d6bfb | 1233 | |
va009039 | 0:65f1469d6bfb | 1234 | /* Instantiate the C++ object */ |
va009039 | 0:65f1469d6bfb | 1235 | i2c = new I2C(pinNumToName[((pPmInt_t)psda)->val], |
va009039 | 0:65f1469d6bfb | 1236 | pinNumToName[((pPmInt_t)pscl)->val]); |
va009039 | 0:65f1469d6bfb | 1237 | |
va009039 | 0:65f1469d6bfb | 1238 | /* Save the pointer to ser as an inaccessible attribute */ |
va009039 | 0:65f1469d6bfb | 1239 | pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; |
va009039 | 0:65f1469d6bfb | 1240 | retval = int_new((uint32_t)i2c, &pn); |
va009039 | 0:65f1469d6bfb | 1241 | PM_RETURN_IF_ERROR(retval); |
va009039 | 0:65f1469d6bfb | 1242 | heap_gcPushTempRoot(pn, &objid); |
va009039 | 0:65f1469d6bfb | 1243 | retval = dict_setItem(pattrs, PM_NONE, pn); |
va009039 | 0:65f1469d6bfb | 1244 | heap_gcPopTempRoot(objid); |
va009039 | 0:65f1469d6bfb | 1245 | PM_RETURN_IF_ERROR(retval); |
va009039 | 0:65f1469d6bfb | 1246 | |
va009039 | 0:65f1469d6bfb | 1247 | NATIVE_SET_TOS(PM_NONE); |
va009039 | 0:65f1469d6bfb | 1248 | return retval; |
va009039 | 0:65f1469d6bfb | 1249 | |
va009039 | 0:65f1469d6bfb | 1250 | } |
va009039 | 0:65f1469d6bfb | 1251 | |
va009039 | 0:65f1469d6bfb | 1252 | PmReturn_t |
va009039 | 0:65f1469d6bfb | 1253 | nat_30_mbed_frequency(pPmFrame_t *ppframe) |
va009039 | 0:65f1469d6bfb | 1254 | { |
va009039 | 0:65f1469d6bfb | 1255 | |
va009039 | 0:65f1469d6bfb | 1256 | pPmObj_t pself; |
va009039 | 0:65f1469d6bfb | 1257 | pPmObj_t pn; |
va009039 | 0:65f1469d6bfb | 1258 | pPmObj_t phz; |
va009039 | 0:65f1469d6bfb | 1259 | pPmObj_t pattrs; |
va009039 | 0:65f1469d6bfb | 1260 | PmReturn_t retval = PM_RET_OK; |
va009039 | 0:65f1469d6bfb | 1261 | I2C *i2c; |
va009039 | 0:65f1469d6bfb | 1262 | |
va009039 | 0:65f1469d6bfb | 1263 | /* Raise TypeError if wrong number of args */ |
va009039 | 0:65f1469d6bfb | 1264 | if (NATIVE_GET_NUM_ARGS() != 2) |
va009039 | 0:65f1469d6bfb | 1265 | { |
va009039 | 0:65f1469d6bfb | 1266 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 1267 | return retval; |
va009039 | 0:65f1469d6bfb | 1268 | } |
va009039 | 0:65f1469d6bfb | 1269 | pself = NATIVE_GET_LOCAL(0); |
va009039 | 0:65f1469d6bfb | 1270 | |
va009039 | 0:65f1469d6bfb | 1271 | /* Raise TypeError if arg is not the right type */ |
va009039 | 0:65f1469d6bfb | 1272 | phz = NATIVE_GET_LOCAL(1); |
va009039 | 0:65f1469d6bfb | 1273 | if (OBJ_GET_TYPE(phz) != OBJ_TYPE_INT) |
va009039 | 0:65f1469d6bfb | 1274 | { |
va009039 | 0:65f1469d6bfb | 1275 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 1276 | return retval; |
va009039 | 0:65f1469d6bfb | 1277 | } |
va009039 | 0:65f1469d6bfb | 1278 | |
va009039 | 0:65f1469d6bfb | 1279 | /* Get the the C++ instance */ |
va009039 | 0:65f1469d6bfb | 1280 | pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; |
va009039 | 0:65f1469d6bfb | 1281 | retval = dict_getItem(pattrs, PM_NONE, &pn); |
va009039 | 0:65f1469d6bfb | 1282 | PM_RETURN_IF_ERROR(retval); |
va009039 | 0:65f1469d6bfb | 1283 | i2c = (I2C *)((pPmInt_t)pn)->val; |
va009039 | 0:65f1469d6bfb | 1284 | |
va009039 | 0:65f1469d6bfb | 1285 | /* Set frequency */ |
va009039 | 0:65f1469d6bfb | 1286 | i2c->frequency(((pPmInt_t)phz)->val); |
va009039 | 0:65f1469d6bfb | 1287 | |
va009039 | 0:65f1469d6bfb | 1288 | NATIVE_SET_TOS(PM_NONE); |
va009039 | 0:65f1469d6bfb | 1289 | return retval; |
va009039 | 0:65f1469d6bfb | 1290 | |
va009039 | 0:65f1469d6bfb | 1291 | } |
va009039 | 0:65f1469d6bfb | 1292 | |
va009039 | 0:65f1469d6bfb | 1293 | PmReturn_t |
va009039 | 0:65f1469d6bfb | 1294 | nat_31_mbed_read(pPmFrame_t *ppframe) |
va009039 | 0:65f1469d6bfb | 1295 | { |
va009039 | 0:65f1469d6bfb | 1296 | |
va009039 | 0:65f1469d6bfb | 1297 | pPmObj_t pself; |
va009039 | 0:65f1469d6bfb | 1298 | pPmObj_t pn; |
va009039 | 0:65f1469d6bfb | 1299 | pPmObj_t paddr; |
va009039 | 0:65f1469d6bfb | 1300 | pPmObj_t pdata; |
va009039 | 0:65f1469d6bfb | 1301 | pPmObj_t plen; |
va009039 | 0:65f1469d6bfb | 1302 | pPmObj_t pattrs; |
va009039 | 0:65f1469d6bfb | 1303 | PmReturn_t retval = PM_RET_OK; |
va009039 | 0:65f1469d6bfb | 1304 | I2C *i2c; |
va009039 | 0:65f1469d6bfb | 1305 | |
va009039 | 0:65f1469d6bfb | 1306 | /* Raise TypeError if wrong number of args */ |
va009039 | 0:65f1469d6bfb | 1307 | if (NATIVE_GET_NUM_ARGS() != 4) |
va009039 | 0:65f1469d6bfb | 1308 | { |
va009039 | 0:65f1469d6bfb | 1309 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 1310 | return retval; |
va009039 | 0:65f1469d6bfb | 1311 | } |
va009039 | 0:65f1469d6bfb | 1312 | pself = NATIVE_GET_LOCAL(0); |
va009039 | 0:65f1469d6bfb | 1313 | |
va009039 | 0:65f1469d6bfb | 1314 | /* Raise TypeError if arg is not the right type */ |
va009039 | 0:65f1469d6bfb | 1315 | paddr = NATIVE_GET_LOCAL(1); |
va009039 | 0:65f1469d6bfb | 1316 | pdata = NATIVE_GET_LOCAL(2); |
va009039 | 0:65f1469d6bfb | 1317 | plen = NATIVE_GET_LOCAL(3); |
va009039 | 0:65f1469d6bfb | 1318 | if ((OBJ_GET_TYPE(paddr) != OBJ_TYPE_INT) |
va009039 | 0:65f1469d6bfb | 1319 | || (OBJ_GET_TYPE(pdata) != OBJ_TYPE_STR) |
va009039 | 0:65f1469d6bfb | 1320 | || (OBJ_GET_TYPE(plen) != OBJ_TYPE_INT)) |
va009039 | 0:65f1469d6bfb | 1321 | { |
va009039 | 0:65f1469d6bfb | 1322 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 1323 | return retval; |
va009039 | 0:65f1469d6bfb | 1324 | } |
va009039 | 0:65f1469d6bfb | 1325 | |
va009039 | 0:65f1469d6bfb | 1326 | /* Get the the C++ instance */ |
va009039 | 0:65f1469d6bfb | 1327 | pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; |
va009039 | 0:65f1469d6bfb | 1328 | retval = dict_getItem(pattrs, PM_NONE, &pn); |
va009039 | 0:65f1469d6bfb | 1329 | PM_RETURN_IF_ERROR(retval); |
va009039 | 0:65f1469d6bfb | 1330 | i2c = (I2C *)((pPmInt_t)pn)->val; |
va009039 | 0:65f1469d6bfb | 1331 | |
va009039 | 0:65f1469d6bfb | 1332 | /* Read the bytes into the string */ |
va009039 | 0:65f1469d6bfb | 1333 | /* WARNING: Changing the bytes of a string object is BAD. */ |
va009039 | 0:65f1469d6bfb | 1334 | i2c->read(((pPmInt_t)paddr)->val, |
va009039 | 0:65f1469d6bfb | 1335 | (char *)((pPmString_t)pdata)->val, |
va009039 | 0:65f1469d6bfb | 1336 | ((pPmInt_t)plen)->val); |
va009039 | 0:65f1469d6bfb | 1337 | NATIVE_SET_TOS(PM_NONE); |
va009039 | 0:65f1469d6bfb | 1338 | return retval; |
va009039 | 0:65f1469d6bfb | 1339 | |
va009039 | 0:65f1469d6bfb | 1340 | } |
va009039 | 0:65f1469d6bfb | 1341 | |
va009039 | 0:65f1469d6bfb | 1342 | PmReturn_t |
va009039 | 0:65f1469d6bfb | 1343 | nat_32_mbed_write(pPmFrame_t *ppframe) |
va009039 | 0:65f1469d6bfb | 1344 | { |
va009039 | 0:65f1469d6bfb | 1345 | |
va009039 | 0:65f1469d6bfb | 1346 | pPmObj_t pself; |
va009039 | 0:65f1469d6bfb | 1347 | pPmObj_t pn; |
va009039 | 0:65f1469d6bfb | 1348 | pPmObj_t paddr; |
va009039 | 0:65f1469d6bfb | 1349 | pPmObj_t pdata; |
va009039 | 0:65f1469d6bfb | 1350 | pPmObj_t plen; |
va009039 | 0:65f1469d6bfb | 1351 | pPmObj_t pattrs; |
va009039 | 0:65f1469d6bfb | 1352 | PmReturn_t retval = PM_RET_OK; |
va009039 | 0:65f1469d6bfb | 1353 | I2C *i2c; |
va009039 | 0:65f1469d6bfb | 1354 | |
va009039 | 0:65f1469d6bfb | 1355 | /* Raise TypeError if wrong number of args */ |
va009039 | 0:65f1469d6bfb | 1356 | if (NATIVE_GET_NUM_ARGS() != 4) |
va009039 | 0:65f1469d6bfb | 1357 | { |
va009039 | 0:65f1469d6bfb | 1358 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 1359 | return retval; |
va009039 | 0:65f1469d6bfb | 1360 | } |
va009039 | 0:65f1469d6bfb | 1361 | pself = NATIVE_GET_LOCAL(0); |
va009039 | 0:65f1469d6bfb | 1362 | |
va009039 | 0:65f1469d6bfb | 1363 | /* Raise TypeError if arg is not the right type */ |
va009039 | 0:65f1469d6bfb | 1364 | paddr = NATIVE_GET_LOCAL(1); |
va009039 | 0:65f1469d6bfb | 1365 | pdata = NATIVE_GET_LOCAL(2); |
va009039 | 0:65f1469d6bfb | 1366 | plen = NATIVE_GET_LOCAL(3); |
va009039 | 0:65f1469d6bfb | 1367 | if ((OBJ_GET_TYPE(paddr) != OBJ_TYPE_INT) |
va009039 | 0:65f1469d6bfb | 1368 | || (OBJ_GET_TYPE(pdata) != OBJ_TYPE_STR) |
va009039 | 0:65f1469d6bfb | 1369 | || (OBJ_GET_TYPE(plen) != OBJ_TYPE_INT)) |
va009039 | 0:65f1469d6bfb | 1370 | { |
va009039 | 0:65f1469d6bfb | 1371 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 1372 | return retval; |
va009039 | 0:65f1469d6bfb | 1373 | } |
va009039 | 0:65f1469d6bfb | 1374 | |
va009039 | 0:65f1469d6bfb | 1375 | /* Get the the C++ instance */ |
va009039 | 0:65f1469d6bfb | 1376 | pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; |
va009039 | 0:65f1469d6bfb | 1377 | retval = dict_getItem(pattrs, PM_NONE, &pn); |
va009039 | 0:65f1469d6bfb | 1378 | PM_RETURN_IF_ERROR(retval); |
va009039 | 0:65f1469d6bfb | 1379 | i2c = (I2C *)((pPmInt_t)pn)->val; |
va009039 | 0:65f1469d6bfb | 1380 | |
va009039 | 0:65f1469d6bfb | 1381 | /* Write the value and return the response */ |
va009039 | 0:65f1469d6bfb | 1382 | i2c->write(((pPmInt_t)paddr)->val, |
va009039 | 0:65f1469d6bfb | 1383 | (char *)((pPmString_t)pdata)->val, |
va009039 | 0:65f1469d6bfb | 1384 | ((pPmInt_t)plen)->val); |
va009039 | 0:65f1469d6bfb | 1385 | NATIVE_SET_TOS(PM_NONE); |
va009039 | 0:65f1469d6bfb | 1386 | return retval; |
va009039 | 0:65f1469d6bfb | 1387 | |
va009039 | 0:65f1469d6bfb | 1388 | } |
va009039 | 0:65f1469d6bfb | 1389 | |
va009039 | 0:65f1469d6bfb | 1390 | PmReturn_t |
va009039 | 0:65f1469d6bfb | 1391 | nat_33_mbed_set_led(pPmFrame_t *ppframe) |
va009039 | 0:65f1469d6bfb | 1392 | { |
va009039 | 0:65f1469d6bfb | 1393 | |
va009039 | 0:65f1469d6bfb | 1394 | pPmObj_t pled; |
va009039 | 0:65f1469d6bfb | 1395 | pPmObj_t pval; |
va009039 | 0:65f1469d6bfb | 1396 | int32_t nled; |
va009039 | 0:65f1469d6bfb | 1397 | int32_t nval; |
va009039 | 0:65f1469d6bfb | 1398 | PmReturn_t retval = PM_RET_OK; |
va009039 | 0:65f1469d6bfb | 1399 | |
va009039 | 0:65f1469d6bfb | 1400 | /* If wrong number of args, raise TypeError */ |
va009039 | 0:65f1469d6bfb | 1401 | if (NATIVE_GET_NUM_ARGS() > 2) |
va009039 | 0:65f1469d6bfb | 1402 | { |
va009039 | 0:65f1469d6bfb | 1403 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 1404 | return retval; |
va009039 | 0:65f1469d6bfb | 1405 | } |
va009039 | 0:65f1469d6bfb | 1406 | |
va009039 | 0:65f1469d6bfb | 1407 | /* If arg is not an int, raise TypeError */ |
va009039 | 0:65f1469d6bfb | 1408 | pled = NATIVE_GET_LOCAL(0); |
va009039 | 0:65f1469d6bfb | 1409 | pval = NATIVE_GET_LOCAL(1); |
va009039 | 0:65f1469d6bfb | 1410 | if ((OBJ_GET_TYPE(pled) != OBJ_TYPE_INT) |
va009039 | 0:65f1469d6bfb | 1411 | || (OBJ_GET_TYPE(pval) != OBJ_TYPE_INT)) |
va009039 | 0:65f1469d6bfb | 1412 | { |
va009039 | 0:65f1469d6bfb | 1413 | PM_RAISE(retval, PM_RET_EX_TYPE); |
va009039 | 0:65f1469d6bfb | 1414 | return retval; |
va009039 | 0:65f1469d6bfb | 1415 | } |
va009039 | 0:65f1469d6bfb | 1416 | |
va009039 | 0:65f1469d6bfb | 1417 | /* Get int value from the arg */ |
va009039 | 0:65f1469d6bfb | 1418 | nled = ((pPmInt_t)pled)->val; |
va009039 | 0:65f1469d6bfb | 1419 | nval = ((pPmInt_t)pval)->val; |
va009039 | 0:65f1469d6bfb | 1420 | |
va009039 | 0:65f1469d6bfb | 1421 | /* Set the LED to the given value */ |
va009039 | 0:65f1469d6bfb | 1422 | switch (nled) |
va009039 | 0:65f1469d6bfb | 1423 | { |
va009039 | 0:65f1469d6bfb | 1424 | case 1: led1 = nval; break; |
va009039 | 0:65f1469d6bfb | 1425 | case 2: led2 = nval; break; |
va009039 | 0:65f1469d6bfb | 1426 | case 3: led3 = nval; break; |
va009039 | 0:65f1469d6bfb | 1427 | case 4: led4 = nval; break; |
va009039 | 0:65f1469d6bfb | 1428 | } |
va009039 | 0:65f1469d6bfb | 1429 | |
va009039 | 0:65f1469d6bfb | 1430 | NATIVE_SET_TOS(PM_NONE); |
va009039 | 0:65f1469d6bfb | 1431 | return retval; |
va009039 | 0:65f1469d6bfb | 1432 | |
va009039 | 0:65f1469d6bfb | 1433 | } |
va009039 | 0:65f1469d6bfb | 1434 | |
va009039 | 0:65f1469d6bfb | 1435 | /* Native function lookup table */ |
va009039 | 0:65f1469d6bfb | 1436 | pPmNativeFxn_t const usr_nat_fxn_table[] = |
va009039 | 0:65f1469d6bfb | 1437 | { |
va009039 | 0:65f1469d6bfb | 1438 | nat_placeholder_func, |
va009039 | 0:65f1469d6bfb | 1439 | nat_01_mbed___init__, |
va009039 | 0:65f1469d6bfb | 1440 | nat_02_mbed_read_u16, |
va009039 | 0:65f1469d6bfb | 1441 | nat_03_mbed_read, |
va009039 | 0:65f1469d6bfb | 1442 | nat_04_mbed___init__, |
va009039 | 0:65f1469d6bfb | 1443 | nat_05_mbed_write_u16, |
va009039 | 0:65f1469d6bfb | 1444 | nat_06_mbed_write, |
va009039 | 0:65f1469d6bfb | 1445 | nat_07_mbed_read, |
va009039 | 0:65f1469d6bfb | 1446 | nat_08_mbed___init__, |
va009039 | 0:65f1469d6bfb | 1447 | nat_09_mbed_read, |
va009039 | 0:65f1469d6bfb | 1448 | nat_10_mbed___init__, |
va009039 | 0:65f1469d6bfb | 1449 | nat_11_mbed_read, |
va009039 | 0:65f1469d6bfb | 1450 | nat_12_mbed_write, |
va009039 | 0:65f1469d6bfb | 1451 | nat_13_mbed___init__, |
va009039 | 0:65f1469d6bfb | 1452 | nat_14_mbed_read, |
va009039 | 0:65f1469d6bfb | 1453 | nat_15_mbed_period, |
va009039 | 0:65f1469d6bfb | 1454 | nat_16_mbed_period_ms, |
va009039 | 0:65f1469d6bfb | 1455 | nat_17_mbed_period_us, |
va009039 | 0:65f1469d6bfb | 1456 | nat_18_mbed_pulsewidth, |
va009039 | 0:65f1469d6bfb | 1457 | nat_19_mbed_puslewidth_ms, |
va009039 | 0:65f1469d6bfb | 1458 | nat_20_mbed_pulsewidth_us, |
va009039 | 0:65f1469d6bfb | 1459 | nat_21_mbed___init__, |
va009039 | 0:65f1469d6bfb | 1460 | nat_22_mbed_putc, |
va009039 | 0:65f1469d6bfb | 1461 | nat_23_mbed_puts, |
va009039 | 0:65f1469d6bfb | 1462 | nat_24_mbed_getc, |
va009039 | 0:65f1469d6bfb | 1463 | nat_25_mbed___init__, |
va009039 | 0:65f1469d6bfb | 1464 | nat_26_mbed_format, |
va009039 | 0:65f1469d6bfb | 1465 | nat_27_mbed_frequency, |
va009039 | 0:65f1469d6bfb | 1466 | nat_28_mbed_write, |
va009039 | 0:65f1469d6bfb | 1467 | nat_29_mbed___init__, |
va009039 | 0:65f1469d6bfb | 1468 | nat_30_mbed_frequency, |
va009039 | 0:65f1469d6bfb | 1469 | nat_31_mbed_read, |
va009039 | 0:65f1469d6bfb | 1470 | nat_32_mbed_write, |
va009039 | 0:65f1469d6bfb | 1471 | nat_33_mbed_set_led, |
va009039 | 0:65f1469d6bfb | 1472 | }; |