DAP(Debug Access Port) interface

Dependents:   USBMSD_LPC_HelloWorld lpcterm2 Simple-CMSIS-DAP 11u35_usbLocalFilesystem

BaseDAP.h

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

File content as of revision 0:76588be01e71:

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

// DAP Status Code
#define DAP_OK                          0
#define DAP_ERROR                       0xFF

// DAP Port
#define DAP_PORT_AUTODETECT             0       // Autodetect Port
#define DAP_PORT_DISABLED               0       // Port Disabled (I/O pins in High-Z)
#define DAP_PORT_SWD                    1       // SWD Port (SWCLK, SWDIO) + nRESET

/** DAP(Debug Access Port) interface
 * 
 * Example:
 * @code
 * #include "BaseDAP.h"
 * #include "USBDAP.h"
 * 
 * USBDAP hid(64, 64, 0x0d28, 0x0204);
 * 
 * SWD swd(p21,p22,p17); // SWDIO(dp12),SWCLK(dp3),nReset(dp23)
 * DigitalOut connected(LED1);
 * DigitalOut running(LED2);
 * class myDAP : public BaseDAP {
 * public:
 *     myDAP(SWD* swd):BaseDAP(swd){};
 *     virtual void infoLED(int select, int value) {
 *         switch(select) {
 *             case 0: connected = value; break;
 *             case 1: running = value; break;
 *         }
 *     } 
 * };
 * 
 * int main()
 * {
 *     HID_REPORT recv_report;
 *     HID_REPORT send_report;
 * 
 *     myDAP* dap = new myDAP(&swd);
 *     while(1) {
 *         if(hid.readNB(&recv_report)) {
 *             dap->Command(recv_report.data, send_report.data);
 *             send_report.length = 64;
 *             hid.send(&send_report);
 *         }
 *     }    
 * }
 * @endcode
 */
class BaseDAP {
public:
    /** Create a DAP(Debug Access Port) interface
     * @param swd assign SWD interface
     */
    BaseDAP(SWD* swd);
    virtual ~BaseDAP();
    /** Process command
     * @param request request data(64 bytes)
     * @param response response data(64 bytes)
     * @returns response length 
     */
    int Command(uint8_t* request, uint8_t* response);
protected:
    virtual const char* getInfo(int id);
    /** LED indicator
     * @param selct 0...connected LED, 1...running LED
     * @param value 0...OFF, 1...ON
     */
    virtual void infoLED(int select, int value);

    virtual int Info(uint8_t* request, uint8_t* response);  // 0x00
    int LED(uint8_t* request, uint8_t* response);           // 0x01
    int Connect(uint8_t* request, uint8_t* response);       // 0x02
    int Disconnect(uint8_t* request, uint8_t* response);    // 0x03
    int TransferConfigure(uint8_t* request, uint8_t* response);// 0x04
    int Transfer(uint8_t* request, uint8_t* response);      // 0x05
    int TransferBlock(uint8_t* request, uint8_t* response); // 0x06

    int WriteABORT(uint8_t* request, uint8_t* response);    // 0x08
    int Delay(uint8_t* request, uint8_t* response);         // 0x09
    int ResetTarget(uint8_t* request, uint8_t* response);   // 0x0A
    int SWJ_Pins(uint8_t* request, uint8_t* response);      // 0x10
    int SWJ_Clock(uint8_t* request, uint8_t* response);     // 0x11
    int SWJ_Sequence(uint8_t* request, uint8_t* response);  // 0x12
    int SWD_Configure(uint8_t* request, uint8_t* response); // 0x13
    int Vendor0(uint8_t* request, uint8_t* response);       // 0x80
    /** vendor command
     */
    virtual int Vendor(uint8_t* request, uint8_t* response);// 0x80-0x9f
    virtual int Invalid(uint8_t* request, uint8_t* response);

    TransferCore transfer;
    SWD* _swd;
};