Files
mixly3/boards/default_src/arduino_esp32/generators/control.js
2024-07-19 10:16:00 +08:00

67 lines
3.1 KiB
JavaScript

import { controls_delay } from '@mixly/arduino-avr/generators/control';
export const controls_runnig_core = function (_, generator) {
var task = this.getFieldValue('task');
var core = this.getFieldValue('core');
var value_length = generator.valueToCode(this, 'length', generator.ORDER_ATOMIC);
var branch = generator.statementToCode(this, 'setup');
branch = branch.replace(/(^\s*)|(\s*$)/g, "");
var branch1 = generator.statementToCode(this, 'loop');
branch1 = branch1.replace(/(^\s*)|(\s*$)/g, "");
generator.definitions_['esp32_task_' + task] = 'void task_' + task + '( void * pvParameters ){\nfor(;;){\n ' + branch1 + '\n vTaskDelay(1);\n}\n}\n';
generator.setups_['setups_esp32_task_' + task] = '' + branch + '\n xTaskCreatePinnedToCore(task_' + task + ', "task_' + task + '", ' + value_length + ', NULL, 2, NULL, ' + core + ');\n';
return 'vTaskDelay(1);\n';
}
export const control_core_delay = function (_, generator) {
var value_sleeplength = generator.valueToCode(this, 'sleeplength', generator.ORDER_ATOMIC);
var code = 'vTaskDelay(' + value_sleeplength + ');\n'
return code;
}
export const controls_hw_timer = function (_, generator) {
var time = generator.valueToCode(this, 'TIME', generator.ORDER_ATOMIC);
var TIMER_NUM = this.getFieldValue('TIMER_NUM');
var mode = this.getFieldValue('mode');
generator.definitions_['hw_timer_t' + TIMER_NUM] = 'hw_timer_t * timer' + TIMER_NUM + ' =NULL;';
var funcName = 'IRAM_ATTR onTimer' + TIMER_NUM;
var branch = generator.statementToCode(this, 'DO');
var code = 'void' + ' ' + funcName + '() {\n' + branch + '}\n';
if (!isNaN(parseInt(time))) {
generator.setups_begin_['setup_hw_timer' + funcName] = 'timer' + TIMER_NUM + '=timerBegin(' + TIMER_NUM + ', 80, true);\n timerAttachInterrupt(timer' + TIMER_NUM + ', &onTimer' + TIMER_NUM + ', true);\n timerAlarmWrite(timer' + TIMER_NUM + ', ' + time * 1000 + ', ' + mode + ');';
} else {
generator.setups_begin_['setup_hw_timer' + funcName] = 'timer' + TIMER_NUM + '=timerBegin(' + TIMER_NUM + ', 80, true);\n timerAttachInterrupt(timer' + TIMER_NUM + ', &onTimer' + TIMER_NUM + ', true);\n timerAlarmWrite(timer' + TIMER_NUM + ', ' + time + ', ' + mode + ');';
}
generator.definitions_[funcName] = code;
return '';
}
export const controls_hw_timer_start = function () {
var TIMER_NUM = this.getFieldValue('TIMER_NUM');
return 'timerAlarmEnable(timer' + TIMER_NUM + ');\n';
}
export const controls_hw_timer_stop = function () {
var TIMER_NUM = this.getFieldValue('TIMER_NUM');
return 'timerEnd(timer' + TIMER_NUM + ');\n';
}
export const controls_end_program = function () {
return 'while(true);\n';
}
export const controls_interrupts = function () {
return 'interrupts();\n';
}
export const controls_nointerrupts = function () {
return 'noInterrupts();\n';
}
export const esp32_deep_sleep = function () {
var time = this.getFieldValue('time');
var code = 'esp_sleep_enable_timer_wakeup(' + time + ' * 1000000);\nesp_deep_sleep_start();\n';
return code;
}
export const base_delay = controls_delay;