Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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 //----------------------------------------------------------------------
Generated on Wed Jul 13 2022 19:47:42 by
1.7.2