Davi Souza
/
pymite
python
Fork of pymite by
platform/mbed/main_nat.cpp
- Committer:
- va009039
- Date:
- 2013-03-02
- Revision:
- 0:65f1469d6bfb
- Child:
- 1:28afb064a41c
File content as of revision 0:65f1469d6bfb:
#undef __FILE_ID__ #define __FILE_ID__ 0x0A /** * PyMite usr native function file * * automatically created by pmImgCreator.py * on Sat Mar 02 20:27:03 2013 * * DO NOT EDIT THIS FILE. * ANY CHANGES WILL BE LOST. * * @file main_nat.cpp */ #define __IN_LIBNATIVE_C__ #include "pm.h" /* From: mbed.py */ #include "mbed.h" static DigitalOut led1(LED1); static DigitalOut led2(LED2); static DigitalOut led3(LED3); static DigitalOut led4(LED4); /* PinName lookup table. Converts pin number to PinName. */ static PinName const pinNumToName[] = { NC, LED1, LED2, LED3, LED4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30 }; PmReturn_t nat_placeholder_func(pPmFrame_t *ppframe) { /* * Use placeholder because an index * value of zero denotes the stdlib. * This function should not be called. */ PmReturn_t retval; PM_RAISE(retval, PM_RET_EX_SYS); return retval; } PmReturn_t nat_01_mbed___init__(pPmFrame_t *ppframe) { pPmObj_t pself; pPmObj_t pn; pPmObj_t pattrs; PmReturn_t retval = PM_RET_OK; AnalogIn *adc; uint8_t objid; /* Raise TypeError if wrong number of args */ if (NATIVE_GET_NUM_ARGS() != 2) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } pself = NATIVE_GET_LOCAL(0); /* Raise TypeError if arg is not the right type */ pn = NATIVE_GET_LOCAL(1); if (OBJ_GET_TYPE(pn) != OBJ_TYPE_INT) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } /* Instantiate the C++ object */ adc = new AnalogIn(pinNumToName[((pPmInt_t)pn)->val]); /* Save the pointer to adc as an inaccessible attribute */ pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; retval = int_new((uint32_t)adc, &pn); PM_RETURN_IF_ERROR(retval); heap_gcPushTempRoot(pn, &objid); retval = dict_setItem(pattrs, PM_NONE, pn); heap_gcPopTempRoot(objid); PM_RETURN_IF_ERROR(retval); NATIVE_SET_TOS(PM_NONE); return retval; } PmReturn_t nat_02_mbed_read_u16(pPmFrame_t *ppframe) { pPmObj_t pself; pPmObj_t pn; pPmObj_t pattrs; PmReturn_t retval = PM_RET_OK; AnalogIn *adc; int32_t n; /* If wrong number of args, throw type exception */ if (NATIVE_GET_NUM_ARGS() != 1) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } pself = NATIVE_GET_LOCAL(0); /* Get the the C++ instance */ pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; retval = dict_getItem(pattrs, PM_NONE, &pn); PM_RETURN_IF_ERROR(retval); adc = (AnalogIn *)((pPmInt_t)pn)->val; /* Return input value on the stack */ n = adc->read_u16(); retval = int_new(n, &pn); NATIVE_SET_TOS(pn); return retval; } PmReturn_t nat_03_mbed_read(pPmFrame_t *ppframe) { pPmObj_t pself; pPmObj_t pn; pPmObj_t pattrs; PmReturn_t retval = PM_RET_OK; AnalogIn *adc; float n; /* Raise TypeError if wrong number of args */ if (NATIVE_GET_NUM_ARGS() != 1) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } pself = NATIVE_GET_LOCAL(0); /* Get the the C++ instance */ pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; retval = dict_getItem(pattrs, PM_NONE, &pn); PM_RETURN_IF_ERROR(retval); adc = (AnalogIn *)((pPmInt_t)pn)->val; /* Return input value on the stack */ n = adc->read(); retval = float_new(n, &pn); NATIVE_SET_TOS(pn); return retval; } PmReturn_t nat_04_mbed___init__(pPmFrame_t *ppframe) { pPmObj_t pself; pPmObj_t pn; pPmObj_t pattrs; PmReturn_t retval = PM_RET_OK; AnalogOut *dac; uint8_t objid; /* Raise TypeError if wrong number of args */ if (NATIVE_GET_NUM_ARGS() != 2) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } pself = NATIVE_GET_LOCAL(0); /* Raise TypeError if arg is not the right type */ pn = NATIVE_GET_LOCAL(1); if (OBJ_GET_TYPE(pn) != OBJ_TYPE_INT) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } /* Instantiate the object */ dac = new AnalogOut(pinNumToName[((pPmInt_t)pn)->val]); /* Save the pointer to adc as an inaccessible attribute */ pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; retval = int_new((uint32_t)dac, &pn); PM_RETURN_IF_ERROR(retval); heap_gcPushTempRoot(pn, &objid); retval = dict_setItem(pattrs, PM_NONE, pn); heap_gcPopTempRoot(objid); PM_RETURN_IF_ERROR(retval); NATIVE_SET_TOS(PM_NONE); return retval; } PmReturn_t nat_05_mbed_write_u16(pPmFrame_t *ppframe) { pPmObj_t pself; pPmObj_t pn; pPmObj_t pattrs; PmReturn_t retval = PM_RET_OK; AnalogOut *dac; /* Raise TypeError if wrong number of args */ if (NATIVE_GET_NUM_ARGS() != 2) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } pself = NATIVE_GET_LOCAL(0); /* Raise TypeError if arg is not the right type */ pn = NATIVE_GET_LOCAL(1); if (OBJ_GET_TYPE(pn) != OBJ_TYPE_INT) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } /* Get the the C++ instance */ pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; retval = dict_getItem(pattrs, PM_NONE, &pn); PM_RETURN_IF_ERROR(retval); dac = (AnalogOut *)((pPmInt_t)pn)->val; /* Write value to DAC */ pn = NATIVE_GET_LOCAL(1); dac->write_u16(((pPmInt_t)pn)->val); NATIVE_SET_TOS(PM_NONE); return retval; } PmReturn_t nat_06_mbed_write(pPmFrame_t *ppframe) { pPmObj_t pself; pPmObj_t pn; pPmObj_t pattrs; PmReturn_t retval = PM_RET_OK; AnalogOut *dac; float n; /* Raise TypeError if wrong number of args */ if (NATIVE_GET_NUM_ARGS() != 2) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } pself = NATIVE_GET_LOCAL(0); /* Raise TypeError if arg is not the right type */ pn = NATIVE_GET_LOCAL(1); if (OBJ_GET_TYPE(pn) != OBJ_TYPE_FLT) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } /* Get the the C++ instance */ pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; retval = dict_getItem(pattrs, PM_NONE, &pn); PM_RETURN_IF_ERROR(retval); dac = (AnalogOut *)((pPmInt_t)pn)->val; /* Saturate and write value to DAC */ pn = NATIVE_GET_LOCAL(1); n = ((pPmFloat_t)pn)->val; if (n < 0.0) { n = 0.0; } else if (n > 1.0) { n = 1.0; } dac->write(n); NATIVE_SET_TOS(PM_NONE); return retval; } PmReturn_t nat_07_mbed_read(pPmFrame_t *ppframe) { pPmObj_t pself; pPmObj_t pn; pPmObj_t pattrs; PmReturn_t retval = PM_RET_OK; AnalogOut *dac; float n; /* Raise TypeError if wrong number of args */ if (NATIVE_GET_NUM_ARGS() != 1) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } pself = NATIVE_GET_LOCAL(0); /* Get the the C++ instance */ pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; retval = dict_getItem(pattrs, PM_NONE, &pn); PM_RETURN_IF_ERROR(retval); dac = (AnalogOut *)((pPmInt_t)pn)->val; /* Return output value on the stack */ n = dac->read(); retval = float_new(n, &pn); NATIVE_SET_TOS(pn); return retval; } PmReturn_t nat_08_mbed___init__(pPmFrame_t *ppframe) { pPmObj_t pself; pPmObj_t pn; pPmObj_t pattrs; PmReturn_t retval = PM_RET_OK; DigitalIn *din; uint8_t objid; /* Raise TypeError if wrong number of args */ if (NATIVE_GET_NUM_ARGS() != 2) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } pself = NATIVE_GET_LOCAL(0); /* Raise TypeError if arg is not the right type */ pn = NATIVE_GET_LOCAL(1); if (OBJ_GET_TYPE(pn) != OBJ_TYPE_INT) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } /* Instantiate the C++ object */ din = new DigitalIn(pinNumToName[((pPmInt_t)pn)->val]); /* Save the pointer to adc as an inaccessible attribute */ pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; retval = int_new((uint32_t)din, &pn); PM_RETURN_IF_ERROR(retval); heap_gcPushTempRoot(pn, &objid); retval = dict_setItem(pattrs, PM_NONE, pn); heap_gcPopTempRoot(objid); PM_RETURN_IF_ERROR(retval); NATIVE_SET_TOS(PM_NONE); return retval; } PmReturn_t nat_09_mbed_read(pPmFrame_t *ppframe) { pPmObj_t pself; pPmObj_t pn; pPmObj_t pattrs; PmReturn_t retval = PM_RET_OK; DigitalIn *din; int32_t n; /* If wrong number of args, throw type exception */ if (NATIVE_GET_NUM_ARGS() != 1) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } pself = NATIVE_GET_LOCAL(0); /* Get the the C++ instance */ pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; retval = dict_getItem(pattrs, PM_NONE, &pn); PM_RETURN_IF_ERROR(retval); din = (DigitalIn *)((pPmInt_t)pn)->val; /* Return input value on the stack */ n = din->read(); retval = int_new(n, &pn); NATIVE_SET_TOS(pn); return retval; } PmReturn_t nat_10_mbed___init__(pPmFrame_t *ppframe) { pPmObj_t pself; pPmObj_t pn; pPmObj_t pattrs; PmReturn_t retval = PM_RET_OK; DigitalOut *dout; uint8_t objid; /* Raise TypeError if wrong number of args */ if (NATIVE_GET_NUM_ARGS() != 2) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } pself = NATIVE_GET_LOCAL(0); /* Raise TypeError if arg is not the right type */ pn = NATIVE_GET_LOCAL(1); if (OBJ_GET_TYPE(pn) != OBJ_TYPE_INT) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } /* Instantiate the C++ object */ dout = new DigitalOut(pinNumToName[((pPmInt_t)pn)->val]); /* Save the pointer to adc as an inaccessible attribute */ pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; retval = int_new((uint32_t)dout, &pn); PM_RETURN_IF_ERROR(retval); heap_gcPushTempRoot(pn, &objid); retval = dict_setItem(pattrs, PM_NONE, pn); heap_gcPopTempRoot(objid); PM_RETURN_IF_ERROR(retval); NATIVE_SET_TOS(PM_NONE); return retval; } PmReturn_t nat_11_mbed_read(pPmFrame_t *ppframe) { pPmObj_t pself; pPmObj_t pn; pPmObj_t pattrs; PmReturn_t retval = PM_RET_OK; DigitalOut *dout; int32_t n; /* If wrong number of args, throw type exception */ if (NATIVE_GET_NUM_ARGS() != 1) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } pself = NATIVE_GET_LOCAL(0); /* Get the the C++ instance */ pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; retval = dict_getItem(pattrs, PM_NONE, &pn); PM_RETURN_IF_ERROR(retval); dout = (DigitalOut *)((pPmInt_t)pn)->val; /* Return input value on the stack */ n = dout->read(); retval = int_new(n, &pn); NATIVE_SET_TOS(pn); return retval; } PmReturn_t nat_12_mbed_write(pPmFrame_t *ppframe) { pPmObj_t pself; pPmObj_t pn; pPmObj_t pattrs; PmReturn_t retval = PM_RET_OK; DigitalOut *dout; /* Raise TypeError if wrong number of args */ if (NATIVE_GET_NUM_ARGS() != 2) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } pself = NATIVE_GET_LOCAL(0); /* Raise TypeError if arg is not the right type */ pn = NATIVE_GET_LOCAL(1); if (OBJ_GET_TYPE(pn) != OBJ_TYPE_INT) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } /* Get the the C++ instance */ pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; retval = dict_getItem(pattrs, PM_NONE, &pn); PM_RETURN_IF_ERROR(retval); dout = (DigitalOut *)((pPmInt_t)pn)->val; /* Write value to DAC */ pn = NATIVE_GET_LOCAL(1); dout->write(((pPmInt_t)pn)->val); NATIVE_SET_TOS(PM_NONE); return retval; } PmReturn_t nat_13_mbed___init__(pPmFrame_t *ppframe) { pPmObj_t pself; pPmObj_t pn; pPmObj_t pattrs; PmReturn_t retval = PM_RET_OK; PwmOut *pwm; uint8_t objid; /* Raise TypeError if wrong number of args */ if (NATIVE_GET_NUM_ARGS() != 2) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } pself = NATIVE_GET_LOCAL(0); /* Raise TypeError if arg is not the right type */ pn = NATIVE_GET_LOCAL(1); if (OBJ_GET_TYPE(pn) != OBJ_TYPE_INT) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } /* Instantiate the C++ object */ pwm = new PwmOut(pinNumToName[((pPmInt_t)pn)->val]); /* Save the pointer to pwm as an inaccessible attribute */ pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; retval = int_new((uint32_t)pwm, &pn); PM_RETURN_IF_ERROR(retval); heap_gcPushTempRoot(pn, &objid); retval = dict_setItem(pattrs, PM_NONE, pn); heap_gcPopTempRoot(objid); PM_RETURN_IF_ERROR(retval); NATIVE_SET_TOS(PM_NONE); return retval; } PmReturn_t nat_14_mbed_read(pPmFrame_t *ppframe) { pPmObj_t pself; pPmObj_t pn; pPmObj_t pattrs; PmReturn_t retval = PM_RET_OK; DigitalOut *dout; int32_t n; /* If wrong number of args, throw type exception */ if (NATIVE_GET_NUM_ARGS() != 1) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } pself = NATIVE_GET_LOCAL(0); /* Get the the C++ instance */ pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; retval = dict_getItem(pattrs, PM_NONE, &pn); PM_RETURN_IF_ERROR(retval); dout = (DigitalOut *)((pPmInt_t)pn)->val; /* Return input value on the stack */ n = dout->read(); retval = int_new(n, &pn); NATIVE_SET_TOS(pn); return retval; } PmReturn_t nat_15_mbed_period(pPmFrame_t *ppframe) { pPmObj_t pself; pPmObj_t pn; pPmObj_t pattrs; PmReturn_t retval = PM_RET_OK; PwmOut *pwm; /* Raise TypeError if wrong number of args */ if (NATIVE_GET_NUM_ARGS() != 2) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } pself = NATIVE_GET_LOCAL(0); /* Raise TypeError if arg is not the right type */ pn = NATIVE_GET_LOCAL(1); if (OBJ_GET_TYPE(pn) != OBJ_TYPE_INT) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } /* Get the the C++ instance */ pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; retval = dict_getItem(pattrs, PM_NONE, &pn); PM_RETURN_IF_ERROR(retval); pwm = (PwmOut *)((pPmInt_t)pn)->val; /* Write value to DAC */ pn = NATIVE_GET_LOCAL(1); pwm->period(((pPmInt_t)pn)->val); NATIVE_SET_TOS(PM_NONE); return retval; } PmReturn_t nat_16_mbed_period_ms(pPmFrame_t *ppframe) { pPmObj_t pself; pPmObj_t pn; pPmObj_t pattrs; PmReturn_t retval = PM_RET_OK; PwmOut *pwm; /* Raise TypeError if wrong number of args */ if (NATIVE_GET_NUM_ARGS() != 2) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } pself = NATIVE_GET_LOCAL(0); /* Raise TypeError if arg is not the right type */ pn = NATIVE_GET_LOCAL(1); if (OBJ_GET_TYPE(pn) != OBJ_TYPE_INT) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } /* Get the the C++ instance */ pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; retval = dict_getItem(pattrs, PM_NONE, &pn); PM_RETURN_IF_ERROR(retval); pwm = (PwmOut *)((pPmInt_t)pn)->val; /* Write value to DAC */ pn = NATIVE_GET_LOCAL(1); pwm->period_ms(((pPmInt_t)pn)->val); NATIVE_SET_TOS(PM_NONE); return retval; } PmReturn_t nat_17_mbed_period_us(pPmFrame_t *ppframe) { pPmObj_t pself; pPmObj_t pn; pPmObj_t pattrs; PmReturn_t retval = PM_RET_OK; PwmOut *pwm; /* Raise TypeError if wrong number of args */ if (NATIVE_GET_NUM_ARGS() != 2) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } pself = NATIVE_GET_LOCAL(0); /* Raise TypeError if arg is not the right type */ pn = NATIVE_GET_LOCAL(1); if (OBJ_GET_TYPE(pn) != OBJ_TYPE_INT) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } /* Get the the C++ instance */ pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; retval = dict_getItem(pattrs, PM_NONE, &pn); PM_RETURN_IF_ERROR(retval); pwm = (PwmOut *)((pPmInt_t)pn)->val; /* Write value to DAC */ pn = NATIVE_GET_LOCAL(1); pwm->period_us(((pPmInt_t)pn)->val); NATIVE_SET_TOS(PM_NONE); return retval; } PmReturn_t nat_18_mbed_pulsewidth(pPmFrame_t *ppframe) { pPmObj_t pself; pPmObj_t pn; pPmObj_t pattrs; PmReturn_t retval = PM_RET_OK; PwmOut *pwm; /* Raise TypeError if wrong number of args */ if (NATIVE_GET_NUM_ARGS() != 2) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } pself = NATIVE_GET_LOCAL(0); /* Raise TypeError if arg is not the right type */ pn = NATIVE_GET_LOCAL(1); if (OBJ_GET_TYPE(pn) != OBJ_TYPE_INT) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } /* Get the the C++ instance */ pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; retval = dict_getItem(pattrs, PM_NONE, &pn); PM_RETURN_IF_ERROR(retval); pwm = (PwmOut *)((pPmInt_t)pn)->val; /* Write value to DAC */ pn = NATIVE_GET_LOCAL(1); pwm->pulsewidth(((pPmInt_t)pn)->val); NATIVE_SET_TOS(PM_NONE); return retval; } PmReturn_t nat_19_mbed_puslewidth_ms(pPmFrame_t *ppframe) { pPmObj_t pself; pPmObj_t pn; pPmObj_t pattrs; PmReturn_t retval = PM_RET_OK; PwmOut *pwm; /* Raise TypeError if wrong number of args */ if (NATIVE_GET_NUM_ARGS() != 2) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } pself = NATIVE_GET_LOCAL(0); /* Raise TypeError if arg is not the right type */ pn = NATIVE_GET_LOCAL(1); if (OBJ_GET_TYPE(pn) != OBJ_TYPE_INT) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } /* Get the the C++ instance */ pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; retval = dict_getItem(pattrs, PM_NONE, &pn); PM_RETURN_IF_ERROR(retval); pwm = (PwmOut *)((pPmInt_t)pn)->val; /* Write value to DAC */ pn = NATIVE_GET_LOCAL(1); pwm->pulsewidth_ms(((pPmInt_t)pn)->val); NATIVE_SET_TOS(PM_NONE); return retval; } PmReturn_t nat_20_mbed_pulsewidth_us(pPmFrame_t *ppframe) { pPmObj_t pself; pPmObj_t pn; pPmObj_t pattrs; PmReturn_t retval = PM_RET_OK; PwmOut *pwm; /* Raise TypeError if wrong number of args */ if (NATIVE_GET_NUM_ARGS() != 2) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } pself = NATIVE_GET_LOCAL(0); /* Raise TypeError if arg is not the right type */ pn = NATIVE_GET_LOCAL(1); if (OBJ_GET_TYPE(pn) != OBJ_TYPE_INT) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } /* Get the the C++ instance */ pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; retval = dict_getItem(pattrs, PM_NONE, &pn); PM_RETURN_IF_ERROR(retval); pwm = (PwmOut *)((pPmInt_t)pn)->val; /* Write value to DAC */ pn = NATIVE_GET_LOCAL(1); pwm->pulsewidth_us(((pPmInt_t)pn)->val); NATIVE_SET_TOS(PM_NONE); return retval; } PmReturn_t nat_21_mbed___init__(pPmFrame_t *ppframe) { pPmObj_t pself; pPmObj_t pn; pPmObj_t ptx; pPmObj_t prx; pPmObj_t pattrs; PmReturn_t retval = PM_RET_OK; Serial *ser; uint8_t objid; /* Raise TypeError if wrong number of args */ if (NATIVE_GET_NUM_ARGS() != 3) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } pself = NATIVE_GET_LOCAL(0); /* Raise TypeError if arg is not the right type */ ptx = NATIVE_GET_LOCAL(1); prx = NATIVE_GET_LOCAL(2); if ((OBJ_GET_TYPE(ptx) != OBJ_TYPE_INT) || (OBJ_GET_TYPE(prx) != OBJ_TYPE_INT)) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } /* Instantiate the C++ object */ ser = new Serial(pinNumToName[((pPmInt_t)ptx)->val], pinNumToName[((pPmInt_t)prx)->val]); /* Save the pointer to ser as an inaccessible attribute */ pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; retval = int_new((uint32_t)ser, &pn); PM_RETURN_IF_ERROR(retval); heap_gcPushTempRoot(pn, &objid); retval = dict_setItem(pattrs, PM_NONE, pn); heap_gcPopTempRoot(objid); PM_RETURN_IF_ERROR(retval); NATIVE_SET_TOS(PM_NONE); return retval; } PmReturn_t nat_22_mbed_putc(pPmFrame_t *ppframe) { pPmObj_t pself; pPmObj_t pn; pPmObj_t pattrs; PmReturn_t retval = PM_RET_OK; Serial *ser; /* Raise TypeError if wrong number of args */ if (NATIVE_GET_NUM_ARGS() != 2) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } pself = NATIVE_GET_LOCAL(0); /* Raise TypeError if arg is not the right type */ pn = NATIVE_GET_LOCAL(1); if (OBJ_GET_TYPE(pn) != OBJ_TYPE_STR) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } /* Get the the C++ instance */ pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; retval = dict_getItem(pattrs, PM_NONE, &pn); PM_RETURN_IF_ERROR(retval); ser = (Serial *)((pPmInt_t)pn)->val; /* Write value to DAC */ pn = NATIVE_GET_LOCAL(1); ser->putc(((pPmString_t)pn)->val[0]); NATIVE_SET_TOS(PM_NONE); return retval; } PmReturn_t nat_23_mbed_puts(pPmFrame_t *ppframe) { pPmObj_t pself; pPmObj_t pn; pPmObj_t pattrs; PmReturn_t retval = PM_RET_OK; Serial *ser; /* Raise TypeError if wrong number of args */ if (NATIVE_GET_NUM_ARGS() != 2) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } pself = NATIVE_GET_LOCAL(0); /* Raise TypeError if arg is not the right type */ pn = NATIVE_GET_LOCAL(1); if (OBJ_GET_TYPE(pn) != OBJ_TYPE_STR) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } /* Get the the C++ instance */ pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; retval = dict_getItem(pattrs, PM_NONE, &pn); PM_RETURN_IF_ERROR(retval); ser = (Serial *)((pPmInt_t)pn)->val; /* Write value to DAC */ pn = NATIVE_GET_LOCAL(1); ser->puts((const char *)((pPmString_t)pn)->val); NATIVE_SET_TOS(PM_NONE); return retval; } PmReturn_t nat_24_mbed_getc(pPmFrame_t *ppframe) { pPmObj_t pself; pPmObj_t pn; pPmObj_t pattrs; PmReturn_t retval = PM_RET_OK; Serial *ser; int32_t n; /* If wrong number of args, throw type exception */ if (NATIVE_GET_NUM_ARGS() != 1) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } pself = NATIVE_GET_LOCAL(0); /* Get the the C++ instance */ pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; retval = dict_getItem(pattrs, PM_NONE, &pn); PM_RETURN_IF_ERROR(retval); ser = (Serial *)((pPmInt_t)pn)->val; /* Return char (as string) on the stack */ n = ser->getc(); retval = string_newFromChar((uint8_t)n, &pn); NATIVE_SET_TOS(pn); return retval; } PmReturn_t nat_25_mbed___init__(pPmFrame_t *ppframe) { pPmObj_t pself; pPmObj_t pn; pPmObj_t pmosi; pPmObj_t pmiso; pPmObj_t psclk; pPmObj_t pattrs; PmReturn_t retval = PM_RET_OK; SPI *spi; uint8_t objid; /* Raise TypeError if wrong number of args */ if (NATIVE_GET_NUM_ARGS() != 4) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } pself = NATIVE_GET_LOCAL(0); /* Raise TypeError if arg is not the right type */ pmosi = NATIVE_GET_LOCAL(1); pmiso = NATIVE_GET_LOCAL(2); psclk = NATIVE_GET_LOCAL(3); if ((OBJ_GET_TYPE(pmosi) != OBJ_TYPE_INT) || (OBJ_GET_TYPE(pmiso) != OBJ_TYPE_INT) || (OBJ_GET_TYPE(psclk) != OBJ_TYPE_INT)) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } /* Instantiate the C++ object */ spi = new SPI(pinNumToName[((pPmInt_t)pmosi)->val], pinNumToName[((pPmInt_t)pmiso)->val], pinNumToName[((pPmInt_t)psclk)->val]); /* Save the pointer to ser as an inaccessible attribute */ pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; retval = int_new((uint32_t)spi, &pn); PM_RETURN_IF_ERROR(retval); heap_gcPushTempRoot(pn, &objid); retval = dict_setItem(pattrs, PM_NONE, pn); heap_gcPopTempRoot(objid); PM_RETURN_IF_ERROR(retval); NATIVE_SET_TOS(PM_NONE); return retval; } PmReturn_t nat_26_mbed_format(pPmFrame_t *ppframe) { pPmObj_t pself; pPmObj_t pn; pPmObj_t pbits; pPmObj_t pmode; pPmObj_t pattrs; PmReturn_t retval = PM_RET_OK; SPI *spi; /* Raise TypeError if wrong number of args */ if ((NATIVE_GET_NUM_ARGS() < 2) || (NATIVE_GET_NUM_ARGS() > 3)) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } pself = NATIVE_GET_LOCAL(0); /* Raise TypeError if arg is not the right type */ pbits = NATIVE_GET_LOCAL(1); if (OBJ_GET_TYPE(pbits) != OBJ_TYPE_INT) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } /* Get the mode arg if it exists */ pmode = PM_ZERO; if (NATIVE_GET_NUM_ARGS() == 3) { pmode = NATIVE_GET_LOCAL(3); } /* Get the the C++ instance */ pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; retval = dict_getItem(pattrs, PM_NONE, &pn); PM_RETURN_IF_ERROR(retval); spi = (SPI *)((pPmInt_t)pn)->val; /* Set format args */ spi->format(((pPmInt_t)pbits)->val, ((pPmInt_t)pmode)->val); NATIVE_SET_TOS(PM_NONE); return retval; } PmReturn_t nat_27_mbed_frequency(pPmFrame_t *ppframe) { pPmObj_t pself; pPmObj_t pn; pPmObj_t phz; pPmObj_t pattrs; PmReturn_t retval = PM_RET_OK; SPI *spi; /* Raise TypeError if wrong number of args */ if (NATIVE_GET_NUM_ARGS() != 2) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } pself = NATIVE_GET_LOCAL(0); /* Raise TypeError if arg is not the right type */ phz = NATIVE_GET_LOCAL(1); if (OBJ_GET_TYPE(phz) != OBJ_TYPE_INT) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } /* Get the the C++ instance */ pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; retval = dict_getItem(pattrs, PM_NONE, &pn); PM_RETURN_IF_ERROR(retval); spi = (SPI *)((pPmInt_t)pn)->val; /* Set frequency */ spi->frequency(((pPmInt_t)phz)->val); NATIVE_SET_TOS(PM_NONE); return retval; } PmReturn_t nat_28_mbed_write(pPmFrame_t *ppframe) { pPmObj_t pself; pPmObj_t pn; pPmObj_t pv; pPmObj_t pattrs; PmReturn_t retval = PM_RET_OK; SPI *spi; int32_t r; /* Raise TypeError if wrong number of args */ if (NATIVE_GET_NUM_ARGS() != 2) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } pself = NATIVE_GET_LOCAL(0); /* Raise TypeError if arg is not the right type */ pv = NATIVE_GET_LOCAL(1); if (OBJ_GET_TYPE(pv) != OBJ_TYPE_INT) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } /* Get the the C++ instance */ pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; retval = dict_getItem(pattrs, PM_NONE, &pn); PM_RETURN_IF_ERROR(retval); spi = (SPI *)((pPmInt_t)pn)->val; /* Write the value and return the response */ r = spi->write(((pPmInt_t)pv)->val); retval = int_new(r, &pn); NATIVE_SET_TOS(pn); return retval; } PmReturn_t nat_29_mbed___init__(pPmFrame_t *ppframe) { pPmObj_t pself; pPmObj_t pn; pPmObj_t psda; pPmObj_t pscl; pPmObj_t pattrs; PmReturn_t retval = PM_RET_OK; I2C *i2c; uint8_t objid; /* Raise TypeError if wrong number of args */ if (NATIVE_GET_NUM_ARGS() != 3) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } pself = NATIVE_GET_LOCAL(0); /* Raise TypeError if arg is not the right type */ psda = NATIVE_GET_LOCAL(1); pscl = NATIVE_GET_LOCAL(2); if ((OBJ_GET_TYPE(psda) != OBJ_TYPE_INT) || (OBJ_GET_TYPE(pscl) != OBJ_TYPE_INT)) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } /* Instantiate the C++ object */ i2c = new I2C(pinNumToName[((pPmInt_t)psda)->val], pinNumToName[((pPmInt_t)pscl)->val]); /* Save the pointer to ser as an inaccessible attribute */ pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; retval = int_new((uint32_t)i2c, &pn); PM_RETURN_IF_ERROR(retval); heap_gcPushTempRoot(pn, &objid); retval = dict_setItem(pattrs, PM_NONE, pn); heap_gcPopTempRoot(objid); PM_RETURN_IF_ERROR(retval); NATIVE_SET_TOS(PM_NONE); return retval; } PmReturn_t nat_30_mbed_frequency(pPmFrame_t *ppframe) { pPmObj_t pself; pPmObj_t pn; pPmObj_t phz; pPmObj_t pattrs; PmReturn_t retval = PM_RET_OK; I2C *i2c; /* Raise TypeError if wrong number of args */ if (NATIVE_GET_NUM_ARGS() != 2) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } pself = NATIVE_GET_LOCAL(0); /* Raise TypeError if arg is not the right type */ phz = NATIVE_GET_LOCAL(1); if (OBJ_GET_TYPE(phz) != OBJ_TYPE_INT) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } /* Get the the C++ instance */ pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; retval = dict_getItem(pattrs, PM_NONE, &pn); PM_RETURN_IF_ERROR(retval); i2c = (I2C *)((pPmInt_t)pn)->val; /* Set frequency */ i2c->frequency(((pPmInt_t)phz)->val); NATIVE_SET_TOS(PM_NONE); return retval; } PmReturn_t nat_31_mbed_read(pPmFrame_t *ppframe) { pPmObj_t pself; pPmObj_t pn; pPmObj_t paddr; pPmObj_t pdata; pPmObj_t plen; pPmObj_t pattrs; PmReturn_t retval = PM_RET_OK; I2C *i2c; /* Raise TypeError if wrong number of args */ if (NATIVE_GET_NUM_ARGS() != 4) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } pself = NATIVE_GET_LOCAL(0); /* Raise TypeError if arg is not the right type */ paddr = NATIVE_GET_LOCAL(1); pdata = NATIVE_GET_LOCAL(2); plen = NATIVE_GET_LOCAL(3); if ((OBJ_GET_TYPE(paddr) != OBJ_TYPE_INT) || (OBJ_GET_TYPE(pdata) != OBJ_TYPE_STR) || (OBJ_GET_TYPE(plen) != OBJ_TYPE_INT)) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } /* Get the the C++ instance */ pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; retval = dict_getItem(pattrs, PM_NONE, &pn); PM_RETURN_IF_ERROR(retval); i2c = (I2C *)((pPmInt_t)pn)->val; /* Read the bytes into the string */ /* WARNING: Changing the bytes of a string object is BAD. */ i2c->read(((pPmInt_t)paddr)->val, (char *)((pPmString_t)pdata)->val, ((pPmInt_t)plen)->val); NATIVE_SET_TOS(PM_NONE); return retval; } PmReturn_t nat_32_mbed_write(pPmFrame_t *ppframe) { pPmObj_t pself; pPmObj_t pn; pPmObj_t paddr; pPmObj_t pdata; pPmObj_t plen; pPmObj_t pattrs; PmReturn_t retval = PM_RET_OK; I2C *i2c; /* Raise TypeError if wrong number of args */ if (NATIVE_GET_NUM_ARGS() != 4) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } pself = NATIVE_GET_LOCAL(0); /* Raise TypeError if arg is not the right type */ paddr = NATIVE_GET_LOCAL(1); pdata = NATIVE_GET_LOCAL(2); plen = NATIVE_GET_LOCAL(3); if ((OBJ_GET_TYPE(paddr) != OBJ_TYPE_INT) || (OBJ_GET_TYPE(pdata) != OBJ_TYPE_STR) || (OBJ_GET_TYPE(plen) != OBJ_TYPE_INT)) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } /* Get the the C++ instance */ pattrs = (pPmObj_t)((pPmInstance_t)pself)->cli_attrs; retval = dict_getItem(pattrs, PM_NONE, &pn); PM_RETURN_IF_ERROR(retval); i2c = (I2C *)((pPmInt_t)pn)->val; /* Write the value and return the response */ i2c->write(((pPmInt_t)paddr)->val, (char *)((pPmString_t)pdata)->val, ((pPmInt_t)plen)->val); NATIVE_SET_TOS(PM_NONE); return retval; } PmReturn_t nat_33_mbed_set_led(pPmFrame_t *ppframe) { pPmObj_t pled; pPmObj_t pval; int32_t nled; int32_t nval; PmReturn_t retval = PM_RET_OK; /* If wrong number of args, raise TypeError */ if (NATIVE_GET_NUM_ARGS() > 2) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } /* If arg is not an int, raise TypeError */ pled = NATIVE_GET_LOCAL(0); pval = NATIVE_GET_LOCAL(1); if ((OBJ_GET_TYPE(pled) != OBJ_TYPE_INT) || (OBJ_GET_TYPE(pval) != OBJ_TYPE_INT)) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } /* Get int value from the arg */ nled = ((pPmInt_t)pled)->val; nval = ((pPmInt_t)pval)->val; /* Set the LED to the given value */ switch (nled) { case 1: led1 = nval; break; case 2: led2 = nval; break; case 3: led3 = nval; break; case 4: led4 = nval; break; } NATIVE_SET_TOS(PM_NONE); return retval; } /* Native function lookup table */ pPmNativeFxn_t const usr_nat_fxn_table[] = { nat_placeholder_func, nat_01_mbed___init__, nat_02_mbed_read_u16, nat_03_mbed_read, nat_04_mbed___init__, nat_05_mbed_write_u16, nat_06_mbed_write, nat_07_mbed_read, nat_08_mbed___init__, nat_09_mbed_read, nat_10_mbed___init__, nat_11_mbed_read, nat_12_mbed_write, nat_13_mbed___init__, nat_14_mbed_read, nat_15_mbed_period, nat_16_mbed_period_ms, nat_17_mbed_period_us, nat_18_mbed_pulsewidth, nat_19_mbed_puslewidth_ms, nat_20_mbed_pulsewidth_us, nat_21_mbed___init__, nat_22_mbed_putc, nat_23_mbed_puts, nat_24_mbed_getc, nat_25_mbed___init__, nat_26_mbed_format, nat_27_mbed_frequency, nat_28_mbed_write, nat_29_mbed___init__, nat_30_mbed_frequency, nat_31_mbed_read, nat_32_mbed_write, nat_33_mbed_set_led, };