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.
Fork of TinyJS by
Mbed_Functions.cpp@3:f56c36ea8266, 2014-01-18 (annotated)
- Committer:
- ohneta
- Date:
- Sat Jan 18 15:23:00 2014 +0000
- Revision:
- 3:f56c36ea8266
- Child:
- 4:729cab0e95c6
mbed?f????????????; DigitalOut/DigitalIn/AnalogOut/AnalogIn/InterruptIn ???; pin_name???????
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ohneta | 3:f56c36ea8266 | 1 | /* |
ohneta | 3:f56c36ea8266 | 2 | * TinyJS for mbed. |
ohneta | 3:f56c36ea8266 | 3 | * Mbed_Functions.cpp |
ohneta | 3:f56c36ea8266 | 4 | * |
ohneta | 3:f56c36ea8266 | 5 | * Authored by Takehisa Oneta (ohneta@gmail.com) |
ohneta | 3:f56c36ea8266 | 6 | * 17th Jan. 2013 |
ohneta | 3:f56c36ea8266 | 7 | */ |
ohneta | 3:f56c36ea8266 | 8 | |
ohneta | 3:f56c36ea8266 | 9 | #include "mbed.h" |
ohneta | 3:f56c36ea8266 | 10 | #include "TinyJS.h" |
ohneta | 3:f56c36ea8266 | 11 | #include "Mbed_Functions.h" |
ohneta | 3:f56c36ea8266 | 12 | |
ohneta | 3:f56c36ea8266 | 13 | //--------------------------------------------- |
ohneta | 3:f56c36ea8266 | 14 | |
ohneta | 3:f56c36ea8266 | 15 | void mbedDigitalIn(CScriptVar *c, void *) |
ohneta | 3:f56c36ea8266 | 16 | { |
ohneta | 3:f56c36ea8266 | 17 | string pinNameString = c->getParameter("pinName")->getString(); |
ohneta | 3:f56c36ea8266 | 18 | PinName pinName = _mbedPinNameExchange(pinNameString); |
ohneta | 3:f56c36ea8266 | 19 | string modeString = c->getParameter("mode")->getString(); |
ohneta | 3:f56c36ea8266 | 20 | |
ohneta | 3:f56c36ea8266 | 21 | int mode = PullDown; |
ohneta | 3:f56c36ea8266 | 22 | if (modeString == "PullUp") { |
ohneta | 3:f56c36ea8266 | 23 | mode = PullUp; |
ohneta | 3:f56c36ea8266 | 24 | } else if (modeString == "PullNone"){ |
ohneta | 3:f56c36ea8266 | 25 | mode = PullNone; |
ohneta | 3:f56c36ea8266 | 26 | } else if (modeString == "PullDown") { |
ohneta | 3:f56c36ea8266 | 27 | mode = PullDown; |
ohneta | 3:f56c36ea8266 | 28 | } |
ohneta | 3:f56c36ea8266 | 29 | |
ohneta | 3:f56c36ea8266 | 30 | DigitalIn din = DigitalIn((PinName)pinName); |
ohneta | 3:f56c36ea8266 | 31 | din.mode((PinMode)mode); |
ohneta | 3:f56c36ea8266 | 32 | int val = din.read(); |
ohneta | 3:f56c36ea8266 | 33 | c->getReturnVar()->setInt(val); |
ohneta | 3:f56c36ea8266 | 34 | } |
ohneta | 3:f56c36ea8266 | 35 | |
ohneta | 3:f56c36ea8266 | 36 | void mbedDigitalOut(CScriptVar *c, void *) |
ohneta | 3:f56c36ea8266 | 37 | { |
ohneta | 3:f56c36ea8266 | 38 | string pinNameString = c->getParameter("pinName")->getString(); |
ohneta | 3:f56c36ea8266 | 39 | PinName pinName = _mbedPinNameExchange(pinNameString); |
ohneta | 3:f56c36ea8266 | 40 | |
ohneta | 3:f56c36ea8266 | 41 | int val = c->getParameter("val")->getInt(); |
ohneta | 3:f56c36ea8266 | 42 | |
ohneta | 3:f56c36ea8266 | 43 | DigitalOut dout = DigitalOut((PinName)pinName); |
ohneta | 3:f56c36ea8266 | 44 | dout.write(val); |
ohneta | 3:f56c36ea8266 | 45 | } |
ohneta | 3:f56c36ea8266 | 46 | |
ohneta | 3:f56c36ea8266 | 47 | //--------------------------------------------- |
ohneta | 3:f56c36ea8266 | 48 | |
ohneta | 3:f56c36ea8266 | 49 | void mbedAnalogIn(CScriptVar *c, void *) |
ohneta | 3:f56c36ea8266 | 50 | { |
ohneta | 3:f56c36ea8266 | 51 | string pinNameString = c->getParameter("pinName")->getString(); |
ohneta | 3:f56c36ea8266 | 52 | PinName pinName = _mbedPinNameExchange(pinNameString); |
ohneta | 3:f56c36ea8266 | 53 | |
ohneta | 3:f56c36ea8266 | 54 | AnalogIn ain = AnalogIn((PinName)pinName); |
ohneta | 3:f56c36ea8266 | 55 | float val = ain.read(); |
ohneta | 3:f56c36ea8266 | 56 | |
ohneta | 3:f56c36ea8266 | 57 | c->getReturnVar()->setDouble(val); |
ohneta | 3:f56c36ea8266 | 58 | } |
ohneta | 3:f56c36ea8266 | 59 | |
ohneta | 3:f56c36ea8266 | 60 | void mbedAnalogOut(CScriptVar *c, void *) |
ohneta | 3:f56c36ea8266 | 61 | { |
ohneta | 3:f56c36ea8266 | 62 | string pinNameString = c->getParameter("pinName")->getString(); |
ohneta | 3:f56c36ea8266 | 63 | PinName pinName = _mbedPinNameExchange(pinNameString); |
ohneta | 3:f56c36ea8266 | 64 | int val = c->getParameter("val")->getInt(); |
ohneta | 3:f56c36ea8266 | 65 | |
ohneta | 3:f56c36ea8266 | 66 | AnalogOut aout = AnalogOut((PinName)pinName); |
ohneta | 3:f56c36ea8266 | 67 | aout.write(val); |
ohneta | 3:f56c36ea8266 | 68 | } |
ohneta | 3:f56c36ea8266 | 69 | |
ohneta | 3:f56c36ea8266 | 70 | //--------------------------------------------- |
ohneta | 3:f56c36ea8266 | 71 | #define INTERRUPT_NUM 4 |
ohneta | 3:f56c36ea8266 | 72 | CTinyJS *interrupt_tinyJS; |
ohneta | 3:f56c36ea8266 | 73 | int interruptCount = 0; |
ohneta | 3:f56c36ea8266 | 74 | string callbackStrings[INTERRUPT_NUM]; |
ohneta | 3:f56c36ea8266 | 75 | InterruptIn* intrInArray[INTERRUPT_NUM] = {NULL, NULL, NULL, NULL}; |
ohneta | 3:f56c36ea8266 | 76 | |
ohneta | 3:f56c36ea8266 | 77 | void _interruptVector_0(){ |
ohneta | 3:f56c36ea8266 | 78 | interrupt_tinyJS->execute(callbackStrings[0]); |
ohneta | 3:f56c36ea8266 | 79 | } |
ohneta | 3:f56c36ea8266 | 80 | void _interruptVector_1(){ |
ohneta | 3:f56c36ea8266 | 81 | interrupt_tinyJS->execute(callbackStrings[1]); |
ohneta | 3:f56c36ea8266 | 82 | } |
ohneta | 3:f56c36ea8266 | 83 | void _interruptVector_2(){ |
ohneta | 3:f56c36ea8266 | 84 | interrupt_tinyJS->execute(callbackStrings[2]); |
ohneta | 3:f56c36ea8266 | 85 | } |
ohneta | 3:f56c36ea8266 | 86 | void _interruptVector_3(){ |
ohneta | 3:f56c36ea8266 | 87 | interrupt_tinyJS->execute(callbackStrings[3]); |
ohneta | 3:f56c36ea8266 | 88 | } |
ohneta | 3:f56c36ea8266 | 89 | |
ohneta | 3:f56c36ea8266 | 90 | void mbedSetInterrupt(CScriptVar *c, void *data) |
ohneta | 3:f56c36ea8266 | 91 | { |
ohneta | 3:f56c36ea8266 | 92 | string pinNameString = c->getParameter("pinName")->getString(); |
ohneta | 3:f56c36ea8266 | 93 | PinName pinName = _mbedPinNameExchange(pinNameString); |
ohneta | 3:f56c36ea8266 | 94 | |
ohneta | 3:f56c36ea8266 | 95 | string edgeString = c->getParameter("edge")->getString(); |
ohneta | 3:f56c36ea8266 | 96 | string modeString = c->getParameter("mode")->getString(); |
ohneta | 3:f56c36ea8266 | 97 | PinMode mode = PullDown; |
ohneta | 3:f56c36ea8266 | 98 | if (modeString == "PullUp") { |
ohneta | 3:f56c36ea8266 | 99 | mode = PullUp; |
ohneta | 3:f56c36ea8266 | 100 | } else if (modeString == "PullNone"){ |
ohneta | 3:f56c36ea8266 | 101 | mode = PullNone; |
ohneta | 3:f56c36ea8266 | 102 | } else if (modeString == "PullDown") { |
ohneta | 3:f56c36ea8266 | 103 | mode = PullDown; |
ohneta | 3:f56c36ea8266 | 104 | } |
ohneta | 3:f56c36ea8266 | 105 | |
ohneta | 3:f56c36ea8266 | 106 | interrupt_tinyJS = (CTinyJS *)data; |
ohneta | 3:f56c36ea8266 | 107 | callbackStrings[interruptCount] = c->getParameter("callback")->getString(); |
ohneta | 3:f56c36ea8266 | 108 | |
ohneta | 3:f56c36ea8266 | 109 | |
ohneta | 3:f56c36ea8266 | 110 | if (intrInArray[interruptCount] != NULL) { |
ohneta | 3:f56c36ea8266 | 111 | delete intrInArray[interruptCount]; |
ohneta | 3:f56c36ea8266 | 112 | } |
ohneta | 3:f56c36ea8266 | 113 | |
ohneta | 3:f56c36ea8266 | 114 | intrInArray[interruptCount] = new InterruptIn(pinName); |
ohneta | 3:f56c36ea8266 | 115 | intrInArray[interruptCount]->mode(mode); |
ohneta | 3:f56c36ea8266 | 116 | |
ohneta | 3:f56c36ea8266 | 117 | if (interruptCount == 0) { |
ohneta | 3:f56c36ea8266 | 118 | if (edgeString == "fall") intrInArray[interruptCount]->fall(_interruptVector_0); else if (edgeString == "rise") intrInArray[interruptCount]->rise(_interruptVector_0); |
ohneta | 3:f56c36ea8266 | 119 | } else if (interruptCount == 1) { |
ohneta | 3:f56c36ea8266 | 120 | if (edgeString == "fall") intrInArray[interruptCount]->fall(_interruptVector_1); else if (edgeString == "rise") intrInArray[interruptCount]->rise(_interruptVector_1); |
ohneta | 3:f56c36ea8266 | 121 | } else if (interruptCount == 2) { |
ohneta | 3:f56c36ea8266 | 122 | if (edgeString == "fall") intrInArray[interruptCount]->fall(_interruptVector_2); else if (edgeString == "rise") intrInArray[interruptCount]->rise(_interruptVector_2); |
ohneta | 3:f56c36ea8266 | 123 | } else if (interruptCount == 3) { |
ohneta | 3:f56c36ea8266 | 124 | if (edgeString == "fall") intrInArray[interruptCount]->fall(_interruptVector_3); else if (edgeString == "rise") intrInArray[interruptCount]->rise(_interruptVector_3); |
ohneta | 3:f56c36ea8266 | 125 | } |
ohneta | 3:f56c36ea8266 | 126 | |
ohneta | 3:f56c36ea8266 | 127 | |
ohneta | 3:f56c36ea8266 | 128 | interruptCount++; |
ohneta | 3:f56c36ea8266 | 129 | if (interruptCount >= INTERRUPT_NUM) { |
ohneta | 3:f56c36ea8266 | 130 | interruptCount = 0; |
ohneta | 3:f56c36ea8266 | 131 | } |
ohneta | 3:f56c36ea8266 | 132 | } |
ohneta | 3:f56c36ea8266 | 133 | |
ohneta | 3:f56c36ea8266 | 134 | |
ohneta | 3:f56c36ea8266 | 135 | void mbedRemoveInterrupt(CScriptVar *c, void *) |
ohneta | 3:f56c36ea8266 | 136 | { |
ohneta | 3:f56c36ea8266 | 137 | } |
ohneta | 3:f56c36ea8266 | 138 | |
ohneta | 3:f56c36ea8266 | 139 | //--------------------------------------------- |
ohneta | 3:f56c36ea8266 | 140 | /** |
ohneta | 3:f56c36ea8266 | 141 | * |
ohneta | 3:f56c36ea8266 | 142 | */ |
ohneta | 3:f56c36ea8266 | 143 | void mbedMemfree(CScriptVar *c, void *) |
ohneta | 3:f56c36ea8266 | 144 | { |
ohneta | 3:f56c36ea8266 | 145 | int i = 0; |
ohneta | 3:f56c36ea8266 | 146 | while(1) { |
ohneta | 3:f56c36ea8266 | 147 | void *p = malloc(i); |
ohneta | 3:f56c36ea8266 | 148 | if (p == NULL) break; |
ohneta | 3:f56c36ea8266 | 149 | free(p); |
ohneta | 3:f56c36ea8266 | 150 | i++; |
ohneta | 3:f56c36ea8266 | 151 | } |
ohneta | 3:f56c36ea8266 | 152 | c->getReturnVar()->setInt(i); |
ohneta | 3:f56c36ea8266 | 153 | } |
ohneta | 3:f56c36ea8266 | 154 | |
ohneta | 3:f56c36ea8266 | 155 | |
ohneta | 3:f56c36ea8266 | 156 | //--------------------------------------------- |
ohneta | 3:f56c36ea8266 | 157 | PinName _mbedPinNameExchange(string pinNameString) |
ohneta | 3:f56c36ea8266 | 158 | { |
ohneta | 3:f56c36ea8266 | 159 | if (pinNameString == "p5") return p5; |
ohneta | 3:f56c36ea8266 | 160 | if (pinNameString == "p6") return p6; |
ohneta | 3:f56c36ea8266 | 161 | if (pinNameString == "p7") return p7; |
ohneta | 3:f56c36ea8266 | 162 | if (pinNameString == "p8") return p8; |
ohneta | 3:f56c36ea8266 | 163 | if (pinNameString == "p9") return p9; |
ohneta | 3:f56c36ea8266 | 164 | if (pinNameString == "p10") return p10; |
ohneta | 3:f56c36ea8266 | 165 | if (pinNameString == "p11") return p11; |
ohneta | 3:f56c36ea8266 | 166 | if (pinNameString == "p12") return p12; |
ohneta | 3:f56c36ea8266 | 167 | if (pinNameString == "p13") return p13; |
ohneta | 3:f56c36ea8266 | 168 | if (pinNameString == "p14") return p14; |
ohneta | 3:f56c36ea8266 | 169 | if (pinNameString == "p15") return p15; |
ohneta | 3:f56c36ea8266 | 170 | if (pinNameString == "p16") return p16; |
ohneta | 3:f56c36ea8266 | 171 | if (pinNameString == "p17") return p17; |
ohneta | 3:f56c36ea8266 | 172 | if (pinNameString == "p18") return p18; |
ohneta | 3:f56c36ea8266 | 173 | if (pinNameString == "p19") return p19; |
ohneta | 3:f56c36ea8266 | 174 | if (pinNameString == "p20") return p20; |
ohneta | 3:f56c36ea8266 | 175 | |
ohneta | 3:f56c36ea8266 | 176 | if (pinNameString == "p21") return p21; |
ohneta | 3:f56c36ea8266 | 177 | if (pinNameString == "p22") return p22; |
ohneta | 3:f56c36ea8266 | 178 | if (pinNameString == "p23") return p23; |
ohneta | 3:f56c36ea8266 | 179 | if (pinNameString == "p24") return p24; |
ohneta | 3:f56c36ea8266 | 180 | if (pinNameString == "p25") return p25; |
ohneta | 3:f56c36ea8266 | 181 | if (pinNameString == "p26") return p26; |
ohneta | 3:f56c36ea8266 | 182 | if (pinNameString == "p27") return p27; |
ohneta | 3:f56c36ea8266 | 183 | if (pinNameString == "p28") return p28; |
ohneta | 3:f56c36ea8266 | 184 | if (pinNameString == "p29") return p29; |
ohneta | 3:f56c36ea8266 | 185 | if (pinNameString == "p30") return p30; |
ohneta | 3:f56c36ea8266 | 186 | |
ohneta | 3:f56c36ea8266 | 187 | |
ohneta | 3:f56c36ea8266 | 188 | if (pinNameString == "LED1") return LED1; |
ohneta | 3:f56c36ea8266 | 189 | if (pinNameString == "LED2") return LED2; |
ohneta | 3:f56c36ea8266 | 190 | if (pinNameString == "LED3") return LED3; |
ohneta | 3:f56c36ea8266 | 191 | if (pinNameString == "LED4") return LED4; |
ohneta | 3:f56c36ea8266 | 192 | |
ohneta | 3:f56c36ea8266 | 193 | if (pinNameString == "USBTX") return USBTX; |
ohneta | 3:f56c36ea8266 | 194 | if (pinNameString == "USBRX") return USBRX; |
ohneta | 3:f56c36ea8266 | 195 | |
ohneta | 3:f56c36ea8266 | 196 | return NC; |
ohneta | 3:f56c36ea8266 | 197 | } |
ohneta | 3:f56c36ea8266 | 198 | |
ohneta | 3:f56c36ea8266 | 199 | /** |
ohneta | 3:f56c36ea8266 | 200 | * |
ohneta | 3:f56c36ea8266 | 201 | */ |
ohneta | 3:f56c36ea8266 | 202 | void mbedPinNames(CScriptVar *c, void *) |
ohneta | 3:f56c36ea8266 | 203 | { |
ohneta | 3:f56c36ea8266 | 204 | printf("mbed DIP Pin Names\n"); |
ohneta | 3:f56c36ea8266 | 205 | printf("p5 : %d\n", p5); |
ohneta | 3:f56c36ea8266 | 206 | printf("p6 : %d\n", p6); |
ohneta | 3:f56c36ea8266 | 207 | printf("p7 : %d\n", p7); |
ohneta | 3:f56c36ea8266 | 208 | printf("p8 : %d\n", p8); |
ohneta | 3:f56c36ea8266 | 209 | printf("p9 : %d\n", p9); |
ohneta | 3:f56c36ea8266 | 210 | printf("p10 : %d\n", p10); |
ohneta | 3:f56c36ea8266 | 211 | printf("p11 : %d\n", p11); |
ohneta | 3:f56c36ea8266 | 212 | printf("p12 : %d\n", p12); |
ohneta | 3:f56c36ea8266 | 213 | printf("p13 : %d\n", p13); |
ohneta | 3:f56c36ea8266 | 214 | printf("p14 : %d\n", p14); |
ohneta | 3:f56c36ea8266 | 215 | printf("p15 : %d\n", p15); |
ohneta | 3:f56c36ea8266 | 216 | printf("p16 : %d\n", p16); |
ohneta | 3:f56c36ea8266 | 217 | printf("p17 : %d\n", p17); |
ohneta | 3:f56c36ea8266 | 218 | printf("p18 : %d\n", p18); |
ohneta | 3:f56c36ea8266 | 219 | printf("p19 : %d\n", p19); |
ohneta | 3:f56c36ea8266 | 220 | printf("p20 : %d\n", p20); |
ohneta | 3:f56c36ea8266 | 221 | printf("p21 : %d\n", p21); |
ohneta | 3:f56c36ea8266 | 222 | printf("p22 : %d\n", p22); |
ohneta | 3:f56c36ea8266 | 223 | printf("p23 : %d\n", p23); |
ohneta | 3:f56c36ea8266 | 224 | printf("p24 : %d\n", p24); |
ohneta | 3:f56c36ea8266 | 225 | printf("p25 : %d\n", p25); |
ohneta | 3:f56c36ea8266 | 226 | printf("p26 : %d\n", p26); |
ohneta | 3:f56c36ea8266 | 227 | printf("p27 : %d\n", p27); |
ohneta | 3:f56c36ea8266 | 228 | printf("p28 : %d\n", p28); |
ohneta | 3:f56c36ea8266 | 229 | printf("p29 : %d\n", p29); |
ohneta | 3:f56c36ea8266 | 230 | printf("p30 : %d\n", p30); |
ohneta | 3:f56c36ea8266 | 231 | |
ohneta | 3:f56c36ea8266 | 232 | printf("\n"); |
ohneta | 3:f56c36ea8266 | 233 | printf("LED mbed Pin Names\n"); |
ohneta | 3:f56c36ea8266 | 234 | printf("LED1 : %d\n", LED1); |
ohneta | 3:f56c36ea8266 | 235 | printf("LED2 : %d\n", LED2); |
ohneta | 3:f56c36ea8266 | 236 | printf("LED3 : %d\n", LED3); |
ohneta | 3:f56c36ea8266 | 237 | printf("LED4 : %d\n", LED4); |
ohneta | 3:f56c36ea8266 | 238 | |
ohneta | 3:f56c36ea8266 | 239 | printf("Other mbed Pin Names\n"); |
ohneta | 3:f56c36ea8266 | 240 | printf("USBTX : %d\n", USBTX); |
ohneta | 3:f56c36ea8266 | 241 | printf("USBRX : %d\n", USBRX); |
ohneta | 3:f56c36ea8266 | 242 | } |
ohneta | 3:f56c36ea8266 | 243 | |
ohneta | 3:f56c36ea8266 | 244 | |
ohneta | 3:f56c36ea8266 | 245 | //--------------------------------------------- |
ohneta | 3:f56c36ea8266 | 246 | // ----------------------------------------------- Register Functions |
ohneta | 3:f56c36ea8266 | 247 | void registerMbedFunctions(CTinyJS *tinyJS) { |
ohneta | 3:f56c36ea8266 | 248 | tinyJS->addNative("function mbed.DigitalIn(pinName, mode)", mbedDigitalIn, 0); |
ohneta | 3:f56c36ea8266 | 249 | tinyJS->addNative("function mbed.DigitalOut(pinName, val)", mbedDigitalOut, 0); |
ohneta | 3:f56c36ea8266 | 250 | |
ohneta | 3:f56c36ea8266 | 251 | tinyJS->addNative("function mbed.AnalogIn(pinName)", mbedAnalogIn, 0); |
ohneta | 3:f56c36ea8266 | 252 | tinyJS->addNative("function mbed.AnalogOut(pinName, val)", mbedAnalogOut, 0); |
ohneta | 3:f56c36ea8266 | 253 | |
ohneta | 3:f56c36ea8266 | 254 | tinyJS->addNative("function mbed.SetInterrupt(pinName, edge, mode, callback)", mbedSetInterrupt, tinyJS); |
ohneta | 3:f56c36ea8266 | 255 | tinyJS->addNative("function mbed.RemoveInterrupt(pinName)", mbedRemoveInterrupt, tinyJS); |
ohneta | 3:f56c36ea8266 | 256 | |
ohneta | 3:f56c36ea8266 | 257 | tinyJS->addNative("function mbed.PinNames()", mbedPinNames, 0); |
ohneta | 3:f56c36ea8266 | 258 | |
ohneta | 3:f56c36ea8266 | 259 | tinyJS->addNative("function mbed.memfree()", mbedMemfree, 0); |
ohneta | 3:f56c36ea8266 | 260 | } |
ohneta | 3:f56c36ea8266 | 261 | |
ohneta | 3:f56c36ea8266 | 262 |