TinyJS

Dependencies:   mbed

Fork of TinyJS by Takehisa Oneta

Files at this revision

API Documentation at this revision

Comitter:
ohneta
Date:
Sat Jan 18 15:23:00 2014 +0000
Parent:
2:f0b75885747c
Child:
4:729cab0e95c6
Commit message:
mbed?f????????????; DigitalOut/DigitalIn/AnalogOut/AnalogIn/InterruptIn ???; pin_name???????

Changed in this revision

Mbed_Functions.cpp Show annotated file Show diff for this revision Revisions of this file
Mbed_Functions.h Show annotated file Show diff for this revision Revisions of this file
Script.cpp Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- /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);
+}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mbed_Functions.h	Sat Jan 18 15:23:00 2014 +0000
@@ -0,0 +1,29 @@
+/*
+ * TinyJS for mbed.
+ * Mbed_Functions.h
+ *
+ * Authored by Takehisa Oneta (ohneta@gmail.com)
+ * 17th Jan. 2013
+ */
+
+#include "mbed.h"
+
+//---------------------------------------------
+void mbedDigitalIn(CScriptVar *c, void *);
+void mbedDigitalOut(CScriptVar *c, void *);
+
+void mbedAnalogIn(CScriptVar *c, void *);
+void mbedAnalogOut(CScriptVar *c, void *);
+
+void mbedSetInterrupt(CScriptVar *c, void *data);
+void mbedRemoveInterrupt(CScriptVar *c, void *);
+
+//---------------------------------------------
+void mbedMemfree(CScriptVar *c, void *);
+void mbedPinNames(CScriptVar *c, void *);
+
+void registerMbedFunctions(CTinyJS *tinyJS);
+
+
+//---------------------------------------------
+PinName _mbedPinNameExchange(string pinNameString);
--- a/Script.cpp	Sat Jan 11 22:10:19 2014 +0000
+++ b/Script.cpp	Sat Jan 18 15:23:00 2014 +0000
@@ -38,6 +38,10 @@
  */
 #include "TinyJS.h"
 #include "TinyJS_Functions.h"
+#ifdef MBED
+#include "Mbed_Functions.h"
+#endif
+
 #include <assert.h>
 #include <stdio.h>
 
@@ -97,12 +101,6 @@
 
 extern int readOneLine(char *buffer, const int bufferSize);
 
-// mbed function(s)
-extern void mbedDigitalOut(CScriptVar *c, void *);
-extern char *mbedLedsVarString(int ledNo);
-extern void mbedMemfree(CScriptVar *c, void *);
-
-
 int tinyjs_main(int argc, char **argv)
 {
   CTinyJS *js = new CTinyJS();
@@ -115,12 +113,8 @@
   js->execute("print(\"Interactive mode... Type quit(); to exit, or print(...); to print something, or dump() to dump the symbol table!\");");
 
   // add mbed functions
-  js->addNative("function mbed.memfree()", &mbedMemfree, 0);
-  js->addNative("function mbed.DigitalOut(pinName, val)", &mbedDigitalOut, 0);
-  js->execute(mbedLedsVarString(1));
-  js->execute(mbedLedsVarString(2));
-  js->execute(mbedLedsVarString(3));
-  js->execute(mbedLedsVarString(4));
+  registerMbedFunctions(js);
+
 
   while (js->evaluate("lets_quit") == "0") {
     char buffer[2048];
--- a/main.cpp	Sat Jan 11 22:10:19 2014 +0000
+++ b/main.cpp	Sat Jan 18 15:23:00 2014 +0000
@@ -12,12 +12,9 @@
  
 #include "mbed.h"
 #include "TinyJS.h"
+#include "Mbed_Functions.h"
 
 Serial pc(USBTX, USBRX);
-DigitalOut led1(LED1);
-DigitalOut led2(LED2);
-DigitalOut led3(LED3);
-DigitalOut led4(LED4);
 
 //unsigned char usbArea[1024] __attribute__((section("AHBSRAM0")));
 //unsigned char ethArea[1024] __attribute__((section("AHBSRAM1")));
@@ -27,65 +24,6 @@
 
 //---------------------------------------------
 
-void mbedDigitalOut(CScriptVar *c, void *)
-{
-    int pinName = c->getParameter("pinName")->getInt();
-    int val = c->getParameter("val")->getInt();
-
-    switch (pinName) {
-        case LED1:
-            led1 = val;
-            break;
-        case LED2:
-            led2 = val;
-            break;
-        case LED3:
-            led3 = val;
-            break;
-        case LED4:
-            led4 = val;
-            break;
-    }
-}
-
-char ledVarStr[32];
-char *mbedLedsVarString(int ledNo)
-{
-  switch (ledNo) {
-      case 1:
-        sprintf(ledVarStr,  "var led1 = %d;", LED1);
-        break;
-      case 2:
-        sprintf(ledVarStr,  "var led2 = %d;", LED2);
-        break;
-      case 3:
-        sprintf(ledVarStr,  "var led3 = %d;", LED3);
-        break;
-      case 4:
-        sprintf(ledVarStr,  "var led4 = %d;", LED4);
-        break;
-      default:
-        sprintf(ledVarStr,  "");
-        break;
-  }
-  return ledVarStr;
-}
-
-//---------------------------------------------
-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);
-}
-
-//---------------------------------------------
-
 int readOneLine(char *buffer, const int bufferSize)
 {
     int len = 0;