I haven’t had a chance to do much work on Mii Transfer this week. but I’ve changed the way I read Mii data to read the entire 750 byte block (+ CRC bytes) into a buffer and then simply copy the requested Mii from the buffer. I also fixed the reported bug where Miis other than the first one will be corrupted.
The new method readMiiData will read that entire block. If you call getMii: without first reading the buffer, it will request a read and return nil, with the gotMii: delegate method getting called when the block is completely read. If the Mii data block is in memory, it will return a pointer to the requested Mii and the delegate method won’t get called.
Writing Miis still doesn’t work, though. You can only write 16 bytes at a time. I’m sure it returns some kind of acknowledgment when the write completes, but I’m not sure how to handle it.