コード例 #1
0
void announceInit()
{
	// Open socket
	do {
		spiWriteWord(REG_S2_PORT0, ANNOUNCE_PORT);
		spiWriteReg(REG_S2_MR, MR_UDP);
		spiWriteReg(REG_S2_CR, CR_OPEN);
		if(spiReadReg(REG_S2_SR) != SOCK_UDP)
			spiWriteReg(REG_S2_CR, CR_CLOSE);
	} while(spiReadReg(REG_S2_SR) != SOCK_UDP);


	DBG_ANN(tracePGMlnAnn(mDebugAnn_DONE);)

}
コード例 #2
0
void announcePoll()
{
	uint16_t packetSize = spiReadWord(REG_S2_RX_RSR0);

	if(packetSize) {
		announcePacket(packetSize);
		// Close the socket
		spiWriteReg(REG_S2_CR, CR_CLOSE);
		announceInit();
	}
}
コード例 #3
0
void announceReply()
{
	uint8_t txBuffer[100];
	uint8_t* txPtr;
	uint8_t packetLength = 0;
	uint16_t writePointer;
	uint8_t value;
	uint8_t i;

	writePointer = spiReadWord(REG_S2_TX_WR0) + S2_TX_START;
	txPtr = txBuffer + 2;

	// Send IP address in hex
	//
	for(i = REG_SIPR0; i <= REG_SIPR3; i++) {
		value = spiReadReg(i);
		*txPtr++ = hex[value >> 4];
		*txPtr++ = hex[value & 0xf];
	}
	//
	// Tag on ident string
	//
	memcpy_P(txPtr, bootloaderIdentString, bootloaderIdentStringLength);
	packetLength = 8 + bootloaderIdentStringLength;

	// Write packet length at start of packet
	txBuffer[0] = 0;
	txBuffer[1] = packetLength;
	packetLength += 2;
	txPtr = txBuffer;
	while(packetLength--) {
		spiWriteReg(writePointer++, *txPtr++);
		if(writePointer == S2_TX_END) writePointer = S2_TX_START;
	}
	spiWriteWord(REG_S2_TX_WR0, writePointer - S2_TX_START);
	spiWriteReg(REG_S2_CR, CR_SEND);
	while(spiReadReg(REG_S2_CR));
}
コード例 #4
0
ファイル: cc1101.c プロジェクト: gefa/CC1101
/**
 * CC1101_writeReg
 *
 * Write single register into the CC1101 IC via SPI
 *
 * 'regAddr'    Register address
 * 'value'      Value to be writen
 */
void CC1101_writeReg(byte regAddr, byte value)
{
  cc1101_Select();                      // Select CC1101
  wait_Miso();                          // Wait until MISO goes low

//  // waits are needed since CSn is triggered by GPIO which is not in accordance with SPI peripheral which takes few cycles to shift out after you order it
//  spi_send(regAddr);                    // Send register address
//  DSK6713_waitusec(5);
//  spi_send(value);                      // Send value
//  DSK6713_waitusec(20);

  spiWriteReg(regAddr, value);

  cc1101_Deselect();                    // Deselect CC1101
}
コード例 #5
0
ファイル: cc1101.c プロジェクト: gefa/CC1101
/**
 * cmdStrobe
 *
 * Send command strobe to the CC1101 IC via SPI
 *
 * 'cmd'        Command strobe
 */
void CC1101_cmdStrobe(byte cmd)
{
  cc1101_Select();                      // Select CC1101
  wait_Miso();                          // Wait until MISO goes low

//  spi_send(cmd);                        // Send strobe command
//
//  // send again, for some reason first send does not work
//  DSK6713_waitusec(10);
//  spi_send(cmd);                        // Send strobe command
//
//  DSK6713_waitusec(20);

  spiWriteReg(cmd,0x00);	// basically we only need to send 1 byte

  cc1101_Deselect();                    // Deselect CC1101
}
コード例 #6
0
ファイル: cc1101.c プロジェクト: gefa/CC1101
/**
 * reset
 *
 * Reset CC1101
 */
void CC1101_reset(void)
{
  cc1101_Deselect();                    // Deselect CC1101
  DSK6713_waitusec(5);
  cc1101_Select();                      // Select CC1101
  DSK6713_waitusec(10);
  cc1101_Deselect();                    // Deselect CC1101
  DSK6713_waitusec(41);
  cc1101_Select();                      // Select CC1101

  wait_Miso();                          // Wait until MISO goes low
  //spi_send(CC1101_SRES);                // Send reset command strobe
  spiWriteReg(CC1101_SRES,0x00);
  wait_Miso();                          // Wait until MISO goes low

  cc1101_Deselect();                    // Deselect CC1101

  CC1101_setDefaultRegs();                     // Reconfigure CC1101
  //setRegsFromEeprom();                  // Take user settings from EEPROM
}
コード例 #7
0
//FIXME: void announcePacket(uint16_t packetSize) {
void announcePacket()
{
	uint8_t buffer[ANNOUNCE_DATA_SIZE];
	uint16_t packetLength;

	// Transfer entire packet to RAM
	uint8_t* bufPtr = buffer;
	uint16_t count;

	readPointer = spiReadWord(REG_S2_RX_RD0) + S2_RX_START;

	// Read destination IP address
	for(count = 0; count < 4; count++) {
		spiWriteReg(REG_S2_DIPR0 + count, readNextByte());
	}

	// Read destination port - but ignore it and respond on 5555 anyway.
	readNextByte();
	readNextByte();
	spiWriteWord(REG_S2_DPORT0, ANNOUNCE_PORT);

	// Read packet length
	packetLength = readNextByte() | (readNextByte() << 8);

	// Trim overlong packets
	if(packetLength > ANNOUNCE_DATA_SIZE) packetLength = ANNOUNCE_DATA_SIZE;
	for(count = packetLength; --count;) {
		*bufPtr++ = readNextByte();
	}
	spiWriteWord(REG_S2_RX_RD0, readPointer - S2_RX_START); // Write back new pointer
	spiWriteWord(REG_S2_CR, CR_RECV); // Receive again

	// Dump packet
	bufPtr = buffer;

	// Parse packet
	if(memcmp(buffer, "arduino", 7) == 0) announceReply();
}