Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
A
ardublockly
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Analytics
Analytics
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Commits
Open sidebar
xpstem
ardublockly
Commits
a13ac7a6
Commit
a13ac7a6
authored
Jul 18, 2015
by
carlosperate
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Update addFunction to create unique function names.
parent
bbb0aec6
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
39 additions
and
29 deletions
+39
-29
TODO.md
TODO.md
+1
-1
blockly/generators/arduino.js
blockly/generators/arduino.js
+31
-21
blockly/generators/arduino/text.js
blockly/generators/arduino/text.js
+7
-7
No files found.
TODO.md
View file @
a13ac7a6
...
...
@@ -34,7 +34,7 @@ There was an error manipulating the sketch data!!
## Static typing
-
[ ] logic_ternary block getType to defines type as that of its inputs
-
[ ] logic_null block right now does not return a type, this might change
-
[
] math_number block 'errornumber' type used for debugging, remove
-
[
x
] math_number block 'errornumber' type used for debugging, remove
-
[ ] math_arithmetic getType to check types of given inputs to decide between int or float . Right now first block within sets the type.
-
[ ] math_constrain getType to check types of given inputs to decide between int or float . Right now first block within sets the type.
-
[ ] math_number getType to use regular expressions more efficiently
...
...
blockly/generators/arduino.js
View file @
a13ac7a6
...
...
@@ -16,7 +16,7 @@ goog.require('Blockly.Generator');
/**
* Arduino code generator.
* @type
!Blockly.Generator
* @type
{!Blockly.Generator}
*/
Blockly
.
Arduino
=
new
Blockly
.
Generator
(
'
Arduino
'
);
...
...
@@ -47,7 +47,7 @@ Blockly.Arduino.ORDER_UNARY_PREFIX = 2; // -expr !expr ~expr ++expr --expr
Blockly
.
Arduino
.
ORDER_MULTIPLICATIVE
=
3
;
// * / % ~/
Blockly
.
Arduino
.
ORDER_ADDITIVE
=
4
;
// + -
Blockly
.
Arduino
.
ORDER_SHIFT
=
5
;
// << >>
Blockly
.
Arduino
.
ORDER_RELATIONAL
=
6
;
//
is is!
>= > <= <
Blockly
.
Arduino
.
ORDER_RELATIONAL
=
6
;
// >= > <= <
Blockly
.
Arduino
.
ORDER_EQUALITY
=
7
;
// == != === !==
Blockly
.
Arduino
.
ORDER_BITWISE_AND
=
8
;
// &
Blockly
.
Arduino
.
ORDER_BITWISE_XOR
=
9
;
// ^
...
...
@@ -58,6 +58,13 @@ Blockly.Arduino.ORDER_CONDITIONAL = 13; // expr ? expr : expr
Blockly
.
Arduino
.
ORDER_ASSIGNMENT
=
14
;
// = *= /= ~/= %= += -= <<= >>= &= ^= |=
Blockly
.
Arduino
.
ORDER_NONE
=
99
;
// (...)
/**
* Arduino generator short name for
* Blockly.Generator.prototype.FUNCTION_NAME_PLACEHOLDER_
* @type {!string}
*/
Blockly
.
Arduino
.
DEF_FUNC_NAME
=
Blockly
.
Arduino
.
FUNCTION_NAME_PLACEHOLDER_
;
/**
* Initialises the database of global definitions, the setup function, function
* names, and variable names.
...
...
@@ -69,7 +76,7 @@ Blockly.Arduino.init = function(workspace) {
// Create a dictionary of definitions to be printed after variable definitions
Blockly
.
Arduino
.
definitions_
=
Object
.
create
(
null
);
// Create a dictionary of functions from the code generator
Blockly
.
Arduino
.
code
f
unctions_
=
Object
.
create
(
null
);
Blockly
.
Arduino
.
code
F
unctions_
=
Object
.
create
(
null
);
// Create a dictionary of functions created by the user
Blockly
.
Arduino
.
userFunctions_
=
Object
.
create
(
null
);
// Create a dictionary mapping desired function names in definitions_
...
...
@@ -136,24 +143,23 @@ Blockly.Arduino.finish = function(code) {
}
// Convert the includes, functions, and setup dictionaries into lists
var
includes
=
[],
functions
=
[],
userFunctions
=
[],
setups
=
[];
var
includes
=
[],
functions
=
[],
setups
=
[];
for
(
var
name
in
Blockly
.
Arduino
.
includes_
)
{
includes
.
push
(
Blockly
.
Arduino
.
includes_
[
name
]);
}
for
(
var
name
in
Blockly
.
Arduino
.
code
f
unctions_
)
{
functions
.
push
(
Blockly
.
Arduino
.
code
f
unctions_
[
name
]);
for
(
var
name
in
Blockly
.
Arduino
.
code
F
unctions_
)
{
functions
.
push
(
Blockly
.
Arduino
.
code
F
unctions_
[
name
]);
}
for
(
var
name
in
Blockly
.
Arduino
.
userFunctions_
)
{
userF
unctions
.
push
(
Blockly
.
Arduino
.
userFunctions_
[
name
]);
f
unctions
.
push
(
Blockly
.
Arduino
.
userFunctions_
[
name
]);
}
for
(
var
name
in
Blockly
.
Arduino
.
setups_
)
{
setups
.
push
(
Blockly
.
Arduino
.
setups_
[
name
]);
}
var
allDefs
=
includes
.
join
(
'
\n
'
)
+
imports
.
join
(
'
\n
'
)
+
definitions
.
join
(
'
\n
'
)
+
functions
.
join
(
'
\n\n
'
)
+
userFunctions
.
join
(
'
\n\n
'
)
+
'
\n\n
void setup() {
\n
'
+
setups
.
join
(
'
\n
'
)
+
'
\n
}
'
;
var
allDefs
=
includes
.
join
(
'
\n
'
)
+
'
\n
'
+
imports
.
join
(
'
\n
'
)
+
'
\n
'
+
definitions
.
join
(
'
\n
'
)
+
'
\n
'
+
functions
.
join
(
'
\n\n
'
)
+
'
\n\n
void setup() {
\n
'
+
setups
.
join
(
'
\n
'
)
+
'
\n
}
'
;
return
allDefs
.
replace
(
/
\n\n
+/g
,
'
\n\n
'
).
replace
(
/
\n
*$/
,
'
\n\n\n
'
)
+
code
;
};
...
...
@@ -188,17 +194,23 @@ Blockly.Arduino.addSetup = function(setupTag, code, overwrite) {
/**
* Adds a string of code as a function. It takes an identifier (meant to be the
* function name) to only keep a single copy even
multiple blocks might reques
t
*
this function to appear
.
*
Once a function is added it will not get overwritten with new code
.
* function name) to only keep a single copy even
if multiple blocks migh
t
*
request this function to be created
.
*
A function (and its code) will only be added on first request
.
* @param {!string} functionName Identifier for the function.
* @param {!string} code Code to be included in the setup() function.
* @param {boolean=} overwrite Description.
* @return {!string} A unique function name based on input name.
*/
Blockly
.
Arduino
.
addFunction
=
function
(
functionName
,
code
)
{
if
(
Blockly
.
Arduino
.
codefunctions_
[
functionName
]
===
undefined
)
{
Blockly
.
Arduino
.
codefunctions_
[
functionName
]
=
code
;
Blockly
.
Arduino
.
addFunction
=
function
(
preferedName
,
code
)
{
if
(
Blockly
.
Arduino
.
codeFunctions_
[
preferedName
]
===
undefined
)
{
var
uniqueName
=
Blockly
.
Arduino
.
variableDB_
.
getDistinctName
(
preferedName
,
Blockly
.
Generator
.
NAME_TYPE
);
Blockly
.
Arduino
.
codeFunctions_
[
preferedName
]
=
code
.
replace
(
Blockly
.
Arduino
.
DEF_FUNC_NAME
,
uniqueName
);
Blockly
.
Arduino
.
functionNames_
[
preferedName
]
=
uniqueName
;
}
return
Blockly
.
Arduino
.
functionNames_
[
preferedName
];
};
/**
...
...
@@ -237,10 +249,8 @@ Blockly.Arduino.quote_ = function(string) {
* @private
*/
Blockly
.
Arduino
.
scrub_
=
function
(
block
,
code
)
{
if
(
code
===
null
)
{
// Block has handled code generation itself
return
''
;
}
if
(
code
===
null
)
{
return
''
;
}
// Block has handled code generation itself
var
commentCode
=
''
;
// Only collect comments for blocks that aren't inline
if
(
!
block
.
outputConnection
||
!
block
.
outputConnection
.
targetConnection
)
{
...
...
blockly/generators/arduino/text.js
View file @
a13ac7a6
...
...
@@ -110,14 +110,14 @@ Blockly.Arduino['text_length'] = function(block) {
*/
Blockly
.
Arduino
[
'
text_isEmpty
'
]
=
function
(
block
)
{
var
func
=
[];
func
.
push
(
'
boolean
isStringEmpty
(String msg) {
'
);
func
.
push
(
'
boolean
'
+
Blockly
.
Arduino
.
DEF_FUNC_NAME
+
'
(String msg) {
'
);
func
.
push
(
'
if (msg.length() == 0) {
'
);
func
.
push
(
'
return true;
'
);
func
.
push
(
'
} else {
'
);
func
.
push
(
'
return false;
'
);
func
.
push
(
'
}
'
);
func
.
push
(
'
}
'
);
Blockly
.
Arduino
.
addFunction
(
'
is_string_e
mpty
'
,
func
.
join
(
'
\n
'
));
var
funcName
=
Blockly
.
Arduino
.
addFunction
(
'
isStringE
mpty
'
,
func
.
join
(
'
\n
'
));
var
argument0
=
Blockly
.
Arduino
.
valueToCode
(
block
,
'
VALUE
'
,
Blockly
.
Arduino
.
ORDER_UNARY_POSTFIX
);
if
(
argument0
==
''
)
{
...
...
@@ -125,7 +125,7 @@ Blockly.Arduino['text_isEmpty'] = function(block) {
}
else
{
argument0
=
'
String(
'
+
argument0
+
'
)
'
;
}
var
code
=
'
isStringEmpty
(
'
+
argument0
+
'
)
'
;
var
code
=
funcName
+
'
(
'
+
argument0
+
'
)
'
;
return
[
code
,
Blockly
.
Arduino
.
ORDER_UNARY_POSTFIX
];
};
...
...
@@ -189,15 +189,14 @@ Blockly.Arduino['text_prompt_ext'] = function(block) {
// Get the first Serial peripheral of arduino board
var
serialId
=
Blockly
.
Arduino
.
Boards
.
selected
.
serial
[
0
][
1
];
var
returnType
=
block
.
getFieldValue
(
'
TYPE
'
);
var
funcName
=
'
getUserInputPrompt
'
+
returnType
;
// The function code changes based on reading a number or string
var
func
=
[];
var
toNumber
=
returnType
==
Blockly
.
StaticTyping
.
blocklyType
.
NUMBER
;
if
(
toNumber
)
{
func
.
push
(
'
int
'
+
funcName
+
'
(String msg) {
'
);
func
.
push
(
'
int
'
+
Blockly
.
Arduino
.
DEF_FUNC_NAME
+
'
(String msg) {
'
);
}
else
{
func
.
push
(
'
String
'
+
funcName
+
'
(String msg) {
'
);
func
.
push
(
'
String
'
+
Blockly
.
Arduino
.
DEF_FUNC_NAME
+
'
(String msg) {
'
);
}
func
.
push
(
'
'
+
serialId
+
'
.println(msg);
'
);
func
.
push
(
'
boolean stringComplete = false;
'
);
...
...
@@ -225,7 +224,8 @@ Blockly.Arduino['text_prompt_ext'] = function(block) {
func
.
push
(
'
while(Serial.available()) { Serial.read(); };
'
);
func
.
push
(
'
return content;
'
);
func
.
push
(
'
}
'
);
Blockly
.
Arduino
.
addFunction
(
funcName
,
func
.
join
(
'
\n
'
));
var
funcName
=
Blockly
.
Arduino
.
addFunction
(
'
getUserInputPrompt
'
+
returnType
,
func
.
join
(
'
\n
'
));
// Only overwrite the serial set up if not present already
var
setupCode
=
serialId
+
'
.begin(9600);
'
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment