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);) }
/** * readReg * * Read CC1101 register via SPI * * 'regAddr' Register address * 'regType' Type of register: CC1101_CONFIG_REGISTER or CC1101_STATUS_REGISTER * * Return: * Data byte returned by the CC1101 IC */ byte CC1101_readReg(byte regAddr, byte regType) { byte addr, val; addr = regAddr | regType; cc1101_Select(); // Select CC1101 wait_Miso(); // Wait until MISO goes low // // have to do it twice for some reason, first read fails // spi_send(addr); // Send register address // //val = spi_send(addr); // DSK6713_waitusec(5); // //DSK6713_waitusec(25); // val = spi_send(0x00); // Read result // DSK6713_waitusec(20); // // spi_send(addr); // Send register address // DSK6713_waitusec(5); // val = spi_send(0x00); // Read result // DSK6713_waitusec(20); val = spiReadReg(addr); cc1101_Deselect(); // Deselect CC1101 return val; }
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)); }