read and write commands

This commit is contained in:
merlokk 2021-07-27 16:54:03 +03:00
commit 618bdd4bc7
3 changed files with 24 additions and 0 deletions

View file

@ -1096,6 +1096,25 @@ int DesfireAbortTransaction(DesfireContext *dctx) {
return DesfireCommandNoData(dctx, MFDES_ABORT_TRANSACTION);
}
int DesfireReadFile(DesfireContext *dctx, uint8_t fnum, uint32_t offset, uint32_t len, uint8_t *resp, size_t *resplen) {
uint8_t data[10] = {0};
data[0] = fnum;
Uint3byteToMemLe(&data[1], offset);
Uint3byteToMemLe(&data[4], len);
return DesfireCommand(dctx, MFDES_READ_DATA, data, 7, resp, resplen, -1);
}
int DesfireWriteFile(DesfireContext *dctx, uint8_t fnum, uint32_t offset, uint32_t len, uint8_t *data) {
uint8_t xdata[1024] = {0};
xdata[0] = fnum;
Uint3byteToMemLe(&xdata[1], offset);
Uint3byteToMemLe(&xdata[4], len);
memcpy(&xdata[7], data, len);
return DesfireCommandTxData(dctx, MFDES_WRITE_DATA, xdata, 7 + len);
}
int DesfireValueFileOperations(DesfireContext *dctx, uint8_t fid, uint8_t operation, uint32_t *value) {
uint8_t data[250] = {0};
data[0] = fid;

View file

@ -105,4 +105,7 @@ int DesfireAbortTransaction(DesfireContext *dctx);
int DesfireValueFileOperations(DesfireContext *dctx, uint8_t fid, uint8_t operation, uint32_t *value);
int DesfireClearRecordFile(DesfireContext *dctx, uint8_t fnum);
int DesfireReadFile(DesfireContext *dctx, uint8_t fnum, uint32_t offset, uint32_t len, uint8_t *resp, size_t *resplen);
int DesfireWriteFile(DesfireContext *dctx, uint8_t fnum, uint32_t offset, uint32_t len, uint8_t *data);
#endif // __DESFIRECORE_H

View file

@ -435,7 +435,9 @@ ISO 7816-4 Basic interindustry commands. For command APDU's.
#define MFDES_GET_FREE_MEMORY 0x6E
#define MFDES_GET_DF_NAMES 0x6D
#define MFDES_GET_FILE_IDS 0x6F
#define MFDES_WRITE_DATA2 0x8D
#define MFDES_ABORT_TRANSACTION 0xA7
#define MFDES_READ_DATA2 0xAD
#define MFDES_ADDITIONAL_FRAME 0xAF
#define MFDES_UPDATE_RECORD1 0xBA
#define MFDES_READ_RECORDS 0xBB