python-on-a-chip online compiler

Dependencies:   mbed TSI

/media/uploads/va009039/p14p-f446re.png

more info: python-on-a-chip

Committer:
va009039
Date:
Sun Mar 10 10:13:36 2013 +0000
Revision:
1:28afb064a41c
Parent:
0:65f1469d6bfb
Child:
2:a2bea117e22e
add python2.7 bytecode, update mbed.py

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