DAP(Debug Access Port) interface

Dependents:   USBMSD_LPC_HelloWorld lpcterm2 Simple-CMSIS-DAP 11u35_usbLocalFilesystem

TransferCore.h

Committer:
va009039
Date:
2013-09-14
Revision:
0:76588be01e71

File content as of revision 0:76588be01e71:

// TransferCore.h 2013/9/14
#pragma once
#include "SWD.h"

// DAP Transfer Request
#define DAP_TRANSFER_MATCH_VALUE        (1<<4)
#define DAP_TRANSFER_MATCH_MASK         (1<<5)

// DAP Transfer Response
#define DAP_TRANSFER_MISMATCH           (1<<4)

template<typename T>
T LD(uint8_t* buf) {
    T data = 0;
    for(int i = sizeof(T)-1; i >= 0; i--) {
        data <<= 8;
        data |= buf[i];
    }
    return data;
}

template<typename T>
void ST(uint8_t* buf, T data) {
    for(int i = 0; i < sizeof(T); i++) {
        buf[i] = data>>(8*i);
    }
}

class transData {
public:
    void init(uint8_t* base, int pos);
    void append(uint32_t data);
    uint8_t* data();
    int length();

    template<typename T>
    T get() {
        T data = LD<T>(_base+_pos);
        _pos += sizeof(T);
        return data;
    }
protected:
    uint8_t* _base;
    int _pos;
};

class TransferCore {
public:
    int Transfer(SWD* swd, uint8_t* request, uint8_t* response);
    int TransferBlock(SWD* swd, uint8_t* request, uint8_t* response);
    uint16_t  match_retry; // Number of retries if read value does not match
    uint32_t  match_mask;  // Match Mask
private:
    uint8_t read(uint8_t cmd);
    uint8_t write(uint8_t cmd);
    uint8_t read_block(uint8_t cmd, int count);
    uint8_t write_block(uint8_t cmd, int count);

    bool post_read;
    bool check_write;
    transData reqData;  
    transData resData;
    int response_count;
protected:
    SWD* _swd;
};