* @author David Gay
*/
-generic module HplAt45dbByteC(int sectorSizeLog2) {
+generic module HplAt45dbByteC(int sectorSizeLog2) @safe() {
provides interface HplAt45db;
uses {
interface Resource;
P_ERASE
};
uint8_t status = P_IDLE;
- uint8_t flashCmd[4];
- uint8_t *data;
+ uint8_t flashCmd[9];
at45pageoffset_t dataCount;
+ uint8_t * COUNT_NOK(dataCount) data;
uint8_t dontCare;
void complete(uint16_t crc) {
}
void requestFlashStatus() {
- uint8_t dummy;
-
call HplAt45dbByte.select();
- call FlashSpi.write(AT45_C_REQ_STATUS, &dummy);
+ call FlashSpi.write(AT45_C_REQ_STATUS);
call HplAt45dbByte.waitIdle();
}
else /* P_COMMAND */
break;
- call FlashSpi.write(out, &in);
+ in = call FlashSpi.write(out);
}
call HplAt45dbByte.deselect();
}
void execCommand(uint8_t op, uint8_t reqCmd, uint8_t reqDontCare,
at45page_t reqPage, at45pageoffset_t reqOffset,
- uint8_t *reqData, at45pageoffset_t reqCount) {
+ uint8_t * COUNT_NOK(reqCount) reqData, at45pageoffset_t reqCount) {
status = op;
// page (2 bytes) and highest bit of offset
flashCmd[1] = reqPage >> (16 - sectorSizeLog2);
flashCmd[2] = reqPage << (sectorSizeLog2 - 8) | reqOffset >> 8;
flashCmd[3] = reqOffset; // low-order 8 bits
- data = reqData;
+ data = NULL;
dataCount = reqCount;
+ data = reqData;
dontCare = reqDontCare;
call Resource.request();
at45page_t page, at45pageoffset_t offset,
at45pageoffset_t count,
uint16_t baseCrc) {
- execCommand(P_READ_CRC, cmd, 2, page, offset, (uint8_t *)baseCrc, count);
+ execCommand(P_READ_CRC, cmd, 2, page, offset, TCAST(uint8_t * COUNT(count), baseCrc), count);
}
command void HplAt45db.write(uint8_t cmd,