DAP(Debug Access Port) interface
Dependents: USBMSD_LPC_HelloWorld lpcterm2 Simple-CMSIS-DAP 11u35_usbLocalFilesystem
Diff: BaseDAP.h
- Revision:
- 0:76588be01e71
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/BaseDAP.h Sat Sep 14 11:21:12 2013 +0000 @@ -0,0 +1,98 @@ +// 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; +};