python

Dependencies:   TSI mbed

Fork of pymite by Norimasa Okamoto

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?

UserRevisionLine numberNew 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 };