Takehisa Oneta / Mbed 2 deprecated malisp

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers mbed_functions.cpp Source File

mbed_functions.cpp

00001 /**
00002  *
00003  */
00004 
00005 #include "mbed.h"
00006 #include "mbed_functions.h"
00007 #include "malisp.h"
00008 
00009 extern LIST *TRU;
00010 
00011 //----------------------------------------------------------------------
00012 // 
00013 size_t _getFreeMemorySize()
00014 {
00015     size_t i = 0;
00016     while(1) {
00017         void *p = malloc(i);
00018         if (p == NULL) {
00019             break;
00020         }
00021         free(p);
00022         i++;
00023     }
00024 
00025     return i;
00026 }
00027 
00028 LIST *memfreesize()
00029 {
00030     //work_garbageCollect(NULL);
00031 
00032     size_t memsize = _getFreeMemorySize();
00033 
00034     LIST *res = cons(NULL, NULL);
00035 
00036     res->u.num = memsize;
00037     rplact(res, IATOM);
00038 
00039     return res;
00040 }
00041 
00042 //----------------------------------------------------------------------
00043 //----------------------------------------------------------------------
00044 
00045 PinName _mbed_pinNameExchange(char *pinNameString)
00046 {
00047     if (strcmp(pinNameString, "p5") == 0) return p5;
00048     if (strcmp(pinNameString, "p6") == 0) return p6;
00049     if (strcmp(pinNameString, "p7") == 0) return p7;
00050     if (strcmp(pinNameString, "p8") == 0) return p8;
00051     if (strcmp(pinNameString, "p9") == 0) return p9;
00052     if (strcmp(pinNameString, "p10") == 0) return p10;
00053     if (strcmp(pinNameString, "p11") == 0) return p11;
00054     if (strcmp(pinNameString, "p12") == 0) return p12;
00055     if (strcmp(pinNameString, "p13") == 0) return p13;
00056     if (strcmp(pinNameString, "p14") == 0) return p14;
00057     if (strcmp(pinNameString, "p15") == 0) return p15;
00058     if (strcmp(pinNameString, "p16") == 0) return p16;
00059     if (strcmp(pinNameString, "p17") == 0) return p17;
00060     if (strcmp(pinNameString, "p18") == 0) return p18;
00061     if (strcmp(pinNameString, "p19") == 0) return p19;
00062     if (strcmp(pinNameString, "p20") == 0) return p20;
00063 
00064     if (strcmp(pinNameString, "p21") == 0) return p21;
00065     if (strcmp(pinNameString, "p22") == 0) return p22;
00066     if (strcmp(pinNameString, "p23") == 0) return p23;
00067     if (strcmp(pinNameString, "p24") == 0) return p24;
00068     if (strcmp(pinNameString, "p25") == 0) return p25;
00069     if (strcmp(pinNameString, "p26") == 0) return p26;
00070     if (strcmp(pinNameString, "p27") == 0) return p27;
00071     if (strcmp(pinNameString, "p28") == 0) return p28;
00072     if (strcmp(pinNameString, "p29") == 0) return p29;
00073     if (strcmp(pinNameString, "p30") == 0) return p30;
00074 
00075     if (strcmp(pinNameString, "LED1") == 0) return LED1;
00076     if (strcmp(pinNameString, "LED2") == 0) return LED2;
00077     if (strcmp(pinNameString, "LED3") == 0) return LED3;
00078     if (strcmp(pinNameString, "LED4") == 0) return LED4;
00079 
00080     if (strcmp(pinNameString, "USBTX") == 0) return USBTX;
00081     if (strcmp(pinNameString, "USBRX") == 0) return USBRX;
00082 
00083     return NC;
00084 }
00085 
00086 PinMode _digitalPinMode(char *modeString)
00087 {
00088     PinMode mode = PullDown;
00089     if (        (strcmp(modeString, "PullUp") == 0) ||
00090                 (strcmp(modeString, "PU") == 0) ) {
00091         mode = PullUp;
00092     } else if ( (strcmp(modeString, "PullNone") == 0) ||
00093                 (strcmp(modeString, "PN") == 0) ) {
00094         mode = PullNone;
00095     } else if ( (strcmp(modeString, "PullDown") == 0) ||
00096                 (strcmp(modeString, "PD") == 0) ) {
00097         mode = PullDown;
00098     } else if ( (strcmp(modeString, "OpenDrain") == 0) ||
00099                 (strcmp(modeString, "OD") == 0) ) {
00100         mode = OpenDrain;
00101     }
00102 
00103     return mode;
00104 }
00105 
00106 //----------------------------------------------------------------------
00107 //----------------------------------------------------------------------
00108 /**
00109  * wait
00110  */
00111 LIST *mbed_wait(LIST *sec)
00112 {
00113     int t = type(sec);
00114     if (t != IATOM)
00115         return NULL;
00116         
00117     wait(sec->u.num);
00118 
00119     return TRU;
00120 }
00121 
00122 //----------------------------------------------------------------------
00123 /**
00124  * DigitalOut
00125  * lisp: (dout pinName data mode)
00126  */
00127 LIST *mbed_digitalout(LIST *pin, LIST *data)
00128 {
00129     PinName pinName = _mbed_pinNameExchange(getname(car(pin)));
00130      if (pinName == NC) {
00131         return NULL;
00132     }
00133    DigitalOut dout = DigitalOut(pinName);
00134     dout.write((int)data->u.num);
00135 
00136     return TRU;
00137 }
00138 
00139 //----------------------------------------------------------------------
00140 /**
00141  * DigitalIn
00142  * lisp: (din pinName mode)
00143  */
00144 LIST *mbed_digitalin(LIST *pin, LIST *mode)
00145 {
00146     PinName pinName = _mbed_pinNameExchange(getname(car(pin)));
00147     if (pinName == NC) {
00148         return NULL;
00149     }
00150     char *pinModeStr = NULL;
00151 
00152     if (mode != NULL) {
00153         pinModeStr = getname(car(mode));
00154     }
00155     PinMode pinMode = _digitalPinMode(pinModeStr);
00156 
00157     DigitalIn din = DigitalIn(pinName, pinMode);
00158     int v = din.read();
00159 
00160     LIST *p = cons(NULL, NULL);
00161     
00162     p->u.num = v;
00163     rplact(p, IATOM);
00164 
00165     return p;
00166 }
00167 
00168 //----------------------------------------------------------------------
00169 /**
00170  * AnalogOut
00171  * lisp: (aout pinName data)
00172  */
00173 LIST *mbed_analogout(LIST *pin, LIST *data)
00174 {
00175     PinName pinName = _mbed_pinNameExchange(getname(car(pin)));
00176     if (pinName == NC) {
00177         return NULL;
00178     }
00179     AnalogOut aout = AnalogOut(pinName);
00180     aout.write(data->u.num);
00181 
00182     return TRU;
00183 }
00184 
00185 //----------------------------------------------------------------------
00186 /**
00187  * AnalogIn
00188  * lisp: (ain pinName)
00189  */
00190 LIST *mbed_analogin(LIST *pin)
00191 {
00192     PinName pinName = _mbed_pinNameExchange(getname(car(pin)));
00193     if (pinName == NC) {
00194         return NULL;
00195     }
00196     AnalogIn ain = AnalogIn(pinName);
00197     float v = ain.read();
00198 
00199     LIST *p = cons(NULL, NULL);
00200     p->u.num = v;
00201     rplact(p, RATOM);
00202 
00203     return p;
00204 }
00205 
00206 //----------------------------------------------------------------------
00207 /**
00208  * PwmOut
00209  * lisp: (pwmout pinName period  duty-cycle)
00210  */
00211 LIST *mbed_pwmout(LIST *pin, LIST *period, LIST *dcperc)
00212 {
00213     PinName pinName = _mbed_pinNameExchange(getname(car(pin)));
00214     if (pinName == NC) {
00215         return NULL;
00216     }
00217     PwmOut pwmout = PwmOut(pinName);
00218 
00219     pwmout.period(period->u.num);
00220     pwmout.write(dcperc->u.num);
00221     
00222     return TRU;
00223 }
00224 
00225 //----------------------------------------------------------------------