Question refactored:
Im currently struggling to understand how to update the transmit FIFO of the bsc_xfer.
For reference:
Slave side:
int main(int argc, char** argv)
{
int GPIO = gpioInitialise();
if(GPIO)
{
bsc_xfer_t xfer;
xfer.control = (0x09<<16) | 0x305;
int status = bscXfer(&xfer);
std::cout<<"\nstatus: "<<status<<std::endl;
if(status >= 0)
{
while(1)
{
status = bscXfer(&xfer);
if (status)
{
if(xfer.rxCnt > 0)
{
printf("\nRxCnt: %d RxVal: %x\n", xfer.rxCnt, xfer.rxBuf[0]);
switch(xfer.rxBuf[0])
{
case 0x00:
memcpy(xfer.txBuf, "ABCD", 4);
xfer.txCnt = 4;
break;
case 0x01:
memcpy(xfer.txBuf, "FGHI", 4);
xfer.txCnt = 4;
break;
default:
break;
}
memset( xfer.rxBuf, '\0', BSC_FIFO_SIZE );
}
}
}
}
}
}
Master side:
int main(int argc, char** argv)
{
int GPIO = gpioInitialise();
if(GPIO)
{
int handler = i2cOpen(1, 9, 0);
std::cout<<"\nHandler: "<<handler<<std::endl;
if(handler >= 0)
{
int wr = i2cWriteByte(handler, 0x00);
std::cout<<"\nwr: "<<wr<<std::endl;
if(wr >= 0)
{
char buf[5] = "1111";
int test = i2cReadDevice(handler, buf, 4);
std::cout<<"\ntest: "<<test<<std::endl;
if(test >= 0)
{
std::cout<<"\nReceived: " << buf;
}
std::cout<<std::endl;
wr = i2cWriteByte(handler, 0x01);
std::cout<<"\nwr(2): "<<wr<<std::endl;
if(wr >= 0)
{
test = i2cReadDevice(handler, buf, 4);
std::cout<<"\ntest(2): "<<test<<std::endl;
if(test >= 0)
{
std::cout<<"\nReceived: "<<buf;
}
std::cout<<std::endl;
}
}
}
}
else
{
std::cout<<"\nGPIO init error"<<std::endl;
}
return 0;
}
expected output:
Received: ABCD
Received: FGHI
actual output:
Received: ABCD
Received: AFGH
Question: I'm missing how to reset the Tx fifo correctly, is there a proper way or am I touching something not covered by the lib?