Beispiel #1
0
// must be called in:
// slave tx event callback
// or after beginTransmission(address)
void TwoWire::send(uint8_t data)
{
	if(transmitting)
	{
		// in master transmitter mode
		// don't bother if buffer is full
		if(txBufferLength >= BUFFER_LENGTH)
		{
			return;
		}
		// put byte in tx buffer
		txBuffer[txBufferIndex] = data;
		++txBufferIndex;
		// update amount in buffer   
		txBufferLength = txBufferIndex;
	}
	else
	{	
		// Secure I2C power management
		Wire.secureBegin();
		
		// in slave send mode
		// reply to master
		twi_transmit(&data, 1);
		
		// Secure I2C power management
		Wire.secureEnd();
	}
}
Beispiel #2
0
// must be called in:
// slave tx event callback
// or after beginTransmission(address)
size_t TwoWire::write(uint8_t data)
{
  int master, writeLenght;

  master = transmitting;
  writeLenght = txBufferLength;

  if(master){
  // in master transmitter mode
    // don't bother if buffer is full
    if(writeLenght >= BUFFER_LENGTH){
      setWriteError();
      return 0;
    }

    // put byte in tx buffer
    txBuffer[txBufferIndex] = data;
    ++txBufferIndex;
    // update amount in buffer   
    txBufferLength = txBufferIndex;

  }else{
  // in slave send mode
    // reply to master
    twi_transmit(&data, 1);
  }
  return 1;
}
Beispiel #3
0
size_t TwoWire::write(const uint8_t *data, size_t quantity){
  if(transmitting){
    for(size_t i = 0; i < quantity; ++i){
      if(!write(data[i])) return i;
    }
  }else{
    twi_transmit(data, quantity);
  }
  return quantity;
}
Beispiel #4
0
// BUS TRANSMIT
// ===============================================================
// ===============================================================
void processTx(void)
{
	key_send[0] = 255;
	if(key_read != key_write) {
		key_send[0] = key_changes[key_read];
		key_read++;
		key_read %= 128;
	} 

	twi_transmit(key_send, 1);
}
Beispiel #5
0
// must be called in:
// slave tx event callback
// or after beginTransmission(address)
void TwoWire::send(uint8_t* data, uint8_t quantity)
{
  if(transmitting){
  // in master transmitter mode
    for(uint8_t i = 0; i < quantity; ++i){
      send(data[i]);
    }
  }else{
  // in slave send mode
    // reply to master
    twi_transmit(data, quantity);
  }
}
Beispiel #6
0
int twi_tx_slave_address(unsigned char address, unsigned char mode) // complete
{
	// transmit slave address and mode.
	twi_transmit(address | mode);

	// check return code
	if( (mode == TWI_WRITE_MODE) && ( (TWSR & 0xF8) != TWI_TX_SL_ADD_WRITE_SUCESS) )
	      return 1;
	if( (mode == TWI_READ_MODE) && ( (TWSR & 0xF8) != TWI_TX_SL_ADD_READ_SUCESS) )
	      return 1;
	 
	return 0;
}
Beispiel #7
0
// must be called in:
// slave tx event callback
// or after beginTransmission(address)
size_t TwoWire::write(const uint8_t *data, size_t quantity)
{
  if(transmitting){
  // in master transmitter mode
    for(size_t i = 0; i < quantity; ++i){
      write(data[i]);
    }
  }else{
  // in slave send mode
    // reply to master
    twi_transmit(data, quantity);
  }
  return quantity;
}
Beispiel #8
0
size_t TwoWire::write(uint8_t data){
  if(transmitting){
    if(txBufferLength >= BUFFER_LENGTH){
      setWriteError();
      return 0;
    }
    txBuffer[txBufferIndex] = data;
    ++txBufferIndex;
    txBufferLength = txBufferIndex;
  } else {
    twi_transmit(&data, 1);
  }
  return 1;
}
Beispiel #9
0
// must be called in:
// slave tx event callback
// or after beginTransmission(address)
void twi_send_byte(uint8_t data)
{
  if(transmitting){
  // in master transmitter mode
    // don't bother if buffer is full
    if(txBufferLength >= BUFFER_LENGTH){
      return;
    }
    // put byte in tx buffer
    txBuffer[txBufferIndex] = data;
    ++txBufferIndex;
    // update amount in buffer   
    txBufferLength = txBufferIndex;
  }else{
  // in slave send mode
    // reply to master
    twi_transmit(&data, 1);
  }
}
Beispiel #10
0
// must be called in:
// slave tx event callback
// or after beginTransmission(address)
void TwoWire::send(uint8_t* data, uint8_t quantity)
{
	if(transmitting)
	{
		// in master transmitter mode
		for(uint8_t i = 0; i < quantity; ++i)
		{
			send(data[i]);
		}
	}
	else
	{
		// Secure I2C power management
		Wire.secureBegin();
	
		// in slave send mode
		// reply to master
		twi_transmit(data, quantity);
			
		// Secure I2C power management
		Wire.secureEnd();
	}
}
Beispiel #11
0
// must be called in:
// slave tx event callback
// or after beginTransmission(address)
size_t TwoWireMaster::write(uint8_t data)
{
  if(transmitting){
  // in master transmitter mode
    // don't bother if buffer is full
    if(txBufferLength >= BUFFER_LENGTH){
      setWriteError();
      return 0;
    }
    // put byte in tx buffer
    txBuffer[txBufferIndex] = data;
    ++txBufferIndex;
    // update amount in buffer   
    txBufferLength = txBufferIndex;
  }else{
  // in slave send mode
    // reply to master
#if ORG_FILE
    twi_transmit(&data, 1);
#endif  // ORG_FILE
  }
  return 1;
}
Beispiel #12
0
// Private function i2c_write_data
size_t i2c_write_byte(uint8_t data)
{

	if(transmitting)
	{
		// in master transmitter mode
		// ignore if buffer full
		if(txBufferLength >=  BUFFER_LENGTH)
		{
			// TODO: setWriteError
			// create a callback singaler
			return 0;
		}
		// put byte in tx buffer
		txBuffer[txBufferIndex] = data;
		++txBufferIndex;
		txBufferLength = txBufferIndex;
	}
	else
	{
		twi_transmit(&data, 1);
	}
	return 1; // Placeholder
}