123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- 'use strict';
- goog.provide('Blockly.Python.spi');
- goog.require('Blockly.Python');
- Blockly.Python['spi_setup'] = function(block) {
- var spiId = block.getFieldValue('SPI_ID');
- var spiShift = block.getFieldValue('SPI_SHIFT_ORDER');
- var spiClockDivide = block.getFieldValue('SPI_CLOCK_DIVIDE');
- var spiMode = block.getFieldValue('SPI_MODE');
- Blockly.Python.addInclude('spi', '#include <SPI.h>');
- Blockly.Python.addSetup('spi_order',
- spiId + '.setBitOrder(' + spiShift + ');', true);
- Blockly.Python.addSetup('spi_mode',
- spiId + '.setDataMode(' + spiMode + ');', true);
- Blockly.Python.addSetup('spi_div',
- spiId + '.setClockDivider(' + spiClockDivide + ');', true);
- Blockly.Python.addSetup('spi_begin',
- spiId + '.begin();', true);
- return '';
- };
- Blockly.Python['spi_transfer'] = function(block) {
- var spiId = block.getFieldValue('SPI_ID');
- var spiSs = block.getFieldValue('SPI_SS');
- var spiData = Blockly.Python.valueToCode(
- block, 'SPI_DATA', Blockly.Python.ORDER_ATOMIC) || '0';
- Blockly.Python.addInclude('spi', '#include <SPI.h>');
- Blockly.Python.addSetup('spi_begin', spiId + '.begin();', false);
-
- var spiPins = Blockly.Python.Boards.selected.spiPins[spiId];
- for (var i = 0; i < spiPins.length; i++) {
- Blockly.Python.reservePin(block, spiPins[i][1],
- Blockly.Python.PinTypes.SPI, 'SPI ' + spiPins[i][0]);
- }
-
- if (spiSs !== 'none') {
- Blockly.Python.reservePin(
- block, spiSs, Blockly.Python.PinTypes.OUTPUT, 'SPI Slave pin');
- var setupCode = 'pinMode(' + spiSs + ', OUTPUT);';
- Blockly.Python.addSetup('io_' + spiSs, setupCode, false);
- }
-
- var code = [];
- if (spiSs !== 'none') {
- code.push('digitalWrite(' + spiSs + ', HIGH);');
- }
- code.push(spiId + '.transfer(' + spiData + ');');
- if (spiSs !== 'none') {
- code.push('digitalWrite(' + spiSs + ', LOW);');
- }
- return code.join('\n') + '\n';
- };
- Blockly.Python['spi_transfer_return'] = function(block) {
- var spiId = block.getFieldValue('SPI_ID');
- var spiSs = block.getFieldValue('SPI_SS');
- var spiData = Blockly.Python.valueToCode(
- block, 'SPI_DATA', Blockly.Python.ORDER_ATOMIC) || '0';
-
- var spiTransferOnlyCode = Blockly.Python['spi_transfer'](block);
- if (spiSs === 'none') {
- var code = spiId + '.transfer(' + spiData + ')';
- } else {
- var func = [
- 'int ' + Blockly.Python.DEF_FUNC_NAME + '() {',
- ' int spiReturn = 0;',
- ' digitalWrite(' + spiSs + ', HIGH);',
- ' spiReturn = ' + spiId + '.transfer(' + spiData + ');',
- ' digitalWrite(' + spiSs + ', LOW);',
- ' return spiReturn;',
- '}'];
- var functionName = Blockly.Python.addFunction(
- 'spiReturnSlave' + spiSs, func.join('\n'));
- var code = functionName + '()';
- }
- return [code, Blockly.Python.ORDER_UNARY_POSTFIX];
- };
|