Blockly.Msg.BLE_UART_ON_DATA_TITLE = "BLE UART On Data"; Blockly.Msg.BLE_UART_ON_DATA_TOOLTIP = "BLE UART On Data"; Blockly.Msg.BLE_UART_ON_DATA_HELPURL = ""; Blockly.Msg.BLE_UART_READ_TEXT_TITLE = "BLE UART Read Text"; Blockly.Msg.BLE_UART_READ_TEXT_TOOLTIP = "BLE UART Read Text"; Blockly.Msg.BLE_UART_READ_TEXT_HELPURL = ""; Blockly.Msg.BLE_UART_READ_NUMBER_TITLE = "BLE UART Read Number"; Blockly.Msg.BLE_UART_READ_NUMBER_TOOLTIP = "BLE UART read text and convert to number If invalid number return 0"; Blockly.Msg.BLE_UART_READ_NUMBER_HELPURL = ""; Blockly.Msg.BLE_UART_SEND_TITLE = "BLE UART Send"; Blockly.Msg.BLE_UART_SEND_TOOLTIP = "BLE UART Send"; Blockly.Msg.BLE_UART_SEND_HELPURL = ""; Blockly.Msg.BLE_UART_TEXT_NUMBER_TOOLTIP = "Text or number"; Blockly.Msg.BLE_UART_TEXT_NUMBER_HELPURL = ""; Blockly.Blocks['ble_uart.on_data'] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.BLE_UART_ON_DATA_TITLE); this.appendStatementInput("ON_DATA") .setCheck(null); this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.setColour(160); this.setTooltip(Blockly.Msg.BLE_UART_ON_DATA_TOOLTIP); this.setHelpUrl(Blockly.Msg.BLE_UART_ON_DATA_HELPURL); } }; Blockly.Blocks["ble_uart.read_text"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.BLE_UART_READ_TEXT_TITLE); this.setOutput(true, 'String'); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(160); this.setTooltip(Blockly.Msg.BLE_UART_READ_TEXT_TOOLTIP); this.setHelpUrl(Blockly.Msg.BLE_UART_READ_TEXT_HELPURL); } }; Blockly.Blocks["ble_uart.read_number"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.BLE_UART_READ_NUMBER_TITLE); this.setOutput(true, 'Number'); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(160); this.setTooltip(Blockly.Msg.BLE_UART_READ_NUMBER_TOOLTIP); this.setHelpUrl(Blockly.Msg.BLE_UART_READ_NUMBER_HELPURL); } }; Blockly.Blocks["ble_uart.send"] = { init: function() { this.appendValueInput("VALUE") .appendField(Blockly.Msg.BLE_UART_SEND_TITLE); this.setPreviousStatement(true); this.setNextStatement(true); this.setColour(160); this.setTooltip(Blockly.Msg.BLE_UART_SEND_TOOLTIP); this.setHelpUrl(Blockly.Msg.BLE_UART_SEND_HELPURL); }, // custom xmlToolbox xmlToolbox: function() { return $(document.createElement('block')).attr({ type: 'ble_uart.send' }).append('\ \ \ \ ' ); } }; Blockly.Blocks["ble_uart.text_number"] = { init: function() { this.appendDummyInput() .appendField(new Blockly.FieldImage('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAQAAAAqJXdxAAAAn0lEQVQI1z3OMa5BURSF4f/cQhAKjUQhuQmFNwGJEUi0RKN5rU7FHKhpjEH3TEMtkdBSCY1EIv8r7nFX9e29V7EBAOvu7RPjwmWGH/VuF8CyN9/OAdvqIXYLvtRaNjx9mMTDyo+NjAN1HNcl9ZQ5oQMM3dgDUqDo1l8DzvwmtZN7mnD+PkmLa+4mhrxVA9fRowBWmVBhFy5gYEjKMfz9AylsaRRgGzvZAAAAAElFTkSuQmCC', 12, 12, '*')) .appendField(new Blockly.FieldTextInput('Hello World!'), 'VALUE') .appendField(new Blockly.FieldImage('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAQAAAAqJXdxAAAAqUlEQVQI1z3KvUpCcRiA8ef9E4JNHhI0aFEacm1o0BsI0Slx8wa8gLauoDnoBhq7DcfWhggONDmJJgqCPA7neJ7p934EOOKOnM8Q7PDElo/4x4lFb2DmuUjcUzS3URnGib9qaPNbuXvBO3sGPHJDRG6fGVdMSeWDP2q99FQdFrz26Gu5Tq7dFMzUvbXy8KXeAj57cOklgA+u1B5AoslLtGIHQMaCVnwDnADZIFIrXsoXrgAAAABJRU5ErkJggg==', 12, 12, '*')); this.setOutput(true, 'String'); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(160); this.setTooltip(Blockly.Msg.BLE_UART_TEXT_NUMBER_TOOLTIP); this.setHelpUrl(Blockly.Msg.BLE_UART_TEXT_NUMBER_HELPURL); }, // custom xmlToolbox xmlToolbox: function() { return null; // hidden block } }; Blockly.JavaScript['ble_uart.on_data'] = function(block) { var code = 'DEV_IO.BLE_UART().on_data([]() { // callback\n' + Blockly.JavaScript.statementToCode(block, 'ON_DATA') + '\n});\n'; return code; }; Blockly.JavaScript['ble_uart.read_text'] = function(block) { return [ 'DEV_IO.BLE_UART().read_text()', Blockly.JavaScript.ORDER_ATOMIC ]; }; Blockly.JavaScript['ble_uart.read_number'] = function(block) { return [ 'DEV_IO.BLE_UART().read_number()', Blockly.JavaScript.ORDER_ATOMIC ]; }; Blockly.JavaScript['ble_uart.send'] = function(block) { var argument0 = Blockly.JavaScript.valueToCode(block, 'VALUE', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; return 'DEV_IO.BLE_UART().send(' + argument0 + ');\n'; }; Blockly.JavaScript["ble_uart.text_number"] = function(block) { return [ '(char *)"' + block.getFieldValue('VALUE') + '"', Blockly.JavaScript.ORDER_ATOMIC ]; } Blockly.Msg.LCD_I2C_20X4_TITLE = "I2C LCD 20x4"; Blockly.Msg.LCD_I2C_20X4_CLR_TITLE = "Clear Screen"; Blockly.Msg.LCD_I2C_20X4_CLR_TOOLTIP = "Clear I2C LCD 20x4 display"; Blockly.Msg.LCD_I2C_20X4_CLR_HELPURL = ""; Blockly.Msg.LCD_I2C_20X4_BACKLIGHT_TITLE = "Turn BackLight"; Blockly.Msg.LCD_I2C_20X4_BACKLIGHT_TOOLTIP = "Turn I2C LCD 20x4 display backlight status off or on"; Blockly.Msg.LCD_I2C_20X4_BACKLIGHT_HELPURL = ""; Blockly.Msg.LCD_I2C_20X4_PRINT_TITLE = "Print"; Blockly.Msg.LCD_I2C_20X4_PRINT_TOOLTIP = "Print on I2C LCD 20x4 display at (column, row)"; Blockly.Msg.LCD_I2C_20X4_PRINT_HELPURL = ""; Blockly.Msg.LCD_I2C_20X4_PRINT_PREC_TITLE = "Print Number"; Blockly.Msg.LCD_I2C_20X4_PRINT_PREC_TOOLTIP = "Print number on I2C LCD 20x4 display at (column, row) with specific precision"; Blockly.Msg.LCD_I2C_20X4_PRINT_PREC_HELPURL = ""; Blockly.Msg.PRECISION_TITLE = "Precision"; Blockly.Msg.LCD_I2C_20X4_COLUMN_NUMBER_TOOLTIP = "Column value 1 to 20"; Blockly.Msg.LCD_I2C_20X4_COLUMN_NUMBER_HELPURL = ""; Blockly.Msg.LCD_I2C_20X4_ROW_NUMBER_TOOLTIP = "Row value 1 to 4"; Blockly.Msg.LCD_I2C_20X4_ROW_NUMBER_HELPURL = ""; Blockly.Msg.LCD_I2C_20X4_STRING_NUMBER_TOOLTIP = "String or number"; Blockly.Msg.LCD_I2C_20X4_STRING_NUMBER_HELPURL = ""; Blockly.Msg.LCD_I2C_20X4_NUMBER_TOOLTIP = "Number"; Blockly.Msg.LCD_I2C_20X4_NUMBER_HELPURL = ""; function lcd_i2c_20x4_init(_this) { _this.appendDummyInput() .appendField(Blockly.Msg.LCD_I2C_20X4_TITLE); // i2c channel 0 to 64 var channel_array = []; for (var i = 0;i <= 64; i++) { channel_array.push([String(i), String(i)]); } _this.appendDummyInput() .appendField(Blockly.Msg.CHANNEL) .appendField(new Blockly.FieldDropdown(channel_array), 'CHANNEL'); // device addess _this.appendDummyInput() .appendField(Blockly.Msg.ADDRESS) .appendField(new Blockly.FieldDropdown([ ["0x20", "32"], ["0x21", "33"], ["0x22", "34"], ["0x23", "35"], ["0x24", "36"], ["0x25", "37"], ["0x26", "38"], ["0x27", "39"] ]), 'ADDRESS'); } Blockly.Blocks["lcd_i2c_20x4.clear"] = { init: function() { // init lcd_i2c_20x4_init(this); this.appendDummyInput() .appendField(Blockly.Msg.LCD_I2C_20X4_CLR_TITLE); this.setInputsInline(true); this.setPreviousStatement(true); this.setNextStatement(true); this.setColour(160); this.setTooltip(Blockly.Msg.LCD_I2C_20X4_CLR_TOOLTIP); this.setHelpUrl(Blockly.Msg.LCD_I2C_20X4_CLR_HELPURL); } }; Blockly.Blocks["lcd_i2c_20x4.backlight"] = { init: function() { // init lcd_i2c_20x4_init(this); this.appendDummyInput() .appendField(Blockly.Msg.LCD_I2C_20X4_BACKLIGHT_TITLE) .appendField(new Blockly.FieldDropdown([ [Blockly.Msg.STATUS_OFF, "0"], [Blockly.Msg.STATUS_ON, "1"] ]), 'STATUS'); this.setInputsInline(true); this.setPreviousStatement(true); this.setNextStatement(true); this.setColour(160); this.setTooltip(Blockly.Msg.LCD_I2C_20X4_BACKLIGHT_TOOLTIP); this.setHelpUrl(Blockly.Msg.LCD_I2C_20X4_BACKLIGHT_HELPURL); } }; Blockly.Blocks["lcd_i2c_20x4.print"] = { init: function() { // init lcd_i2c_20x4_init(this); this.appendDummyInput() .appendField(Blockly.Msg.LCD_I2C_20X4_PRINT_TITLE + ' ('); this.appendValueInput("COLUMN") .setCheck("Number"); this.appendDummyInput() .appendField(','); this.appendValueInput("ROW") .setCheck("Number"); this.appendDummyInput() .appendField(')'); this.appendValueInput('VALUE'); this.setInputsInline(true); this.setPreviousStatement(true); this.setNextStatement(true); this.setColour(160); this.setTooltip(Blockly.Msg.LCD_I2C_20X4_PRINT_TOOLTIP); this.setHelpUrl(Blockly.Msg.LCD_I2C_20X4_PRINT_HELPURL); }, // custom xmlToolbox xmlToolbox: function() { return $(document.createElement('block')).attr({ type: 'lcd_i2c_20x4.print' }).append('\ \ \ \ \ \ \ \ \ \ \ \ ' ); } }; Blockly.Blocks["lcd_i2c_20x4.print_prec"] = { init: function() { // init lcd_i2c_20x4_init(this); this.appendDummyInput() .appendField(Blockly.Msg.LCD_I2C_20X4_PRINT_PREC_TITLE + ' ('); this.appendValueInput("COLUMN") .setCheck("Number"); this.appendDummyInput() .appendField(','); this.appendValueInput("ROW") .setCheck("Number"); this.appendDummyInput() .appendField(')') .appendField(Blockly.Msg.PRECISION_TITLE) .appendField(new Blockly.FieldNumber(2, 0, 4, 1), 'PREC') .appendField(' '); this.appendValueInput('VALUE') .setCheck('Number'); this.setInputsInline(true); this.setPreviousStatement(true); this.setNextStatement(true); this.setColour(160); this.setTooltip(Blockly.Msg.LCD_I2C_20X4_PRINT_PREC_TOOLTIP); this.setHelpUrl(Blockly.Msg.LCD_I2C_20X4_PRINT_PREC_HELPURL); }, // custom xmlToolbox xmlToolbox: function() { return $(document.createElement('block')).attr({ type: 'lcd_i2c_20x4.print_prec' }).append('\ \ \ \ \ \ \ \ \ \ \ \ ' ); } }; // hidden block (no generator defined), temporary used for shadow block Blockly.Blocks["lcd_i2c_20x4.column_number"] = { init: function() { this.appendDummyInput() .appendField(new Blockly.FieldNumber(1, 1, 20, 1), 'VALUE'); this.setOutput(true, 'Number'); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(math_colour); this.setTooltip(Blockly.Msg.LCD_I2C_20X4_COLUMN_NUMBER_TOOLTIP); this.setHelpUrl(Blockly.Msg.LCD_I2C_20X4_COLUMN_NUMBER_HELPURL); }, // custom xmlToolboxcolumn xmlToolbox: function() { return null; // hidden block } }; Blockly.Blocks["lcd_i2c_20x4.row_number"] = { init: function() { this.appendDummyInput() .appendField(new Blockly.FieldNumber(1, 1, 4, 1), 'VALUE'); this.setOutput(true, 'Number'); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(math_colour); this.setTooltip(Blockly.Msg.LCD_I2C_20X4_ROW_NUMBER_TOOLTIP); this.setHelpUrl(Blockly.Msg.LCD_I2C_20X4_ROW_NUMBER_HELPURL); }, // custom xmlToolbox xmlToolbox: function() { return null; // hidden block } }; Blockly.Blocks["lcd_i2c_20x4.string_number"] = { init: function() { this.appendDummyInput() .appendField(new Blockly.FieldImage('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAQAAAAqJXdxAAAAn0lEQVQI1z3OMa5BURSF4f/cQhAKjUQhuQmFNwGJEUi0RKN5rU7FHKhpjEH3TEMtkdBSCY1EIv8r7nFX9e29V7EBAOvu7RPjwmWGH/VuF8CyN9/OAdvqIXYLvtRaNjx9mMTDyo+NjAN1HNcl9ZQ5oQMM3dgDUqDo1l8DzvwmtZN7mnD+PkmLa+4mhrxVA9fRowBWmVBhFy5gYEjKMfz9AylsaRRgGzvZAAAAAElFTkSuQmCC', 12, 12, '*')) .appendField(new Blockly.FieldTextInput('Hello World!'), 'VALUE') .appendField(new Blockly.FieldImage('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAQAAAAqJXdxAAAAqUlEQVQI1z3KvUpCcRiA8ef9E4JNHhI0aFEacm1o0BsI0Slx8wa8gLauoDnoBhq7DcfWhggONDmJJgqCPA7neJ7p934EOOKOnM8Q7PDElo/4x4lFb2DmuUjcUzS3URnGib9qaPNbuXvBO3sGPHJDRG6fGVdMSeWDP2q99FQdFrz26Gu5Tq7dFMzUvbXy8KXeAj57cOklgA+u1B5AoslLtGIHQMaCVnwDnADZIFIrXsoXrgAAAABJRU5ErkJggg==', 12, 12, '*')); this.setOutput(true, 'String'); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(basic_colour); this.setTooltip(Blockly.Msg.LCD_I2C_20X4_STRING_NUMBER_TOOLTIP); this.setHelpUrl(Blockly.Msg.LCD_I2C_20X4_STRING_NUMBER_HELPURL); }, // custom xmlToolbox xmlToolbox: function() { return null; // hidden block } }; Blockly.Blocks["lcd_i2c_20x4.number"] = { init: function() { this.appendDummyInput() .appendField(new Blockly.FieldNumber(0, -9999999, 9999999, 0.01), 'VALUE'); this.setOutput(true, 'Number'); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(math_colour); this.setTooltip(Blockly.Msg.LCD_I2C_20X4_NUMBER_TOOLTIP); this.setHelpUrl(Blockly.Msg.LCD_I2C_20X4_NUMBER_HELPURL); }, // custom xmlToolbox xmlToolbox: function() { return null; // hidden block } }; Blockly.JavaScript['lcd_i2c_20x4.clear'] = function(block) { return 'DEV_I2C1.LCD_I2C(' + block.getFieldValue('CHANNEL') + ', ' + block.getFieldValue('ADDRESS') + ', 20, 4).clear();\n'; }; Blockly.JavaScript['lcd_i2c_20x4.backlight'] = function(block) { return 'DEV_I2C1.LCD_I2C(' + block.getFieldValue('CHANNEL') + ', ' + block.getFieldValue('ADDRESS') + ', 20, 4).backlight(' + block.getFieldValue('STATUS') + ');\n'; } Blockly.JavaScript['lcd_i2c_20x4.print'] = function(block) { var argument0 = Blockly.JavaScript.valueToCode(block, 'VALUE', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var column = Blockly.JavaScript.valueToCode(block, 'COLUMN', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var row = Blockly.JavaScript.valueToCode(block, 'ROW', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; return 'DEV_I2C1.LCD_I2C(' + block.getFieldValue('CHANNEL') + ', ' + block.getFieldValue('ADDRESS') + ', 20, 4).print(' + column + ', ' + row + ', ' + argument0 + ');\n'; }; Blockly.JavaScript['lcd_i2c_20x4.print_prec'] = function(block) { var argument0 = Blockly.JavaScript.valueToCode(block, 'VALUE', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var column = Blockly.JavaScript.valueToCode(block, 'COLUMN', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var row = Blockly.JavaScript.valueToCode(block, 'ROW', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var prec = parseInt(block.getFieldValue('PREC')); if (prec < 0) { prec = 0; } if (prec > 4) { prec = 4; } return 'DEV_I2C1.LCD_I2C(' + block.getFieldValue('CHANNEL') + ', ' + block.getFieldValue('ADDRESS') + ', 20, 4).print(' + column + ', ' + row + ', ' + argument0 + ', ' + prec + ');\n'; }; Blockly.JavaScript["lcd_i2c_20x4.column_number"] = function(block) { // Numeric value. var code = parseFloat(block.getFieldValue('VALUE')); var order = code >= 0 ? Blockly.JavaScript.ORDER_ATOMIC : Blockly.JavaScript.ORDER_UNARY_NEGATION; return [code, order]; }; Blockly.JavaScript["lcd_i2c_20x4.row_number"] = function(block) { return Blockly.JavaScript["lcd_i2c_20x4.column_number"](block); }; Blockly.JavaScript["lcd_i2c_20x4.string_number"] = function(block) { return [ '(char *)"' + block.getFieldValue('VALUE') + '"', Blockly.JavaScript.ORDER_ATOMIC ]; } Blockly.JavaScript["lcd_i2c_20x4.number"] = function(block) { return Blockly.JavaScript["lcd_i2c_20x4.column_number"](block); } Blockly.Msg.LCD_SPI_20X4_TITLE = "SPI LCD 20x4"; Blockly.Msg.LCD_SPI_20X4_CLR_TITLE = "Clear Screen"; Blockly.Msg.LCD_SPI_20X4_CLR_TOOLTIP = "Clear SPI LCD 20x4 display"; Blockly.Msg.LCD_SPI_20X4_CLR_HELPURL = ""; Blockly.Msg.LCD_SPI_20X4_BACKLIGHT_TITLE = "Turn BackLight"; Blockly.Msg.LCD_SPI_20X4_BACKLIGHT_TOOLTIP = "Turn SPI LCD 20x4 display backlight status off or on"; Blockly.Msg.LCD_SPI_20X4_BACKLIGHT_HELPURL = ""; Blockly.Msg.LCD_SPI_20X4_PRINT_TITLE = "Print"; Blockly.Msg.LCD_SPI_20X4_PRINT_TOOLTIP = "Print on SPI LCD 20x4 display at (column, row)"; Blockly.Msg.LCD_SPI_20X4_PRINT_HELPURL = ""; Blockly.Msg.LCD_SPI_20X4_PRINT_PREC_TITLE = "Print Number"; Blockly.Msg.LCD_SPI_20X4_PRINT_PREC_TOOLTIP = "Print number on SPI LCD 20x4 display at (column, row) with specific precision"; Blockly.Msg.LCD_SPI_20X4_PRINT_PREC_HELPURL = ""; Blockly.Msg.PRECISION_TITLE = "Precision"; Blockly.Msg.LCD_SPI_20X4_COLUMN_NUMBER_TOOLTIP = "Column value 1 to 20"; Blockly.Msg.LCD_SPI_20X4_COLUMN_NUMBER_HELPURL = ""; Blockly.Msg.LCD_SPI_20X4_ROW_NUMBER_TOOLTIP = "Row value 1 to 4"; Blockly.Msg.LCD_SPI_20X4_ROW_NUMBER_HELPURL = ""; Blockly.Msg.LCD_SPI_20X4_STRING_NUMBER_TOOLTIP = "String or number"; Blockly.Msg.LCD_SPI_20X4_STRING_NUMBER_HELPURL = ""; Blockly.Msg.LCD_SPI_20X4_NUMBER_TOOLTIP = "Number"; Blockly.Msg.LCD_SPI_20X4_NUMBER_HELPURL = ""; function lcd_spi_20x4_init(_this) { _this.appendDummyInput() .appendField(Blockly.Msg.LCD_SPI_20X4_TITLE); // spi channel 0 to 64 var channel_array = []; for (var i = 0;i <= 64; i++) { channel_array.push([String(i), String(i)]); } _this.appendDummyInput() .appendField(Blockly.Msg.CHANNEL) .appendField( new Blockly.FieldDropdown(channel_array, function(selectedIndex) { try { if ((typeof(this.sourceBlock_) != "undefined") && (typeof(this.sourceBlock_.inputList) != "undefined")) { var inputlist = this.sourceBlock_.inputList; // if address item index > 3 for selected index 0, set address item index to 0 if (selectedIndex == 0) { if (Blockly.mcp23s17_get_address_item_index(selectedIndex, inputlist[2].fieldRow[1].value_) > 3) { inputlist[2].fieldRow[1].setValue(Blockly.mcp23s17_address_dropdown_menu(0)[0][1]); } } } } catch (e) { } // return selected index return selectedIndex; }), 'CHANNEL' ); // device addess 0x20 to 0x23 for channel 0, addess 0x20 to 0x27 for channel 1 to 64 _this.appendDummyInput() .appendField(Blockly.Msg.ADDRESS) .appendField(new Blockly.FieldDropdown(function() { try { if ((typeof(this.sourceBlock_) != "undefined") && (typeof(this.sourceBlock_.inputList) != "undefined")) { var inputlist = this.sourceBlock_.inputList; var selected_channel = parseInt(inputlist[1].fieldRow[1].value_); return Blockly.mcp23s17_address_dropdown_menu(selected_channel); } } catch (e) { } // default return Blockly.mcp23s17_address_dropdown_menu(0); }), 'ADDRESS'); } Blockly.Blocks["lcd_spi_20x4.clear"] = { init: function() { // init lcd_spi_20x4_init(this); this.appendDummyInput() .appendField(Blockly.Msg.LCD_SPI_20X4_CLR_TITLE); this.setInputsInline(true); this.setPreviousStatement(true); this.setNextStatement(true); this.setColour(160); this.setTooltip(Blockly.Msg.LCD_SPI_20X4_CLR_TOOLTIP); this.setHelpUrl(Blockly.Msg.LCD_SPI_20X4_CLR_HELPURL); } }; Blockly.Blocks["lcd_spi_20x4.backlight"] = { init: function() { // init lcd_spi_20x4_init(this); this.appendDummyInput() .appendField(Blockly.Msg.LCD_SPI_20X4_BACKLIGHT_TITLE) .appendField(new Blockly.FieldDropdown([ [Blockly.Msg.STATUS_OFF, "0"], [Blockly.Msg.STATUS_ON, "1"] ]), 'STATUS'); this.setInputsInline(true); this.setPreviousStatement(true); this.setNextStatement(true); this.setColour(160); this.setTooltip(Blockly.Msg.LCD_SPI_20X4_BACKLIGHT_TOOLTIP); this.setHelpUrl(Blockly.Msg.LCD_SPI_20X4_BACKLIGHT_HELPURL); } }; Blockly.Blocks["lcd_spi_20x4.print"] = { init: function() { // init lcd_spi_20x4_init(this); this.appendDummyInput() .appendField(Blockly.Msg.LCD_SPI_20X4_PRINT_TITLE + ' ('); this.appendValueInput("COLUMN") .setCheck("Number"); this.appendDummyInput() .appendField(','); this.appendValueInput("ROW") .setCheck("Number"); this.appendDummyInput() .appendField(')'); this.appendValueInput('VALUE'); this.setInputsInline(true); this.setPreviousStatement(true); this.setNextStatement(true); this.setColour(160); this.setTooltip(Blockly.Msg.LCD_SPI_20X4_PRINT_TOOLTIP); this.setHelpUrl(Blockly.Msg.LCD_SPI_20X4_PRINT_HELPURL); }, // custom xmlToolbox xmlToolbox: function() { return $(document.createElement('block')).attr({ type: 'lcd_spi_20x4.print' }).append('\ \ \ \ \ \ \ \ \ \ \ \ ' ); } }; Blockly.Blocks["lcd_spi_20x4.print_prec"] = { init: function() { // init lcd_spi_20x4_init(this); this.appendDummyInput() .appendField(Blockly.Msg.LCD_SPI_20X4_PRINT_PREC_TITLE + ' ('); this.appendValueInput("COLUMN") .setCheck("Number"); this.appendDummyInput() .appendField(','); this.appendValueInput("ROW") .setCheck("Number"); this.appendDummyInput() .appendField(')') .appendField(Blockly.Msg.PRECISION_TITLE) .appendField(new Blockly.FieldNumber(2, 0, 4, 1), 'PREC') .appendField(' '); this.appendValueInput('VALUE') .setCheck('Number'); this.setInputsInline(true); this.setPreviousStatement(true); this.setNextStatement(true); this.setColour(160); this.setTooltip(Blockly.Msg.LCD_SPI_20X4_PRINT_PREC_TOOLTIP); this.setHelpUrl(Blockly.Msg.LCD_SPI_20X4_PRINT_PREC_HELPURL); }, // custom xmlToolbox xmlToolbox: function() { return $(document.createElement('block')).attr({ type: 'lcd_spi_20x4.print_prec' }).append('\ \ \ \ \ \ \ \ \ \ \ \ ' ); } }; // hidden block (no generator defined), temporary used for shadow block Blockly.Blocks["lcd_spi_20x4.column_number"] = { init: function() { this.appendDummyInput() .appendField(new Blockly.FieldNumber(1, 1, 20, 1), 'VALUE'); this.setOutput(true, 'Number'); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(math_colour); this.setTooltip(Blockly.Msg.LCD_SPI_20X4_COLUMN_NUMBER_TOOLTIP); this.setHelpUrl(Blockly.Msg.LCD_SPI_20X4_COLUMN_NUMBER_HELPURL); }, // custom xmlToolboxcolumn xmlToolbox: function() { return null; // hidden block } }; Blockly.Blocks["lcd_spi_20x4.row_number"] = { init: function() { this.appendDummyInput() .appendField(new Blockly.FieldNumber(1, 1, 4, 1), 'VALUE'); this.setOutput(true, 'Number'); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(math_colour); this.setTooltip(Blockly.Msg.LCD_SPI_20X4_ROW_NUMBER_TOOLTIP); this.setHelpUrl(Blockly.Msg.LCD_SPI_20X4_ROW_NUMBER_HELPURL); }, // custom xmlToolbox xmlToolbox: function() { return null; // hidden block } }; Blockly.Blocks["lcd_spi_20x4.string_number"] = { init: function() { this.appendDummyInput() .appendField(new Blockly.FieldImage('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAQAAAAqJXdxAAAAn0lEQVQI1z3OMa5BURSF4f/cQhAKjUQhuQmFNwGJEUi0RKN5rU7FHKhpjEH3TEMtkdBSCY1EIv8r7nFX9e29V7EBAOvu7RPjwmWGH/VuF8CyN9/OAdvqIXYLvtRaNjx9mMTDyo+NjAN1HNcl9ZQ5oQMM3dgDUqDo1l8DzvwmtZN7mnD+PkmLa+4mhrxVA9fRowBWmVBhFy5gYEjKMfz9AylsaRRgGzvZAAAAAElFTkSuQmCC', 12, 12, '*')) .appendField(new Blockly.FieldTextInput('Hello World!'), 'VALUE') .appendField(new Blockly.FieldImage('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAQAAAAqJXdxAAAAqUlEQVQI1z3KvUpCcRiA8ef9E4JNHhI0aFEacm1o0BsI0Slx8wa8gLauoDnoBhq7DcfWhggONDmJJgqCPA7neJ7p934EOOKOnM8Q7PDElo/4x4lFb2DmuUjcUzS3URnGib9qaPNbuXvBO3sGPHJDRG6fGVdMSeWDP2q99FQdFrz26Gu5Tq7dFMzUvbXy8KXeAj57cOklgA+u1B5AoslLtGIHQMaCVnwDnADZIFIrXsoXrgAAAABJRU5ErkJggg==', 12, 12, '*')); this.setOutput(true, 'String'); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(basic_colour); this.setTooltip(Blockly.Msg.LCD_SPI_20X4_STRING_NUMBER_TOOLTIP); this.setHelpUrl(Blockly.Msg.LCD_SPI_20X4_STRING_NUMBER_HELPURL); }, // custom xmlToolbox xmlToolbox: function() { return null; // hidden block } }; Blockly.Blocks["lcd_spi_20x4.number"] = { init: function() { this.appendDummyInput() .appendField(new Blockly.FieldNumber(0, -9999999, 9999999, 0.01), 'VALUE'); this.setOutput(true, 'Number'); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(math_colour); this.setTooltip(Blockly.Msg.LCD_SPI_20X4_NUMBER_TOOLTIP); this.setHelpUrl(Blockly.Msg.LCD_SPI_20X4_NUMBER_HELPURL); }, // custom xmlToolbox xmlToolbox: function() { return null; // hidden block } }; Blockly.JavaScript['lcd_spi_20x4.clear'] = function(block) { return 'DEV_SPI.LCD_SPI(' + block.getFieldValue('CHANNEL') + ', ' + block.getFieldValue('ADDRESS') + ', 20, 4).clear();\n'; }; Blockly.JavaScript['lcd_spi_20x4.backlight'] = function(block) { return 'DEV_SPI.LCD_SPI(' + block.getFieldValue('CHANNEL') + ', ' + block.getFieldValue('ADDRESS') + ', 20, 4).backlight(' + block.getFieldValue('STATUS') + ');\n'; } Blockly.JavaScript['lcd_spi_20x4.print'] = function(block) { var argument0 = Blockly.JavaScript.valueToCode(block, 'VALUE', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var column = Blockly.JavaScript.valueToCode(block, 'COLUMN', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var row = Blockly.JavaScript.valueToCode(block, 'ROW', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; return 'DEV_SPI.LCD_SPI(' + block.getFieldValue('CHANNEL') + ', ' + block.getFieldValue('ADDRESS') + ', 20, 4).print(' + column + ', ' + row + ', ' + argument0 + ');\n'; }; Blockly.JavaScript['lcd_spi_20x4.print_prec'] = function(block) { var argument0 = Blockly.JavaScript.valueToCode(block, 'VALUE', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var column = Blockly.JavaScript.valueToCode(block, 'COLUMN', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var row = Blockly.JavaScript.valueToCode(block, 'ROW', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var prec = parseInt(block.getFieldValue('PREC')); if (prec < 0) { prec = 0; } if (prec > 4) { prec = 4; } return 'DEV_SPI.LCD_SPI(' + block.getFieldValue('CHANNEL') + ', ' + block.getFieldValue('ADDRESS') + ', 20, 4).print(' + column + ', ' + row + ', ' + argument0 + ', ' + prec + ');\n'; }; Blockly.JavaScript["lcd_spi_20x4.column_number"] = function(block) { // Numeric value. var code = parseFloat(block.getFieldValue('VALUE')); var order = code >= 0 ? Blockly.JavaScript.ORDER_ATOMIC : Blockly.JavaScript.ORDER_UNARY_NEGATION; return [code, order]; }; Blockly.JavaScript["lcd_spi_20x4.row_number"] = function(block) { return Blockly.JavaScript["lcd_spi_20x4.column_number"](block); }; Blockly.JavaScript["lcd_spi_20x4.string_number"] = function(block) { return [ '(char *)"' + block.getFieldValue('VALUE') + '"', Blockly.JavaScript.ORDER_ATOMIC ]; } Blockly.JavaScript["lcd_spi_20x4.number"] = function(block) { return Blockly.JavaScript["lcd_spi_20x4.column_number"](block); } Blockly.Msg.BLINK_START_TITLE = "Start Blinking LED"; Blockly.Msg.BLINK_START_TOOLTIP = "Start Blinking LED"; Blockly.Msg.BLINK_START_HELPURL = ""; Blockly.Msg.BLINK_STOP_TITLE = "Stop Blinking LED"; Blockly.Msg.BLINK_STOP_TOOLTIP = "Stop Blinking LED"; Blockly.Msg.BLINK_STOP_HELPURL = ""; Blockly.Blocks["blink.start"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.BLINK_START_TITLE); this.setInputsInline(true); this.setPreviousStatement(true); this.setNextStatement(true); this.setColour(160); this.setTooltip(Blockly.Msg.BLINK_START_TOOLTIP); this.setHelpUrl(Blockly.Msg.BLINK_START_HELPURL); } }; Blockly.Blocks["blink.stop"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.BLINK_STOP_TITLE); this.setInputsInline(true); this.setPreviousStatement(true); this.setNextStatement(true); this.setColour(160); this.setTooltip(Blockly.Msg.BLINK_STOP_TOOLTIP); this.setHelpUrl(Blockly.Msg.BLINK_STOP_HELPURL); } }; Blockly.JavaScript['blink.start'] = function(block) { return 'DEV_IO.BLINK().start();\n'; }; Blockly.JavaScript['blink.stop'] = function(block) { return 'DEV_IO.BLINK().stop();\n'; }; Blockly.Msg.BLINK_STATIC_START_TITLE = "Start Blinking LED (Static)"; Blockly.Msg.BLINK_STATIC_START_TOOLTIP = "Start Blinking LED (Static)"; Blockly.Msg.BLINK_STATIC_START_HELPURL = ""; Blockly.Msg.BLINK_STATIC_STOP_TITLE = "Stop Blinking LED (Static)"; Blockly.Msg.BLINK_STATIC_STOP_TOOLTIP = "Stop Blinking LED (Static)"; Blockly.Msg.BLINK_STATIC_STOP_HELPURL = ""; Blockly.Blocks["blink_static.start"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.BLINK_STATIC_START_TITLE) .appendField(new Blockly.FieldDropdown([ ["BT_LED", "BT_LED_GPIO"], ["WIFI_LED", "WIFI_LED_GPIO"], ["NTP_LED", "NTP_LED_GPIO"], ["IOT_LED", "IOT_LED_GPIO"] ]), 'LED_GPIO') .appendField(new Blockly.FieldDropdown([ ["SLOW", "500"], ["FAST", "100"] ]), 'BLINK_MS'); this.setInputsInline(true); this.setPreviousStatement(true); this.setNextStatement(true); this.setColour(160); this.setTooltip(Blockly.Msg.BLINK_STATIC_START_TOOLTIP); this.setHelpUrl(Blockly.Msg.BLINK_STATIC_START_HELPURL); } }; Blockly.Blocks["blink_static.stop"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.BLINK_STATIC_STOP_TITLE) .appendField(new Blockly.FieldDropdown([ ["BT_LED", "BT_LED_GPIO"], ["WIFI_LED", "WIFI_LED_GPIO"], ["NTP_LED", "NTP_LED_GPIO"], ["IOT_LED", "IOT_LED_GPIO"] ]), 'LED_GPIO'); this.setInputsInline(true); this.setPreviousStatement(true); this.setNextStatement(true); this.setColour(160); this.setTooltip(Blockly.Msg.BLINK_STATIC_STOP_TOOLTIP); this.setHelpUrl(Blockly.Msg.BLINK_STATIC_STOP_HELPURL); } }; Blockly.JavaScript['blink_static.start'] = function(block) { return 'DEV_IO.BLINK_STATIC(' + block.getFieldValue('LED_GPIO') + ').start('+ parseInt(block.getFieldValue('BLINK_MS')) + ');\n'; }; Blockly.JavaScript['blink_static.stop'] = function(block) { return 'DEV_IO.BLINK_STATIC(' + block.getFieldValue('LED_GPIO') + ').stop();\n'; }; Blockly.Msg.BLINK_ULP_START_TITLE = "ULP Start Blinking LED"; Blockly.Msg.BLINK_ULP_START_TOOLTIP = "ULP Start Blinking LED"; Blockly.Msg.BLINK_ULP_START_HELPURL = ""; Blockly.Msg.BLINK_ULP_STOP_TITLE = "ULP Stop Blinking LED"; Blockly.Msg.BLINK_ULP_STOP_TOOLTIP = "ULP Stop Blinking LED"; Blockly.Msg.BLINK_ULP_STOP_HELPURL = ""; Blockly.Blocks["blink_ulp.start"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.BLINK_ULP_START_TITLE); this.setInputsInline(true); this.setPreviousStatement(true); this.setNextStatement(true); this.setColour(160); this.setTooltip(Blockly.Msg.BLINK_ULP_START_TOOLTIP); this.setHelpUrl(Blockly.Msg.BLINK_ULP_START_HELPURL); } }; Blockly.Blocks["blink_ulp.stop"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.BLINK_ULP_STOP_TITLE); this.setInputsInline(true); this.setPreviousStatement(true); this.setNextStatement(true); this.setColour(160); this.setTooltip(Blockly.Msg.BLINK_ULP_STOP_TOOLTIP); this.setHelpUrl(Blockly.Msg.BLINK_ULP_STOP_HELPURL); } }; Blockly.JavaScript['blink_ulp.start'] = function(block) { return 'DEV_IO.BLINK_ULP().start();\n'; }; Blockly.JavaScript['blink_ulp.stop'] = function(block) { return 'DEV_IO.BLINK_ULP().stop();\n'; }; Blockly.Msg.DRV8833_MOVE_TITLE = "DRV8833 Move"; Blockly.Msg.DRV8833_MOVE_TOOLTIP = "DRV8833 driving for a specific movement direction and absolute speed value"; Blockly.Msg.DRV8833_MOVE_HELPURL = ""; Blockly.Msg.MOVE_FORWARD = "Forward"; Blockly.Msg.MOVE_BACKWARD = "Backward"; Blockly.Msg.TURN_LEFT = "Turn Left"; Blockly.Msg.TURN_RIGHT = "Turn Right"; Blockly.Msg.MOTOR_SPEED = "Speed"; Blockly.Msg.DRV8833_SPEED_NUMBER_TOOLTIP = "Enter motor speed in percent"; Blockly.Msg.DRV8833_SPEED_NUMBER_HELPURL = ""; Blockly.Msg.DRV8833_STOP_TITLE = "DRV8833 Stop"; Blockly.Msg.DRV8833_STOP_TOOLTIP = "Stop movement"; Blockly.Msg.DRV8833_STOP_HELPURL = ""; Blockly.Blocks["drv8833.move"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.DRV8833_MOVE_TITLE) .appendField(new Blockly.FieldDropdown([ [Blockly.Msg.MOVE_FORWARD, "0"], [Blockly.Msg.MOVE_BACKWARD, "1"], [Blockly.Msg.TURN_LEFT, "2"], [Blockly.Msg.TURN_RIGHT, "3"] ]), 'DIRECTION'); this.appendDummyInput() .appendField(Blockly.Msg.MOTOR_SPEED) this.appendValueInput("SPEED").setCheck("Number"); this.appendDummyInput() .appendField('%'); this.setInputsInline(true); this.setPreviousStatement(true); this.setNextStatement(true); this.setColour(160); this.setTooltip(Blockly.Msg.DRV8833_MOVE_TOOLTIP); this.setHelpUrl(Blockly.Msg.DRV8833_MOVE_HELPURL); }, // custom xmlToolbox xmlToolbox: function() { return $(document.createElement('block')).attr({ type: 'drv8833.move' }).append('\ \ \ \ ' ); } }; Blockly.Blocks["drv8833.stop"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.DRV8833_STOP_TITLE); this.setPreviousStatement(true); this.setNextStatement(true); this.setColour(160); this.setTooltip(Blockly.Msg.DRV8833_STOP_TOOLTIP); this.setHelpUrl(Blockly.Msg.DRV8833_STOP_HELPURL); } }; // hidden block (no generator defined), temporary used for shadow block Blockly.Blocks["drv8833.speed_number"] = { init: function() { this.appendDummyInput() .appendField(new Blockly.FieldNumber(50, -100, 100, 1), 'VALUE'); this.setOutput(true, 'Number'); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(math_colour); this.setTooltip(Blockly.Msg.DRV8833_SPEED_NUMBER_TOOLTIP); this.setHelpUrl(Blockly.Msg.DRV8833_SPEED_NUMBER_HELPURL); }, // custom xmlToolboxcolumn xmlToolbox: function() { return null; // hidden block } }; Blockly.JavaScript['drv8833.move'] = function(block) { var speed = Blockly.JavaScript.valueToCode(block, 'SPEED', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; // return [ // 'DEV_IO.DRV8833().move(' + block.getFieldValue('DIRECTION') + ', ' + speed + ');\n', // Blockly.JavaScript.ORDER_ATOMIC // ]; return 'DEV_IO.DRV8833().move(' + block.getFieldValue('DIRECTION') + ', ' + speed + ');\n'; } Blockly.JavaScript['drv8833.stop'] = function(block) { return 'DEV_IO.DRV8833().stop();\n'; } Blockly.JavaScript["drv8833.speed_number"] = function(block) { // Numeric value. var code = parseFloat(block.getFieldValue('VALUE')); var order = code >= 0 ? Blockly.JavaScript.ORDER_ATOMIC : Blockly.JavaScript.ORDER_UNARY_NEGATION; return [code, order]; }; Blockly.Msg.JOYSTICK_1_POSITION_TITLE = "Joystick 1 Position"; Blockly.Msg.JOYSTICK_1_POSITION_TOOLTIP = "Read Joystick 1 position (-100 to 100, 0 is middle position)"; Blockly.Msg.JOYSTICK_1_POSITION_HELPURL = ""; Blockly.Msg.JOYSTICK_2_POSITION_TITLE = "Joystick 2 Position"; Blockly.Msg.JOYSTICK_2_POSITION_TOOLTIP = "Read Joystick 2 position (-100 to 100, 0 is middle position)"; Blockly.Msg.JOYSTICK_2_POSITION_HELPURL = ""; Blockly.Msg.JOYSTICK_1_CALIBRATE_SET_TITLE = "Joystick 1 Calibrate Set"; Blockly.Msg.JOYSTICK_1_CALIBRATE_SET_TOOLTIP = "Set a constant calibrate values for joystick 1"; Blockly.Msg.JOYSTICK_1_CALIBRATE_SET_HELPURL = ""; Blockly.Msg.JOYSTICK_2_CALIBRATE_SET_TITLE = "Joystick 2 Calibrate Set"; Blockly.Msg.JOYSTICK_2_CALIBRATE_SET_TOOLTIP = "Set a constant calibrate values for joystick 2"; Blockly.Msg.JOYSTICK_2_CALIBRATE_SET_HELPURL = ""; Blockly.Msg.JOYSTICK_RELEASE = "Release"; Blockly.Msg.JOYSTICK_DOWNMOST = "DownMost"; Blockly.Msg.JOYSTICK_UPMOST = "UpMost"; Blockly.Msg.JOYSTICK_LEFTMOST = "LeftMost"; Blockly.Msg.JOYSTICK_RIGHTMOST = "RightMost"; Blockly.Msg.JOYSTICK_RELEASE_DEFAULT_TOOLTIP = "Enter joystick release value"; Blockly.Msg.JOYSTICK_RELEASE_DEFAULT_HELPURL = ""; Blockly.Msg.JOYSTICK_DOWNMOST_DEFAULT_TOOLTIP = "Enter joystick downmost value"; Blockly.Msg.JOYSTICK_DOWNMOST_DEFAULT_HELPURL = ""; Blockly.Msg.JOYSTICK_UPMOST_DEFAULT_TOOLTIP = "Enter joystick upmost value"; Blockly.Msg.JOYSTICK_UPMOST_DEFAULT_HELPURL = ""; Blockly.Msg.JOYSTICK_LEFTMOST_DEFAULT_TOOLTIP = "Enter joystick leftmost value"; Blockly.Msg.JOYSTICK_LEFTMOST_DEFAULT_HELPURL = ""; Blockly.Msg.JOYSTICK_RIGHTMOST_DEFAULT_TOOLTIP = "Enter joystick rightmost value"; Blockly.Msg.JOYSTICK_RIGHTMOST_DEFAULT_HELPURL = ""; Blockly.Blocks["joystick_1.position"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.JOYSTICK_1_POSITION_TITLE); this.setOutput(true, 'Number'); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(58); this.setTooltip(Blockly.Msg.JOYSTICK_1_POSITION_TOOLTIP); this.setHelpUrl(Blockly.Msg.JOYSTICK_1_POSITION_HELPURL); } }; Blockly.Blocks["joystick_2.position"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.JOYSTICK_2_POSITION_TITLE); this.setOutput(true, 'Number'); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(58); this.setTooltip(Blockly.Msg.JOYSTICK_2_POSITION_TOOLTIP); this.setHelpUrl(Blockly.Msg.JOYSTICK_2_POSITION_HELPURL); } }; Blockly.Blocks["joystick_1.calibrate_set"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.JOYSTICK_1_CALIBRATE_SET_TITLE); this.appendDummyInput() .appendField(Blockly.Msg.JOYSTICK_RELEASE); this.appendValueInput("RELEASE").setCheck("Number"); this.appendDummyInput() .appendField(Blockly.Msg.JOYSTICK_DOWNMOST); this.appendValueInput("DOWNMOST").setCheck("Number"); this.appendDummyInput() .appendField(Blockly.Msg.JOYSTICK_UPMOST); this.appendValueInput("UPMOST").setCheck("Number"); this.setInputsInline(true); this.setPreviousStatement(true); this.setNextStatement(true); this.setColour(160); this.setTooltip(Blockly.Msg.JOYSTICK_1_CALIBRATE_SET_TOOLTIP); this.setHelpUrl(Blockly.Msg.JOYSTICK_1_CALIBRATE_SET_HELPURL); }, // custom xmlToolbox xmlToolbox: function() { return $(document.createElement('block')).attr({ type: 'joystick_1.calibrate_set' }).append('\ \ \ \ \ \ \ \ \ \ \ \ ' ); } }; Blockly.Blocks["joystick_2.calibrate_set"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.JOYSTICK_2_CALIBRATE_SET_TITLE); this.appendDummyInput() .appendField(Blockly.Msg.JOYSTICK_RELEASE); this.appendValueInput("RELEASE").setCheck("Number"); this.appendDummyInput() .appendField(Blockly.Msg.JOYSTICK_LEFTMOST); this.appendValueInput("LEFTMOST").setCheck("Number"); this.appendDummyInput() .appendField(Blockly.Msg.JOYSTICK_RIGHTMOST); this.appendValueInput("RIGHTMOST").setCheck("Number"); this.setInputsInline(true); this.setPreviousStatement(true); this.setNextStatement(true); this.setColour(160); this.setTooltip(Blockly.Msg.JOYSTICK_2_CALIBRATE_SET_TOOLTIP); this.setHelpUrl(Blockly.Msg.JOYSTICK_2_CALIBRATE_SET_HELPURL); }, // custom xmlToolbox xmlToolbox: function() { return $(document.createElement('block')).attr({ type: 'joystick_2.calibrate_set' }).append('\ \ \ \ \ \ \ \ \ \ \ \ ' ); } }; // hidden block (no generator defined), temporary used for shadow block Blockly.Blocks["joystick.release_default"] = { init: function() { this.appendDummyInput() .appendField(new Blockly.FieldNumber(0, -100, 100, 1), 'VALUE'); this.setOutput(true, 'Number'); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(math_colour); this.setTooltip(Blockly.Msg.JOYSTICK_RELEASE_DEFAULT_TOOLTIP); this.setHelpUrl(Blockly.Msg.JOYSTICK_RELEASE_DEFAULT_HELPURL); }, // custom xmlToolboxcolumn xmlToolbox: function() { return null; // hidden block } }; Blockly.Blocks["joystick.downmost_default"] = { init: function() { this.appendDummyInput() .appendField(new Blockly.FieldNumber(-100, -100, 100, 1), 'VALUE'); this.setOutput(true, 'Number'); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(math_colour); this.setTooltip(Blockly.Msg.JOYSTICK_DOWNMOST_DEFAULT_TOOLTIP); this.setHelpUrl(Blockly.Msg.JOYSTICK_DOWNMOST_DEFAULT_HELPURL); }, // custom xmlToolboxcolumn xmlToolbox: function() { return null; // hidden block } }; Blockly.Blocks["joystick.upmost_default"] = { init: function() { this.appendDummyInput() .appendField(new Blockly.FieldNumber(100, -100, 100, 1), 'VALUE'); this.setOutput(true, 'Number'); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(math_colour); this.setTooltip(Blockly.Msg.JOYSTICK_UPMOST_DEFAULT_TOOLTIP); this.setHelpUrl(Blockly.Msg.JOYSTICK_UPMOST_DEFAULT_HELPURL); }, // custom xmlToolboxcolumn xmlToolbox: function() { return null; // hidden block } }; Blockly.Blocks["joystick.leftmost_default"] = { init: function() { this.appendDummyInput() .appendField(new Blockly.FieldNumber(-100, -100, 100, 1), 'VALUE'); this.setOutput(true, 'Number'); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(math_colour); this.setTooltip(Blockly.Msg.JOYSTICK_LEFTMOST_DEFAULT_TOOLTIP); this.setHelpUrl(Blockly.Msg.JOYSTICK_LEFTMOST_DEFAULT_HELPURL); }, // custom xmlToolboxcolumn xmlToolbox: function() { return null; // hidden block } }; Blockly.Blocks["joystick.rightmost_default"] = { init: function() { this.appendDummyInput() .appendField(new Blockly.FieldNumber(100, -100, 100, 1), 'VALUE'); this.setOutput(true, 'Number'); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(math_colour); this.setTooltip(Blockly.Msg.JOYSTICK_RIGHTMOST_DEFAULT_TOOLTIP); this.setHelpUrl(Blockly.Msg.JOYSTICK_RIGHTMOST_DEFAULT_HELPURL); }, // custom xmlToolboxcolumn xmlToolbox: function() { return null; // hidden block } }; Blockly.JavaScript['joystick_1.position'] = function(block) { return [ 'DEV_IO.JOYSTICK(OUT1_GPIO, IN1_GPIO)' + '.get_position()', Blockly.JavaScript.ORDER_ATOMIC ]; }; Blockly.JavaScript['joystick_2.position'] = function(block) { return [ 'DEV_IO.JOYSTICK(OUT2_GPIO, IN2_GPIO)' + '.get_position()', Blockly.JavaScript.ORDER_ATOMIC ]; }; Blockly.JavaScript['joystick_1.calibrate_set'] = function(block) { var release_value = Blockly.JavaScript.valueToCode(block, 'RELEASE', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var downmost_value = Blockly.JavaScript.valueToCode(block, 'DOWNMOST', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var upmost_value = Blockly.JavaScript.valueToCode(block, 'UPMOST', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; return 'DEV_IO.JOYSTICK(OUT1_GPIO, IN1_GPIO).calibrate_set(' + release_value + ', ' + downmost_value + ', ' + upmost_value + ');\n'; } Blockly.JavaScript['joystick_2.calibrate_set'] = function(block) { var release_value = Blockly.JavaScript.valueToCode(block, 'RELEASE', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var leftmost_value = Blockly.JavaScript.valueToCode(block, 'LEFTMOST', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var rightmost_value = Blockly.JavaScript.valueToCode(block, 'RIGHTMOST', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; return 'DEV_IO.JOYSTICK(OUT2_GPIO, IN2_GPIO).calibrate_set(' + release_value + ', ' + leftmost_value + ', ' + rightmost_value + ');\n'; } function Joystick_GetValue_Code(block) { // Numeric value. var code = parseInt(block.getFieldValue('VALUE')); var order = code >= 0 ? Blockly.JavaScript.ORDER_ATOMIC : Blockly.JavaScript.ORDER_UNARY_NEGATION; return [code, order]; } Blockly.JavaScript["joystick.release_default"] = function(block) { return Joystick_GetValue_Code(block); }; Blockly.JavaScript["joystick.downmost_default"] = function(block) { return Joystick_GetValue_Code(block); }; Blockly.JavaScript["joystick.upmost_default"] = function(block) { return Joystick_GetValue_Code(block); }; Blockly.JavaScript["joystick.leftmost_default"] = function(block) { return Joystick_GetValue_Code(block); }; Blockly.JavaScript["joystick.rightmost_default"] = function(block) { return Joystick_GetValue_Code(block); }; Blockly.Msg.MCP23S17_16IN_READ_TITLE = "Read MCP23S17_16IN"; Blockly.Msg.MCP23S17_16IN_READ_TOOLTIP = "Read MCP23S17_16IN GPIO 16 inputs"; Blockly.Msg.MCP23S17_16IN_READ_HELPURL = ""; Blockly.Msg.MCP23S17_16IN_INPUT_NUMBER_TOOLTIP = "Input number value 0 to 15" Blockly.Msg.MCP23S17_16IN_INPUT_NUMBER_HELPURL = ""; function mcp23s17_16in_init(_this) { _this.appendDummyInput() .appendField(Blockly.Msg.MCP23S17_16IN_READ_TITLE); // spi channel 0 to 64 var channel_array = []; for (var i = 0;i <= 64; i++) { channel_array.push([String(i), String(i)]); } _this.appendDummyInput() .appendField(Blockly.Msg.CHANNEL) .appendField( new Blockly.FieldDropdown(channel_array, function(selectedIndex) { // if address item index > 3 for selected index 0, set address item index to 0 if (selectedIndex == 0) { if (Blockly.mcp23s17_get_address_item_index(selectedIndex, _this.sourceBlock_.inputList[2].fieldRow[1].value_) > 3) { _this.sourceBlock_.inputList[2].fieldRow[1].setValue(Blockly.mcp23s17_address_dropdown_menu(0)[0][1]); } } return selectedIndex; }), 'CHANNEL' ); // device addess 0 to 3 for channel 0, addess 0 to 7 for channel 1 to 64 _this.appendDummyInput() .appendField(Blockly.Msg.ADDRESS) .appendField(new Blockly.FieldDropdown(function() { try { if ((typeof(_this.sourceBlock_) != "undefined") && (typeof(_this.sourceBlock_.inputList) != "undefined")) { var selected_channel = parseInt(_this.sourceBlock_.inputList[1].fieldRow[1].value_); return Blockly.mcp23s17_address_dropdown_menu(selected_channel); } } catch (e) { } // default return Blockly.mcp23s17_address_dropdown_menu(0); }), 'ADDRESS'); } Blockly.Blocks["mcp23s17_16in.read"] = { init: function() { // init mcp23s17_16in_init(this); // mcp23s17 gpio this.appendDummyInput() .appendField(Blockly.Msg.INPUT) .appendField(new Blockly.FieldDropdown([ ["0", "0"], ["1", "1"], ["2", "2"], ["3", "3"], ["4", "4"], ["5", "5"], ["6", "6"], ["7", "7"], ["8", "8"], ["9", "9"], ["10", "10"], ["11", "11"], ["12", "12"], ["13", "13"], ["14", "14"], ["15", "15"] ]), 'INPUT'); this.setOutput(true, 'Number'); this.setInputsInline(true); this.setPreviousStatement(null); this.setNextStatement(null); this.setColour(160); this.setTooltip(Blockly.Msg.MCP23S17_16IN_READ_TOOLTIP); this.setHelpUrl(Blockly.Msg.MCP23S17_16IN_READ_HELPURL); } }; Blockly.Blocks["mcp23s17_16in.read_input"] = { init: function() { // init mcp23s17_16in_init(this); this.appendDummyInput() .appendField(Blockly.Msg.INPUT); // mcp23s17 gpio this.appendValueInput("INPUT") .setCheck("Number"); this.setOutput(true, 'Number'); this.setInputsInline(true); this.setPreviousStatement(null); this.setNextStatement(null); this.setColour(160); this.setTooltip(Blockly.Msg.MCP23S17_16IN_READ_TOOLTIP); this.setHelpUrl(Blockly.Msg.MCP23S17_16IN_READ_HELPURL); }, // custom xmlToolbox xmlToolbox: function() { return $(document.createElement('block')).attr({ type: 'mcp23s17_16in.read_input' }).append('\ \ \ \ ' ); } }; // hidden block (no generator defined), temporary used for shadow block Blockly.Blocks["mcp23s17_16in.input_number"] = { init: function() { this.appendDummyInput() .appendField(new Blockly.FieldNumber(0, 0, 15, 1), 'VALUE'); this.setOutput(true, 'Number'); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(math_colour); this.setTooltip(Blockly.Msg.MCP23S17_16IN_INPUT_NUMBER_TOOLTIP); this.setHelpUrl(Blockly.Msg.MCP23S17_16IN_INPUT_NUMBER_HELPURL); }, // custom xmlToolboxcolumn xmlToolbox: function() { return null; // hidden block } }; Blockly.JavaScript['mcp23s17_16in.read'] = function(block) { return [ 'DEV_SPI.MCP23S17_16IN(' + block.getFieldValue('CHANNEL') + ', ' + block.getFieldValue('ADDRESS') + ')' + '.read(' + block.getFieldValue('INPUT') + ')', Blockly.JavaScript.ORDER_ATOMIC ]; }; Blockly.JavaScript['mcp23s17_16in.read_input'] = function(block) { var input = Blockly.JavaScript.valueToCode(block, 'INPUT', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; return [ 'DEV_SPI.MCP23S17_16IN(' + block.getFieldValue('CHANNEL') + ', ' + block.getFieldValue('ADDRESS') + ')' + '.read(' + input + ')', Blockly.JavaScript.ORDER_ATOMIC ]; }; Blockly.JavaScript["mcp23s17_16in.input_number"] = function(block) { var code = parseFloat(block.getFieldValue('VALUE')); var order = code >= 0 ? Blockly.JavaScript.ORDER_ATOMIC : Blockly.JavaScript.ORDER_UNARY_NEGATION; return [code, order]; }; Blockly.Msg.MCP23S17_16OUT_WRITE_TITLE = "Write MCP23S17_16OUT"; Blockly.Msg.MCP23S17_16OUT_WRITE_TOOLTIP = "Write MCP23S17_16OUT GPIO 16 outputs"; Blockly.Msg.MCP23S17_16OUT_WRITE_HELPURL = ""; Blockly.Msg.MCP23S17_16OUT_OUTPUT_NUMBER_TOOLTIP = "Output number value 0 to 15" Blockly.Msg.MCP23S17_16OUT_OUTPUT_NUMBER_HELPURL = ""; Blockly.Msg.MCP23S17_16OUT_STATUS_NUMBER_TOOLTIP = "Output status value 0 or 1" Blockly.Msg.MCP23S17_16OUT_STATUS_NUMBER_HELPURL = ""; function mcp23s17_16out_init(_this) { _this.appendDummyInput() .appendField(Blockly.Msg.MCP23S17_16OUT_WRITE_TITLE); // spi channel 0 to 64 var channel_array = []; for (var i = 0;i <= 64; i++) { channel_array.push([String(i), String(i)]); } _this.appendDummyInput() .appendField(Blockly.Msg.CHANNEL) .appendField( new Blockly.FieldDropdown(channel_array, function(selectedIndex) { // if address item index > 3 for selected index 0, set address item index to 0 if (selectedIndex == 0) { if (Blockly.mcp23s17_get_address_item_index(selectedIndex, _this.sourceBlock_.inputList[2].fieldRow[1].value_) > 3) { _this.sourceBlock_.inputList[2].fieldRow[1].setValue(Blockly.mcp23s17_address_dropdown_menu(0)[0][1]); } } return selectedIndex; }), 'CHANNEL' ); // device addess 0 to 3 for channel 0, addess 0 to 7 for channel 1 to 64 _this.appendDummyInput() .appendField(Blockly.Msg.ADDRESS) .appendField(new Blockly.FieldDropdown(function() { try { if ((typeof(_this.sourceBlock_) != "undefined") && (typeof(_this.sourceBlock_.inputList) != "undefined")) { var selected_channel = parseInt(_this.sourceBlock_.inputList[1].fieldRow[1].value_); return Blockly.mcp23s17_address_dropdown_menu(selected_channel); } } catch (e) { } // default return Blockly.mcp23s17_address_dropdown_menu(0); }), 'ADDRESS'); } Blockly.Blocks["mcp23s17_16out.write"] = { init: function() { // init mcp23s17_16out_init(this); // mcp23s17 gpio this.appendDummyInput() .appendField(Blockly.Msg.OUTPUT) .appendField(new Blockly.FieldDropdown([ ["0", "0"], ["1", "1"], ["2", "2"], ["3", "3"], ["4", "4"], ["5", "5"], ["6", "6"], ["7", "7"], ["8", "8"], ["9", "9"], ["10", "10"], ["11", "11"], ["12", "12"], ["13", "13"], ["14", "14"], ["15", "15"] ]), 'OUTPUT') .appendField(Blockly.Msg.STATUS) .appendField(new Blockly.FieldDropdown([ ["0", "0"], ["1", "1"] ]), 'STATUS'); this.setInputsInline(true); this.setPreviousStatement(true); this.setNextStatement(true); this.setColour(160); this.setTooltip(Blockly.Msg.MCP23S17_16OUT_WRITE_TOOLTIP); this.setHelpUrl(Blockly.Msg.MCP23S17_16OUT_WRITE_HELPURL); } }; Blockly.Blocks["mcp23s17_16out.write_output"] = { init: function() { // init mcp23s17_16out_init(this); this.appendDummyInput() .appendField(Blockly.Msg.OUTPUT); // mcp23s17 gpio this.appendValueInput("OUTPUT") .setCheck("Number"); this.appendDummyInput() .appendField(Blockly.Msg.STATUS); this.appendValueInput("STATUS") .setCheck("Number"); this.setInputsInline(true); this.setPreviousStatement(true); this.setNextStatement(true); this.setColour(160); this.setTooltip(Blockly.Msg.MCP23S17_16OUT_WRITE_TOOLTIP); this.setHelpUrl(Blockly.Msg.MCP23S17_16OUT_WRITE_HELPURL); }, // custom xmlToolbox xmlToolbox: function() { return $(document.createElement('block')).attr({ type: 'mcp23s17_16out.write_output' }).append('\ \ \ \ \ \ \ \ ' ); } }; // hidden block (no generator defined), temporary used for shadow block Blockly.Blocks["mcp23s17_16out.output_number"] = { init: function() { this.appendDummyInput() .appendField(new Blockly.FieldNumber(0, 0, 15, 1), 'VALUE'); this.setOutput(true, 'Number'); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(math_colour); this.setTooltip(Blockly.Msg.MCP23S17_16OUT_OUTPUT_NUMBER_TOOLTIP); this.setHelpUrl(Blockly.Msg.MCP23S17_16OUT_OUTPUT_NUMBER_HELPURL); }, // custom xmlToolboxcolumn xmlToolbox: function() { return null; // hidden block } }; Blockly.Blocks["mcp23s17_16out.status_number"] = { init: function() { this.appendDummyInput() .appendField(new Blockly.FieldNumber(0, 0, 1, 1), 'VALUE'); this.setOutput(true, 'Number'); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(math_colour); this.setTooltip(Blockly.Msg.MCP23S17_16OUT_STATUS_NUMBER_TOOLTIP); this.setHelpUrl(Blockly.Msg.MCP23S17_16OUT_STATUS_NUMBER_HELPURL); }, // custom xmlToolboxcolumn xmlToolbox: function() { return null; // hidden block } }; Blockly.JavaScript['mcp23s17_16out.write'] = function(block) { return 'DEV_SPI.MCP23S17_16OUT(' + block.getFieldValue('CHANNEL') + ', ' + block.getFieldValue('ADDRESS') + ')' + '.write(' + block.getFieldValue('OUTPUT') + ', ' + block.getFieldValue('STATUS') + ');\n'; }; Blockly.JavaScript['mcp23s17_16out.write_output'] = function(block) { var output = Blockly.JavaScript.valueToCode(block, 'OUTPUT', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var status = Blockly.JavaScript.valueToCode(block, 'STATUS', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; return 'DEV_SPI.MCP23S17_16OUT(' + block.getFieldValue('CHANNEL') + ', ' + block.getFieldValue('ADDRESS') + ')' + '.write(' + output + ', ' + status + ');\n'; }; Blockly.JavaScript["mcp23s17_16out.output_number"] = function(block) { var code = parseFloat(block.getFieldValue('VALUE')); var order = code >= 0 ? Blockly.JavaScript.ORDER_ATOMIC : Blockly.JavaScript.ORDER_UNARY_NEGATION; return [code, order]; }; Blockly.JavaScript["mcp23s17_16out.status_number"] = function(block) { return Blockly.JavaScript["mcp23s17_16out.output_number"](block); }; Blockly.Msg.PULSE_CAP_READ_TITLE = "Pulse Capture Read"; Blockly.Msg.PULSE_CAP_READ_START = "Start"; Blockly.Msg.PULSE_CAP_READ_STOP = "Stop"; Blockly.Msg.PULSE_CAP_READ_TIMEOUT = "Timeout"; Blockly.Msg.PULSE_CAP_READ_MILLISECOND = "ms"; Blockly.Msg.PULSE_CAP_READ_TOOLTIP = "Read pulse capture interval in microsecond (\u00B5s)"; Blockly.Msg.PULSE_CAP_READ_HELPURL = ""; Blockly.Msg.PULSE_CAP_TIMEOUT_MS_NUMBER_TOOLTIP = "Timeout in millisecond (ms)"; Blockly.Msg.PULSE_CAP_TIMEOUT_MS_NUMBER_HELPURL = ""; Blockly.Blocks["pulse_cap.read"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.PULSE_CAP_READ_TITLE) .appendField(Blockly.Msg.PULSE_CAP_READ_START) .appendField(new Blockly.FieldDropdown([ ["IN1", "IN1_GPIO"], ["IN2", "IN2_GPIO"], ["IN3", "IN3_GPIO"], ["IN4", "IN4_GPIO"] ]), 'START') .appendField(new Blockly.FieldDropdown([[{ 'src': 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAdCAYAAADoxT9SAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAOxAAADsQBlSsOGwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAE4SURBVFiF7ZcxbsIwFIY/MAwgtd1YyglQr8A9ELTAXdm7gKCljOEAnSuVLolqRKxnxy8JRHzSU5zISv4vsZ0EZBLgVHMlUsi2h8hN0BiRTmD/H2BTRpAcXoCu5gntOSKO1bqu25ih5SPScrSvCh+RvtXulRUkFkmkCzxY+48oT0AtJJE3wFj7Jj12Uxhgz+Vb9kD4sl0EtdVyifuTYREV0Q8VEQN84hap4qmoiMxxS2Q1j00qEC1igA9kkS/KfSrRIq/IElnN4vM6iRIxwA5/kT3ny7MmUSJT/CWymmqkzqGwSBtYEy6ypZyPz8IiE8IlsproZD8jSKRlbVfAKKfPE/93/Bf4zumzBcbpRbVIgOe0fQSGGie8/1hVxV3k2ugA70KfQRVBBAbIOYOW2bomu1iNGVqNEfkDJN/f5afRxdEAAAAASUVORK5CYII=', 'width': 24, 'height': 12, 'alt': 'One Shot' }, "GPIO_INTR_POSEDGE"], [{ 'src': 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAdCAYAAADoxT9SAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAOxAAADsQBlSsOGwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAE/SURBVFiF7ZhNbsIwEIU/CKzZIfUKiCtwDyQQlwG13Kt7NiB+u2TdBUiwKC1dOEheOIxtEsdEPCmSk4w98/Q84x+QsQeuJT97Kci6BZGnQGWINBztf4BFEYEY0AWaeQ6o54g4V8vyW5mp9SISG1yTPW/UgE+gY/jX0tpvwLfBZgn0UHkkouhk7+O/UPZdHBVNpA7McSexREuNGHLkD/jw6DdJ+1ojxDqSACvs1dimfZwQakEcYk9k4OMgFJEEWCOT2OFZbUNuUUbIREa+g4ckkgAbskl8kaFGDFVLxy/3K9gYuPgOHnr3m6CqkrUaEJ8ioFSZGr6/84AaUM55pIkK+ub3gnDIilERUCfRo/Z+SL9lIlYiACetfZaMYyZyzWgbETMRJzSAmWDTDhGIgDZynPne+OUIpxvOykytyhD5B1Oq0iwC5VqWAAAAAElFTkSuQmCC', 'width': 24, 'height': 12, 'alt': 'One Shot Negative' }, "GPIO_INTR_NEGEDGE"]] ), 'START_TYPE') .appendField(" " + Blockly.Msg.PULSE_CAP_READ_STOP) .appendField(new Blockly.FieldDropdown([ ["IN1", "IN1_GPIO"], ["IN2", "IN2_GPIO"], ["IN3", "IN3_GPIO"], ["IN4", "IN4_GPIO"] ]), 'STOP') .appendField(new Blockly.FieldDropdown([[{ 'src': 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAdCAYAAADoxT9SAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAOxAAADsQBlSsOGwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAE4SURBVFiF7ZcxbsIwFIY/MAwgtd1YyglQr8A9ELTAXdm7gKCljOEAnSuVLolqRKxnxy8JRHzSU5zISv4vsZ0EZBLgVHMlUsi2h8hN0BiRTmD/H2BTRpAcXoCu5gntOSKO1bqu25ih5SPScrSvCh+RvtXulRUkFkmkCzxY+48oT0AtJJE3wFj7Jj12Uxhgz+Vb9kD4sl0EtdVyifuTYREV0Q8VEQN84hap4qmoiMxxS2Q1j00qEC1igA9kkS/KfSrRIq/IElnN4vM6iRIxwA5/kT3ny7MmUSJT/CWymmqkzqGwSBtYEy6ypZyPz8IiE8IlsproZD8jSKRlbVfAKKfPE/93/Bf4zumzBcbpRbVIgOe0fQSGGie8/1hVxV3k2ugA70KfQRVBBAbIOYOW2bomu1iNGVqNEfkDJN/f5afRxdEAAAAASUVORK5CYII=', 'width': 24, 'height': 12, 'alt': 'One Shot' }, "GPIO_INTR_POSEDGE"], [{ 'src': 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAdCAYAAADoxT9SAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAOxAAADsQBlSsOGwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAE/SURBVFiF7ZhNbsIwEIU/CKzZIfUKiCtwDyQQlwG13Kt7NiB+u2TdBUiwKC1dOEheOIxtEsdEPCmSk4w98/Q84x+QsQeuJT97Kci6BZGnQGWINBztf4BFEYEY0AWaeQ6o54g4V8vyW5mp9SISG1yTPW/UgE+gY/jX0tpvwLfBZgn0UHkkouhk7+O/UPZdHBVNpA7McSexREuNGHLkD/jw6DdJ+1ojxDqSACvs1dimfZwQakEcYk9k4OMgFJEEWCOT2OFZbUNuUUbIREa+g4ckkgAbskl8kaFGDFVLxy/3K9gYuPgOHnr3m6CqkrUaEJ8ioFSZGr6/84AaUM55pIkK+ub3gnDIilERUCfRo/Z+SL9lIlYiACetfZaMYyZyzWgbETMRJzSAmWDTDhGIgDZynPne+OUIpxvOykytyhD5B1Oq0iwC5VqWAAAAAElFTkSuQmCC', 'width': 24, 'height': 12, 'alt': 'One Shot Negative' }, "GPIO_INTR_NEGEDGE"]] ), 'STOP_TYPE'); this.appendDummyInput() .appendField(" " + Blockly.Msg.PULSE_CAP_READ_TIMEOUT); this.appendValueInput("TIMEOUT_MS") .setCheck("Number"); this.appendDummyInput() .appendField(Blockly.Msg.PULSE_CAP_READ_MILLISECOND); this.setInputsInline(true); this.setOutput(true, 'Number'); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(Blockly.Msg.SENSOR_HUE); this.setTooltip(Blockly.Msg.PULSE_CAP_READ_TOOLTIP); this.setHelpUrl(Blockly.Msg.PULSE_CAP_READ_HELPURL); }, // custom xmlToolbox xmlToolbox: function() { return $(document.createElement('block')).attr({ type: 'pulse_cap.read' }).append('\ \ \ \ ' ); } }; // hidden block (no generator defined), temporary used for shadow block Blockly.Blocks["pulse_cap.timeout_ms_number"] = { init: function() { this.appendDummyInput() .appendField(new Blockly.FieldNumber(1000, 20, 1000000, 1), 'VALUE'); this.setOutput(true, 'Number'); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(math_colour); this.setTooltip(Blockly.Msg.PULSE_CAP_TIMEOUT_MS_NUMBER_TOOLTIP); this.setHelpUrl(Blockly.Msg.PULSE_CAP_TIMEOUT_MS_NUMBER_HELPURL); }, // custom xmlToolboxcolumn xmlToolbox: function() { return null; // hidden block } }; Blockly.JavaScript['pulse_cap.read'] = function(block) { var timeout_ms = Blockly.JavaScript.valueToCode(block, 'TIMEOUT_MS', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; return [ 'DEV_IO.PULSE_CAP(' + block.getFieldValue('START') + ', ' + block.getFieldValue('STOP') + ')' + '.read(' + block.getFieldValue('START_TYPE') + ', ' + block.getFieldValue('STOP_TYPE') + ', ' + timeout_ms + ')', Blockly.JavaScript.ORDER_ATOMIC ]; }; Blockly.JavaScript["pulse_cap.timeout_ms_number"] = function(block) { var code = parseFloat(block.getFieldValue('VALUE')); var order = code >= 0 ? Blockly.JavaScript.ORDER_ATOMIC : Blockly.JavaScript.ORDER_UNARY_NEGATION; return [code, order]; }; Blockly.Msg.PULSE_GEN_WRITE_TITLE = "Pulse Generator Write"; Blockly.Msg.PULSE_GEN_OUTPUT = "Output"; Blockly.Msg.PULSE_GEN_WRITE_TOOLTIP = "Generate pulse with specific type and width"; Blockly.Msg.PULSE_GEN_WRITE_HELPURL = ""; Blockly.Msg.PULSE_GEN_TYPE = "Type"; Blockly.Msg.PULSE_GEN_WIDTH_US = "Width"; Blockly.Msg.PULSE_GEN_WAIT = "Wait"; Blockly.Msg.PULSE_GEN_NO_WAIT = "No Wait"; Blockly.Msg.PULSE_GEN_MICROSECOND = "\u00B5s"; Blockly.Msg.PULSE_GEN_WIDTH_US_NUMBER_TOOLTIP = "Pulse width in microsecond (\u00B5s)"; Blockly.Msg.PULSE_GEN_WIDTH_US_NUMBER_HELPURL = ""; Blockly.Blocks["pulse_gen.write"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.PULSE_GEN_WRITE_TITLE) .appendField(Blockly.Msg.PULSE_GEN_OUTPUT) .appendField(new Blockly.FieldDropdown([ ["OUT1", "OUT1_GPIO"], ["OUT2", "OUT2_GPIO"] ]), 'OUTPUT') .appendField(" " + Blockly.Msg.PULSE_GEN_TYPE) .appendField(new Blockly.FieldDropdown([[{ 'src': 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAdCAYAAADoxT9SAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAOxAAADsQBlSsOGwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAACBSURBVFiF7ZjBCYAwEAQHiS2kCvsvw5cl2IUP/foQzkDU9diB/I5kBzafg5gV2D8+axRyuCHyC9KIlMb5DVieCHLBBIw9Lzz/kbCrX72bploWUcMialhEDYuoYRE1LKKGRdSwiBoWUSONSAHmYKa+ESSgEufsu/HrSNOGM0210ogclHNE5xvEJekAAAAASUVORK5CYII=', 'width': 24, 'height': 12, 'alt': 'One Shot' }, "GPIO_INTR_POSEDGE"], [{ 'src': 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAdCAYAAADoxT9SAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAOxAAADsQBlSsOGwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAACDSURBVFiF7ZOxDYAwDARPCFZgChr23wEaRmALCmhpIFiI8LL+pHRO/Cd9APbAWanHGsnWVAz2KWlEWmAuzAxAVyHLHRuwvH3k3NW//khxb5pqWUQNi6hhETUsooZF1LCIGhZRwyJqWESNNCJtcL4Hpi+CXOx6TFSkA8bgnSqkqVYakQNm0iN6FGb0sQAAAABJRU5ErkJggg==', 'width': 24, 'height': 12, 'alt': 'One Shot Negative' }, "GPIO_INTR_NEGEDGE"]] ), 'TYPE'); this.appendDummyInput() .appendField(" " + Blockly.Msg.PULSE_GEN_WIDTH_US); this.appendValueInput("WIDTH_US") .setCheck("Number"); this.appendDummyInput() .appendField(Blockly.Msg.PULSE_GEN_MICROSECOND); this.appendDummyInput() .appendField(new Blockly.FieldDropdown([[ Blockly.Msg.PULSE_GEN_WAIT, "true" ], [ Blockly.Msg.PULSE_GEN_NO_WAIT, "false" ]]), 'WAIT'); this.setInputsInline(true); this.setPreviousStatement(true); this.setNextStatement(true); this.setColour(Blockly.Msg.SENSOR_HUE); this.setTooltip(Blockly.Msg.PULSE_GEN_WRITE_TOOLTIP); this.setHelpUrl(Blockly.Msg.PULSE_GEN_WRITE_HELPURL); }, // custom xmlToolbox xmlToolbox: function() { return $(document.createElement('block')).attr({ type: 'pulse_gen.write' }).append('\ \ \ \ ' ); } }; // hidden block (no generator defined), temporary used for shadow block Blockly.Blocks["pulse_gen.width_us_number"] = { init: function() { this.appendDummyInput() .appendField(new Blockly.FieldNumber(1, 1, 1000000, 1), 'VALUE'); this.setOutput(true, 'Number'); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(math_colour); this.setTooltip(Blockly.Msg.PULSE_GEN_WIDTH_US_NUMBER_TOOLTIP); this.setHelpUrl(Blockly.Msg.PULSE_GEN_WIDTH_US_NUMBER_HELPURL); }, // custom xmlToolboxcolumn xmlToolbox: function() { return null; // hidden block } }; Blockly.JavaScript['pulse_gen.write'] = function(block) { var type = block.getFieldValue('TYPE'); var width = Blockly.JavaScript.valueToCode(block, 'WIDTH_US', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var wait = block.getFieldValue('WAIT'); return 'DEV_IO.PULSE_GEN(' + block.getFieldValue('OUTPUT') + ')' + '.write(' + type + ', ' + width + ', ' + wait + ');\n'; }; Blockly.JavaScript["pulse_gen.width_us_number"] = function(block) { var code = parseFloat(block.getFieldValue('VALUE')); var order = code >= 0 ? Blockly.JavaScript.ORDER_ATOMIC : Blockly.JavaScript.ORDER_UNARY_NEGATION; return [code, order]; }; Blockly.Msg.DL7612_SEND_TITLE = "DL7612 Send Data"; Blockly.Msg.DL7612_SEND_TOOLTIP = "DL7612 Send Data"; Blockly.Msg.DL7612_SEND_HELPURL = ""; Blockly.Msg.DL7612_APPSKEY = "Application Key"; Blockly.Msg.DL7612_NWKSKEY = "Network Key "; Blockly.Msg.DL7612_APPSKEY_TOOLTIP = "Enter Application Key"; Blockly.Msg.DL7612_APPSKEY_HELPURL = ""; Blockly.Msg.DL7612_NWKSKEY_TOOLTIP = "Enter Network Key"; Blockly.Msg.DL7612_NWKSKEY_HELPURL = ""; Blockly.Msg.DL7612_TEMPERATURE = "Temperature"; Blockly.Msg.DL7612_HUMIDITY = "Humidity"; Blockly.Msg.DL7612_WIND_SPEED = "Wind Speed"; Blockly.Msg.DL7612_WIND_DIRECTION = "Wind Direction"; Blockly.Msg.DL7612_RAIN_VOLUME = "Rain Volume"; Blockly.Msg.DL7612_TXPOWER = "TX Power "; Blockly.Msg.DL7612_DBM = "dBm"; const DEFAULT_APPSKEY = 'EF6EBE0953DFF17AA7B89E64FB8A2ADD'; const DEFAULT_NWKSKEY = 'B5A6E1B6C840146389C4ABB4835CB5BA'; Blockly.Blocks["kbnet_dl7612.send_01"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.DL7612_SEND_TITLE); this.appendDummyInput() .appendField(Blockly.Msg.DL7612_TXPOWER) .appendField(new Blockly.FieldDropdown([ ["2", "5"], ["5", "4"], ["8", "3"], ["11", "2"], ["14", "1"], //["20", "0"] ]), 'TX_POWER') .appendField(Blockly.Msg.DL7612_DBM); this.appendDummyInput() .appendField(Blockly.Msg.DL7612_APPSKEY) .appendField(new Blockly.FieldTextInput(DEFAULT_APPSKEY, appskey_validator), 'APPSKEY'); this.appendDummyInput() .appendField(Blockly.Msg.DL7612_NWKSKEY) .appendField(new Blockly.FieldTextInput(DEFAULT_NWKSKEY, nwkskey_validator), 'NWKSKEY'); this.appendValueInput("VALUE_1") .appendField(Blockly.Msg.DL7612_TEMPERATURE) .setCheck("Number"); this.appendValueInput("VALUE_2") .appendField(Blockly.Msg.DL7612_HUMIDITY) .setCheck("Number"); this.appendValueInput("VALUE_3") .appendField(Blockly.Msg.DL7612_WIND_SPEED) .setCheck("Number"); this.appendValueInput("VALUE_4") .appendField(Blockly.Msg.DL7612_WIND_DIRECTION) .setCheck("Number"); this.appendValueInput("VALUE_5") .appendField(Blockly.Msg.DL7612_RAIN_VOLUME) .setCheck("Number"); this.setPreviousStatement(true); this.setNextStatement(true); this.setColour('#a15873'); this.setTooltip(Blockly.Msg.DL7612_SEND_TOOLTIP); this.setHelpUrl(Blockly.Msg.DL7612_SEND_HELPURL); }, // onchange onchange: function(ev) { if (ev.blockId === this.id) { if (!this.isInFlyout) { //console.log(this.type); //console.log(this.workspace.getBlockById(ev.blockId)); // on block change if (ev.type == Blockly.Events.BLOCK_CHANGE) { //console.log(ev.name, ev.blockId, ev.type); // on tx power dropdown changed if (ev.name == 'TX_POWER') { //console.log(this.getField('TX_POWER').text_, this.getField('TX_POWER').value_); for (var blockID in this.workspace.blockDB_) { if (this.workspace.blockDB_[blockID].type == this.type) { // skip current block if (blockID != ev.blockId) { // copy new tx power option to all other blocks on workspace this.workspace.blockDB_[blockID].setFieldValue(this.getField('TX_POWER').value_, 'TX_POWER'); } } } } else // on application key change if (ev.name == 'APPSKEY') { for (var blockID in this.workspace.blockDB_) { if (this.workspace.blockDB_[blockID].type == this.type) { // skip current block if (blockID != ev.blockId) { // copy new appskey option to all other blocks on workspace this.workspace.blockDB_[blockID].setFieldValue(this.getField('APPSKEY').text_, 'APPSKEY'); } } } } else // on network key change if (ev.name == 'NWKSKEY') { for (var blockID in this.workspace.blockDB_) { if (this.workspace.blockDB_[blockID].type == this.type) { // skip current block if (blockID != ev.blockId) { // copy new nwkskey option to all other blocks on workspace this.workspace.blockDB_[blockID].setFieldValue(this.getField('NWKSKEY').text_, 'NWKSKEY'); } } } } } // on block create if (ev.type == Blockly.Events.BLOCK_CREATE) { for (var blockID in this.workspace.blockDB_) { if (this.workspace.blockDB_[blockID].type == this.type) { // skip current block if (blockID != ev.blockId) { // copy current tx power value on workspace to this new block this.setFieldValue(this.workspace.blockDB_[blockID].getField('TX_POWER').value_, 'TX_POWER'); // copy new appskey option to all other blocks on workspace this.setFieldValue(this.workspace.blockDB_[blockID].getField('APPSKEY').text_, 'APPSKEY'); // copy new nwkskey option to all other blocks on workspace this.setFieldValue(this.workspace.blockDB_[blockID].getField('NWKSKEY').text_, 'NWKSKEY'); break; } } } } } } } }; var appskey_validator = function(val) { var re = /[0-9A-Fa-f]{32}/g; if ((val.length == 32) && (re.test(val))) { return val.toUpperCase(); } else { // default return DEFAULT_APPSKEY; } }; var nwkskey_validator = function(val) { var re = /[0-9A-Fa-f]{32}/g; if ((val.length == 32) && (re.test(val))) { return val.toUpperCase(); } else { // default return DEFAULT_NWKSKEY; } }; Blockly.JavaScript['kbnet_dl7612.send_01'] = function(block) { var value_1 = Blockly.JavaScript.valueToCode(block, 'VALUE_1', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var value_2 = Blockly.JavaScript.valueToCode(block, 'VALUE_2', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var value_3 = Blockly.JavaScript.valueToCode(block, 'VALUE_3', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var value_4 = Blockly.JavaScript.valueToCode(block, 'VALUE_4', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var value_5 = Blockly.JavaScript.valueToCode(block, 'VALUE_5', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var appskey = block.getFieldValue('APPSKEY'); //Blockly.JavaScript.valueToCode(block, 'APPSKEY', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var nwkskey = block.getFieldValue('NWKSKEY'); //Blockly.JavaScript.valueToCode(block, 'NWKSKEY', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var tx_power_index = parseInt(block.getFieldValue('TX_POWER')); return 'DEV_IO.KBNET_DL7612("' + appskey.toLowerCase() + '", "' + nwkskey.toLowerCase() + '", ' + tx_power_index + ').send_01(' + value_1 + ', ' + value_2 + ', ' + value_3 + ', ' + value_4 + ', ' + value_5 + ');\n'; }; Blockly.Msg.KBNET_RV_GET_RAIN_VOLUME_MM_TITLE = "Rain Volume 24Hrs"; Blockly.Msg.KBNET_RV_GET_RAIN_VOLUME_MM_TOOLTIP = "Read KidBright-Net Rain Volume Last 24 Hours (mm.)"; Blockly.Msg.KBNET_RV_GET_RAIN_VOLUME_MM_HELPURL = ""; Blockly.Msg.KBNET_RV_GET_RAIN_VOLUME_COUNTER_TITLE = "24Hrs Rain Volume Counter"; Blockly.Msg.KBNET_RV_GET_RAIN_VOLUME_COUNTER_TOOLTIP = "Read KidBright-Net Rain Volume Counter Last 24 Hours"; Blockly.Msg.KBNET_RV_GET_RAIN_VOLUME_COUNTER_HELPURL = ""; Blockly.Msg.KBNET_RV_RESET_RAIN_VOLUME_TITLE = "Reset Rain Volume"; Blockly.Msg.KBNET_RV_RESET_RAIN_VOLUME_TOOLTIP = "Reset KidBright-Net Rain Volume"; Blockly.Msg.KBNET_RV_RESET_RAIN_VOLUME_HELPURL = ""; Blockly.Blocks["kbnet_rv.get_rain_volume_mm"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.KBNET_RV_GET_RAIN_VOLUME_MM_TITLE); this.setOutput(true, 'Number'); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour('#a15873'); this.setTooltip(Blockly.Msg.KBNET_RV_GET_RAIN_VOLUME_MM_TOOLTIP); this.setHelpUrl(Blockly.Msg.KBNET_RV_GET_RAIN_VOLUME_MM_HELPURL); } }; /* Blockly.Blocks["kbnet_rv.get_rain_volume_counter"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.KBNET_RV_GET_RAIN_VOLUME_COUNTER_TITLE); this.setOutput(true, 'Number'); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(58); this.setTooltip(Blockly.Msg.KBNET_RV_GET_RAIN_VOLUME_COUNTER_TOOLTIP); this.setHelpUrl(Blockly.Msg.KBNET_RV_GET_RAIN_VOLUME_COUNTER_HELPURL); } }; Blockly.Blocks["kbnet_rv.reset_rain_volume"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.KBNET_RV_RESET_RAIN_VOLUME_TITLE); this.setInputsInline(true); this.setPreviousStatement(true); this.setNextStatement(true); this.setColour(58); this.setTooltip(Blockly.KBNET_RV_RESET_RAIN_VOLUME_TOOLTIP); this.setHelpUrl(Blockly.Msg.KBNET_RV_RESET_RAIN_VOLUME_HELPURL); } }; */ Blockly.JavaScript['kbnet_rv.get_rain_volume_mm'] = function(block) { return [ 'DEV_IO.KBNET_RV()' + '.get_rain_volume_mm()', Blockly.JavaScript.ORDER_ATOMIC ]; }; Blockly.JavaScript['kbnet_rv.get_rain_volume_counter'] = function(block) { return [ 'DEV_IO.KBNET_RV()' + '.get_rain_volume_counter()', Blockly.JavaScript.ORDER_ATOMIC ]; }; Blockly.JavaScript['kbnet_rv.reset_rain_volume'] = function(block) { return 'DEV_IO.KBNET_RV().reset_rain_volume();\n'; }; Blockly.Msg.KBNET_SHT31_GET_TEMPERATURE_TITLE = "SHT31 Temperature"; Blockly.Msg.KBNET_SHT31_GET_TEMPERATURE_TOOLTIP = "Read KidBright-Net SHT31 Temperature"; Blockly.Msg.KBNET_SHT31_GET_TEMPERATURE_HELPURL = ""; Blockly.Msg.KBNET_SHT31_GET_HUMIDITY_TITLE = "SHT31 Humidity"; Blockly.Msg.KBNET_SHT31_GET_HUMIDITY_TOOLTIP = "Read KidBright-Net SHT31 Humidity"; Blockly.Msg.KBNET_SHT31_GET_HUMIDITY_HELPURL = ""; Blockly.Msg.KBNET_SHT31_IS_ERROR_TITLE = "SHT31 Error"; Blockly.Msg.KBNET_SHT31_IS_ERROR_TOOLTIP = "Check KidBright-Net SHT31 Error (sensor not found)"; Blockly.Msg.KBNET_SHT31_IS_ERROR_HELPURL = ""; Blockly.Blocks["kbnet_sht31.get_temperature"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.KBNET_SHT31_GET_TEMPERATURE_TITLE); this.setOutput(true, 'Number'); this.setInputsInline(true); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour('#a15873'); this.setTooltip(Blockly.Msg.KBNET_SHT31_GET_TEMPERATURE_TOOLTIP); this.setHelpUrl(Blockly.Msg.KBNET_SHT31_GET_TEMPERATURE_HELPURL); } }; Blockly.Blocks["kbnet_sht31.get_humidity"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.KBNET_SHT31_GET_HUMIDITY_TITLE); this.setOutput(true, 'Number'); this.setInputsInline(true); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour('#a15873'); this.setTooltip(Blockly.Msg.KBNET_SHT31_GET_HUMIDITY_TOOLTIP); this.setHelpUrl(Blockly.Msg.KBNET_SHT31_GET_HUMIDITY_HELPURL); } }; Blockly.Blocks["kbnet_sht31.is_error"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.KBNET_SHT31_IS_ERROR_TITLE); this.setOutput(true, 'Boolean'); this.setInputsInline(true); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour('#a15873'); this.setTooltip(Blockly.Msg.KBNET_SHT31_IS_ERROR_TOOLTIP); this.setHelpUrl(Blockly.Msg.KBNET_SHT31_IS_ERROR_HELPURL); } }; Blockly.JavaScript['kbnet_sht31.get_temperature'] = function(block) { return [ 'DEV_I2C1.KBNET_SHT31().get_temperature()', Blockly.JavaScript.ORDER_ATOMIC ]; }; Blockly.JavaScript['kbnet_sht31.get_humidity'] = function(block) { return [ 'DEV_I2C1.KBNET_SHT31().get_humidity()', Blockly.JavaScript.ORDER_ATOMIC ]; }; Blockly.JavaScript['kbnet_sht31.is_error'] = function(block) { return [ 'DEV_I2C1.KBNET_SHT31().is_error()', Blockly.JavaScript.ORDER_ATOMIC ]; }; Blockly.Msg.KBNET_WD_GET_WIND_DIRECTION_DEGREES_TITLE = "Wind Direction"; Blockly.Msg.KBNET_WD_GET_WIND_DIRECTION_DEGREES_TOOLTIP = "Read KidBright-Net Wind Direction (degrees)"; Blockly.Msg.KBNET_WD_GET_WIND_DIRECTION_DEGREES_HELPURL = ""; Blockly.Msg.KBNET_WD_IS_ERROR_TITLE = "Wind Direction Error"; Blockly.Msg.KBNET_WD_IS_ERROR_TOOLTIP = "KidBright-Net Wind Direction Error (sensor not found)"; Blockly.Msg.KBNET_WD_IS_ERROR_HELPURL = ""; Blockly.Blocks["kbnet_wd.get_wind_direction_degrees"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.KBNET_WD_GET_WIND_DIRECTION_DEGREES_TITLE); this.setOutput(true, 'Number'); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour('#a15873'); this.setTooltip(Blockly.Msg.KBNET_WD_GET_WIND_DIRECTION_DEGREES_TOOLTIP); this.setHelpUrl(Blockly.Msg.KBNET_WD_GET_WIND_DIRECTION_DEGREES_HELPURL); } }; Blockly.Blocks["kbnet_wd.is_error"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.KBNET_WD_IS_ERROR_TITLE); this.setOutput(true, 'Boolean'); this.setInputsInline(true); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour('#a15873'); this.setTooltip(Blockly.Msg.KBNET_WD_IS_ERROR_TOOLTIP); this.setHelpUrl(Blockly.Msg.KBNET_WD_IS_ERROR_HELPURL); } }; Blockly.JavaScript['kbnet_wd.get_wind_direction_degrees'] = function(block) { return [ 'DEV_IO.KBNET_WD()' + '.get_wind_direction_degrees()', Blockly.JavaScript.ORDER_ATOMIC ]; }; Blockly.JavaScript['kbnet_wd.is_error'] = function(block) { return [ 'DEV_IO.KBNET_WD()' + '.is_error()', Blockly.JavaScript.ORDER_ATOMIC ]; }; Blockly.Msg.KBNET_WS_GET_WIND_SPEED_KM_H_TITLE = "Wind Speed"; Blockly.Msg.KBNET_WS_GET_WIND_SPEED_KM_H_TOOLTIP = "Read KidBright-Net Wind Speed (km/h)"; Blockly.Msg.KBNET_WS_GET_WIND_SPEED_KM_H_HELPURL = ""; Blockly.Msg.KBNET_WS_GET_WIND_SPEED_KM_H_TEXT_TITLE = "Wind Speed Text"; Blockly.Msg.KBNET_WS_GET_WIND_SPEED_KM_H_TEXT_TOOLTIP = "Read KidBright-Net Wind Speed (km/h) Text"; Blockly.Msg.KBNET_WS_GET_WIND_SPEED_KM_H_TEXT_HELPURL = ""; Blockly.Blocks["kbnet_ws.get_wind_speed_km_h"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.KBNET_WS_GET_WIND_SPEED_KM_H_TITLE); this.setOutput(true, 'Number'); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour('#a15873'); this.setTooltip(Blockly.Msg.KBNET_WS_GET_WIND_SPEED_KM_H_TOOLTIP); this.setHelpUrl(Blockly.Msg.KBNET_WS_GET_WIND_SPEED_KM_H_HELPURL); } }; /* Blockly.Blocks["kbnet_ws.get_wind_speed_km_h_text"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.KBNET_WS_GET_WIND_SPEED_KM_H_TEXT_TITLE) .appendField(Blockly.Msg.PRECISION_TITLE) .appendField(new Blockly.FieldNumber(1, 0, 6, 1), 'PREC'); this.setOutput(true, 'String'); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(58); this.setTooltip(Blockly.Msg.KBNET_WS_GET_WIND_SPEED_KM_H_TEXT_TOOLTIP); this.setHelpUrl(Blockly.Msg.KBNET_WS_GET_WIND_SPEED_KM_H_TEXT_HELPURL); } }; */ Blockly.JavaScript['kbnet_ws.get_wind_speed_km_h'] = function(block) { return [ 'DEV_IO.KBNET_WS()' + '.get_wind_speed_km_h()', Blockly.JavaScript.ORDER_ATOMIC ]; }; Blockly.JavaScript['kbnet_ws.get_wind_speed_km_h_text'] = function(block) { var prec = parseInt(block.getFieldValue('PREC')); return [ 'DEV_IO.KBNET_WS()' + '.get_wind_speed_km_h_text(' + prec + ')', Blockly.JavaScript.ORDER_ATOMIC ]; }; Blockly.Msg.KBNET2_E28T12S_SEND_TITLE = "E28-2G4T12S Send Data"; Blockly.Msg.KBNET2_E28T12S_SEND_TOOLTIP = "E28-2G4T12S Send Data"; Blockly.Msg.KBNET2_E28T12S_SEND_HELPURL = ""; Blockly.Msg.KBNET2_E28T12S_APPSKEY = "Application Key"; Blockly.Msg.KBNET2_E28T12S_NWKSKEY = "Network Key "; Blockly.Msg.KBNET2_E28T12S_APPSKEY_TOOLTIP = "Enter Application Key"; Blockly.Msg.KBNET2_E28T12S_APPSKEY_HELPURL = ""; Blockly.Msg.KBNET2_E28T12S_NWKSKEY_TOOLTIP = "Enter Network Key"; Blockly.Msg.KBNET2_E28T12S_NWKSKEY_HELPURL = ""; Blockly.Msg.KBNET2_E28T12S_TEMPERATURE = "Temperature"; Blockly.Msg.KBNET2_E28T12S_HUMIDITY = "Humidity"; Blockly.Msg.KBNET2_E28T12S_WIND_SPEED = "Wind Speed"; Blockly.Msg.KBNET2_E28T12S_WIND_DIRECTION = "Wind Direction"; Blockly.Msg.KBNET2_E28T12S_RAIN_VOLUME = "Rain Volume"; Blockly.Msg.KBNET2_E28T12S_PM25 = "PM2.5"; Blockly.Msg.KBNET2_E28T12S_PM10 = "PM10"; Blockly.Msg.KBNET2_E28T12S_TXPOWER = "TX Power "; Blockly.Msg.KBNET2_E28T12S_DBM = "dBm"; Blockly.Msg.KBNET2_E28T12S_FREQUENCY = "Frequency "; Blockly.Msg.KBNET2_E28T12S_IS_ERROR_TITLE = "E28-2G4T12S Error"; Blockly.Msg.KBNET2_E28T12S_IS_ERROR_TOOLTIP = "Check E28-2G4T12S Error"; Blockly.Msg.KBNET2_E28T12S_IS_ERROR_HELPURL = ""; const DEFAULT_KBNET2_E28T12S_NWKSKEY = 'B5A6E1B6C840146389C4ABB4835CB5BA'; Blockly.Blocks["kbnet2_e28t12s.send_01"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.KBNET2_E28T12S_SEND_TITLE); this.appendDummyInput() .appendField(Blockly.Msg.KBNET2_E28T12S_TXPOWER) .appendField(new Blockly.FieldDropdown([ ["12", "12"], ["10", "10"], ["7", "7"], ["4", "4"] ]), 'TX_POWER_INDEX') .appendField(Blockly.Msg.KBNET2_E28T12S_DBM); this.appendDummyInput() .appendField(Blockly.Msg.KBNET2_E28T12S_FREQUENCY) .appendField(new Blockly.FieldDropdown([ ["2475", "75"], ["2476", "76"], ["2477", "77"], ["2478", "78"], ["2479", "79"], ["2480", "80"], ["2481", "81"], ["2482", "82"] ]), 'RF_FREQUENCY') .appendField("MHz"); this.appendDummyInput() .appendField(Blockly.Msg.KBNET2_E28T12S_NWKSKEY) .appendField(new Blockly.FieldTextInput(DEFAULT_KBNET2_E28T12S_NWKSKEY, nwkskey_validator), 'NWKSKEY'); this.appendValueInput("VALUE_1") .appendField(Blockly.Msg.KBNET2_E28T12S_TEMPERATURE) .setCheck("Number"); this.appendValueInput("VALUE_2") .appendField(Blockly.Msg.KBNET2_E28T12S_HUMIDITY) .setCheck("Number"); this.appendValueInput("VALUE_3") .appendField(Blockly.Msg.KBNET2_E28T12S_WIND_SPEED) .setCheck("Number"); this.appendValueInput("VALUE_4") .appendField(Blockly.Msg.KBNET2_E28T12S_WIND_DIRECTION) .setCheck("Number"); this.appendValueInput("VALUE_5") .appendField(Blockly.Msg.KBNET2_E28T12S_RAIN_VOLUME) .setCheck("Number"); this.appendValueInput("VALUE_6") .appendField(Blockly.Msg.KBNET2_E28T12S_PM25) .setCheck("Number"); this.appendValueInput("VALUE_7") .appendField(Blockly.Msg.KBNET2_E28T12S_PM10) .setCheck("Number"); this.setPreviousStatement(true); this.setNextStatement(true); this.setColour(230); this.setTooltip(Blockly.Msg.KBNET2_E28T12S_SEND_TOOLTIP); this.setHelpUrl(Blockly.Msg.KBNET2_E28T12S_SEND_HELPURL); this.setFieldValue("82", "RF_FREQUENCY"); // set default frequency 2482 MHz }, // onchange onchange: function(ev) { if (ev.blockId === this.id) { if (!this.isInFlyout) { //console.log(this.type); //console.log(this.workspace.getBlockById(ev.blockId)); // on block change if (ev.type == Blockly.Events.BLOCK_CHANGE) { //console.log(ev.name, ev.blockId, ev.type); // on tx power dropdown changed if (ev.name == 'TX_POWER') { //console.log(this.getField('TX_POWER').text_, this.getField('TX_POWER').value_); for (var blockID in this.workspace.blockDB_) { if (this.workspace.blockDB_[blockID].type == this.type) { // skip current block if (blockID != ev.blockId) { // copy new tx power option to all other blocks on workspace this.workspace.blockDB_[blockID].setFieldValue(this.getField('TX_POWER').value_, 'TX_POWER'); } } } } else // on channel change if (ev.name == 'CHANNEL') { for (var blockID in this.workspace.blockDB_) { if (this.workspace.blockDB_[blockID].type == this.type) { // skip current block if (blockID != ev.blockId) { // copy new tx power option to all other blocks on workspace this.workspace.blockDB_[blockID].setFieldValue(this.getField('CHANNEL').value_, 'CHANNEL'); } } } } else // on network key change if (ev.name == 'NWKSKEY') { for (var blockID in this.workspace.blockDB_) { if (this.workspace.blockDB_[blockID].type == this.type) { // skip current block if (blockID != ev.blockId) { // copy new nwkskey option to all other blocks on workspace this.workspace.blockDB_[blockID].setFieldValue(this.getField('NWKSKEY').text_, 'NWKSKEY'); } } } } } // on block create if (ev.type == Blockly.Events.BLOCK_CREATE) { for (var blockID in this.workspace.blockDB_) { if (this.workspace.blockDB_[blockID].type == this.type) { // skip current block if (blockID != ev.blockId) { // copy current tx power value on workspace to this new block this.setFieldValue(this.workspace.blockDB_[blockID].getField('TX_POWER').value_, 'TX_POWER'); // copy new channel option to all other blocks on workspace this.setFieldValue(this.workspace.blockDB_[blockID].getField('CHANNEL').value_, 'CHANNEL'); // copy new nwkskey option to all other blocks on workspace this.setFieldValue(this.workspace.blockDB_[blockID].getField('NWKSKEY').text_, 'NWKSKEY'); break; } } } } } } } }; /*Blockly.Blocks["kbnet2_e28t12s.is_error"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.KBNET2_E28T12S_IS_ERROR_TITLE); this.setOutput(true, 'Boolean'); this.setInputsInline(true); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(230); this.setTooltip(Blockly.Msg.KBNET2_E28T12S_IS_ERROR_TOOLTIP); this.setHelpUrl(Blockly.Msg.KBNET2_E28T12S_IS_ERROR_HELPURL); } };*/ var appskey_validator = function(val) { var re = /[0-9A-Fa-f]{32}/g; if ((val.length == 32) && (re.test(val))) { return val.toUpperCase(); } else { // default return DEFAULT_KBNET2_E28T12S_APPSKEY; } }; var nwkskey_validator = function(val) { var re = /[0-9A-Fa-f]{32}/g; if ((val.length == 32) && (re.test(val))) { return val.toUpperCase(); } else { // default return DEFAULT_KBNET2_E28T12S_NWKSKEY; } }; Blockly.JavaScript['kbnet2_e28t12s.send_01'] = function(block) { var value_1 = Blockly.JavaScript.valueToCode(block, 'VALUE_1', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var value_2 = Blockly.JavaScript.valueToCode(block, 'VALUE_2', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var value_3 = Blockly.JavaScript.valueToCode(block, 'VALUE_3', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var value_4 = Blockly.JavaScript.valueToCode(block, 'VALUE_4', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var value_5 = Blockly.JavaScript.valueToCode(block, 'VALUE_5', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var value_6 = Blockly.JavaScript.valueToCode(block, 'VALUE_6', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var value_7 = Blockly.JavaScript.valueToCode(block, 'VALUE_7', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var nwkskey = block.getFieldValue('NWKSKEY'); //Blockly.JavaScript.valueToCode(block, 'NWKSKEY', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var tx_power_index = parseInt(block.getFieldValue('TX_POWER_INDEX')); var rf_frequency = parseInt(block.getFieldValue('RF_FREQUENCY')); return 'DEV_IO.KBNET2_E28T12S(' + tx_power_index + ', ' + rf_frequency + ', ' + '"' + nwkskey.toLowerCase() + '"' + ').send_01(' + value_1 + ', ' + value_2 + ', ' + value_3 + ', ' + value_4 + ', ' + value_5 + ', ' + value_6 + ', ' + value_7 + ');\n'; }; /*Blockly.JavaScript['kbnet2_e28t12s.is_error'] = function(block) { return [ 'DEV_IO.KBNET2_E28T12S(' + tx_power_index + ', ' + rf_frequency + ', ' + '"' + nwkskey.toLowerCase() + '"' + ').is_error()', Blockly.JavaScript.ORDER_ATOMIC ]; };*/ Blockly.Msg.KBNET2_OLED_TITLE = "OLED"; Blockly.Msg.KBNET2_OLED_CLR_TITLE = "Clear Screen"; Blockly.Msg.KBNET2_OLED_CLR_TOOLTIP = "Clear OLED display"; Blockly.Msg.KBNET2_OLED_CLR_HELPURL = ""; Blockly.Msg.KBNET2_OLED_PRINT_TITLE = "Print"; Blockly.Msg.KBNET2_OLED_PRINT_TOOLTIP = "Print on OLED display at (column, row)"; Blockly.Msg.KBNET2_OLED_PRINT_HELPURL = ""; Blockly.Msg.KBNET2_OLED_PRINT_PREC_TITLE = "Print Number"; Blockly.Msg.KBNET2_OLED_PRINT_PREC_TOOLTIP = "Print number on OLED display at (column, row) with specific precision"; Blockly.Msg.KBNET2_OLED_PRINT_PREC_HELPURL = ""; Blockly.Msg.KBNET2_OLED_PRINT_BIG_TITLE = "Print Big"; Blockly.Msg.KBNET2_OLED_PRINT_BIG_TOOLTIP = "Print big font on OLED display at (column, row)"; Blockly.Msg.KBNET2_OLED_PRINT_BIG_HELPURL = ""; Blockly.Msg.KBNET2_OLED_PRINT_BIG_PREC_TITLE = "Print Number Big"; Blockly.Msg.KBNET2_OLED_PRINT_BIG_PREC_TOOLTIP = "Print big font number on OLED display at (column, row) with specific precision"; Blockly.Msg.KBNET2_OLED_PRINT_BIG_PREC_HELPURL = ""; Blockly.Msg.PRECISION_TITLE = "Precision"; Blockly.Msg.KBNET2_OLED_COLUMN_NUMBER_TOOLTIP = "Column value 1 to 21"; Blockly.Msg.KBNET2_OLED_COLUMN_NUMBER_HELPURL = ""; Blockly.Msg.KBNET2_OLED_ROW_NUMBER_TOOLTIP = "Row value 1 to 8"; Blockly.Msg.KBNET2_OLED_ROW_NUMBER_HELPURL = ""; Blockly.Msg.KBNET2_OLED_STRING_NUMBER_TOOLTIP = "String or number"; Blockly.Msg.KBNET2_OLED_STRING_NUMBER_HELPURL = ""; Blockly.Msg.KBNET2_OLED_NUMBER_TOOLTIP = "Number"; Blockly.Msg.KBNET2_OLED_NUMBER_HELPURL = ""; Blockly.Blocks["kbnet2_oled.clear"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.KBNET2_OLED_TITLE); this.appendDummyInput() .appendField(Blockly.Msg.KBNET2_OLED_CLR_TITLE); this.setInputsInline(true); this.setPreviousStatement(true); this.setNextStatement(true); this.setColour(230); this.setTooltip(Blockly.Msg.KBNET2_OLED_CLR_TOOLTIP); this.setHelpUrl(Blockly.Msg.KBNET2_OLED_CLR_HELPURL); } }; Blockly.Blocks["kbnet2_oled.putstr"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.KBNET2_OLED_TITLE); this.appendDummyInput() .appendField(Blockly.Msg.KBNET2_OLED_PRINT_TITLE + ' ('); this.appendValueInput("COLUMN") .setCheck("Number"); this.appendDummyInput() .appendField(','); this.appendValueInput("ROW") .setCheck("Number"); this.appendDummyInput() .appendField(')'); this.appendValueInput('VALUE'); this.setInputsInline(true); this.setPreviousStatement(true); this.setNextStatement(true); this.setColour(230); this.setTooltip(Blockly.Msg.KBNET2_OLED_PRINT_TOOLTIP); this.setHelpUrl(Blockly.Msg.KBNET2_OLED_PRINT_HELPURL); }, // custom xmlToolbox xmlToolbox: function() { return $(document.createElement('block')).attr({ type: 'kbnet2_oled.putstr' }).append('\ \ \ \ \ \ \ \ \ \ \ \ ' ); } }; Blockly.Blocks["kbnet2_oled.putstr_prec"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.KBNET2_OLED_TITLE); this.appendDummyInput() .appendField(Blockly.Msg.KBNET2_OLED_PRINT_PREC_TITLE + ' ('); this.appendValueInput("COLUMN") .setCheck("Number"); this.appendDummyInput() .appendField(','); this.appendValueInput("ROW") .setCheck("Number"); this.appendDummyInput() .appendField(')') .appendField(Blockly.Msg.PRECISION_TITLE) .appendField(new Blockly.FieldNumber(2, 0, 4, 1), 'PREC') .appendField(' '); this.appendValueInput('VALUE') .setCheck('Number'); this.setInputsInline(true); this.setPreviousStatement(true); this.setNextStatement(true); this.setColour(230); this.setTooltip(Blockly.Msg.KBNET2_OLED_PRINT_PREC_TOOLTIP); this.setHelpUrl(Blockly.Msg.KBNET2_OLED_PRINT_PREC_HELPURL); }, // custom xmlToolbox xmlToolbox: function() { return $(document.createElement('block')).attr({ type: 'kbnet2_oled.putstr_prec' }).append('\ \ \ \ \ \ \ \ \ \ \ \ ' ); } }; Blockly.Blocks["kbnet2_oled.putstr_big"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.KBNET2_OLED_TITLE); this.appendDummyInput() .appendField(Blockly.Msg.KBNET2_OLED_PRINT_BIG_TITLE + ' ('); this.appendValueInput("COLUMN") .setCheck("Number"); this.appendDummyInput() .appendField(','); this.appendValueInput("ROW") .setCheck("Number"); this.appendDummyInput() .appendField(')'); this.appendValueInput('VALUE'); this.setInputsInline(true); this.setPreviousStatement(true); this.setNextStatement(true); this.setColour(230); this.setTooltip(Blockly.Msg.KBNET2_OLED_PRINT_BIG_TOOLTIP); this.setHelpUrl(Blockly.Msg.KBNET2_OLED_PRINT_BIG_HELPURL); }, // custom xmlToolbox xmlToolbox: function() { return $(document.createElement('block')).attr({ type: 'kbnet2_oled.putstr_big' }).append('\ \ \ \ \ \ \ \ \ \ \ \ ' ); } }; Blockly.Blocks["kbnet2_oled.putstr_big_prec"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.KBNET2_OLED_TITLE); this.appendDummyInput() .appendField(Blockly.Msg.KBNET2_OLED_PRINT_BIG_PREC_TITLE + ' ('); this.appendValueInput("COLUMN") .setCheck("Number"); this.appendDummyInput() .appendField(','); this.appendValueInput("ROW") .setCheck("Number"); this.appendDummyInput() .appendField(')') .appendField(Blockly.Msg.PRECISION_TITLE) .appendField(new Blockly.FieldNumber(2, 0, 4, 1), 'PREC') .appendField(' '); this.appendValueInput('VALUE') .setCheck('Number'); this.setInputsInline(true); this.setPreviousStatement(true); this.setNextStatement(true); this.setColour(230); this.setTooltip(Blockly.Msg.KBNET2_OLED_PRINT_BIG_PREC_TOOLTIP); this.setHelpUrl(Blockly.Msg.KBNET2_OLED_PRINT_BIG_PREC_HELPURL); }, // custom xmlToolbox xmlToolbox: function() { return $(document.createElement('block')).attr({ type: 'kbnet2_oled.putstr_big_prec' }).append('\ \ \ \ \ \ \ \ \ \ \ \ ' ); } }; // hidden block (no generator defined), temporary used for shadow block Blockly.Blocks["kbnet2_oled.column_number"] = { init: function() { this.appendDummyInput() .appendField(new Blockly.FieldNumber(1, 1, 21, 1), 'VALUE'); this.setOutput(true, 'Number'); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(math_colour); this.setTooltip(Blockly.Msg.KBNET2_OLED_COLUMN_NUMBER_TOOLTIP); this.setHelpUrl(Blockly.Msg.KBNET2_OLED_COLUMN_NUMBER_HELPURL); }, // custom xmlToolboxcolumn xmlToolbox: function() { return null; // hidden block } }; Blockly.Blocks["kbnet2_oled.row_number"] = { init: function() { this.appendDummyInput() .appendField(new Blockly.FieldNumber(1, 1, 8, 1), 'VALUE'); this.setOutput(true, 'Number'); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(math_colour); this.setTooltip(Blockly.Msg.KBNET2_OLED_ROW_NUMBER_TOOLTIP); this.setHelpUrl(Blockly.Msg.KBNET2_OLED_ROW_NUMBER_HELPURL); }, // custom xmlToolbox xmlToolbox: function() { return null; // hidden block } }; Blockly.Blocks["kbnet2_oled.string_number"] = { init: function() { this.appendDummyInput() .appendField(new Blockly.FieldImage('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAQAAAAqJXdxAAAAn0lEQVQI1z3OMa5BURSF4f/cQhAKjUQhuQmFNwGJEUi0RKN5rU7FHKhpjEH3TEMtkdBSCY1EIv8r7nFX9e29V7EBAOvu7RPjwmWGH/VuF8CyN9/OAdvqIXYLvtRaNjx9mMTDyo+NjAN1HNcl9ZQ5oQMM3dgDUqDo1l8DzvwmtZN7mnD+PkmLa+4mhrxVA9fRowBWmVBhFy5gYEjKMfz9AylsaRRgGzvZAAAAAElFTkSuQmCC', 12, 12, '*')) .appendField(new Blockly.FieldTextInput('Hello World!'), 'VALUE') .appendField(new Blockly.FieldImage('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAQAAAAqJXdxAAAAqUlEQVQI1z3KvUpCcRiA8ef9E4JNHhI0aFEacm1o0BsI0Slx8wa8gLauoDnoBhq7DcfWhggONDmJJgqCPA7neJ7p934EOOKOnM8Q7PDElo/4x4lFb2DmuUjcUzS3URnGib9qaPNbuXvBO3sGPHJDRG6fGVdMSeWDP2q99FQdFrz26Gu5Tq7dFMzUvbXy8KXeAj57cOklgA+u1B5AoslLtGIHQMaCVnwDnADZIFIrXsoXrgAAAABJRU5ErkJggg==', 12, 12, '*')); this.setOutput(true, 'String'); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(basic_colour); this.setTooltip(Blockly.Msg.KBNET2_OLED_STRING_NUMBER_TOOLTIP); this.setHelpUrl(Blockly.Msg.KBNET2_OLED_STRING_NUMBER_TOOLTIP); }, // custom xmlToolbox xmlToolbox: function() { return null; // hidden block } }; Blockly.Blocks["kbnet2_oled.number"] = { init: function() { this.appendDummyInput() .appendField(new Blockly.FieldNumber(0, -9999999, 9999999, 0.01), 'VALUE'); this.setOutput(true, 'Number'); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(math_colour); this.setTooltip(Blockly.Msg.KBNET2_OLED_NUMBER_TOOLTIP); this.setHelpUrl(Blockly.Msg.KBNET2_OLED_NUMBER_HELPURL); }, // custom xmlToolbox xmlToolbox: function() { return null; // hidden block } }; Blockly.JavaScript['kbnet2_oled.clear'] = function(block) { return 'DEV_I2C1.KBNET2_OLED().clear();\n'; }; Blockly.JavaScript['kbnet2_oled.putstr'] = function(block) { var argument0 = Blockly.JavaScript.valueToCode(block, 'VALUE', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var column = Blockly.JavaScript.valueToCode(block, 'COLUMN', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var row = Blockly.JavaScript.valueToCode(block, 'ROW', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; return 'DEV_I2C1.KBNET2_OLED().putstr(' + column + ', ' + row + ', ' + argument0 + ');\n'; }; Blockly.JavaScript['kbnet2_oled.putstr_prec'] = function(block) { var argument0 = Blockly.JavaScript.valueToCode(block, 'VALUE', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var column = Blockly.JavaScript.valueToCode(block, 'COLUMN', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var row = Blockly.JavaScript.valueToCode(block, 'ROW', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var prec = parseInt(block.getFieldValue('PREC')); if (prec < 0) { prec = 0; } if (prec > 4) { prec = 4; } return 'DEV_I2C1.KBNET2_OLED().putstr(' + column + ', ' + row + ', ' + argument0 + ', ' + prec + ');\n'; }; Blockly.JavaScript['kbnet2_oled.putstr_big'] = function(block) { var argument0 = Blockly.JavaScript.valueToCode(block, 'VALUE', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var column = Blockly.JavaScript.valueToCode(block, 'COLUMN', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var row = Blockly.JavaScript.valueToCode(block, 'ROW', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; return 'DEV_I2C1.KBNET2_OLED().putstr_big(' + column + ', ' + row + ', ' + argument0 + ');\n'; }; Blockly.JavaScript['kbnet2_oled.putstr_big_prec'] = function(block) { var argument0 = Blockly.JavaScript.valueToCode(block, 'VALUE', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var column = Blockly.JavaScript.valueToCode(block, 'COLUMN', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var row = Blockly.JavaScript.valueToCode(block, 'ROW', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var prec = parseInt(block.getFieldValue('PREC')); if (prec < 0) { prec = 0; } if (prec > 4) { prec = 4; } return 'DEV_I2C1.KBNET2_OLED().putstr_big(' + column + ', ' + row + ', ' + argument0 + ', ' + prec + ');\n'; }; Blockly.JavaScript["kbnet2_oled.column_number"] = function(block) { // Numeric value. var code = parseFloat(block.getFieldValue('VALUE')); var order = code >= 0 ? Blockly.JavaScript.ORDER_ATOMIC : Blockly.JavaScript.ORDER_UNARY_NEGATION; return [code, order]; }; Blockly.JavaScript["kbnet2_oled.row_number"] = function(block) { return Blockly.JavaScript["kbnet2_oled.column_number"](block); }; Blockly.JavaScript["kbnet2_oled.string_number"] = function(block) { return [ '(char *)"' + block.getFieldValue('VALUE') + '"', Blockly.JavaScript.ORDER_ATOMIC ]; }; Blockly.JavaScript["kbnet2_oled.number"] = function(block) { return Blockly.JavaScript["kbnet2_oled.column_number"](block); }; Blockly.Msg.KBNET2_PMS9103M_GET_PM2_5_TITLE = "PMS9103M PM2.5"; Blockly.Msg.KBNET2_PMS9103M_GET_PM2_5_TOOLTIP = "Read PMS9103M PM2.5"; Blockly.Msg.KBNET2_PMS9103M_GET_PM2_5_HELPURL = ""; Blockly.Msg.KBNET2_PMS9103M_GET_PM10_TITLE = "PMS9103M PM10"; Blockly.Msg.KBNET2_PMS9103M_GET_PM10_TOOLTIP = "Read PMS9103M PM10"; Blockly.Msg.KBNET2_PMS9103M_GET_PM10_HELPURL = ""; Blockly.Msg.KBNET2_PMS9103M_IS_ERROR_TITLE = "PMS9103M Check Error"; Blockly.Msg.KBNET2_PMS9103M_IS_ERROR_TOOLTIP = "Check PMS9103M error status"; Blockly.Msg.KBNET2_PMS9103M_IS_ERROR_HELPURL = ""; Blockly.Msg.KBNET2_PMS9103M_POWER_OFF_TITLE = "PMS9103M Power Off"; Blockly.Msg.KBNET2_PMS9103M_POWER_OFF_TOOLTIP = "Turn PMS9103M power off"; Blockly.Msg.KBNET2_PMS9103M_POWER_OFF_HELPURL = ""; Blockly.Blocks["kbnet2_pms9103m.getpm2_5"] = { init: function () { this.appendDummyInput() .appendField(Blockly.Msg.KBNET2_PMS9103M_GET_PM2_5_TITLE); this.setOutput(true, 'Number'); this.setInputsInline(true); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(230); this.setTooltip(Blockly.Msg.KBNET2_PMS9103M_GET_PM2_5_TOOLTIP); this.setHelpUrl(Blockly.Msg.KBNET2_PMS9103M_GET_PM2_5_HELPURL); } }; Blockly.Blocks["kbnet2_pms9103m.getpm10"] = { init: function () { this.appendDummyInput() .appendField(Blockly.Msg.KBNET2_PMS9103M_GET_PM10_TITLE); this.setOutput(true, 'Number'); this.setInputsInline(true); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(230); this.setTooltip(Blockly.Msg.KBNET2_PMS9103M_GET_PM10_TOOLTIP); this.setHelpUrl(Blockly.Msg.KBNET2_PMS9103M_GET_PM10_HELPURL); } }; Blockly.Blocks["kbnet2_pms9103m.is_error"] = { init: function () { this.appendDummyInput() .appendField(Blockly.Msg.KBNET2_PMS9103M_IS_ERROR_TITLE); this.setOutput(true, 'Boolean'); this.setInputsInline(true); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(230); this.setTooltip(Blockly.Msg.KBNET2_PMS9103M_IS_ERROR_TOOLTIP); this.setHelpUrl(Blockly.Msg.KBNET2_PMS9103M_IS_ERROR_HELPURL); } }; Blockly.Blocks["kbnet2_pms9103m.power_off"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.KBNET2_PMS9103M_POWER_OFF_TITLE); this.setInputsInline(true); this.setPreviousStatement(true); this.setNextStatement(true); this.setColour(230); this.setTooltip(Blockly.Msg.KBNET2_PMS9103M_POWER_OFF_TOOLTIP); this.setHelpUrl(Blockly.Msg.KBNET2_PMS9103M_POWER_OFF_HELPURL); } }; Blockly.JavaScript['kbnet2_pms9103m.getpm2_5'] = function (block) { return [ 'DEV_IO.KBNET2_PMS9103M().get_pm2_5()', Blockly.JavaScript.ORDER_ATOMIC ]; }; Blockly.JavaScript['kbnet2_pms9103m.getpm10'] = function (block) { return [ 'DEV_IO.KBNET2_PMS9103M().get_pm10()', Blockly.JavaScript.ORDER_ATOMIC ]; }; Blockly.JavaScript['kbnet2_pms9103m.is_error'] = function (block) { return [ 'DEV_IO.KBNET2_PMS9103M().is_error()', Blockly.JavaScript.ORDER_ATOMIC ]; }; Blockly.JavaScript['kbnet2_pms9103m.power_off'] = function (block) { return 'DEV_IO.KBNET2_PMS9103M().power_off();\n'; }; Blockly.Msg.KBNET2_RV_GET_RAIN_VOLUME_MM_TITLE = "Rain Volume 24Hrs"; Blockly.Msg.KBNET2_RV_GET_RAIN_VOLUME_MM_TOOLTIP = "Read Rain Volume Last 24 Hours (mm.)"; Blockly.Msg.KBNET2_RV_GET_RAIN_VOLUME_MM_HELPURL = ""; Blockly.Msg.KBNET2_RV_GET_RAIN_VOLUME_COUNTER_TITLE = "24Hrs Rain Volume Counter"; Blockly.Msg.KBNET2_RV_GET_RAIN_VOLUME_COUNTER_TOOLTIP = "Read Rain Volume Counter Last 24 Hours"; Blockly.Msg.KBNET2_RV_GET_RAIN_VOLUME_COUNTER_HELPURL = ""; Blockly.Msg.KBNET2_RV_RESET_RAIN_VOLUME_TITLE = "Reset Rain Volume"; Blockly.Msg.KBNET2_RV_RESET_RAIN_VOLUME_TOOLTIP = "Reset Rain Volume"; Blockly.Msg.KBNET2_RV_RESET_RAIN_VOLUME_HELPURL = ""; Blockly.Blocks["kbnet2_rv.get_rain_volume_mm"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.KBNET2_RV_GET_RAIN_VOLUME_MM_TITLE); this.setOutput(true, 'Number'); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(230); this.setTooltip(Blockly.Msg.KBNET2_RV_GET_RAIN_VOLUME_MM_TOOLTIP); this.setHelpUrl(Blockly.Msg.KBNET2_RV_GET_RAIN_VOLUME_MM_HELPURL); } }; /* Blockly.Blocks["kbnet2_rv.get_rain_volume_counter"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.KBNET2_RV_GET_RAIN_VOLUME_COUNTER_TITLE); this.setOutput(true, 'Number'); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(230); this.setTooltip(Blockly.Msg.KBNET2_RV_GET_RAIN_VOLUME_COUNTER_TOOLTIP); this.setHelpUrl(Blockly.Msg.KBNET2_RV_GET_RAIN_VOLUME_COUNTER_HELPURL); } }; Blockly.Blocks["kbnet2_rv.reset_rain_volume"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.KBNET2_RV_RESET_RAIN_VOLUME_TITLE); this.setInputsInline(true); this.setPreviousStatement(true); this.setNextStatement(true); this.setColour(230); this.setTooltip(Blockly.KBNET2_RV_RESET_RAIN_VOLUME_TOOLTIP); this.setHelpUrl(Blockly.Msg.KBNET2_RV_RESET_RAIN_VOLUME_HELPURL); } }; */ Blockly.JavaScript['kbnet2_rv.get_rain_volume_mm'] = function(block) { return [ 'DEV_IO.KBNET2_RV()' + '.get_rain_volume_mm()', Blockly.JavaScript.ORDER_ATOMIC ]; }; Blockly.JavaScript['kbnet2_rv.get_rain_volume_counter'] = function(block) { return [ 'DEV_IO.KBNET2_RV()' + '.get_rain_volume_counter()', Blockly.JavaScript.ORDER_ATOMIC ]; }; Blockly.JavaScript['kbnet2_rv.reset_rain_volume'] = function(block) { return 'DEV_IO.KBNET2_RV().reset_rain_volume();\n'; }; Blockly.Msg.KBNET2_SHT3X_GET_TEMPERATURE_TITLE = "SHT3X Temperature"; Blockly.Msg.KBNET2_SHT3X_GET_TEMPERATURE_TOOLTIP = "Read SHT3X Temperature"; Blockly.Msg.KBNET2_SHT3X_GET_TEMPERATURE_HELPURL = ""; Blockly.Msg.KBNET2_SHT3X_GET_HUMIDITY_TITLE = "SHT3X Humidity"; Blockly.Msg.KBNET2_SHT3X_GET_HUMIDITY_TOOLTIP = "Read SHT3X Humidity"; Blockly.Msg.KBNET2_SHT3X_GET_HUMIDITY_HELPURL = ""; Blockly.Msg.KBNET2_SHT3X_IS_ERROR_TITLE = "SHT3X Error"; Blockly.Msg.KBNET2_SHT3X_IS_ERROR_TOOLTIP = "Check SHT3X Error (sensor not found)"; Blockly.Msg.KBNET2_SHT3X_IS_ERROR_HELPURL = ""; Blockly.Blocks["kbnet2_sht3x.get_temperature"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.KBNET2_SHT3X_GET_TEMPERATURE_TITLE); this.setOutput(true, 'Number'); this.setInputsInline(true); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(230); this.setTooltip(Blockly.Msg.KBNET2_SHT3X_GET_TEMPERATURE_TOOLTIP); this.setHelpUrl(Blockly.Msg.KBNET2_SHT3X_GET_TEMPERATURE_HELPURL); } }; Blockly.Blocks["kbnet2_sht3x.get_humidity"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.KBNET2_SHT3X_GET_HUMIDITY_TITLE); this.setOutput(true, 'Number'); this.setInputsInline(true); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(230); this.setTooltip(Blockly.Msg.KBNET2_SHT3X_GET_HUMIDITY_TOOLTIP); this.setHelpUrl(Blockly.Msg.KBNET2_SHT3X_GET_HUMIDITY_HELPURL); } }; Blockly.Blocks["kbnet2_sht3x.is_error"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.KBNET2_SHT3X_IS_ERROR_TITLE); this.setOutput(true, 'Boolean'); this.setInputsInline(true); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(230); this.setTooltip(Blockly.Msg.KBNET2_SHT3X_IS_ERROR_TOOLTIP); this.setHelpUrl(Blockly.Msg.KBNET2_SHT3X_IS_ERROR_HELPURL); } }; Blockly.JavaScript['kbnet2_sht3x.get_temperature'] = function(block) { return [ 'DEV_I2C1.KBNET2_SHT3X().get_temperature()', Blockly.JavaScript.ORDER_ATOMIC ]; }; Blockly.JavaScript['kbnet2_sht3x.get_humidity'] = function(block) { return [ 'DEV_I2C1.KBNET2_SHT3X().get_humidity()', Blockly.JavaScript.ORDER_ATOMIC ]; }; Blockly.JavaScript['kbnet2_sht3x.is_error'] = function(block) { return [ 'DEV_I2C1.KBNET2_SHT3X().is_error()', Blockly.JavaScript.ORDER_ATOMIC ]; }; Blockly.Msg.KBNET2_SLEEP_DEEP_WAKEUP_AFTER_TITLE = "Deep Sleep Wakeup After"; Blockly.Msg.KBNET2_SLEEP_DEEP_WAKEUP_AFTER_TOOLTIP = "Deep sleep and wake up after time out"; Blockly.Msg.KBNET2_SLEEP_DEEP_WAKEUP_AFTER_HELPURL = ""; Blockly.Msg.KBNET2_SLEEP_DEEP_WAKEUP_SECONDS = "seconds"; Blockly.Msg.KBNET2_SLEEP_DEEP_WAKEUP_EVERY_TITLE = "Deep Sleep Wakeup Every"; Blockly.Msg.KBNET2_SLEEP_DEEP_WAKEUP_EVERY_TOOLTIP = "Deep sleep and wake up every time out"; Blockly.Msg.KBNET2_SLEEP_DEEP_WAKEUP_EVERY_HELPURL = ""; Blockly.Blocks["kbnet2_sleep.deep_wakeup_after"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.KBNET2_SLEEP_DEEP_WAKEUP_AFTER_TITLE); this.appendDummyInput('WAKEUP_TIMEOUT_DUMMY') .appendField(new Blockly.FieldNumber(1, 1, 86400, 1), 'WAKEUP_TIMEOUT') // default, min, max, step .appendField(Blockly.Msg.KBNET2_SLEEP_DEEP_WAKEUP_SECONDS); this.setInputsInline(true); this.setPreviousStatement(true); this.setNextStatement(true); this.setColour(230); this.setTooltip(Blockly.Msg.KBNET2_SLEEP_DEEP_WAKEUP_AFTER_TOOLTIP); this.setHelpUrl(Blockly.Msg.KBNET2_SLEEP_DEEP_WAKEUP_AFTER_HELPURL); } }; Blockly.Blocks["kbnet2_sleep.deep_wakeup_every"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.KBNET2_SLEEP_DEEP_WAKEUP_EVERY_TITLE); this.appendDummyInput('WAKEUP_TIMEOUT_DUMMY') .appendField(new Blockly.FieldNumber(1, 1, 86400, 1), 'WAKEUP_TIMEOUT') // default, min, max, step .appendField(Blockly.Msg.KBNET2_SLEEP_DEEP_WAKEUP_SECONDS); this.setInputsInline(true); this.setPreviousStatement(true); this.setNextStatement(true); this.setColour(230); this.setTooltip(Blockly.Msg.KBNET2_SLEEP_DEEP_WAKEUP_EVERY_TOOLTIP); this.setHelpUrl(Blockly.Msg.KBNET2_SLEEP_DEEP_WAKEUP_EVERY_HELPURL); } }; Blockly.JavaScript['kbnet2_sleep.deep_wakeup_after'] = function(block) { var wakeup_timeout_ms = 1000 * parseInt(block.getFieldValue('WAKEUP_TIMEOUT')); return 'DEV_IO.KBNET2_SLEEP().deep_wakeup_after(' + wakeup_timeout_ms + ');\n'; }; Blockly.JavaScript['kbnet2_sleep.deep_wakeup_every'] = function(block) { var wakeup_timeout_ms = 1000 * parseInt(block.getFieldValue('WAKEUP_TIMEOUT')); return 'DEV_IO.KBNET2_SLEEP().deep_wakeup_every(' + wakeup_timeout_ms + ');\n'; }; Blockly.Msg.KBNET2_WD_GET_WIND_DIRECTION_DEGREES_TITLE = "Wind Direction"; Blockly.Msg.KBNET2_WD_GET_WIND_DIRECTION_DEGREES_TOOLTIP = "Read KidBright-Net-2 Wind Direction (degrees)"; Blockly.Msg.KBNET2_WD_GET_WIND_DIRECTION_DEGREES_HELPURL = ""; Blockly.Msg.KBNET2_WD_IS_ERROR_TITLE = "Wind Direction Error"; Blockly.Msg.KBNET2_WD_IS_ERROR_TOOLTIP = "KidBright-Net-2 Wind Direction Error (sensor not found)"; Blockly.Msg.KBNET2_WD_IS_ERROR_HELPURL = ""; Blockly.Blocks["kbnet2_wd.get_wind_direction_degrees"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.KBNET2_WD_GET_WIND_DIRECTION_DEGREES_TITLE); this.setOutput(true, 'Number'); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(230); this.setTooltip(Blockly.Msg.KBNET2_WD_GET_WIND_DIRECTION_DEGREES_TOOLTIP); this.setHelpUrl(Blockly.Msg.KBNET2_WD_GET_WIND_DIRECTION_DEGREES_HELPURL); } }; Blockly.Blocks["kbnet2_wd.is_error"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.KBNET2_WD_IS_ERROR_TITLE); this.setOutput(true, 'Boolean'); this.setInputsInline(true); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(230); this.setTooltip(Blockly.Msg.KBNET2_WD_IS_ERROR_TOOLTIP); this.setHelpUrl(Blockly.Msg.KBNET2_WD_IS_ERROR_HELPURL); } }; Blockly.JavaScript['kbnet2_wd.get_wind_direction_degrees'] = function(block) { return [ 'DEV_IO.KBNET2_WD()' + '.get_wind_direction_degrees()', Blockly.JavaScript.ORDER_ATOMIC ]; }; Blockly.JavaScript['kbnet2_wd.is_error'] = function(block) { return [ 'DEV_IO.KBNET2_WD()' + '.is_error()', Blockly.JavaScript.ORDER_ATOMIC ]; }; Blockly.Msg.KBNET2_WS_GET_WIND_SPEED_KM_H_TITLE = "Wind Speed"; Blockly.Msg.KBNET2_WS_GET_WIND_SPEED_KM_H_TOOLTIP = "Read Wind Speed (km/h)"; Blockly.Msg.KBNET2_WS_GET_WIND_SPEED_KM_H_HELPURL = ""; Blockly.Msg.KBNET2_WS_GET_WIND_SPEED_KM_H_TEXT_TITLE = "Wind Speed Text"; Blockly.Msg.KBNET2_WS_GET_WIND_SPEED_KM_H_TEXT_TOOLTIP = "Read Wind Speed (km/h) Text"; Blockly.Msg.KBNET2_WS_GET_WIND_SPEED_KM_H_TEXT_HELPURL = ""; Blockly.Blocks["kbnet2_ws.get_wind_speed_km_h"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.KBNET2_WS_GET_WIND_SPEED_KM_H_TITLE); this.setOutput(true, 'Number'); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(230); this.setTooltip(Blockly.Msg.KBNET2_WS_GET_WIND_SPEED_KM_H_TOOLTIP); this.setHelpUrl(Blockly.Msg.KBNET2_WS_GET_WIND_SPEED_KM_H_HELPURL); } }; /* Blockly.Blocks["kbnet2_ws.get_wind_speed_km_h_text"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.KBNET2_WS_GET_WIND_SPEED_KM_H_TEXT_TITLE) .appendField(Blockly.Msg.PRECISION_TITLE) .appendField(new Blockly.FieldNumber(1, 0, 6, 1), 'PREC'); this.setOutput(true, 'String'); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(230); this.setTooltip(Blockly.Msg.KBNET2_WS_GET_WIND_SPEED_KM_H_TEXT_TOOLTIP); this.setHelpUrl(Blockly.Msg.KBNET2_WS_GET_WIND_SPEED_KM_H_TEXT_HELPURL); } }; */ Blockly.JavaScript['kbnet2_ws.get_wind_speed_km_h'] = function(block) { return [ 'DEV_IO.KBNET2_WS()' + '.get_wind_speed_km_h()', Blockly.JavaScript.ORDER_ATOMIC ]; }; Blockly.JavaScript['kbnet2_ws.get_wind_speed_km_h_text'] = function(block) { var prec = parseInt(block.getFieldValue('PREC')); return [ 'DEV_IO.KBNET2_WS()' + '.get_wind_speed_km_h_text(' + prec + ')', Blockly.JavaScript.ORDER_ATOMIC ]; }; Blockly.Msg.WS2812B = "WS2812B"; Blockly.Msg.WS2812B_POSITION = "Position"; Blockly.Msg.WS2812B_RED = "Red"; Blockly.Msg.WS2812B_GREEN = "Green"; Blockly.Msg.WS2812B_BLUE = "Blue"; Blockly.Msg.WS2812B_COLOR = "Color"; Blockly.Msg.WS2812B_GET_PIXEL_NUM_TITLE = "Get Pixel Number"; Blockly.Msg.WS2812B_GET_PIXEL_NUM_TOOLTIP = "Get WS2812B pixel number used in string"; Blockly.Msg.WS2812B_GET_PIXEL_NUM_HELPURL = ""; Blockly.Msg.WS2812B_SET_PIXEL_NUM_TITLE = "Set Pixel Number"; Blockly.Msg.WS2812B_SET_PIXEL_NUM_TOOLTIP = "Set WS2812B pixel number used in string"; Blockly.Msg.WS2812B_SET_PIXEL_NUM_HELPURL = ""; Blockly.Msg.WS2812B_PIXEL_RGB_TOOLTIP = "Show WS2812B pixel red,green,blue value 0 to 255 at selected position value 1 to number of pixel"; Blockly.Msg.WS2812B_PIXEL_RGB_HELPURL = ""; Blockly.Msg.WS2812B_PIXEL_COLOR_PICKER_TOOLTIP = "Show WS2812B pixel from color picker at selected position value 1 to number of pixel"; Blockly.Msg.WS2812B_PIXEL_COLOR_PICKER_HELPURL = ""; Blockly.Msg.WS2812B_POSITION_NUMBER_TOOLTIP = "Position value 1 to number of pixel"; Blockly.Msg.WS2812B_POSITION_NUMBER_HELPURL = ""; Blockly.Msg.WS2812B_COLOR_NUMBER_TOOLTIP = "Color value 0 to 255"; Blockly.Msg.WS2812B_COLOR_NUMBER_HELPURL = ""; Blockly.Blocks["ws2812b_rmt.set_pixel_num"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.WS2812B) .appendField(new Blockly.FieldDropdown([ ["OUT1", "OUT1_GPIO"], ["OUT2", "OUT2_GPIO"] ]), 'OUTPUT') .appendField(Blockly.Msg.WS2812B_SET_PIXEL_NUM_TITLE) .appendField(new Blockly.FieldNumber(64, 1, 64, 1), 'VALUE'); // default, min, max, step this.setPreviousStatement(true); this.setNextStatement(true); this.setColour(160); this.setTooltip(Blockly.Msg.WS2812B_SET_PIXEL_NUM_TOOLTIP); this.setHelpUrl(Blockly.Msg.WS2812B_SET_PIXEL_NUM_HELPURL); } }; Blockly.Blocks["ws2812b_rmt.get_pixel_num"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.WS2812B) .appendField(new Blockly.FieldDropdown([ ["OUT1", "OUT1_GPIO"], ["OUT2", "OUT2_GPIO"] ]), 'OUTPUT') .appendField(Blockly.Msg.WS2812B_GET_PIXEL_NUM_TITLE); this.setOutput(true, 'Number'); this.setColour(160); this.setTooltip(Blockly.Msg.WS2812B_GET_PIXEL_NUM_TOOLTIP); this.setHelpUrl(Blockly.Msg.WS2812B_GET_PIXEL_NUM_HELPURL); } }; Blockly.Blocks["ws2812b_rmt.pixel_rgb"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.WS2812B) .appendField(new Blockly.FieldDropdown([ ["OUT1", "OUT1_GPIO"], ["OUT2", "OUT2_GPIO"] ]), 'OUTPUT'); this.appendDummyInput() .appendField(Blockly.Msg.WS2812B_POSITION); this.appendValueInput("POS") .setCheck("Number"); this.appendDummyInput() .appendField(Blockly.Msg.WS2812B_RED); this.appendValueInput("RED") .setCheck("Number"); this.appendDummyInput() .appendField(Blockly.Msg.WS2812B_GREEN); this.appendValueInput("GREEN") .setCheck("Number"); this.appendDummyInput() .appendField(Blockly.Msg.WS2812B_BLUE); this.appendValueInput("BLUE") .setCheck("Number"); this.setInputsInline(true); this.setPreviousStatement(true); this.setNextStatement(true); this.setColour(160); this.setTooltip(Blockly.Msg.WS2812B_PIXEL_RGB_TOOLTIP); this.setHelpUrl(Blockly.Msg.WS2812B_PIXEL_RGB_HELPURL); }, // custom xmlToolbox xmlToolbox: function() { return $(document.createElement('block')).attr({ type: 'ws2812b_rmt.pixel_rgb' }).append('\ \ \ \ \ \ \ 255\ \ \ \ \ \ \ \ \ \ ' ); } }; Blockly.Blocks["ws2812b_rmt.pixel_color_picker"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.WS2812B) .appendField(new Blockly.FieldDropdown([ ["OUT1", "OUT1_GPIO"], ["OUT2", "OUT2_GPIO"] ]), 'OUTPUT'); this.appendDummyInput() .appendField(Blockly.Msg.WS2812B_POSITION); this.appendValueInput("POS") .setCheck("Number"); this.appendDummyInput() .appendField(Blockly.Msg.WS2812B_COLOR); this.appendDummyInput() .appendField(new Blockly.FieldColour("#ff0000"), "COLOR"); this.setInputsInline(true); this.setPreviousStatement(true); this.setNextStatement(true); this.setColour(160); this.setTooltip(Blockly.Msg.WS2812B_PIXEL_COLOR_PICKER_TOOLTIP); this.setHelpUrl(Blockly.Msg.WS2812B_PIXEL_COLOR_PICKER_HELPURL); } , // custom xmlToolbox xmlToolbox: function() { return $(document.createElement('block')).attr({ type: 'ws2812b_rmt.pixel_color_picker' }).append('\ \ \ \ ' ); } }; // hidden block (no generator defined), temporary used for shadow block Blockly.Blocks["ws2812b_rmt.position_number"] = { init: function() { this.appendDummyInput() .appendField(new Blockly.FieldNumber(1, 1, 64, 1), 'VALUE'); this.setOutput(true, 'Number'); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(math_colour); this.setTooltip(Blockly.Msg.WS2812B_POSITION_NUMBER_TOOLTIP); this.setHelpUrl(Blockly.Msg.WS2812B_POSITION_NUMBER_HELPURL); }, // custom xmlToolbox xmlToolbox: function() { return null; // hidden block } }; Blockly.Blocks["ws2812b_rmt.color_number"] = { init: function() { this.appendDummyInput() .appendField(new Blockly.FieldNumber(0, 0, 255, 1), 'VALUE'); this.setOutput(true, 'Number'); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(math_colour); this.setTooltip(Blockly.Msg.WS2812B_COLOR_NUMBER_TOOLTIP); this.setHelpUrl(Blockly.Msg.WS2812B_COLOR_NUMBER_HELPURL); }, // custom xmlToolbox xmlToolbox: function() { return null; // hidden block } }; Blockly.JavaScript['ws2812b_rmt.get_pixel_num'] = function(block) { return [ 'DEV_IO.WS2812B_RMT(' + block.getFieldValue('OUTPUT') + ').get_pixel_num()', Blockly.JavaScript.ORDER_ATOMIC ]; }; Blockly.JavaScript['ws2812b_rmt.set_pixel_num'] = function(block) { return 'DEV_IO.WS2812B_RMT(' + block.getFieldValue('OUTPUT') + ')' + '.set_pixel_num(' + block.getFieldValue('VALUE') + ');\n'; }; Blockly.JavaScript['ws2812b_rmt.pixel_rgb'] = function(block) { var pos = Blockly.JavaScript.valueToCode(block, 'POS', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var red = Blockly.JavaScript.valueToCode(block, 'RED', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var green = Blockly.JavaScript.valueToCode(block, 'GREEN', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var blue = Blockly.JavaScript.valueToCode(block, 'BLUE', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; return 'DEV_IO.WS2812B_RMT(' + block.getFieldValue('OUTPUT') + ')' + '.pixel_rgb(' + pos + ', ' + red + ', ' + green + ', ' + blue + ');\n'; }; Blockly.JavaScript['ws2812b_rmt.pixel_color_picker'] = function(block) { var pos = Blockly.JavaScript.valueToCode(block, 'POS', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var color = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(block.getFieldValue('COLOR')); if (color) { var red = parseInt(color[1], 16); var green = parseInt(color[2], 16); var blue = parseInt(color[3], 16); return 'DEV_IO.WS2812B_RMT(' + block.getFieldValue('OUTPUT') + ')' + '.pixel_rgb(' + pos + ', ' + red + ', ' + green + ', ' + blue + ');\n'; } return '\n'; }; Blockly.JavaScript['ws2812b_rmt.position_number'] = function(block) { // Numeric value. var code = parseFloat(block.getFieldValue('VALUE')); var order = code >= 0 ? Blockly.JavaScript.ORDER_ATOMIC : Blockly.JavaScript.ORDER_UNARY_NEGATION; return [code, order]; }; Blockly.JavaScript['ws2812b_rmt.color_number'] = function(block) { return Blockly.JavaScript['ws2812b_rmt.position_number'](block); }; Blockly.Msg.OLED_128X64_I2C_TITLE = "I2C OLED 128x64"; Blockly.Msg.OLED_128X64_I2C_CLR_TITLE = "Clear Screen"; Blockly.Msg.OLED_128X64_I2C_CLR_TOOLTIP = "Clear I2C OLED 128x64 display"; Blockly.Msg.OLED_128X64_I2C_CLR_HELPURL = ""; Blockly.Msg.OLED_128X64_I2C_PRINT_TITLE = "Print"; Blockly.Msg.OLED_128X64_I2C_PRINT_TOOLTIP = "Print on I2C OLED 128x64 display at (column, row)"; Blockly.Msg.OLED_128X64_I2C_PRINT_HELPURL = ""; Blockly.Msg.OLED_128X64_I2C_PRINT_PREC_TITLE = "Print Number"; Blockly.Msg.OLED_128X64_I2C_PRINT_PREC_TOOLTIP = "Print number on I2C OLED 128x64 display at (column, row) with specific precision"; Blockly.Msg.OLED_128X64_I2C_PRINT_PREC_HELPURL = ""; Blockly.Msg.OLED_128X64_I2C_PRINT_BIG_TITLE = "Print Big"; Blockly.Msg.OLED_128X64_I2C_PRINT_BIG_TOOLTIP = "Print big font on I2C OLED 128x64 display at (column, row)"; Blockly.Msg.OLED_128X64_I2C_PRINT_BIG_HELPURL = ""; Blockly.Msg.OLED_128X64_I2C_PRINT_BIG_PREC_TITLE = "Print Number Big"; Blockly.Msg.OLED_128X64_I2C_PRINT_BIG_PREC_TOOLTIP = "Print big font number on I2C OLED 128x64 display at (column, row) with specific precision"; Blockly.Msg.OLED_128X64_I2C_PRINT_BIG_PREC_HELPURL = ""; Blockly.Msg.PRECISION_TITLE = "Precision"; Blockly.Msg.OLED_128X64_I2C_COLUMN_NUMBER_TOOLTIP = "Column value 1 to 21"; Blockly.Msg.OLED_128X64_I2C_COLUMN_NUMBER_HELPURL = ""; Blockly.Msg.OLED_128X64_I2C_ROW_NUMBER_TOOLTIP = "Row value 1 to 8"; Blockly.Msg.OLED_128X64_I2C_ROW_NUMBER_HELPURL = ""; Blockly.Msg.OLED_128X64_I2C_STRING_NUMBER_TOOLTIP = "String or number"; Blockly.Msg.OLED_128X64_I2C_STRING_NUMBER_HELPURL = ""; Blockly.Msg.OLED_128X64_I2C_NUMBER_TOOLTIP = "Number"; Blockly.Msg.OLED_128X64_I2C_NUMBER_HELPURL = ""; function oled128x64_init(_this) { // oled chipset _this.appendDummyInput() .appendField(new Blockly.FieldDropdown([ ["SSD1306", "ocs_ssd1306"], ["SH1106", "ocs_sh1106"] ]), 'CHIPSET'); // i2c channel 0 to 64 var channel_array = []; for (var i = 0;i <= 64; i++) { channel_array.push([String(i), String(i)]); } _this.appendDummyInput() .appendField(Blockly.Msg.CHANNEL) .appendField(new Blockly.FieldDropdown(channel_array), 'CHANNEL'); // device addess _this.appendDummyInput() .appendField(Blockly.Msg.ADDRESS) .appendField(new Blockly.FieldDropdown([ ["0x3C", "60"], ["0x3D", "61"] ]), 'ADDRESS'); } Blockly.Blocks["oled_128x64_i2c.clear"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.OLED_128X64_I2C_TITLE); // init oled128x64_init(this); this.appendDummyInput() .appendField(Blockly.Msg.OLED_128X64_I2C_CLR_TITLE); this.setInputsInline(true); this.setPreviousStatement(true); this.setNextStatement(true); this.setColour(160); this.setTooltip(Blockly.Msg.OLED_128X64_I2C_CLR_TOOLTIP); this.setHelpUrl(Blockly.Msg.OLED_128X64_I2C_CLR_HELPURL); } }; Blockly.Blocks["oled_128x64_i2c.putstr"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.OLED_128X64_I2C_TITLE); // init oled128x64_init(this); this.appendDummyInput() .appendField(Blockly.Msg.OLED_128X64_I2C_PRINT_TITLE + ' ('); this.appendValueInput("COLUMN") .setCheck("Number"); this.appendDummyInput() .appendField(','); this.appendValueInput("ROW") .setCheck("Number"); this.appendDummyInput() .appendField(')'); this.appendValueInput('VALUE'); this.setInputsInline(true); this.setPreviousStatement(true); this.setNextStatement(true); this.setColour(160); this.setTooltip(Blockly.Msg.OLED_128X64_I2C_PRINT_TOOLTIP); this.setHelpUrl(Blockly.Msg.OLED_128X64_I2C_PRINT_HELPURL); }, // custom xmlToolbox xmlToolbox: function() { return $(document.createElement('block')).attr({ type: 'oled_128x64_i2c.putstr' }).append('\ \ \ \ \ \ \ \ \ \ \ \ ' ); } }; Blockly.Blocks["oled_128x64_i2c.putstr_prec"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.OLED_128X64_I2C_TITLE); // init oled128x64_init(this); this.appendDummyInput() .appendField(Blockly.Msg.OLED_128X64_I2C_PRINT_PREC_TITLE + ' ('); this.appendValueInput("COLUMN") .setCheck("Number"); this.appendDummyInput() .appendField(','); this.appendValueInput("ROW") .setCheck("Number"); this.appendDummyInput() .appendField(')') .appendField(Blockly.Msg.PRECISION_TITLE) .appendField(new Blockly.FieldNumber(2, 0, 4, 1), 'PREC') .appendField(' '); this.appendValueInput('VALUE') .setCheck('Number'); this.setInputsInline(true); this.setPreviousStatement(true); this.setNextStatement(true); this.setColour(160); this.setTooltip(Blockly.Msg.OLED_128X64_I2C_PRINT_PREC_TOOLTIP); this.setHelpUrl(Blockly.Msg.OLED_128X64_I2C_PRINT_PREC_HELPURL); }, // custom xmlToolbox xmlToolbox: function() { return $(document.createElement('block')).attr({ type: 'oled_128x64_i2c.putstr_prec' }).append('\ \ \ \ \ \ \ \ \ \ \ \ ' ); } }; Blockly.Blocks["oled_128x64_i2c.putstr_big"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.OLED_128X64_I2C_TITLE); // init oled128x64_init(this); this.appendDummyInput() .appendField(Blockly.Msg.OLED_128X64_I2C_PRINT_BIG_TITLE + ' ('); this.appendValueInput("COLUMN") .setCheck("Number"); this.appendDummyInput() .appendField(','); this.appendValueInput("ROW") .setCheck("Number"); this.appendDummyInput() .appendField(')'); this.appendValueInput('VALUE'); this.setInputsInline(true); this.setPreviousStatement(true); this.setNextStatement(true); this.setColour(160); this.setTooltip(Blockly.Msg.OLED_128X64_I2C_PRINT_BIG_TOOLTIP); this.setHelpUrl(Blockly.Msg.OLED_128X64_I2C_PRINT_BIG_HELPURL); }, // custom xmlToolbox xmlToolbox: function() { return $(document.createElement('block')).attr({ type: 'oled_128x64_i2c.putstr_big' }).append('\ \ \ \ \ \ \ \ \ \ \ \ ' ); } }; Blockly.Blocks["oled_128x64_i2c.putstr_big_prec"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.OLED_128X64_I2C_TITLE); // init oled128x64_init(this); this.appendDummyInput() .appendField(Blockly.Msg.OLED_128X64_I2C_PRINT_BIG_PREC_TITLE + ' ('); this.appendValueInput("COLUMN") .setCheck("Number"); this.appendDummyInput() .appendField(','); this.appendValueInput("ROW") .setCheck("Number"); this.appendDummyInput() .appendField(')') .appendField(Blockly.Msg.PRECISION_TITLE) .appendField(new Blockly.FieldNumber(2, 0, 4, 1), 'PREC') .appendField(' '); this.appendValueInput('VALUE') .setCheck('Number'); this.setInputsInline(true); this.setPreviousStatement(true); this.setNextStatement(true); this.setColour(160); this.setTooltip(Blockly.Msg.OLED_128X64_I2C_PRINT_BIG_PREC_TOOLTIP); this.setHelpUrl(Blockly.Msg.OLED_128X64_I2C_PRINT_BIG_PREC_HELPURL); }, // custom xmlToolbox xmlToolbox: function() { return $(document.createElement('block')).attr({ type: 'oled_128x64_i2c.putstr_big_prec' }).append('\ \ \ \ \ \ \ \ \ \ \ \ ' ); } }; // hidden block (no generator defined), temporary used for shadow block Blockly.Blocks["oled_128x64_i2c.column_number"] = { init: function() { this.appendDummyInput() .appendField(new Blockly.FieldNumber(1, 1, 21, 1), 'VALUE'); this.setOutput(true, 'Number'); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(math_colour); this.setTooltip(Blockly.Msg.OLED_128X64_I2C_COLUMN_NUMBER_TOOLTIP); this.setHelpUrl(Blockly.Msg.OLED_128X64_I2C_COLUMN_NUMBER_HELPURL); }, // custom xmlToolboxcolumn xmlToolbox: function() { return null; // hidden block } }; Blockly.Blocks["oled_128x64_i2c.row_number"] = { init: function() { this.appendDummyInput() .appendField(new Blockly.FieldNumber(1, 1, 8, 1), 'VALUE'); this.setOutput(true, 'Number'); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(math_colour); this.setTooltip(Blockly.Msg.OLED_128X64_I2C_ROW_NUMBER_TOOLTIP); this.setHelpUrl(Blockly.Msg.OLED_128X64_I2C_ROW_NUMBER_HELPURL); }, // custom xmlToolbox xmlToolbox: function() { return null; // hidden block } }; Blockly.Blocks["oled_128x64_i2c.string_number"] = { init: function() { this.appendDummyInput() .appendField(new Blockly.FieldImage('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAQAAAAqJXdxAAAAn0lEQVQI1z3OMa5BURSF4f/cQhAKjUQhuQmFNwGJEUi0RKN5rU7FHKhpjEH3TEMtkdBSCY1EIv8r7nFX9e29V7EBAOvu7RPjwmWGH/VuF8CyN9/OAdvqIXYLvtRaNjx9mMTDyo+NjAN1HNcl9ZQ5oQMM3dgDUqDo1l8DzvwmtZN7mnD+PkmLa+4mhrxVA9fRowBWmVBhFy5gYEjKMfz9AylsaRRgGzvZAAAAAElFTkSuQmCC', 12, 12, '*')) .appendField(new Blockly.FieldTextInput('Hello World!'), 'VALUE') .appendField(new Blockly.FieldImage('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAQAAAAqJXdxAAAAqUlEQVQI1z3KvUpCcRiA8ef9E4JNHhI0aFEacm1o0BsI0Slx8wa8gLauoDnoBhq7DcfWhggONDmJJgqCPA7neJ7p934EOOKOnM8Q7PDElo/4x4lFb2DmuUjcUzS3URnGib9qaPNbuXvBO3sGPHJDRG6fGVdMSeWDP2q99FQdFrz26Gu5Tq7dFMzUvbXy8KXeAj57cOklgA+u1B5AoslLtGIHQMaCVnwDnADZIFIrXsoXrgAAAABJRU5ErkJggg==', 12, 12, '*')); this.setOutput(true, 'String'); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(basic_colour); this.setTooltip(Blockly.Msg.OLED_128X64_I2C_STRING_NUMBER_TOOLTIP); this.setHelpUrl(Blockly.Msg.OLED_128X64_I2C_STRING_NUMBER_TOOLTIP); }, // custom xmlToolbox xmlToolbox: function() { return null; // hidden block } }; Blockly.Blocks["oled_128x64_i2c.number"] = { init: function() { this.appendDummyInput() .appendField(new Blockly.FieldNumber(0, -9999999, 9999999, 0.01), 'VALUE'); this.setOutput(true, 'Number'); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(math_colour); this.setTooltip(Blockly.Msg.OLED_128X64_I2C_NUMBER_TOOLTIP); this.setHelpUrl(Blockly.Msg.OLED_128X64_I2C_NUMBER_HELPURL); }, // custom xmlToolbox xmlToolbox: function() { return null; // hidden block } }; Blockly.JavaScript['oled_128x64_i2c.clear'] = function(block) { return 'DEV_I2C1.OLED_128X64_I2C(' + block.getFieldValue('CHIPSET') + ', ' + block.getFieldValue('CHANNEL') + ', ' + block.getFieldValue('ADDRESS') + ').clear();\n'; }; Blockly.JavaScript['oled_128x64_i2c.putstr'] = function(block) { var argument0 = Blockly.JavaScript.valueToCode(block, 'VALUE', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var column = Blockly.JavaScript.valueToCode(block, 'COLUMN', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var row = Blockly.JavaScript.valueToCode(block, 'ROW', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; return 'DEV_I2C1.OLED_128X64_I2C(' + block.getFieldValue('CHIPSET') + ', ' + block.getFieldValue('CHANNEL') + ', ' + block.getFieldValue('ADDRESS') + ').putstr(' + column + ', ' + row + ', ' + argument0 + ');\n'; }; Blockly.JavaScript['oled_128x64_i2c.putstr_prec'] = function(block) { var argument0 = Blockly.JavaScript.valueToCode(block, 'VALUE', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var column = Blockly.JavaScript.valueToCode(block, 'COLUMN', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var row = Blockly.JavaScript.valueToCode(block, 'ROW', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var prec = parseInt(block.getFieldValue('PREC')); if (prec < 0) { prec = 0; } if (prec > 4) { prec = 4; } return 'DEV_I2C1.OLED_128X64_I2C(' + block.getFieldValue('CHIPSET') + ', ' + block.getFieldValue('CHANNEL') + ', ' + block.getFieldValue('ADDRESS') + ').putstr(' + column + ', ' + row + ', ' + argument0 + ', ' + prec + ');\n'; }; Blockly.JavaScript['oled_128x64_i2c.putstr_big'] = function(block) { var argument0 = Blockly.JavaScript.valueToCode(block, 'VALUE', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var column = Blockly.JavaScript.valueToCode(block, 'COLUMN', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var row = Blockly.JavaScript.valueToCode(block, 'ROW', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; return 'DEV_I2C1.OLED_128X64_I2C(' + block.getFieldValue('CHIPSET') + ', ' + block.getFieldValue('CHANNEL') + ', ' + block.getFieldValue('ADDRESS') + ').putstr_big(' + column + ', ' + row + ', ' + argument0 + ');\n'; }; Blockly.JavaScript['oled_128x64_i2c.putstr_big_prec'] = function(block) { var argument0 = Blockly.JavaScript.valueToCode(block, 'VALUE', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var column = Blockly.JavaScript.valueToCode(block, 'COLUMN', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var row = Blockly.JavaScript.valueToCode(block, 'ROW', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var prec = parseInt(block.getFieldValue('PREC')); if (prec < 0) { prec = 0; } if (prec > 4) { prec = 4; } return 'DEV_I2C1.OLED_128X64_I2C(' + block.getFieldValue('CHIPSET') + ', ' + block.getFieldValue('CHANNEL') + ', ' + block.getFieldValue('ADDRESS') + ').putstr_big(' + column + ', ' + row + ', ' + argument0 + ', ' + prec + ');\n'; }; Blockly.JavaScript["oled_128x64_i2c.column_number"] = function(block) { // Numeric value. var code = parseFloat(block.getFieldValue('VALUE')); var order = code >= 0 ? Blockly.JavaScript.ORDER_ATOMIC : Blockly.JavaScript.ORDER_UNARY_NEGATION; return [code, order]; }; Blockly.JavaScript["oled_128x64_i2c.row_number"] = function(block) { return Blockly.JavaScript["oled_128x64_i2c.column_number"](block); }; Blockly.JavaScript["oled_128x64_i2c.string_number"] = function(block) { return [ '(char *)"' + block.getFieldValue('VALUE') + '"', Blockly.JavaScript.ORDER_ATOMIC ]; }; Blockly.JavaScript["oled_128x64_i2c.number"] = function(block) { return Blockly.JavaScript["oled_128x64_i2c.column_number"](block); }; Blockly.Msg.DS18B20_I2C_GET_TEMPERATURE_TITLE = "DS18B20 I2C Temperature"; Blockly.Msg.DS18B20_I2C_GET_TEMPERATURE_TOOLTIP = "Read DS18B20 I2C Temperature"; Blockly.Msg.DS18B20_I2C_GET_TEMPERATURE_HELPURL = ""; Blockly.Blocks["ds18b20_i2c.get_temperature"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.DS18B20_I2C_GET_TEMPERATURE_TITLE); // i2c channel 0 to 64 var channel_array = []; for (var i = 0;i <= 64; i++) { channel_array.push([String(i), String(i)]); } this.appendDummyInput() .appendField(Blockly.Msg.CHANNEL) .appendField(new Blockly.FieldDropdown(channel_array), 'CHANNEL'); // device addess (ds2482 i2c to 1-wire) this.appendDummyInput() .appendField(Blockly.Msg.ADDRESS) .appendField(new Blockly.FieldDropdown([ ["0x18", "24"], ["0x19", "25"], ["0x1A", "26"], ["0x1B", "27"] ]), 'ADDRESS'); this.setOutput(true, 'Number'); this.setInputsInline(true); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(58); this.setTooltip(Blockly.Msg.DS18B20_I2C_GET_TEMPERATURE_TOOLTIP); this.setHelpUrl(Blockly.Msg.DS18B20_I2C_GET_TEMPERATURE_HELPURL); } }; Blockly.JavaScript['ds18b20_i2c.get_temperature'] = function(block) { return [ 'DEV_I2C1.DS18B20_I2C(' + block.getFieldValue('CHANNEL') + ', ' + block.getFieldValue('ADDRESS') + ').get_temperature()', Blockly.JavaScript.ORDER_ATOMIC ]; }; Blockly.Msg.BYLNK_BEGIN_MESSAGE = "swcm_Service begin"; Blockly.Msg.BYLNK_BEGIN_TOOLTIP = "Setup Bylnk with token"; Blockly.Msg.BYLNK_WRITE_1_MESSAGE = "Service on Virtual Pin"; Blockly.Msg.BYLNK_WRITE_2_MESSAGE = "data received"; Blockly.Msg.BYLNK_WRITE_TOOLTIP = ""; Blockly.Msg.BYLNK_PARAM_INT_MESSAGE = "Service get received integer data"; Blockly.Msg.BYLNK_PARAM_INT_TOOLTIP = "use this block inside on data received to get the params"; Blockly.Msg.BYLNK_PARAM_DOUBLE_MESSAGE = "Service get received decimal data"; Blockly.Msg.BYLNK_PARAM_DOUBLE_TOOLTIP = "use this block inside on data received to get the params"; Blockly.Msg.BYLNK_PARAM_STR_MESSAGE = "Service get received string data"; Blockly.Msg.BYLNK_PARAM_STR_TOOLTIP = "use this block inside on data received to get the params"; Blockly.Msg.BYLNK_PUSH_DATA_MESSAGE = "Service write Virtual Pin"; Blockly.Msg.BYLNK_PUSH_DATA_TOOLTIP = "write data to virtual pin (please delay >100 ms between call)"; Blockly.Msg.BYLNK_READ_1_MESSAGE = "Service on Virtual Pin"; Blockly.Msg.BYLNK_READ_2_MESSAGE = "data request"; Blockly.Msg.BYLNK_READ_TOOLTIP = "Call when client request data on virtual pin (aka BLYNK_READ)"; Blockly.Blocks['blynk_begin'] = { init: function () { this.appendDummyInput() .appendField(Blockly.Msg.BYLNK_BEGIN_MESSAGE + " token:") .appendField(new Blockly.FieldTextInput(""), "auth"); this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.setColour(165); this.setTooltip(Blockly.Msg.BYLNK_BEGIN_TOOLTIP); this.setHelpUrl(""); } }; Blockly.Blocks['blynk_begin_wifi_local_server'] = { init: function () { this.appendDummyInput() .appendField(Blockly.Msg.BYLNK_BEGIN_MESSAGE + " token:") .appendField(new Blockly.FieldTextInput(""), "auth") .appendField("host:") .appendField(new Blockly.FieldTextInput(""), "host") .appendField("port:") .appendField(new Blockly.FieldNumber(8442, 1, 99999), "port"); this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.setColour(165); this.setTooltip(Blockly.Msg.BYLNK_BEGIN_TOOLTIP); this.setHelpUrl(""); } }; Blockly.Blocks['blynk_write'] = { init: function () { this.appendDummyInput() .appendField(Blockly.Msg.BYLNK_WRITE_1_MESSAGE) .appendField(new Blockly.FieldDropdown([ ["V0", "0"], ["V1", "1"], ["V2", "2"], ["V3", "3"], ["V4", "4"], ["V5", "5"], ["V6", "6"], ["V7", "7"], ["V8", "8"], ["V9", "9"], ["V10", "10"], ["V11", "11"], ["V12", "12"], ["V13", "13"], ["V14", "14"], ["V15", "15"], ["V16", "16"], ["V17", "17"], ["V18", "18"], ["V19", "19"], ["V20", "20"], ["V21", "21"], ["V22", "22"], ["V23", "23"], ["V24", "24"], ["V25", "25"], ["V26", "26"], ["V27", "27"], ["V28", "28"], ["V29", "29"], ["V30", "30"], ["V31", "31"], ["V32", "32"], ["V33", "33"], ["V34", "34"], ["V35", "35"], ["V36", "36"], ["V37", "37"], ["V38", "38"], ["V39", "39"], ["V40", "40"], ["V41", "41"], ["V42", "42"], ["V43", "43"], ["V44", "44"], ["V45", "45"], ["V46", "46"], ["V47", "47"], ["V48", "48"], ["V49", "49"], ["V50", "50"] ]), "vpin") .appendField(Blockly.Msg.BYLNK_WRITE_2_MESSAGE); this.appendStatementInput("statement") .setCheck(null); this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.setColour(165); this.setTooltip(Blockly.Msg.BYLNK_WRITE_TOOLTIP); this.setHelpUrl(""); } }; Blockly.Blocks['blynk_param_int'] = { init: function () { this.appendDummyInput() .appendField(Blockly.Msg.BYLNK_PARAM_INT_MESSAGE); this.setOutput(true, ["int", "Number"]); this.setColour(165); this.setTooltip(Blockly.Msg.BYLNK_PARAM_INT_TOOLTIP); this.setHelpUrl(""); } }; Blockly.Blocks['blynk_param_double'] = { init: function () { this.appendDummyInput() .appendField(Blockly.Msg.BYLNK_PARAM_DOUBLE_MESSAGE); this.setOutput(true, ["double", "Number"]); this.setColour(165); this.setTooltip(Blockly.Msg.BYLNK_PARAM_DOUBLE_TOOLTIP); this.setHelpUrl(""); } }; Blockly.Blocks['blynk_param_str'] = { init: function () { this.appendDummyInput() .appendField(Blockly.Msg.BYLNK_PARAM_STR_MESSAGE); this.setOutput(true, "String"); this.setColour(165); this.setTooltip(Blockly.Msg.BYLNK_PARAM_STR_TOOLTIP); this.setHelpUrl(""); } }; Blockly.Blocks['blynk_push_data'] = { init: function () { this.appendValueInput("data") .setCheck(["Boolean", "String", "Number"]) .appendField(Blockly.Msg.BYLNK_PUSH_DATA_MESSAGE) .appendField(new Blockly.FieldDropdown([ ["V0", "0"], ["V1", "1"], ["V2", "2"], ["V3", "3"], ["V4", "4"], ["V5", "5"], ["V6", "6"], ["V7", "7"], ["V8", "8"], ["V9", "9"], ["V10", "10"], ["V11", "11"], ["V12", "12"], ["V13", "13"], ["V14", "14"], ["V15", "15"], ["V16", "16"], ["V17", "17"], ["V18", "18"], ["V19", "19"], ["V20", "20"], ["V21", "21"], ["V22", "22"], ["V23", "23"], ["V24", "24"], ["V25", "25"], ["V26", "26"], ["V27", "27"], ["V28", "28"], ["V29", "29"], ["V30", "30"], ["V31", "31"], ["V32", "32"], ["V33", "33"], ["V34", "34"], ["V35", "35"], ["V36", "36"], ["V37", "37"], ["V38", "38"], ["V39", "39"], ["V40", "40"], ["V41", "41"], ["V42", "42"], ["V43", "43"], ["V44", "44"], ["V45", "45"], ["V46", "46"], ["V47", "47"], ["V48", "48"], ["V49", "49"], ["V50", "50"] ]), "vpin"); this.setInputsInline(true); this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.setColour(165); this.setTooltip(Blockly.Msg.BYLNK_PUSH_DATA_TOOLTIP); this.setHelpUrl(""); } }; Blockly.Blocks['blynk_read'] = { init: function () { this.appendDummyInput() .appendField(Blockly.Msg.BYLNK_READ_1_MESSAGE) .appendField(new Blockly.FieldDropdown([ ["V0", "0"], ["V1", "1"], ["V2", "2"], ["V3", "3"], ["V4", "4"], ["V5", "5"], ["V6", "6"], ["V7", "7"], ["V8", "8"], ["V9", "9"], ["V10", "10"], ["V11", "11"], ["V12", "12"], ["V13", "13"], ["V14", "14"], ["V15", "15"], ["V16", "16"], ["V17", "17"], ["V18", "18"], ["V19", "19"], ["V20", "20"], ["V21", "21"], ["V22", "22"], ["V23", "23"], ["V24", "24"], ["V25", "25"], ["V26", "26"], ["V27", "27"], ["V28", "28"], ["V29", "29"], ["V30", "30"], ["V31", "31"], ["V32", "32"], ["V33", "33"], ["V34", "34"], ["V35", "35"], ["V36", "36"], ["V37", "37"], ["V38", "38"], ["V39", "39"], ["V40", "40"], ["V41", "41"], ["V42", "42"], ["V43", "43"], ["V44", "44"], ["V45", "45"], ["V46", "46"], ["V47", "47"], ["V48", "48"], ["V49", "49"], ["V50", "50"] ]), "vpin") .appendField(Blockly.Msg.BYLNK_READ_2_MESSAGE); this.appendStatementInput("statement") .setCheck(null); this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.setColour(165); this.setTooltip(Blockly.Msg.BYLNK_READ_TOOLTIP); this.setHelpUrl(""); } }; const BLYNK_BEGIN = "DEV_IO.Blynk()"; Blockly.JavaScript['blynk_begin'] = function (block) { var text_auth = block.getFieldValue('auth'); var code = `${BLYNK_BEGIN}.begin("${text_auth}");\n`; return code; }; Blockly.JavaScript['blynk_begin_wifi_local_server'] = function (block) { var text_auth = block.getFieldValue('auth'); var text_host = block.getFieldValue('host'); var number_port = block.getFieldValue('port'); var code = `${BLYNK_BEGIN}.begin("${text_auth}", "${text_host}", ${number_port});\n`; return code; }; Blockly.JavaScript['blynk_write'] = function (block) { var dropdown_vpin = block.getFieldValue('vpin'); var statements_statement = Blockly.JavaScript.statementToCode(block, 'statement'); var code = `${BLYNK_BEGIN}.setVW(${dropdown_vpin}, []() { ${statements_statement} });\n`; return code; }; Blockly.JavaScript['blynk_param_int'] = function (block) { var code = `${BLYNK_BEGIN}.asInt()`; return [code, Blockly.JavaScript.ORDER_ATOMIC]; }; Blockly.JavaScript['blynk_param_double'] = function (block) { var code = `${BLYNK_BEGIN}.asDouble()`; return [code, Blockly.JavaScript.ORDER_ATOMIC]; }; Blockly.JavaScript['blynk_param_str'] = function (block) { var code = `${BLYNK_BEGIN}.asStr()`; return [code, Blockly.JavaScript.ORDER_NONE]; }; Blockly.JavaScript['blynk_push_data'] = function (block) { var dropdown_vpin = block.getFieldValue('vpin'); var value_name = Blockly.JavaScript.valueToCode(block, 'data', Blockly.JavaScript.ORDER_ATOMIC); var code = `${BLYNK_BEGIN}.writeVP(${dropdown_vpin}, ${value_name});\n`; return code; }; Blockly.JavaScript['blynk_read'] = function (block) { var dropdown_vpin = block.getFieldValue('vpin'); var statements_statement = Blockly.JavaScript.statementToCode(block, 'statement'); var code = `${BLYNK_BEGIN}.setVR(${dropdown_vpin}, []() { ${statements_statement} });\n`; return code; };Blockly.Msg.KBNET2_E28T12S_SNDSTR_SEND_TITLE = "E28-2G4T12S Send Data"; Blockly.Msg.KBNET2_E28T12S_SNDSTR_SEND_TOOLTIP = "E28-2G4T12S Send Data"; Blockly.Msg.KBNET2_E28T12S_SNDSTR_SEND_HELPURL = ""; Blockly.Msg.KBNET2_E28T12S_SNDSTR_MSG = "Message "; Blockly.Msg.KBNET2_E28T12S_SNDSTR_MSG_TOOLTIP = "Enter Message"; Blockly.Msg.KBNET2_E28T12S_SNDSTR_MSG_HELPURL = ""; Blockly.Msg.KBNET2_E28T12S_SNDSTR_TXPOWER = "TX Power "; Blockly.Msg.KBNET2_E28T12S_SNDSTR_DBM = "dBm"; Blockly.Msg.KBNET2_E28T12S_SNDSTR_FREQUENCY = "Frequency "; const DEFAULT_KBNET2_E28T12S_SNDSTR_MSG = 'UUUUUUUUUUUUUUUU'; Blockly.Blocks["kbnet2_e28t12s_sndstr.send_01"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.KBNET2_E28T12S_SNDSTR_SEND_TITLE); this.appendDummyInput() .appendField(Blockly.Msg.KBNET2_E28T12S_SNDSTR_TXPOWER) .appendField(new Blockly.FieldDropdown([ ["12", "12"], ["10", "10"], ["7", "7"], ["4", "4"] ]), 'TX_POWER_INDEX') .appendField(Blockly.Msg.KBNET2_E28T12S_SNDSTR_DBM); this.appendDummyInput() .appendField(Blockly.Msg.KBNET2_E28T12S_SNDSTR_FREQUENCY) .appendField(new Blockly.FieldDropdown([ ["2475", "75"], ["2476", "76"], ["2477", "77"], ["2478", "78"], ["2479", "79"], ["2480", "80"], ["2481", "81"], ["2482", "82"] ]), 'RF_FREQUENCY') .appendField("MHz"); this.appendDummyInput() .appendField(Blockly.Msg.KBNET2_E28T12S_SNDSTR_MSG) .appendField(new Blockly.FieldTextInput(DEFAULT_KBNET2_E28T12S_SNDSTR_MSG), 'MSG'); this.setPreviousStatement(true); this.setNextStatement(true); this.setColour('#ff00ff'); this.setTooltip(Blockly.Msg.KBNET2_E28T12S_SNDSTR_SEND_TOOLTIP); this.setHelpUrl(Blockly.Msg.KBNET2_E28T12S_SNDSTR_SEND_HELPURL); this.setFieldValue("82", "RF_FREQUENCY"); // set default frequency 2482 MHz }, // onchange onchange: function(ev) { if (ev.blockId === this.id) { if (!this.isInFlyout) { //console.log(this.type); //console.log(this.workspace.getBlockById(ev.blockId)); // on block change if (ev.type == Blockly.Events.BLOCK_CHANGE) { //console.log(ev.name, ev.blockId, ev.type); // on tx power dropdown changed if (ev.name == 'TX_POWER') { //console.log(this.getField('TX_POWER').text_, this.getField('TX_POWER').value_); for (var blockID in this.workspace.blockDB_) { if (this.workspace.blockDB_[blockID].type == this.type) { // skip current block if (blockID != ev.blockId) { // copy new tx power option to all other blocks on workspace this.workspace.blockDB_[blockID].setFieldValue(this.getField('TX_POWER').value_, 'TX_POWER'); } } } } else // on channel change if (ev.name == 'CHANNEL') { for (var blockID in this.workspace.blockDB_) { if (this.workspace.blockDB_[blockID].type == this.type) { // skip current block if (blockID != ev.blockId) { // copy new tx power option to all other blocks on workspace this.workspace.blockDB_[blockID].setFieldValue(this.getField('CHANNEL').value_, 'CHANNEL'); } } } } } // on block create if (ev.type == Blockly.Events.BLOCK_CREATE) { for (var blockID in this.workspace.blockDB_) { if (this.workspace.blockDB_[blockID].type == this.type) { // skip current block if (blockID != ev.blockId) { // copy current tx power value on workspace to this new block this.setFieldValue(this.workspace.blockDB_[blockID].getField('TX_POWER').value_, 'TX_POWER'); // copy new channel option to all other blocks on workspace this.setFieldValue(this.workspace.blockDB_[blockID].getField('CHANNEL').value_, 'CHANNEL'); // copy new nwkskey option to all other blocks on workspace this.setFieldValue(this.workspace.blockDB_[blockID].getField('MSG').text_, 'MSG'); break; } } } } } } } }; Blockly.JavaScript['kbnet2_e28t12s_sndstr.send_01'] = function(block) { var msg = block.getFieldValue('MSG'); var tx_power_index = parseInt(block.getFieldValue('TX_POWER_INDEX')); var rf_frequency = parseInt(block.getFieldValue('RF_FREQUENCY')); return 'DEV_IO.KBNET2_E28T12S_SNDSTR(' + tx_power_index + ', ' + rf_frequency + ').send_01("' + msg + '");\n'; }; Blockly.Msg.KBNET2_E28T12S_TEST_SEND_TITLE = "E28-2G4T12S Send Data"; Blockly.Msg.KBNET2_E28T12S_TEST_SEND_TOOLTIP = "E28-2G4T12S Send Data"; Blockly.Msg.KBNET2_E28T12S_TEST_SEND_HELPURL = ""; Blockly.Msg.KBNET2_E28T12S_TEST_APPSKEY = "Application Key"; Blockly.Msg.KBNET2_E28T12S_TEST_NWKSKEY = "Network Key "; Blockly.Msg.KBNET2_E28T12S_TEST_APPSKEY_TOOLTIP = "Enter Application Key"; Blockly.Msg.KBNET2_E28T12S_TEST_APPSKEY_HELPURL = ""; Blockly.Msg.KBNET2_E28T12S_TEST_NWKSKEY_TOOLTIP = "Enter Network Key"; Blockly.Msg.KBNET2_E28T12S_TEST_NWKSKEY_HELPURL = ""; Blockly.Msg.KBNET2_E28T12S_TEST_TEMPERATURE = "Temperature"; Blockly.Msg.KBNET2_E28T12S_TEST_HUMIDITY = "Humidity"; Blockly.Msg.KBNET2_E28T12S_TEST_WIND_SPEED = "Wind Speed"; Blockly.Msg.KBNET2_E28T12S_TEST_WIND_DIRECTION = "Wind Direction"; Blockly.Msg.KBNET2_E28T12S_TEST_RAIN_VOLUME = "Rain Volume"; Blockly.Msg.KBNET2_E28T12S_TEST_PM25 = "PM2.5"; Blockly.Msg.KBNET2_E28T12S_TEST_PM10 = "PM10"; Blockly.Msg.KBNET2_E28T12S_TEST_TXPOWER = "TX Power "; Blockly.Msg.KBNET2_E28T12S_TEST_DBM = "dBm"; Blockly.Msg.KBNET2_E28T12S_TEST_FREQUENCY = "Frequency "; Blockly.Msg.KBNET2_E28T12S_TEST_IS_ERROR_TITLE = "E28-2G4T12S Error"; Blockly.Msg.KBNET2_E28T12S_TEST_IS_ERROR_TOOLTIP = "Check E28-2G4T12S Error"; Blockly.Msg.KBNET2_E28T12S_TEST_IS_ERROR_HELPURL = ""; const DEFAULT_KBNET2_E28T12S_TEST_NWKSKEY = 'B5A6E1B6C840146389C4ABB4835CB5BA'; Blockly.Blocks["kbnet2_e28t12s_test.send_01"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.KBNET2_E28T12S_TEST_SEND_TITLE); /*this.appendDummyInput() .appendField(Blockly.Msg.KBNET2_E28T12S_TEST_TXPOWER) .appendField(new Blockly.FieldDropdown([ ["12", "12"], ["10", "10"], ["7", "7"], ["4", "4"] ]), 'TX_POWER_INDEX') .appendField(Blockly.Msg.KBNET2_E28T12S_TEST_DBM); this.appendDummyInput() .appendField(Blockly.Msg.KBNET2_E28T12S_TEST_FREQUENCY) .appendField(new Blockly.FieldDropdown([ ["2477", "77"], ["2478", "78"], ["2479", "79"], ["2480", "80"], ["2481", "81"], ["2482", "82"], ["2483", "83"], ["2484", "84"], ["2485", "85"], ["2486", "86"], ["2487", "87"], ["2488", "88"], ["2489", "89"], ["2490", "90"], ["2491", "91"], ["2492", "92"], ["2493", "93"], ["2494", "94"], ["2495", "95"], ["2496", "96"] ]), 'RF_FREQUENCY') .appendField("MHz"); this.appendDummyInput() .appendField(Blockly.Msg.KBNET2_E28T12S_TEST_NWKSKEY) .appendField(new Blockly.FieldTextInput(DEFAULT_KBNET2_E28T12S_TEST_NWKSKEY, nwkskey_validator), 'NWKSKEY');*/ this.appendValueInput("VALUE_1") .appendField(Blockly.Msg.KBNET2_E28T12S_TEST_TEMPERATURE) .setCheck("Number"); this.appendValueInput("VALUE_2") .appendField(Blockly.Msg.KBNET2_E28T12S_TEST_HUMIDITY) .setCheck("Number"); this.appendValueInput("VALUE_3") .appendField(Blockly.Msg.KBNET2_E28T12S_TEST_WIND_SPEED) .setCheck("Number"); this.appendValueInput("VALUE_4") .appendField(Blockly.Msg.KBNET2_E28T12S_TEST_WIND_DIRECTION) .setCheck("Number"); this.appendValueInput("VALUE_5") .appendField(Blockly.Msg.KBNET2_E28T12S_TEST_RAIN_VOLUME) .setCheck("Number"); this.appendValueInput("VALUE_6") .appendField(Blockly.Msg.KBNET2_E28T12S_TEST_PM25) .setCheck("Number"); this.appendValueInput("VALUE_7") .appendField(Blockly.Msg.KBNET2_E28T12S_TEST_PM10) .setCheck("Number"); this.setPreviousStatement(true); this.setNextStatement(true); this.setColour('#ff00ff'); this.setTooltip(Blockly.Msg.KBNET2_E28T12S_TEST_SEND_TOOLTIP); this.setHelpUrl(Blockly.Msg.KBNET2_E28T12S_TEST_SEND_HELPURL); // this.setFieldValue("82", "RF_FREQUENCY"); // set default frequency 2482 MHz }, // onchange /* onchange: function(ev) { if (ev.blockId === this.id) { if (!this.isInFlyout) { //console.log(this.type); //console.log(this.workspace.getBlockById(ev.blockId)); // on block change if (ev.type == Blockly.Events.BLOCK_CHANGE) { //console.log(ev.name, ev.blockId, ev.type); // on tx power dropdown changed if (ev.name == 'TX_POWER') { //console.log(this.getField('TX_POWER').text_, this.getField('TX_POWER').value_); for (var blockID in this.workspace.blockDB_) { if (this.workspace.blockDB_[blockID].type == this.type) { // skip current block if (blockID != ev.blockId) { // copy new tx power option to all other blocks on workspace this.workspace.blockDB_[blockID].setFieldValue(this.getField('TX_POWER').value_, 'TX_POWER'); } } } } else // on channel change if (ev.name == 'CHANNEL') { for (var blockID in this.workspace.blockDB_) { if (this.workspace.blockDB_[blockID].type == this.type) { // skip current block if (blockID != ev.blockId) { // copy new tx power option to all other blocks on workspace this.workspace.blockDB_[blockID].setFieldValue(this.getField('CHANNEL').value_, 'CHANNEL'); } } } } else // on network key change if (ev.name == 'NWKSKEY') { for (var blockID in this.workspace.blockDB_) { if (this.workspace.blockDB_[blockID].type == this.type) { // skip current block if (blockID != ev.blockId) { // copy new nwkskey option to all other blocks on workspace this.workspace.blockDB_[blockID].setFieldValue(this.getField('NWKSKEY').text_, 'NWKSKEY'); } } } } } // on block create if (ev.type == Blockly.Events.BLOCK_CREATE) { for (var blockID in this.workspace.blockDB_) { if (this.workspace.blockDB_[blockID].type == this.type) { // skip current block if (blockID != ev.blockId) { // copy current tx power value on workspace to this new block this.setFieldValue(this.workspace.blockDB_[blockID].getField('TX_POWER').value_, 'TX_POWER'); // copy new channel option to all other blocks on workspace this.setFieldValue(this.workspace.blockDB_[blockID].getField('CHANNEL').value_, 'CHANNEL'); // copy new nwkskey option to all other blocks on workspace this.setFieldValue(this.workspace.blockDB_[blockID].getField('NWKSKEY').text_, 'NWKSKEY'); break; } } } } } } }*/ }; Blockly.Blocks["kbnet2_e28t12s_test.is_error"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.KBNET2_E28T12S_TEST_IS_ERROR_TITLE); this.setOutput(true, 'Boolean'); this.setInputsInline(true); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour('#ff00ff'); this.setTooltip(Blockly.Msg.KBNET2_E28T12S_TEST_IS_ERROR_TOOLTIP); this.setHelpUrl(Blockly.Msg.KBNET2_E28T12S_TEST_IS_ERROR_HELPURL); } }; var appskey_validator = function(val) { var re = /[0-9A-Fa-f]{32}/g; if ((val.length == 32) && (re.test(val))) { return val.toUpperCase(); } else { // default return DEFAULT_KBNET2_E28T12S_TEST_APPSKEY; } }; var nwkskey_validator = function(val) { var re = /[0-9A-Fa-f]{32}/g; if ((val.length == 32) && (re.test(val))) { return val.toUpperCase(); } else { // default return DEFAULT_KBNET2_E28T12S_TEST_NWKSKEY; } }; Blockly.JavaScript['kbnet2_e28t12s_test.send_01'] = function(block) { var value_1 = Blockly.JavaScript.valueToCode(block, 'VALUE_1', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var value_2 = Blockly.JavaScript.valueToCode(block, 'VALUE_2', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var value_3 = Blockly.JavaScript.valueToCode(block, 'VALUE_3', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var value_4 = Blockly.JavaScript.valueToCode(block, 'VALUE_4', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var value_5 = Blockly.JavaScript.valueToCode(block, 'VALUE_5', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var value_6 = Blockly.JavaScript.valueToCode(block, 'VALUE_6', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var value_7 = Blockly.JavaScript.valueToCode(block, 'VALUE_7', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; /*var nwkskey = block.getFieldValue('NWKSKEY'); //Blockly.JavaScript.valueToCode(block, 'NWKSKEY', Blockly.JavaScript.ORDER_ASSIGNMENT) || '0'; var tx_power_index = parseInt(block.getFieldValue('TX_POWER_INDEX')); var rf_frequency = parseInt(block.getFieldValue('RF_FREQUENCY')); return 'DEV_IO.KBNET2_E28T12S(' + tx_power_index + ', ' + rf_frequency + ', ' + '"' + nwkskey.toLowerCase() + '"' + ').send_01(' + value_1 + ', ' + value_2 + ', ' + value_3 + ', ' + value_4 + ', ' + value_5 + ', ' + value_6 + ', ' + value_7 + ');\n';*/ return 'DEV_IO.KBNET2_E28T12S_TEST().send_01(' + value_1 + ', ' + value_2 + ', ' + value_3 + ', ' + value_4 + ', ' + value_5 + ', ' + value_6 + ', ' + value_7 + ');\n'; }; Blockly.JavaScript['kbnet2_e28t12s_test.is_error'] = function(block) { return [ 'DEV_IO.KBNET2_E28T12S_TEST().is_error()', Blockly.JavaScript.ORDER_ATOMIC ]; }; Blockly.Msg.LED_TEST_START_TITLE = "Start Blinking LED"; Blockly.Msg.LED_TEST_START_TOOLTIP = "Start Blinking LED"; Blockly.Msg.LED_TEST_START_HELPURL = ""; Blockly.Msg.LED_TEST_STOP_TITLE = "Stop Blinking LED"; Blockly.Msg.LED_TEST_STOP_TOOLTIP = "Stop Blinking LED"; Blockly.Msg.LED_TEST_STOP_HELPURL = ""; Blockly.Msg.LED_TEST_ALL_START_TITLE = "Start All Blinking LED"; Blockly.Msg.LED_TEST_ALL_START_TOOLTIP = "Start All Blinking LED"; Blockly.Msg.LED_TEST_ALL_START_HELPURL = ""; Blockly.Msg.LED_TEST_ALL_STOP_TITLE = "Stop All Blinking LED"; Blockly.Msg.LED_TEST_ALL_STOP_TOOLTIP = "Stop All Blinking LED"; Blockly.Msg.LED_TEST_ALL_STOP_HELPURL = ""; Blockly.Msg.LED_TEST_RUN_START_TITLE = "Start Run Blinking LED"; Blockly.Msg.LED_TEST_RUN_START_TOOLTIP = "Start Run Blinking LED"; Blockly.Msg.LED_TEST_RUN_START_HELPURL = ""; Blockly.Msg.LED_TEST_RUN_STOP_TITLE = "Stop Run Blinking LED"; Blockly.Msg.LED_TEST_RUN_STOP_TOOLTIP = "Stop Run Blinking LED"; Blockly.Msg.LED_TEST_RUN_STOP_HELPURL = ""; // bright pink: #ff69b4 // hot pink: #ff1493 // magenta: #ff00ff const LED_TEST_BLOCK_COLOR = '#ff00ff'; /*Blockly.Blocks["led_test.start"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.LED_TEST_START_TITLE); this.setInputsInline(true); this.setPreviousStatement(true); this.setNextStatement(true); this.setColour(LED_TEST_BLOCK_COLOR); this.setTooltip(Blockly.Msg.LED_TEST_START_TOOLTIP); this.setHelpUrl(Blockly.Msg.LED_TEST_START_HELPURL); } }; Blockly.Blocks["led_test.stop"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.LED_TEST_STOP_TITLE); this.setInputsInline(true); this.setPreviousStatement(true); this.setNextStatement(true); this.setColour(LED_TEST_BLOCK_COLOR); this.setTooltip(Blockly.Msg.LED_TEST_STOP_TOOLTIP); this.setHelpUrl(Blockly.Msg.LED_TEST_STOP_HELPURL); } };*/ Blockly.Blocks["led_test_all.start"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.LED_TEST_ALL_START_TITLE); this.setInputsInline(true); this.setPreviousStatement(true); this.setNextStatement(true); this.setColour(LED_TEST_BLOCK_COLOR); this.setTooltip(Blockly.Msg.LED_TEST_ALL_START_TOOLTIP); this.setHelpUrl(Blockly.Msg.LED_TEST_ALL_START_HELPURL); } }; Blockly.Blocks["led_test_all.stop"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.LED_TEST_ALL_STOP_TITLE); this.setInputsInline(true); this.setPreviousStatement(true); this.setNextStatement(true); this.setColour(LED_TEST_BLOCK_COLOR); this.setTooltip(Blockly.Msg.LED_TEST_ALL_STOP_TOOLTIP); this.setHelpUrl(Blockly.Msg.LED_TEST_ALL_STOP_HELPURL); } }; Blockly.Blocks["led_test_run.start"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.LED_TEST_RUN_START_TITLE); this.setInputsInline(true); this.setPreviousStatement(true); this.setNextStatement(true); this.setColour(LED_TEST_BLOCK_COLOR); this.setTooltip(Blockly.Msg.LED_TEST_RUN_START_TOOLTIP); this.setHelpUrl(Blockly.Msg.LED_TEST_RUN_START_HELPURL); } }; Blockly.Blocks["led_test_run.stop"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.LED_TEST_RUN_STOP_TITLE); this.setInputsInline(true); this.setPreviousStatement(true); this.setNextStatement(true); this.setColour(LED_TEST_BLOCK_COLOR); this.setTooltip(Blockly.Msg.LED_TEST_RUN_STOP_TOOLTIP); this.setHelpUrl(Blockly.Msg.LED_TEST_RUN_STOP_HELPURL); } }; Blockly.JavaScript['led_test.start'] = function(block) { return 'DEV_IO.LED_TEST().start();\n'; }; Blockly.JavaScript['led_test.stop'] = function(block) { return 'DEV_IO.LED_TEST().stop();\n'; }; Blockly.JavaScript['led_test_all.start'] = function(block) { return 'DEV_IO.LED_TEST().start_all();\n'; }; Blockly.JavaScript['led_test_all.stop'] = function(block) { return 'DEV_IO.LED_TEST().stop_all();\n'; }; Blockly.JavaScript['led_test_run.start'] = function(block) { return 'DEV_IO.LED_TEST().start_run();\n'; }; Blockly.JavaScript['led_test_run.stop'] = function(block) { return 'DEV_IO.LED_TEST().stop_run();\n'; }; Blockly.Msg.UARTCHK_TITLE = "UART Check"; Blockly.Msg.UARTCHK_TOOLTIP = "Check UART Loopback"; Blockly.Msg.UARTCHK_HELPURL = ""; Blockly.Msg.UARTCHK_UART_NUM = "UART No."; Blockly.Msg.UARTCHK_TX = "Tx"; Blockly.Msg.UARTCHK_RX = "Rx"; Blockly.Msg.UARTCHK_PWR_EN = "Enable"; // bright pink: #ff69b4 // hot pink: #ff1493 // magenta: #ff00ff const UART_TEST_BLOCK_COLOR = '#ff00ff'; Blockly.Blocks["uartchk.check"] = { init: function () { this.appendDummyInput() .appendField(Blockly.Msg.UARTCHK_TITLE); this.appendDummyInput() .appendField(Blockly.Msg.UARTCHK_UART_NUM) .appendField(new Blockly.FieldDropdown([ ["UART_1", "UART_NUM_1"], ["UART_2", "UART_NUM_2"] ]), 'UART_NUM'); this.appendDummyInput() .appendField(Blockly.Msg.UARTCHK_TX) .appendField(new Blockly.FieldDropdown([ ["GPIO_18", "GPIO_NUM_18"], ["GPIO_27", "GPIO_NUM_27"] ]), 'TX'); this.appendDummyInput() .appendField(Blockly.Msg.UARTCHK_RX) .appendField(new Blockly.FieldDropdown([ ["GPIO_19", "GPIO_NUM_19"], ["GPIO_33", "GPIO_NUM_33"] ]), 'RX'); this.appendDummyInput() .appendField(Blockly.Msg.UARTCHK_PWR_EN) .appendField(new Blockly.FieldDropdown([ ["GPIO_26", "GPIO_NUM_26"], ["GPIO_23", "GPIO_NUM_23"] ]), 'PWR_EN'); this.setOutput(true, 'Boolean'); this.setInputsInline(true); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(UART_TEST_BLOCK_COLOR); this.setTooltip(Blockly.Msg.UARTCHK_TOOLTIP); this.setHelpUrl(Blockly.Msg.UARTCHK_HELPURL); } }; Blockly.JavaScript['uartchk.check'] = function (block) { return [ 'DEV_IO.UARTCHK(' + block.getFieldValue('UART_NUM') + ', ' + block.getFieldValue('TX') + ', ' +block.getFieldValue('RX') + ', ' + block.getFieldValue('PWR_EN') + ').check()', Blockly.JavaScript.ORDER_ATOMIC ]; }; Blockly.Msg.ADS1115_GET_LUX_TITLE = "ADS1115 Analog Voltage"; Blockly.Msg.ADS1115_GET_LUX_TOOLTIP = "Read ADS1115 Analog Voltage (From 0 to 2.048 Volt)"; Blockly.Msg.ADS1115_GET_LUX_HELPURL = ""; Blockly.Blocks["ads1115.get_volt"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.ADS1115_GET_LUX_TITLE); // i2c channel 0 to 64 var channel_array = []; for (var i = 0;i <= 64; i++) { channel_array.push([String(i), String(i)]); } this.appendDummyInput() .appendField(Blockly.Msg.CHANNEL) .appendField(new Blockly.FieldDropdown(channel_array), 'CHANNEL'); // device addess this.appendDummyInput() .appendField(Blockly.Msg.ADDRESS) .appendField(new Blockly.FieldDropdown([ ["0x48", "72"], ["0x49", "73"], ["0x4A", "74"], ["0x4B", "75"] ]), 'ADDRESS'); // adc channel this.appendDummyInput() .appendField(' ') .appendField(new Blockly.FieldDropdown([ ["AIN0", "0"], ["AIN1", "1"], ["AIN2", "2"], ["AIN3", "3"] ]), 'AIN'); this.setOutput(true, 'Number'); this.setInputsInline(true); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(58); this.setTooltip(Blockly.Msg.ADS1115_GET_LUX_TOOLTIP); this.setHelpUrl(Blockly.Msg.ADS1115_GET_LUX_HELPURL); } }; Blockly.JavaScript['ads1115.get_volt'] = function(block) { return [ 'DEV_I2C1.ADS1115(' + block.getFieldValue('CHANNEL') + ', ' + block.getFieldValue('ADDRESS') + ').get_volt(' + block.getFieldValue('AIN') + ')', Blockly.JavaScript.ORDER_ATOMIC ]; }; Blockly.Msg.ADSWS1_RG_GET_RAIN_GAUGE_MM_TITLE = "ADS-WS1 24Hrs Rain Gauge"; Blockly.Msg.ADSWS1_RG_GET_RAIN_GAUGE_MM_TOOLTIP = "Read ADS-WS1 Rain Gauge Last 24 Hours (mm.)"; Blockly.Msg.ADSWS1_RG_GET_RAIN_GAUGE_MM_HELPURL = ""; Blockly.Msg.ADSWS1_RG_GET_RAIN_GAUGE_COUNTER_TITLE = "ADS-WS1 24Hrs Rain Gauge Counter"; Blockly.Msg.ADSWS1_RG_GET_RAIN_GAUGE_COUNTER_TOOLTIP = "Read ADS-WS1 Rain Gauge Counter Last 24 Hours"; Blockly.Msg.ADSWS1_RG_GET_RAIN_GAUGE_COUNTER_HELPURL = ""; Blockly.Msg.ADSWS1_RG_RESET_RAIN_GAUGE_TITLE = "ADS-WS1 Reset Rain Gauge"; Blockly.Msg.ADSWS1_RG_RESET_RAIN_GAUGE_TOOLTIP = "Reset ADS-WS1 Rain Gauge"; Blockly.Msg.ADSWS1_RG_RESET_RAIN_GAUGE_HELPURL = ""; Blockly.Blocks["adsws1_rg.get_rain_gauge_mm"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.ADSWS1_RG_GET_RAIN_GAUGE_MM_TITLE) .appendField(new Blockly.FieldDropdown([ ["IN1", "IN1_GPIO"], ["IN2", "IN2_GPIO"], ["IN3", "IN3_GPIO"], ["IN4", "IN4_GPIO"] ]), 'INPUT'); this.setOutput(true, 'Number'); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(58); this.setTooltip(Blockly.Msg.ADSWS1_RG_GET_RAIN_GAUGE_MM_TOOLTIP); this.setHelpUrl(Blockly.Msg.ADSWS1_RG_GET_RAIN_GAUGE_MM_HELPURL); // set default field dropdown this.inputList[0].fieldRow[1].setValue('IN2_GPIO'); } }; Blockly.Blocks["adsws1_rg.get_rain_gauge_counter"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.ADSWS1_RG_GET_RAIN_GAUGE_COUNTER_TITLE) .appendField(new Blockly.FieldDropdown([ ["IN1", "IN1_GPIO"], ["IN2", "IN2_GPIO"], ["IN3", "IN3_GPIO"], ["IN4", "IN4_GPIO"] ]), 'INPUT'); this.setOutput(true, 'Number'); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(58); this.setTooltip(Blockly.Msg.ADSWS1_RG_GET_RAIN_GAUGE_COUNTER_TOOLTIP); this.setHelpUrl(Blockly.Msg.ADSWS1_RG_GET_RAIN_GAUGE_COUNTER_HELPURL); // set default field dropdown this.inputList[0].fieldRow[1].setValue('IN2_GPIO'); } }; Blockly.Blocks["adsws1_rg.reset_rain_gauge"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.ADSWS1_RG_RESET_RAIN_GAUGE_TITLE) .appendField(new Blockly.FieldDropdown([ ["IN1", "IN1_GPIO"], ["IN2", "IN2_GPIO"], ["IN3", "IN3_GPIO"], ["IN4", "IN4_GPIO"] ]), 'INPUT'); this.setInputsInline(true); this.setPreviousStatement(true); this.setNextStatement(true); this.setColour(58); this.setTooltip(Blockly.ADSWS1_RG_RESET_RAIN_GAUGE_TOOLTIP); this.setHelpUrl(Blockly.Msg.ADSWS1_RG_RESET_RAIN_GAUGE_HELPURL); // set default field dropdown this.inputList[0].fieldRow[1].setValue('IN2_GPIO'); } }; Blockly.JavaScript['adsws1_rg.get_rain_gauge_mm'] = function(block) { return [ // input = IN1(gpio 32), IN2(gpio 33), IN3(gpio 34), IN4(gpio 35) 'DEV_IO.ADSWS1_RG(' + block.getFieldValue('INPUT') + ')' + '.get_rain_gauge_mm()', Blockly.JavaScript.ORDER_ATOMIC ]; }; Blockly.JavaScript['adsws1_rg.get_rain_gauge_counter'] = function(block) { return [ // input = IN1(gpio 32), IN2(gpio 33), IN3(gpio 34), IN4(gpio 35) 'DEV_IO.ADSWS1_RG(' + block.getFieldValue('INPUT') + ')' + '.get_rain_gauge_counter()', Blockly.JavaScript.ORDER_ATOMIC ]; }; Blockly.JavaScript['adsws1_rg.reset_rain_gauge'] = function(block) { return 'DEV_IO.ADSWS1_RG(' + block.getFieldValue('INPUT') + ').reset_rain_gauge();\n'; }; Blockly.Msg.ADSWS1_WD_GET_WIND_DIRECTION_DEGREES_TITLE = "ADS-WS1 Wind Direction"; Blockly.Msg.ADSWS1_WD_GET_WIND_DIRECTION_DEGREES_TOOLTIP = "Read ADS-WS1 Wind Direction (degrees)"; Blockly.Msg.ADSWS1_WD_GET_WIND_DIRECTION_DEGREES_HELPURL = ""; Blockly.Msg.ADSWS1_WD_TRIG = "Trig"; Blockly.Msg.ADSWS1_WD_CAPTURE = "Capture"; Blockly.Msg.WIND_DIRECTION_IS_ERROR_TITLE = "ADS-WS1 Wind Direction Error"; Blockly.Msg.WIND_DIRECTION_IS_ERROR_TOOLTIP = "ADS-WS1 Wind Direction Error (sensor not found)"; Blockly.Msg.WIND_DIRECTION_IS_ERROR_HELPURL = ""; Blockly.Blocks["adsws1_wd.get_wind_direction_degrees"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.ADSWS1_WD_GET_WIND_DIRECTION_DEGREES_TITLE) .appendField(Blockly.Msg.ADSWS1_WD_TRIG) .appendField(new Blockly.FieldDropdown([ ["OUT1", "OUT1_GPIO"], ["OUT2", "OUT2_GPIO"] ]), 'OUTPUT') .appendField(Blockly.Msg.ADSWS1_WD_CAPTURE) .appendField(new Blockly.FieldDropdown([ ["IN1", "IN1_GPIO"], ["IN2", "IN2_GPIO"], ["IN3", "IN3_GPIO"], ["IN4", "IN4_GPIO"] ]), 'INPUT'); this.setOutput(true, 'Number'); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(58); this.setTooltip(Blockly.Msg.ADSWS1_WD_GET_WIND_DIRECTION_DEGREES_TOOLTIP); this.setHelpUrl(Blockly.Msg.ADSWS1_WD_GET_WIND_DIRECTION_DEGREES_HELPURL); // set default field dropdown this.inputList[0].fieldRow[4].setValue('IN3_GPIO'); } }; Blockly.Blocks["adsws1_wd.is_error"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.WIND_DIRECTION_IS_ERROR_TITLE) .appendField(Blockly.Msg.ADSWS1_WD_TRIG) .appendField(new Blockly.FieldDropdown([ ["OUT1", "OUT1_GPIO"], ["OUT2", "OUT2_GPIO"] ]), 'OUTPUT') .appendField(Blockly.Msg.ADSWS1_WD_CAPTURE) .appendField(new Blockly.FieldDropdown([ ["IN1", "IN1_GPIO"], ["IN2", "IN2_GPIO"], ["IN3", "IN3_GPIO"], ["IN4", "IN4_GPIO"] ]), 'INPUT'); this.setOutput(true, 'Boolean'); this.setInputsInline(true); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(58); this.setTooltip(Blockly.Msg.WIND_DIRECTION_IS_ERROR_TOOLTIP); this.setHelpUrl(Blockly.Msg.WIND_DIRECTION_IS_ERROR_HELPURL); // set default field dropdown this.inputList[0].fieldRow[4].setValue('IN3_GPIO'); } }; Blockly.JavaScript['adsws1_wd.get_wind_direction_degrees'] = function(block) { return [ // input = IN1(gpio 32), IN2(gpio 33), IN3(gpio 34), IN4(gpio 35) 'DEV_IO.ADSWS1_WD(' + block.getFieldValue('OUTPUT') + ', ' + block.getFieldValue('INPUT') + ')' + '.get_wind_direction_degrees()', Blockly.JavaScript.ORDER_ATOMIC ]; }; Blockly.JavaScript['adsws1_wd.is_error'] = function(block) { return [ 'DEV_IO.ADSWS1_WD(' + block.getFieldValue('OUTPUT') + ', ' + block.getFieldValue('INPUT') + ')' + '.is_error()', Blockly.JavaScript.ORDER_ATOMIC ]; }; Blockly.Msg.ADSWS1_WS_GET_WIND_SPEED_KM_H_TITLE = "ADS-WS1 Wind Speed"; Blockly.Msg.ADSWS1_WS_GET_WIND_SPEED_KM_H_TOOLTIP = "Read ADS-WS1 Wind Speed (km/h)"; Blockly.Msg.ADSWS1_WS_GET_WIND_SPEED_KM_H_HELPURL = ""; Blockly.Msg.ADSWS1_WS_GET_WIND_SPEED_KM_H_TEXT_TITLE = "ADS-WS1 Wind Speed Text"; Blockly.Msg.ADSWS1_WS_GET_WIND_SPEED_KM_H_TEXT_TOOLTIP = "Read ADS-WS1 Wind Speed (km/h) Text"; Blockly.Msg.ADSWS1_WS_GET_WIND_SPEED_KM_H_TEXT_HELPURL = ""; Blockly.Blocks["adsws1_ws.get_wind_speed_km_h"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.ADSWS1_WS_GET_WIND_SPEED_KM_H_TITLE) .appendField(new Blockly.FieldDropdown([ ["IN1", "IN1_GPIO"], ["IN2", "IN2_GPIO"], ["IN3", "IN3_GPIO"], ["IN4", "IN4_GPIO"] ]), 'INPUT'); this.setOutput(true, 'Number'); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(58); this.setTooltip(Blockly.Msg.ADSWS1_WS_GET_WIND_SPEED_KM_H_TOOLTIP); this.setHelpUrl(Blockly.Msg.ADSWS1_WS_GET_WIND_SPEED_KM_H_HELPURL); } }; Blockly.Blocks["adsws1_ws.get_wind_speed_km_h_text"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.ADSWS1_WS_GET_WIND_SPEED_KM_H_TEXT_TITLE) .appendField(new Blockly.FieldDropdown([ ["IN1", "IN1_GPIO"], ["IN2", "IN2_GPIO"], ["IN3", "IN3_GPIO"], ["IN4", "IN4_GPIO"] ]), 'INPUT') .appendField(Blockly.Msg.PRECISION_TITLE) .appendField(new Blockly.FieldNumber(1, 0, 6, 1), 'PREC'); this.setOutput(true, 'String'); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(58); this.setTooltip(Blockly.Msg.ADSWS1_WS_GET_WIND_SPEED_KM_H_TEXT_TOOLTIP); this.setHelpUrl(Blockly.Msg.ADSWS1_WS_GET_WIND_SPEED_KM_H_TEXT_HELPURL); } }; Blockly.JavaScript['adsws1_ws.get_wind_speed_km_h'] = function(block) { return [ // input = IN1(gpio 32), IN2(gpio 33), IN3(gpio 34), IN4(gpio 35) 'DEV_IO.ADSWS1_WS(' + block.getFieldValue('INPUT') + ')' + '.get_wind_speed_km_h()', Blockly.JavaScript.ORDER_ATOMIC ]; }; Blockly.JavaScript['adsws1_ws.get_wind_speed_km_h_text'] = function(block) { var prec = parseInt(block.getFieldValue('PREC')); return [ // input = IN1(gpio 32), IN2(gpio 33), IN3(gpio 34), IN4(gpio 35) 'DEV_IO.ADSWS1_WS(' + block.getFieldValue('INPUT') + ')' + '.get_wind_speed_km_h_text(' + prec + ')', Blockly.JavaScript.ORDER_ATOMIC ]; }; Blockly.Msg.HPMA115S0_GET_PM2_5_TITLE = "HPMA115S0 PM2.5"; Blockly.Msg.HPMA115S0_GET_PM2_5_TOOLTIP = "Read HPMA115S0 PM2.5"; Blockly.Msg.HPMA115S0_GET_PM2_5_HELPURL = ""; Blockly.Msg.HPMA115S0_GET_PM10_TITLE = "HPMA115S0 PM10"; Blockly.Msg.HPMA115S0_GET_PM10_TOOLTIP = "Read HPMA115S0 PM10"; Blockly.Msg.HPMA115S0_GET_PM10_HELPURL = ""; Blockly.Msg.HPMA115S0_PM_TX = "Tx"; Blockly.Msg.HPMA115S0_PM_RX = "Rx"; Blockly.Msg.HPMA115S0_IS_ERROR_TITLE = "HPMA115S0 Check Error"; Blockly.Msg.HPMA115S0_IS_ERROR_TOOLTIP = "Check HPMA115S0 error status"; Blockly.Msg.HPMA115S0_IS_ERROR_HELPURL = ""; Blockly.Msg.HPMA115S0_GET_ERROR_COUNT_TITLE = "HPMA115S0 Get Error Count"; Blockly.Msg.HPMA115S0_GET_ERROR_COUNT_TOOLTIP = "Get number of HPMA115S0 error count"; Blockly.Msg.HPMA115S0_GET_ERROR_COUNT_HELPURL = ""; Blockly.Msg.HPMA115S0_GET_ERROR_CLEAR_COUNT_TITLE = "HPMA115S0 Get Error Clear Count"; Blockly.Msg.HPMA115S0_GET_ERROR_CLEAR_COUNT_TOOLTIP = "Get number of HPMA115S0 error clear count"; Blockly.Msg.HPMA115S0_GET_ERROR_CLEAR_COUNT_HELPURL = ""; Blockly.Blocks["hpma115s0.getpm2_5"] = { init: function () { this.appendDummyInput() .appendField(Blockly.Msg.HPMA115S0_GET_PM2_5_TITLE); this.appendDummyInput() .appendField(Blockly.Msg.HPMA115S0_PM_TX) .appendField(new Blockly.FieldDropdown([ ["OUT1", "OUT1_GPIO"], ["OUT2", "OUT2_GPIO"] ]), 'TX'); // device addess this.appendDummyInput() .appendField(Blockly.Msg.HPMA115S0_PM_RX) .appendField(new Blockly.FieldDropdown([ ["IN1", "IN1_GPIO"], ["IN2", "IN2_GPIO"], ["IN3", "IN3_GPIO"], ["IN4", "IN4_GPIO"] ]), 'RX'); this.setOutput(true, 'Number'); this.setInputsInline(true); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(58); this.setTooltip(Blockly.Msg.HPMA115S0_GET_PM2_5_TOOLTIP); this.setHelpUrl(Blockly.Msg.HPMA115S0_GET_PM2_5_HELPURL); } }; Blockly.Blocks["hpma115s0.getpm10"] = { init: function () { this.appendDummyInput() .appendField(Blockly.Msg.HPMA115S0_GET_PM10_TITLE); this.appendDummyInput() .appendField(Blockly.Msg.HPMA115S0_PM_TX) .appendField(new Blockly.FieldDropdown([ ["OUT1", "OUT1_GPIO"], ["OUT2", "OUT2_GPIO"] ]), 'TX'); // device addess this.appendDummyInput() .appendField(Blockly.Msg.HPMA115S0_PM_RX) .appendField(new Blockly.FieldDropdown([ ["IN1", "IN1_GPIO"], ["IN2", "IN2_GPIO"], ["IN3", "IN3_GPIO"], ["IN4", "IN4_GPIO"] ]), 'RX'); this.setOutput(true, 'Number'); this.setInputsInline(true); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(58); this.setTooltip(Blockly.Msg.HPMA115S0_GET_PM10_TOOLTIP); this.setHelpUrl(Blockly.Msg.HPMA115S0_GET_PM10_HELPURL); } }; Blockly.Blocks["hpma115s0.is_error"] = { init: function () { this.appendDummyInput() .appendField(Blockly.Msg.HPMA115S0_IS_ERROR_TITLE); this.appendDummyInput() .appendField(Blockly.Msg.HPMA115S0_PM_TX) .appendField(new Blockly.FieldDropdown([ ["OUT1", "OUT1_GPIO"], ["OUT2", "OUT2_GPIO"] ]), 'TX'); // device addess this.appendDummyInput() .appendField(Blockly.Msg.HPMA115S0_PM_RX) .appendField(new Blockly.FieldDropdown([ ["IN1", "IN1_GPIO"], ["IN2", "IN2_GPIO"], ["IN3", "IN3_GPIO"], ["IN4", "IN4_GPIO"] ]), 'RX'); this.setOutput(true, 'Boolean'); this.setInputsInline(true); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(58); this.setTooltip(Blockly.Msg.HPMA115S0_IS_ERROR_TOOLTIP); this.setHelpUrl(Blockly.Msg.HPMA115S0_IS_ERROR_HELPURL); } }; Blockly.Blocks["hpma115s0.get_error_count"] = { init: function () { this.appendDummyInput() .appendField(Blockly.Msg.HPMA115S0_GET_ERROR_COUNT_TITLE); this.appendDummyInput() .appendField(Blockly.Msg.HPMA115S0_PM_TX) .appendField(new Blockly.FieldDropdown([ ["OUT1", "OUT1_GPIO"], ["OUT2", "OUT2_GPIO"] ]), 'TX'); // device addess this.appendDummyInput() .appendField(Blockly.Msg.HPMA115S0_PM_RX) .appendField(new Blockly.FieldDropdown([ ["IN1", "IN1_GPIO"], ["IN2", "IN2_GPIO"], ["IN3", "IN3_GPIO"], ["IN4", "IN4_GPIO"] ]), 'RX'); this.setOutput(true, 'Number'); this.setInputsInline(true); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(58); this.setTooltip(Blockly.Msg.HPMA115S0_GET_ERROR_COUNT_TOOLTIP); this.setHelpUrl(Blockly.Msg.HPMA115S0_GET_ERROR_COUNT_HELPURL); } }; Blockly.Blocks["hpma115s0.get_error_clear_count"] = { init: function () { this.appendDummyInput() .appendField(Blockly.Msg.HPMA115S0_GET_ERROR_CLEAR_COUNT_TITLE); this.appendDummyInput() .appendField(Blockly.Msg.HPMA115S0_PM_TX) .appendField(new Blockly.FieldDropdown([ ["OUT1", "OUT1_GPIO"], ["OUT2", "OUT2_GPIO"] ]), 'TX'); // device addess this.appendDummyInput() .appendField(Blockly.Msg.HPMA115S0_PM_RX) .appendField(new Blockly.FieldDropdown([ ["IN1", "IN1_GPIO"], ["IN2", "IN2_GPIO"], ["IN3", "IN3_GPIO"], ["IN4", "IN4_GPIO"] ]), 'RX'); this.setOutput(true, 'Number'); this.setInputsInline(true); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(58); this.setTooltip(Blockly.Msg.HPMA115S0_GET_ERROR_CLEAR_COUNT_TOOLTIP); this.setHelpUrl(Blockly.Msg.HPMA115S0_GET_ERROR_CLEAR_COUNT_HELPURL); } }; Blockly.JavaScript['hpma115s0.getpm2_5'] = function (block) { return [ 'DEV_IO.HPMA115S0(' + block.getFieldValue('TX') + ', ' + block.getFieldValue('RX') + ').get_pm2_5()', Blockly.JavaScript.ORDER_ATOMIC ]; }; Blockly.JavaScript['hpma115s0.getpm10'] = function (block) { return [ 'DEV_IO.HPMA115S0(' + block.getFieldValue('TX') + ', ' + block.getFieldValue('RX') + ').get_pm10()', Blockly.JavaScript.ORDER_ATOMIC ]; }; Blockly.JavaScript['hpma115s0.is_error'] = function (block) { return [ 'DEV_IO.HPMA115S0(' + block.getFieldValue('TX') + ', ' + block.getFieldValue('RX') + ').is_error()', Blockly.JavaScript.ORDER_ATOMIC ]; }; Blockly.JavaScript['hpma115s0.get_error_count'] = function (block) { return [ 'DEV_IO.HPMA115S0(' + block.getFieldValue('TX') + ', ' + block.getFieldValue('RX') + ').get_error_count()', Blockly.JavaScript.ORDER_ATOMIC ]; }; Blockly.JavaScript['hpma115s0.get_error_clear_count'] = function (block) { return [ 'DEV_IO.HPMA115S0(' + block.getFieldValue('TX') + ', ' + block.getFieldValue('RX') + ').get_error_clear_count()', Blockly.JavaScript.ORDER_ATOMIC ]; }; Blockly.Msg.SHT21_GET_TEMPERATURE_TITLE = "SHT21 Temperature"; Blockly.Msg.SHT21_GET_TEMPERATURE_TOOLTIP = "Read SHT21 Temperature"; Blockly.Msg.SHT21_GET_TEMPERATURE_HELPURL = ""; Blockly.Msg.SHT21_GET_HUMIDITY_TITLE = "SHT21 Humidity"; Blockly.Msg.SHT21_GET_HUMIDITY_TOOLTIP = "Read SHT21 Humidity"; Blockly.Msg.SHT21_GET_HUMIDITY_HELPURL = ""; Blockly.Msg.SHT21_IS_ERROR_TITLE = "SHT21 Error"; Blockly.Msg.SHT21_IS_ERROR_TOOLTIP = "Check SHT21 Error"; Blockly.Msg.SHT21_IS_ERROR_HELPURL = ""; Blockly.Blocks["sht21.get_temperature"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.SHT21_GET_TEMPERATURE_TITLE); // i2c channel 0 to 64 var channel_array = []; for (var i = 0;i <= 64; i++) { channel_array.push([String(i), String(i)]); } this.appendDummyInput() .appendField(Blockly.Msg.CHANNEL) .appendField(new Blockly.FieldDropdown(channel_array), 'CHANNEL'); this.setOutput(true, 'Number'); this.setInputsInline(true); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(58); this.setTooltip(Blockly.Msg.SHT21_GET_TEMPERATURE_TOOLTIP); this.setHelpUrl(Blockly.Msg.SHT21_GET_TEMPERATURE_HELPURL); } }; Blockly.Blocks["sht21.get_humidity"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.SHT21_GET_HUMIDITY_TITLE); // i2c channel 0 to 64 var channel_array = []; for (var i = 0;i <= 64; i++) { channel_array.push([String(i), String(i)]); } this.appendDummyInput() .appendField(Blockly.Msg.CHANNEL) .appendField(new Blockly.FieldDropdown(channel_array), 'CHANNEL'); this.setOutput(true, 'Number'); this.setInputsInline(true); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(58); this.setTooltip(Blockly.Msg.SHT21_GET_HUMIDITY_TOOLTIP); this.setHelpUrl(Blockly.Msg.SHT21_GET_HUMIDITY_HELPURL); } }; Blockly.Blocks["sht21.is_error"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.SHT21_IS_ERROR_TITLE); // i2c channel 0 to 64 var channel_array = []; for (var i = 0;i <= 64; i++) { channel_array.push([String(i), String(i)]); } this.appendDummyInput() .appendField(Blockly.Msg.CHANNEL) .appendField(new Blockly.FieldDropdown(channel_array), 'CHANNEL'); this.setOutput(true, 'Boolean'); this.setInputsInline(true); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(58); this.setTooltip(Blockly.Msg.SHT21_IS_ERROR_TOOLTIP); this.setHelpUrl(Blockly.Msg.SHT21_IS_ERROR_HELPURL); } }; Blockly.JavaScript['sht21.get_temperature'] = function(block) { return [ 'DEV_I2C1.SHT21(' + block.getFieldValue('CHANNEL') + ', 0x40).get_temperature()', Blockly.JavaScript.ORDER_ATOMIC ]; }; Blockly.JavaScript['sht21.get_humidity'] = function(block) { return [ 'DEV_I2C1.SHT21(' + block.getFieldValue('CHANNEL') + ', 0x40).get_humidity()', Blockly.JavaScript.ORDER_ATOMIC ]; }; Blockly.JavaScript['sht21.is_error'] = function(block) { return [ 'DEV_I2C1.SHT21(' + block.getFieldValue('CHANNEL') + ', 0x40).is_error()', Blockly.JavaScript.ORDER_ATOMIC ]; }; Blockly.Msg.SHT31_GET_TEMPERATURE_TITLE = "SHT31 Temperature"; Blockly.Msg.SHT31_GET_TEMPERATURE_TOOLTIP = "Read SHT31 Temperature"; Blockly.Msg.SHT31_GET_TEMPERATURE_HELPURL = ""; Blockly.Msg.SHT31_GET_HUMIDITY_TITLE = "SHT31 Humidity"; Blockly.Msg.SHT31_GET_HUMIDITY_TOOLTIP = "Read SHT31 Humidity"; Blockly.Msg.SHT31_GET_HUMIDITY_HELPURL = ""; Blockly.Msg.SHT31_IS_ERROR_TITLE = "SHT31 Error"; Blockly.Msg.SHT31_IS_ERROR_TOOLTIP = "Check SHT31 Error"; Blockly.Msg.SHT31_IS_ERROR_HELPURL = ""; Blockly.Blocks["sht31.get_temperature"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.SHT31_GET_TEMPERATURE_TITLE); // i2c channel 0 to 64 var channel_array = []; for (var i = 0;i <= 64; i++) { channel_array.push([String(i), String(i)]); } this.appendDummyInput() .appendField(Blockly.Msg.CHANNEL) .appendField(new Blockly.FieldDropdown(channel_array), 'CHANNEL'); // device addess this.appendDummyInput() .appendField(Blockly.Msg.ADDRESS) .appendField(new Blockly.FieldDropdown([ ["0x44", "68"], ["0x45", "69"] ]), 'ADDRESS'); this.setOutput(true, 'Number'); this.setInputsInline(true); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(58); this.setTooltip(Blockly.Msg.SHT31_GET_TEMPERATURE_TOOLTIP); this.setHelpUrl(Blockly.Msg.SHT31_GET_TEMPERATURE_HELPURL); } }; Blockly.Blocks["sht31.get_humidity"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.SHT31_GET_HUMIDITY_TITLE); // i2c channel 0 to 64 var channel_array = []; for (var i = 0;i <= 64; i++) { channel_array.push([String(i), String(i)]); } this.appendDummyInput() .appendField(Blockly.Msg.CHANNEL) .appendField(new Blockly.FieldDropdown(channel_array), 'CHANNEL'); // device addess this.appendDummyInput() .appendField(Blockly.Msg.ADDRESS) .appendField(new Blockly.FieldDropdown([ ["0x44", "68"], ["0x45", "69"] ]), 'ADDRESS'); this.setOutput(true, 'Number'); this.setInputsInline(true); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(58); this.setTooltip(Blockly.Msg.SHT31_GET_HUMIDITY_TOOLTIP); this.setHelpUrl(Blockly.Msg.SHT31_GET_HUMIDITY_HELPURL); } }; Blockly.Blocks["sht31.is_error"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.SHT31_IS_ERROR_TITLE); // i2c channel 0 to 64 var channel_array = []; for (var i = 0;i <= 64; i++) { channel_array.push([String(i), String(i)]); } this.appendDummyInput() .appendField(Blockly.Msg.CHANNEL) .appendField(new Blockly.FieldDropdown(channel_array), 'CHANNEL'); // device addess this.appendDummyInput() .appendField(Blockly.Msg.ADDRESS) .appendField(new Blockly.FieldDropdown([ ["0x44", "68"], ["0x45", "69"] ]), 'ADDRESS'); this.setOutput(true, 'Boolean'); this.setInputsInline(true); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(58); this.setTooltip(Blockly.Msg.SHT31_IS_ERROR_TOOLTIP); this.setHelpUrl(Blockly.Msg.SHT31_IS_ERROR_HELPURL); } }; Blockly.JavaScript['sht31.get_temperature'] = function(block) { return [ 'DEV_I2C1.SHT31(' + block.getFieldValue('CHANNEL') + ', ' + block.getFieldValue('ADDRESS') + ').get_temperature()', Blockly.JavaScript.ORDER_ATOMIC ]; }; Blockly.JavaScript['sht31.get_humidity'] = function(block) { return [ 'DEV_I2C1.SHT31(' + block.getFieldValue('CHANNEL') + ', ' + block.getFieldValue('ADDRESS') + ').get_humidity()', Blockly.JavaScript.ORDER_ATOMIC ]; }; Blockly.JavaScript['sht31.is_error'] = function(block) { return [ 'DEV_I2C1.SHT31(' + block.getFieldValue('CHANNEL') + ', ' + block.getFieldValue('ADDRESS') + ').is_error()', Blockly.JavaScript.ORDER_ATOMIC ]; }; Blockly.Msg.SI7021_GET_TEMPERATURE_TITLE = "SI7021 Temperature"; Blockly.Msg.SI7021_GET_TEMPERATURE_TOOLTIP = "Read SI7021 Temperature"; Blockly.Msg.SI7021_GET_TEMPERATURE_HELPURL = ""; Blockly.Msg.SI7021_GET_HUMIDITY_TITLE = "SI7021 Humidity"; Blockly.Msg.SI7021_GET_HUMIDITY_TOOLTIP = "Read SI7021 Humidity"; Blockly.Msg.SI7021_GET_HUMIDITY_HELPURL = ""; Blockly.Blocks["si7021.get_temperature"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.SI7021_GET_TEMPERATURE_TITLE); // i2c channel 0 to 64 var channel_array = []; for (var i = 0;i <= 64; i++) { channel_array.push([String(i), String(i)]); } this.appendDummyInput() .appendField(Blockly.Msg.CHANNEL) .appendField(new Blockly.FieldDropdown(channel_array), 'CHANNEL'); this.setOutput(true, 'Number'); this.setInputsInline(true); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(58); this.setTooltip(Blockly.Msg.SI7021_GET_TEMPERATURE_TOOLTIP); this.setHelpUrl(Blockly.Msg.SI7021_GET_TEMPERATURE_HELPURL); } }; Blockly.Blocks["si7021.get_humidity"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.SI7021_GET_HUMIDITY_TITLE); // i2c channel 0 to 64 var channel_array = []; for (var i = 0;i <= 64; i++) { channel_array.push([String(i), String(i)]); } this.appendDummyInput() .appendField(Blockly.Msg.CHANNEL) .appendField(new Blockly.FieldDropdown(channel_array), 'CHANNEL'); this.setOutput(true, 'Number'); this.setInputsInline(true); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(58); this.setTooltip(Blockly.Msg.SI7021_GET_HUMIDITY_TOOLTIP); this.setHelpUrl(Blockly.Msg.SI7021_GET_HUMIDITY_HELPURL); } }; Blockly.JavaScript['si7021.get_temperature'] = function(block) { return [ 'DEV_I2C1.SI7021(' + block.getFieldValue('CHANNEL') + ', 0x40).get_temperature()', Blockly.JavaScript.ORDER_ATOMIC ]; }; Blockly.JavaScript['si7021.get_humidity'] = function(block) { return [ 'DEV_I2C1.SI7021(' + block.getFieldValue('CHANNEL') + ', 0x40).get_humidity()', Blockly.JavaScript.ORDER_ATOMIC ]; }; Blockly.Msg.TSL2561_GET_LUX_TITLE = "TSL2561 Illuminance in Lux"; Blockly.Msg.TSL2561_GET_LUX_TOOLTIP = "Read TSL2561 Illuminance in Lux"; Blockly.Msg.TSL2561_GET_LUX_HELPURL = ""; Blockly.Blocks["tsl2561.get_illuminance"] = { init: function() { this.appendDummyInput() .appendField(Blockly.Msg.TSL2561_GET_LUX_TITLE); // i2c channel 0 to 64 var channel_array = []; for (var i = 0;i <= 64; i++) { channel_array.push([String(i), String(i)]); } this.appendDummyInput() .appendField(Blockly.Msg.CHANNEL) .appendField(new Blockly.FieldDropdown(channel_array), 'CHANNEL'); // device addess this.appendDummyInput() .appendField(Blockly.Msg.ADDRESS) .appendField(new Blockly.FieldDropdown([ ["0x29", "41"], ["0x39", "57"], ["0x49", "73"] ]), 'ADDRESS'); this.setOutput(true, 'Number'); this.setInputsInline(true); this.setPreviousStatement(false); this.setNextStatement(false); this.setColour(58); this.setTooltip(Blockly.Msg.TSL2561_GET_LUX_TOOLTIP); this.setHelpUrl(Blockly.Msg.TSL2561_GET_LUX_HELPURL); } }; Blockly.JavaScript['tsl2561.get_illuminance'] = function(block) { return [ 'DEV_I2C1.TSL2561(' + block.getFieldValue('CHANNEL') + ', ' + block.getFieldValue('ADDRESS') + ').get_illuminance()', Blockly.JavaScript.ORDER_ATOMIC ]; };