Getting Microchip Foundation Services Library I2C Boilerplate To Compile

I've since figured out how to resolve the two error messages to compile the new thing, formally called Foundation Services Library.
The first compiler error message was this:
In file included from mcc_generated_files/USBI2C_app.c:25:
mcc_generated_files/drivers/i2c_slave.h:55:34: error: unknown type name 'interruptHandler'
void i2c_slave_setReadIntHandler(interruptHandler handler);
^
Searching elsewhere in the generated boilerplate, I found a declaration for interruptHandler
in another different header file. Copying it into i2c_slave.h
addressed the "unknown type name" error.
typedef void (*interruptHandler)(void);
However, that error was replaced by a warning that there are now duplicate declarations of interruptHandler
. This seems silly - if there were a declaration to collide with, it should not have thrown an unknown type name error signifying the declaration's absence.
MPLAB should either not throw the error, or not raise the warning, but it is doing both. I have yet to figure out if the toolchain is busted or if the boilerplate code is. For now, though, I could proceed to the next problem.
The second compiler error message was this:
mcc_generated_files/USBI2C_app.c:30:14: error: no member named 'SSP1IE' in 'PIE3bits_t'
PIE3bits.SSP1IE = 1;
~~~~~~~~ ^
1 error generated.
This one was easier to figure out - go into the header files for this chip and look for SSP1IE. I found it declared on PIE1bits instead of PIE3bits. So to get this code to compile, I changed the boilerplate code from this:
void USBI2C_Initialize(void){
PIE3bits.SSP1IE = 1;
i2c_slave_open();
}
To this:
void USBI2C_Initialize(void){
PIE1bits.SSP1IE = 1;
i2c_slave_open();
}
What does PIE1bits.SSP1IE
actually do? I'm not sure so I'm not positive this is actually the correct fix. But at least all of the foundation boilerplate compiles, and I start browsing through sample code for MikroElektronika USB-I2C Click module to figure out what it does and what I can do with it. Reading through code and comments, I saw this comment block.
- This module only supports byte operations. Block read and write operations is
not yet supported by MCC Foundation I2C Slave Drivers.
This comment implies Microchip has decided to deprecate their previous I²C library even though the new library is unable to duplicate important functionality. If true, this is... unsatisfactory. I want block read and write operations for my project.
Now I'm even more motivated to stay with the old code, but unfortunately there were some complications with that, too...