feat: sync arduino source board configurations
This commit is contained in:
196
mixly/boards/default_src/arduino/generators/ethernet.js
Normal file
196
mixly/boards/default_src/arduino/generators/ethernet.js
Normal file
@@ -0,0 +1,196 @@
|
||||
import * as Blockly from 'blockly/core';
|
||||
import * as Mixly from 'mixly';
|
||||
import CITYS_DATA from '../templates/json/cities.json';
|
||||
|
||||
|
||||
/**
|
||||
* @name 模块名 Http GET请求
|
||||
* @support 支持板卡 {ESP8266, ESP32, ESP32C3, ESP32S2, ESP32S3}
|
||||
*/
|
||||
export const http_get = function () {
|
||||
const BOARD_TYPE = Mixly.Boards.getType();
|
||||
const API = Blockly.Arduino.valueToCode(this, 'api', Blockly.Arduino.ORDER_ATOMIC);
|
||||
let branch = Blockly.Arduino.statementToCode(this, 'success') || '';
|
||||
branch = branch.replace(/(^\s*)|(\s*$)/g, "");
|
||||
let branch1 = Blockly.Arduino.statementToCode(this, 'failure') || '';
|
||||
branch1 = branch1.replace(/(^\s*)|(\s*$)/g, "");
|
||||
let code = '';
|
||||
if (BOARD_TYPE == 'arduino_esp8266') {
|
||||
Blockly.Arduino.definitions_['include_ESP8266WiFi'] = '#include <ESP8266WiFi.h>';
|
||||
Blockly.Arduino.definitions_['include_ESP8266HTTPClient'] = '#include <ESP8266HTTPClient.h>';
|
||||
code
|
||||
= 'if (WiFi.status() == WL_CONNECTED) {\n'
|
||||
+ ' WiFiClient client;\n'
|
||||
+ ' HTTPClient http;\n'
|
||||
+ ' http.begin(client, ' + API + ');\n'
|
||||
+ ' int httpCode = http.GET();\n'
|
||||
+ ' if (httpCode > 0) {\n'
|
||||
+ ' String Request_result = http.getString();\n'
|
||||
+ ' ' + branch + '\n'
|
||||
+ ' } else {\n'
|
||||
+ ' ' + branch1 + '\n'
|
||||
+ ' }\n'
|
||||
+ ' http.end();\n'
|
||||
+ '}\n';
|
||||
} else {
|
||||
Blockly.Arduino.definitions_['include_WiFi'] = '#include <WiFi.h>';
|
||||
Blockly.Arduino.definitions_['include_HTTPClient'] = '#include <HTTPClient.h>';
|
||||
code
|
||||
= 'if (WiFi.status() == WL_CONNECTED) {\n'
|
||||
+ ' HTTPClient http;\n'
|
||||
+ ' http.begin(' + API + ');\n'
|
||||
+ ' int httpCode = http.GET();\n'
|
||||
+ ' if (httpCode > 0) {\n'
|
||||
+ ' String Request_result = http.getString();\n'
|
||||
+ ' ' + branch + '\n'
|
||||
+ ' }\n'
|
||||
+ ' else {\n'
|
||||
+ ' ' + branch1 + '\n'
|
||||
+ ' }\n'
|
||||
+ ' http.end();\n'
|
||||
+ '}\n';
|
||||
}
|
||||
return code;
|
||||
};
|
||||
|
||||
/**
|
||||
* @name 模块名 Http PATCH|POST|PUT请求
|
||||
* @support 支持板卡 {ESP8266, ESP32, ESP32C3, ESP32S2, ESP32S3}
|
||||
*/
|
||||
export const http_post = function () {
|
||||
const BOARD_TYPE = Mixly.Boards.getType();
|
||||
const FIELD_TYPE = this.getFieldValue("TYPE");
|
||||
const API = Blockly.Arduino.valueToCode(this, 'api', Blockly.Arduino.ORDER_ATOMIC);
|
||||
const DATA = Blockly.Arduino.valueToCode(this, 'data', Blockly.Arduino.ORDER_ATOMIC);
|
||||
let branch = Blockly.Arduino.statementToCode(this, 'success') || '';
|
||||
branch = branch.replace(/(^\s*)|(\s*$)/g, "");
|
||||
let branch1 = Blockly.Arduino.statementToCode(this, 'failure') || '';
|
||||
branch1 = branch1.replace(/(^\s*)|(\s*$)/g, "");
|
||||
let code = '';
|
||||
if (BOARD_TYPE == 'arduino_esp8266') {
|
||||
Blockly.Arduino.definitions_['include_ESP8266WiFi'] = '#include <ESP8266WiFi.h>';
|
||||
Blockly.Arduino.definitions_['include_ESP8266HTTPClient'] = '#include <ESP8266HTTPClient.h>';
|
||||
code
|
||||
= 'if (WiFi.status() == WL_CONNECTED) {\n'
|
||||
+ ' HTTPClient http;\n'
|
||||
+ ' WiFiClient client;\n'
|
||||
+ ' http.begin(client, ' + API + ');\n'
|
||||
+ ' http.addHeader("Content-Type", "application/json");\n'
|
||||
+ ' int httpCode = http.' + FIELD_TYPE + '(' + DATA + ');\n'
|
||||
+ ' if (httpCode > 0) {\n'
|
||||
+ ' String Request_result = http.getString();\n'
|
||||
+ ' ' + branch + '\n'
|
||||
+ ' } else {\n'
|
||||
+ ' ' + branch1 + '\n'
|
||||
+ ' }\n'
|
||||
+ ' http.end();\n'
|
||||
+ '}\n';
|
||||
} else {
|
||||
Blockly.Arduino.definitions_['include_WiFi'] = '#include <WiFi.h>';
|
||||
Blockly.Arduino.definitions_['include_HTTPClient'] = '#include <HTTPClient.h>';
|
||||
code
|
||||
= 'if (WiFi.status() == WL_CONNECTED) {\n'
|
||||
+ ' HTTPClient http;\n'
|
||||
+ ' http.begin(' + API + ');\n'
|
||||
+ ' http.addHeader("Content-Type", "application/json");\n'
|
||||
+ ' int httpCode = http.' + FIELD_TYPE + '(' + DATA + ');\n'
|
||||
+ ' if (httpCode > 0) {\n'
|
||||
+ ' String Request_result = http.getString();\n'
|
||||
+ ' ' + branch + '\n'
|
||||
+ ' }\n'
|
||||
+ ' else {\n'
|
||||
+ ' ' + branch1 + '\n'
|
||||
+ ' }\n'
|
||||
+ ' http.end();\n'
|
||||
+ '}\n';
|
||||
}
|
||||
return code;
|
||||
};
|
||||
|
||||
//网络天气
|
||||
export const china_city = function () {
|
||||
var a = this.getFieldValue("province");
|
||||
var b = this.getFieldValue("city");
|
||||
var code = "";
|
||||
try {
|
||||
code = '"' + CITYS_DATA[a][b].pinyin + '"';
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
}
|
||||
return [code, Blockly.Arduino.ORDER_ATOMIC];
|
||||
};
|
||||
|
||||
export const weather_private_key = function () {
|
||||
var a = this.getFieldValue("key");
|
||||
var code = '"' + a + '"';
|
||||
return [code, Blockly.Arduino.ORDER_ATOMIC];
|
||||
};
|
||||
|
||||
export const weather_seniverse_city_weather = function () {
|
||||
var api = this.getFieldValue("api");
|
||||
var location = Blockly.Arduino.valueToCode(this, "location", Blockly.Arduino.ORDER_ATOMIC);
|
||||
var private_key = Blockly.Arduino.valueToCode(this, "private_key", Blockly.Arduino.ORDER_ATOMIC);
|
||||
//private_key = private_key.replace(/\"/g, "")
|
||||
var language = this.getFieldValue("language");
|
||||
var unit = this.getFieldValue("unit");
|
||||
|
||||
Blockly.Arduino.definitions_['include_ESP8266_Seniverse'] = '#include <ESP8266_Seniverse.h>';
|
||||
|
||||
Blockly.Arduino.setups_['setup_serial_Serial'] = 'Serial.begin(9600);';
|
||||
|
||||
switch (api) {
|
||||
case 'weather/now':
|
||||
Blockly.Arduino.definitions_['var_declare_weatherNow'] = 'WeatherNow weatherNow;';
|
||||
Blockly.Arduino.setups_['setup_seniverse_weatherNow'] = 'weatherNow.config(' + private_key + ', ' + location + ', "' + unit + '", "' + language + '");';
|
||||
break;
|
||||
case 'weather/daily':
|
||||
Blockly.Arduino.definitions_['var_declare_forecast'] = 'Forecast forecast;';
|
||||
Blockly.Arduino.setups_['setup_seniverse_forecast'] = 'forecast.config(' + private_key + ', ' + location + ', "' + unit + '", "' + language + '");';
|
||||
break;
|
||||
case 'life/suggestion':
|
||||
default:
|
||||
Blockly.Arduino.definitions_['var_declare_lifeInfo'] = 'LifeInfo lifeInfo;';
|
||||
Blockly.Arduino.setups_['setup_seniverse_lifeInfo'] = 'lifeInfo.config(' + private_key + ', ' + location + ', "' + unit + '", "' + language + '");';
|
||||
}
|
||||
var code = '';
|
||||
|
||||
return code;
|
||||
};
|
||||
|
||||
export const weather_get_seniverse_weather_info = function () {
|
||||
var api = this.getFieldValue("api");
|
||||
var type = this.getFieldValue("type");
|
||||
var code = '';
|
||||
switch (api) {
|
||||
case 'weather/now':
|
||||
code = 'weatherNow.' + type + '()';
|
||||
break;
|
||||
case 'weather/daily':
|
||||
code = 'forecast.' + type + '()';
|
||||
break;
|
||||
case 'life/suggestion':
|
||||
default:
|
||||
code = 'lifeInfo.' + type + '()';
|
||||
}
|
||||
|
||||
return [code, Blockly.Arduino.ORDER_ATOMIC];
|
||||
};
|
||||
|
||||
export const weather_get_seniverse_weather_info1 = function () {
|
||||
var type = this.getFieldValue("type");
|
||||
var code = 'weatherNow.' + type + '()';
|
||||
return [code, Blockly.Arduino.ORDER_ATOMIC];
|
||||
};
|
||||
|
||||
export const weather_get_seniverse_weather_info2 = function () {
|
||||
var date = this.getFieldValue("date");
|
||||
var type = this.getFieldValue("type");
|
||||
var code = 'forecast.' + type + '(' + date + ')';
|
||||
return [code, Blockly.Arduino.ORDER_ATOMIC];
|
||||
};
|
||||
|
||||
export const weather_get_seniverse_weather_info3 = function () {
|
||||
var type = this.getFieldValue("type");
|
||||
var code = 'lifeInfo.' + type + '()';
|
||||
return [code, Blockly.Arduino.ORDER_ATOMIC];
|
||||
};
|
||||
114
mixly/boards/default_src/arduino/generators/procedures.js
Normal file
114
mixly/boards/default_src/arduino/generators/procedures.js
Normal file
@@ -0,0 +1,114 @@
|
||||
import { Variables, Procedures } from 'blockly/core';
|
||||
|
||||
export const procedures_defreturn = function (_, generator) {
|
||||
// Define a procedure with a return value.
|
||||
var funcName = generator.variableDB_.getName(this.getFieldValue('NAME'),
|
||||
Procedures.NAME_TYPE);
|
||||
var branch = (this.getInput('STACK') && generator.statementToCode(this, 'STACK'));
|
||||
if (generator.INFINITE_LOOP_TRAP) {
|
||||
branch = generator.INFINITE_LOOP_TRAP.replace(/%1/g,
|
||||
'\'' + this.id + '\'') + branch;
|
||||
}
|
||||
var returnValue = generator.valueToCode(this, 'RETURN',
|
||||
generator.ORDER_NONE) || '';
|
||||
var type = this.getFieldValue('TYPE');
|
||||
if (type === 'CUSTOM') {
|
||||
if (this.getField('RETRUN_TYPE')) {
|
||||
type = this.getFieldValue('RETRUN_TYPE');
|
||||
} else {
|
||||
type = 'void';
|
||||
}
|
||||
}
|
||||
if (returnValue) {
|
||||
returnValue = ' return ' + returnValue + ';\n';
|
||||
}
|
||||
var returnType = type ? type : 'void';
|
||||
var args = [];
|
||||
for (var x = 0; x < this.arguments_.length; x++) {
|
||||
args[x] = this.argumentstype_[x] + ' ' + generator.variableDB_.getName(this.arguments_[x],
|
||||
Variables.NAME_TYPE);
|
||||
}
|
||||
var code = returnType + ' ' + funcName + '(' + args.join(', ') + ') {\n' +
|
||||
branch + returnValue + '}\n';
|
||||
code = generator.scrub_(this, code);
|
||||
generator.definitions_[funcName] = code;
|
||||
return null;
|
||||
}
|
||||
|
||||
export const procedures_defnoreturn = function (_, generator) {
|
||||
// Define a procedure with a return value.
|
||||
var funcName = generator.variableDB_.getName(this.getFieldValue('NAME'),
|
||||
Procedures.NAME_TYPE);
|
||||
var branch = (this.getInput('STACK') && generator.statementToCode(this, 'STACK'));
|
||||
if (generator.INFINITE_LOOP_TRAP) {
|
||||
branch = generator.INFINITE_LOOP_TRAP.replace(/%1/g,
|
||||
'\'' + this.id + '\'') + branch;
|
||||
}
|
||||
var returnType = 'void';
|
||||
var args = [];
|
||||
for (var x = 0; x < this.arguments_.length; x++) {
|
||||
args[x] = this.argumentstype_[x] + ' ' + generator.variableDB_.getName(this.arguments_[x],
|
||||
Variables.NAME_TYPE);
|
||||
}
|
||||
var code = returnType + ' ' + funcName + '(' + args.join(', ') + ') {\n' +
|
||||
branch + '}\n';
|
||||
code = generator.scrub_(this, code);
|
||||
generator.definitions_[funcName] = code;
|
||||
return null;
|
||||
}
|
||||
|
||||
export const procedures_callreturn = function (_, generator) {
|
||||
// Call a procedure with a return value.
|
||||
var funcName = generator.variableDB_.getName(this.getFieldValue('NAME'),
|
||||
Procedures.NAME_TYPE);
|
||||
var args = [];
|
||||
for (var x = 0; x < this.arguments_.length; x++) {
|
||||
args[x] = generator.valueToCode(this, 'ARG' + x,
|
||||
generator.ORDER_NONE) || 'null';
|
||||
}
|
||||
var code = funcName + '(' + args.join(', ') + ')';
|
||||
return [code, generator.ORDER_UNARY_POSTFIX];
|
||||
}
|
||||
|
||||
export const procedures_callnoreturn = function (_, generator) {
|
||||
// Call a procedure with no return value.
|
||||
var funcName = generator.variableDB_.getName(this.getFieldValue('NAME'),
|
||||
Procedures.NAME_TYPE);
|
||||
var args = [];
|
||||
for (var x = 0; x < this.arguments_.length; x++) {
|
||||
args[x] = generator.valueToCode(this, 'ARG' + x,
|
||||
generator.ORDER_NONE) || 'null';
|
||||
}
|
||||
var code = funcName + '(' + args.join(', ') + ');\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const procedures_ifreturn = function (_, generator) {
|
||||
// Conditionally return value from a procedure.
|
||||
var condition = generator.valueToCode(this, 'CONDITION',
|
||||
generator.ORDER_NONE) || 'false';
|
||||
var code = 'if (' + condition + ') {\n';
|
||||
if (this.hasReturnValue_) {
|
||||
var value = generator.valueToCode(this, 'VALUE',
|
||||
generator.ORDER_NONE) || '';
|
||||
code += ' return ' + value + ';\n';
|
||||
} else {
|
||||
code += ' return;\n';
|
||||
}
|
||||
code += '}\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const procedures_return = function (_, generator) {
|
||||
// Conditionally return value from a procedure.
|
||||
var code = ""
|
||||
if (this.hasReturnValue_) {
|
||||
var value = generator.valueToCode(this, 'VALUE',
|
||||
generator.ORDER_NONE) || 'None';
|
||||
code += 'return ' + value + ';\n';
|
||||
} else {
|
||||
code += 'return;\n';
|
||||
}
|
||||
code += '\n';
|
||||
return code;
|
||||
}
|
||||
37
mixly/boards/default_src/arduino/generators/text.js
Normal file
37
mixly/boards/default_src/arduino/generators/text.js
Normal file
@@ -0,0 +1,37 @@
|
||||
import * as Blockly from 'blockly/core';
|
||||
|
||||
export const text_base64_url_codec = function () {
|
||||
const FIELD_TYPE = this.getFieldValue("TYPE");
|
||||
const FIELD_OPTION = this.getFieldValue("OPTION");
|
||||
const VALUE_INPUT_VALUE = Blockly.Arduino.valueToCode(this, "VALUE", Blockly.Arduino.ORDER_ATOMIC);
|
||||
let code = '';
|
||||
if (FIELD_TYPE === 'BASE64') {
|
||||
Blockly.Arduino.definitions_['include_rBase64'] = '#include <rBase64.h>';
|
||||
if (FIELD_OPTION === 'ENCODE') {
|
||||
code = 'rbase64.encode(' + VALUE_INPUT_VALUE + ')';
|
||||
} else {
|
||||
code = 'rbase64.decode(' + VALUE_INPUT_VALUE + ')';
|
||||
}
|
||||
} else {
|
||||
Blockly.Arduino.definitions_['include_URLCode'] = '#include <URLCode.h>';
|
||||
Blockly.Arduino.definitions_['var_declare_urlCode'] = 'URLCode urlCode;';
|
||||
if (FIELD_OPTION === 'ENCODE') {
|
||||
Blockly.Arduino.definitions_['function_urlEncode']
|
||||
= 'String urlEncode(String urlStr) {\n'
|
||||
+ ' urlCode.strcode = urlStr;\n'
|
||||
+ ' urlCode.urlencode();\n'
|
||||
+ ' return urlCode.urlcode;\n'
|
||||
+ '}\n';
|
||||
code = 'urlEncode(' + VALUE_INPUT_VALUE + ')';
|
||||
} else {
|
||||
Blockly.Arduino.definitions_['function_urlDecode']
|
||||
= 'String urlDecode(String urlStr) {\n'
|
||||
+ ' urlCode.urlcode = urlStr;\n'
|
||||
+ ' urlCode.urldecode();\n'
|
||||
+ ' return urlCode.strcode;\n'
|
||||
+ '}\n';
|
||||
code = 'urlDecode(' + VALUE_INPUT_VALUE + ')';
|
||||
}
|
||||
}
|
||||
return [code, Blockly.Arduino.ORDER_ATOMIC];
|
||||
};
|
||||
61
mixly/boards/default_src/arduino/generators/variables.js
Normal file
61
mixly/boards/default_src/arduino/generators/variables.js
Normal file
@@ -0,0 +1,61 @@
|
||||
import { Variables } from 'blockly/core';
|
||||
|
||||
export const variables_get = function (_, generator) {
|
||||
// Variable getter.
|
||||
var code = generator.variableDB_.getName(this.getFieldValue('VAR'),
|
||||
Variables.NAME_TYPE);
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const variables_declare = function (_, generator) {
|
||||
var dropdown_type = this.getFieldValue('TYPE');
|
||||
var dropdown_variables_type = this.getFieldValue('variables_type');
|
||||
var argument0;
|
||||
var code = '';
|
||||
//TODO: settype to variable
|
||||
if (dropdown_variables_type == 'global_variate') {
|
||||
if (dropdown_type == 'String') {
|
||||
argument0 = generator.valueToCode(this, 'VALUE', generator.ORDER_ASSIGNMENT) || '""';
|
||||
} else {
|
||||
argument0 = generator.valueToCode(this, 'VALUE', generator.ORDER_ASSIGNMENT) || '0';
|
||||
}
|
||||
var varName = generator.variableDB_.getName(this.getFieldValue('VAR'),
|
||||
Variables.NAME_TYPE);
|
||||
if (dropdown_type == 'String' || dropdown_type == 'char*')
|
||||
generator.definitions_['var_declare' + varName] = dropdown_type + ' ' + varName + ';';
|
||||
else
|
||||
generator.definitions_['var_declare' + varName] = 'volatile ' + dropdown_type + ' ' + varName + ';';
|
||||
|
||||
generator.setups_['setup_var' + varName] = varName + ' = ' + argument0 + ';';
|
||||
}
|
||||
else {
|
||||
if (dropdown_type == 'String') {
|
||||
argument0 = generator.valueToCode(this, 'VALUE', generator.ORDER_ASSIGNMENT) || '""';
|
||||
} else {
|
||||
argument0 = generator.valueToCode(this, 'VALUE', generator.ORDER_ASSIGNMENT) || '0';
|
||||
}
|
||||
var varName = generator.variableDB_.getName(this.getFieldValue('VAR'),
|
||||
Variables.NAME_TYPE);
|
||||
code = dropdown_type + ' ' + varName + ' = ' + argument0 + ';\n';
|
||||
}
|
||||
//generator.variableTypes_[varName] = dropdown_type;//处理变量类型
|
||||
return code;
|
||||
}
|
||||
|
||||
export const variables_set = function (_, generator) {
|
||||
// Variable setter.
|
||||
var argument0 = generator.valueToCode(this, 'VALUE',
|
||||
generator.ORDER_ASSIGNMENT) || '0';
|
||||
var varName = generator.variableDB_.getName(this.getFieldValue('VAR'),
|
||||
Variables.NAME_TYPE);
|
||||
return varName + ' = ' + argument0 + ';\n';
|
||||
}
|
||||
|
||||
export const variables_change = function (_, generator) {
|
||||
// Variable setter.
|
||||
var operator = this.getFieldValue('OP');
|
||||
var varName = generator.valueToCode(this, 'MYVALUE', generator.ORDER_ASSIGNMENT);
|
||||
//修复强制类型转换不正确的bug
|
||||
var code = '((' + operator + ')(' + varName + '))';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
Reference in New Issue
Block a user