Norimasa Okamoto / Mbed 2 deprecated TinyJS

Dependencies:   mbed

Fork of TinyJS by Takehisa Oneta

Revision:
3:f56c36ea8266
Child:
4:729cab0e95c6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mbed_Functions.cpp	Sat Jan 18 15:23:00 2014 +0000
@@ -0,0 +1,262 @@
+/*
+ * TinyJS for mbed.
+ * Mbed_Functions.cpp
+ *
+ * Authored by Takehisa Oneta (ohneta@gmail.com)
+ * 17th Jan. 2013
+ */
+
+#include "mbed.h"
+#include "TinyJS.h"
+#include "Mbed_Functions.h"
+
+//---------------------------------------------
+
+void mbedDigitalIn(CScriptVar *c, void *)
+{
+    string pinNameString = c->getParameter("pinName")->getString();
+    PinName pinName = _mbedPinNameExchange(pinNameString);
+    string modeString = c->getParameter("mode")->getString();
+
+    int mode = PullDown;
+    if (modeString == "PullUp") {
+        mode = PullUp;
+    } else if (modeString == "PullNone"){
+        mode = PullNone;
+    } else if (modeString == "PullDown") {
+        mode = PullDown;
+    }
+
+    DigitalIn din = DigitalIn((PinName)pinName);
+    din.mode((PinMode)mode);
+    int val = din.read();
+    c->getReturnVar()->setInt(val);
+}
+
+void mbedDigitalOut(CScriptVar *c, void *)
+{
+    string pinNameString = c->getParameter("pinName")->getString();
+    PinName pinName = _mbedPinNameExchange(pinNameString);
+
+    int val = c->getParameter("val")->getInt();
+
+    DigitalOut dout = DigitalOut((PinName)pinName);
+    dout.write(val);
+}
+
+//---------------------------------------------
+
+void mbedAnalogIn(CScriptVar *c, void *)
+{
+    string pinNameString = c->getParameter("pinName")->getString();
+    PinName pinName = _mbedPinNameExchange(pinNameString);
+
+    AnalogIn ain = AnalogIn((PinName)pinName);
+    float val = ain.read();
+
+    c->getReturnVar()->setDouble(val);
+}
+
+void mbedAnalogOut(CScriptVar *c, void *)
+{
+    string pinNameString = c->getParameter("pinName")->getString();
+    PinName pinName = _mbedPinNameExchange(pinNameString);
+    int val = c->getParameter("val")->getInt();
+
+    AnalogOut aout = AnalogOut((PinName)pinName);
+    aout.write(val);
+}
+
+//---------------------------------------------
+#define INTERRUPT_NUM   4
+CTinyJS *interrupt_tinyJS;
+int interruptCount = 0;
+string callbackStrings[INTERRUPT_NUM];
+InterruptIn* intrInArray[INTERRUPT_NUM] = {NULL, NULL, NULL, NULL};
+
+void _interruptVector_0(){
+    interrupt_tinyJS->execute(callbackStrings[0]);
+}
+void _interruptVector_1(){
+    interrupt_tinyJS->execute(callbackStrings[1]);
+}
+void _interruptVector_2(){
+    interrupt_tinyJS->execute(callbackStrings[2]);
+}
+void _interruptVector_3(){
+    interrupt_tinyJS->execute(callbackStrings[3]);
+}
+
+void mbedSetInterrupt(CScriptVar *c, void *data)
+{
+    string pinNameString = c->getParameter("pinName")->getString();
+    PinName pinName = _mbedPinNameExchange(pinNameString);
+
+    string edgeString = c->getParameter("edge")->getString();
+    string modeString = c->getParameter("mode")->getString();
+    PinMode mode = PullDown;
+    if (modeString == "PullUp") {
+        mode = PullUp;
+    } else if (modeString == "PullNone"){
+        mode = PullNone;
+    } else if (modeString == "PullDown") {
+        mode = PullDown;
+    }
+
+    interrupt_tinyJS = (CTinyJS *)data;
+    callbackStrings[interruptCount] = c->getParameter("callback")->getString();
+
+
+    if (intrInArray[interruptCount] != NULL) {
+        delete intrInArray[interruptCount];
+    }
+
+    intrInArray[interruptCount] = new InterruptIn(pinName);
+    intrInArray[interruptCount]->mode(mode);
+
+    if (interruptCount == 0) {
+        if (edgeString == "fall") intrInArray[interruptCount]->fall(_interruptVector_0); else if (edgeString == "rise") intrInArray[interruptCount]->rise(_interruptVector_0);
+    } else if (interruptCount == 1) {
+        if (edgeString == "fall") intrInArray[interruptCount]->fall(_interruptVector_1); else if (edgeString == "rise") intrInArray[interruptCount]->rise(_interruptVector_1);
+    } else if (interruptCount == 2) {
+        if (edgeString == "fall") intrInArray[interruptCount]->fall(_interruptVector_2); else if (edgeString == "rise") intrInArray[interruptCount]->rise(_interruptVector_2);
+    } else if (interruptCount == 3) {
+        if (edgeString == "fall") intrInArray[interruptCount]->fall(_interruptVector_3); else if (edgeString == "rise") intrInArray[interruptCount]->rise(_interruptVector_3);
+    }
+
+
+    interruptCount++;
+    if (interruptCount >= INTERRUPT_NUM) {
+        interruptCount = 0;
+    }
+}
+
+
+void mbedRemoveInterrupt(CScriptVar *c, void *)
+{
+}
+
+//---------------------------------------------
+/**
+ *
+ */
+void mbedMemfree(CScriptVar *c, void *)
+{
+    int i = 0;
+    while(1) {
+        void *p = malloc(i);
+        if (p == NULL)  break;
+        free(p);
+        i++;
+    }
+    c->getReturnVar()->setInt(i);
+}
+
+
+//---------------------------------------------
+PinName _mbedPinNameExchange(string pinNameString)
+{
+    if (pinNameString == "p5") return p5;
+    if (pinNameString == "p6") return p6;
+    if (pinNameString == "p7") return p7;
+    if (pinNameString == "p8") return p8;
+    if (pinNameString == "p9") return p9;
+    if (pinNameString == "p10") return p10;
+    if (pinNameString == "p11") return p11;
+    if (pinNameString == "p12") return p12;
+    if (pinNameString == "p13") return p13;
+    if (pinNameString == "p14") return p14;
+    if (pinNameString == "p15") return p15;
+    if (pinNameString == "p16") return p16;
+    if (pinNameString == "p17") return p17;
+    if (pinNameString == "p18") return p18;
+    if (pinNameString == "p19") return p19;
+    if (pinNameString == "p20") return p20;
+
+    if (pinNameString == "p21") return p21;
+    if (pinNameString == "p22") return p22;
+    if (pinNameString == "p23") return p23;
+    if (pinNameString == "p24") return p24;
+    if (pinNameString == "p25") return p25;
+    if (pinNameString == "p26") return p26;
+    if (pinNameString == "p27") return p27;
+    if (pinNameString == "p28") return p28;
+    if (pinNameString == "p29") return p29;
+    if (pinNameString == "p30") return p30;
+
+
+    if (pinNameString == "LED1") return LED1;
+    if (pinNameString == "LED2") return LED2;
+    if (pinNameString == "LED3") return LED3;
+    if (pinNameString == "LED4") return LED4;
+
+    if (pinNameString == "USBTX") return USBTX;
+    if (pinNameString == "USBRX") return USBRX;
+
+    return NC;
+}
+
+/**
+ *
+ */
+void mbedPinNames(CScriptVar *c, void *)
+{
+    printf("mbed DIP Pin Names\n");
+    printf("p5 : %d\n", p5);
+    printf("p6 : %d\n", p6);
+    printf("p7 : %d\n", p7);
+    printf("p8 : %d\n", p8);
+    printf("p9 : %d\n", p9);
+    printf("p10 : %d\n", p10);
+    printf("p11 : %d\n", p11);
+    printf("p12 : %d\n", p12);
+    printf("p13 : %d\n", p13);
+    printf("p14 : %d\n", p14);
+    printf("p15 : %d\n", p15);
+    printf("p16 : %d\n", p16);
+    printf("p17 : %d\n", p17);
+    printf("p18 : %d\n", p18);
+    printf("p19 : %d\n", p19);
+    printf("p20 : %d\n", p20);
+    printf("p21 : %d\n", p21);
+    printf("p22 : %d\n", p22);
+    printf("p23 : %d\n", p23);
+    printf("p24 : %d\n", p24);
+    printf("p25 : %d\n", p25);
+    printf("p26 : %d\n", p26);
+    printf("p27 : %d\n", p27);
+    printf("p28 : %d\n", p28);
+    printf("p29 : %d\n", p29);
+    printf("p30 : %d\n", p30);
+
+    printf("\n");
+    printf("LED mbed Pin Names\n");
+    printf("LED1 : %d\n", LED1);
+    printf("LED2 : %d\n", LED2);
+    printf("LED3 : %d\n", LED3);
+    printf("LED4 : %d\n", LED4);
+
+    printf("Other mbed Pin Names\n");
+    printf("USBTX : %d\n", USBTX);
+    printf("USBRX : %d\n", USBRX);
+}
+
+
+//---------------------------------------------
+// ----------------------------------------------- Register Functions
+void registerMbedFunctions(CTinyJS *tinyJS) {
+    tinyJS->addNative("function mbed.DigitalIn(pinName, mode)", mbedDigitalIn, 0);
+    tinyJS->addNative("function mbed.DigitalOut(pinName, val)", mbedDigitalOut, 0);
+
+    tinyJS->addNative("function mbed.AnalogIn(pinName)", mbedAnalogIn, 0);
+    tinyJS->addNative("function mbed.AnalogOut(pinName, val)", mbedAnalogOut, 0);
+
+    tinyJS->addNative("function mbed.SetInterrupt(pinName, edge, mode, callback)", mbedSetInterrupt, tinyJS);
+    tinyJS->addNative("function mbed.RemoveInterrupt(pinName)", mbedRemoveInterrupt, tinyJS);
+
+    tinyJS->addNative("function mbed.PinNames()", mbedPinNames, 0);
+
+    tinyJS->addNative("function mbed.memfree()", mbedMemfree, 0);
+}
+
+