]> sigrok.org Git - sigrok-firmware-fx2lafw.git/blobdiff - fx2lib/include/eputils.h
Import fx2lib into fx2lafw directly.
[sigrok-firmware-fx2lafw.git] / fx2lib / include / eputils.h
diff --git a/fx2lib/include/eputils.h b/fx2lib/include/eputils.h
new file mode 100644 (file)
index 0000000..57a3e21
--- /dev/null
@@ -0,0 +1,86 @@
+// Copyright (C) 2009 Ubixum, Inc. 
+// 
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+/*! \file 
+ *  Functions and macros for working with endpoints.
+ * */
+
+#ifndef EPUTILS_H
+#define EPUTILS_H
+
+#include "fx2types.h"
+
+/**
+ * NOTE you can't use these unless you define SYNCDELAY 
+ * as a macro or function.  The reason is that SYNCDELAY
+ * needs to be longer or shorter depending on your IFCONFIG
+ * settings.  
+ * See delay.h
+ *
+ * Example:
+ * \code
+ *  #define SYNCDELAY() SYNCDELAY4 // SYNCDELAY4 from delay.h
+ * \endcode
+ *
+ *
+ **/
+
+/**
+ * Stalls EP0.
+ **/
+#define STALLEP0() EP0CS |= bmEPSTALL
+
+/**
+ * \brief Reset the toggle on an endpoint.
+ * To use this, the endpoint needs bit 8 to be IN=1,OUT=0
+ **/
+#define RESETTOGGLE(ep) TOGCTL = (ep&0x0F) + ((ep&0x80)>>3); TOGCTL |= bmRESETTOGGLE
+
+
+/**
+ * RESETFIFO should not use 0x80|epnum for IN endpoints
+ * Only use 0x02, 0x04, 0x06, 0x06 for ep value
+ **/
+#define RESETFIFO(ep) {FIFORESET=0x80; SYNCDELAY();\
+                       FIFORESET=ep; SYNCDELAY();\
+                       FIFORESET=0x00; SYNCDELAY();}
+/**
+ * Quickly reset all endpoint FIFOS.
+ **/
+#define RESETFIFOS() {FIFORESET=0x80; SYNCDELAY();\
+                     FIFORESET=0x02; SYNCDELAY();\
+                     FIFORESET=0x04; SYNCDELAY();\
+                     FIFORESET=0x06; SYNCDELAY();\
+                     FIFORESET=0x08; SYNCDELAY();\
+                     FIFORESET=0x00; SYNCDELAY();}
+
+/**
+ * Continually read available bytes from endpoint0 into dst, wait
+ * until more bytes are available, and loop until len bytes have 
+ * been read.
+ **/
+void readep0( BYTE* dst, WORD len );
+
+
+/**
+ * Write bytes from src to ep0, allowing host to transfer data
+ * between 64 byte blocks.
+ **/
+void writeep0 ( BYTE* src, WORD len );
+
+
+
+#endif