* - Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
- * - Neither the name of the Technische Universität Berlin nor the names
+ * - Neither the name of the Titanium Mirror, Inc. nor the names
* of its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
} else if (READ_FLAG(UCB0STAT, UCNACKIFG)) {
CLR_FLAG(UCB0STAT, UCNACKIFG);
CLR_FLAG(UC0IFG, UCB0TXIFG); /* Errata USCI25; 'reset' means clear? */
- signal IntB.i2cNak();
+ signal IntB.i2cNack();
} else if (READ_FLAG(UCB0STAT, UCSTTIFG)) {
CLR_FLAG(UCB0STAT, UCSTTIFG);
signal IntB.i2cStart();
* modes.
*/
TOSH_SIGNAL(USCIAB0TX_VECTOR) {
- if (READ_FLAG(UC0IFG & UC0IE, UCB0RXIE))
- signal IntB.rx(UCB0RXBUF); /* I2C receive */
- else if (READ_FLAG(UC0IFG & UC0IE, UCA0TXIFG))
+ if (READ_FLAG(UC0IFG & UC0IE, UCB0RXIE)) {
+ /* I2C receive. Do not read UCB0RXBUF here, as the code receiving
+ * IntB.rx() may first need to set stop and/or start bits. The receiver
+ * must read UCB0RXBUF.
+ */
+ signal IntB.rx(0);
+ } else if (READ_FLAG(UC0IFG & UC0IE, UCA0TXIFG))
signal IntA.tx();
else if (READ_FLAG(UC0IFG & UC0IE, UCB0TXIFG))
signal IntB.tx();
default async event void IntA.tx() {}
/* i2c is not available for A devices, so the below are never signalled */
default async event void IntA.i2cCal() {}
- default async event void IntA.i2cNak() {}
+ default async event void IntA.i2cNack() {}
default async event void IntA.i2cStart() {}
default async event void IntA.i2cStop() {}
default async event void IntB.rx(uint8_t byte) {}
default async event void IntB.tx() {}
default async event void IntB.i2cCal() {}
- default async event void IntB.i2cNak() {}
+ default async event void IntB.i2cNack() {}
default async event void IntB.i2cStart() {}
default async event void IntB.i2cStop() {}
}