2 #include <avr/interrupt.h>
3 #include "poppy-com/hal/atmega328p/hal.h"
4 #include "poppy-com/inc/i2c_slave.h"
31 unsigned char i2c_transmit(com_state_t type) {
61 unsigned char i2cAddr(
unsigned char addr,
msg_dir_t dir) {
64 addr = (addr << 1) | dir;
66 if (n++ >= MAX_TRIES)
return 1;
67 status = i2c_transmit(START);
68 if ((status != TW_START) & (status != TW_REP_START)) {
69 ctx.
status.master_write = TRUE;
74 switch (i2c_transmit(DATA)) {
96 unsigned char i2cWrite(
unsigned char data) {
99 if (i2c_transmit(DATA) ) {
100 ctx.
status.master_write = TRUE;
104 ctx.
status.master_write = TRUE;
119 unsigned char i2cRead(
unsigned char ack_enable,
unsigned char *data) {
121 if (i2c_transmit(DATA) ) {
122 ctx.
status.master_read = TRUE;
126 if (i2c_transmit(DATA_NACK) ) {
127 ctx.
status.master_read = TRUE;
163 ctx.
status.unexpected_state = TRUE;
181 void id_update(
unsigned char id) {
197 unsigned char crc(
unsigned char* data,
unsigned char size) {
199 unsigned int crc = 0xFFFF;
202 x = crc >> 8 ^ *data++;
204 crc = (crc << 8) ^ ((
unsigned int)(x << 12))
205 ^ ((
unsigned int)(x <<5))
208 return (
unsigned char)crc;
msg_dir_t
Message direction enum.