TinyJS

Dependencies:   mbed

Fork of TinyJS by Takehisa Oneta

Committer:
ohneta
Date:
Sun Jan 19 16:30:15 2014 +0000
Revision:
5:b5e4fbe59746
Parent:
4:729cab0e95c6
Child:
6:30b4122b0ee2
bug fixed mbedAnalogOut

Who changed what in which revision?

UserRevisionLine numberNew 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 4:729cab0e95c6 6 * 17th Jan. 2014
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 5:b5e4fbe59746 64 float val = c->getParameter("val")->getDouble();
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