Source file: /~heha/basteln/PC/Programmiergeräte/Wild GIF12/mtp1.zip/usb.h

#pragma once
#include "main.h"

// Funktionen von usb.cpp (allgemein)
extern void usbInit();
extern void usbPoll();
// Funktion von usb.cpp als MTP-Klasse
extern void usbRecv(void*buf,byte len);
inline bool usbRecvPoll() {return UENUM=1,UEINTX&0x80;}
extern void usbSend(const void*buf,byte len,byte ep=2);	// ep=3 für Event
inline void usbFlush() {UEINTX=0;}	// UENUM ist noch richtig

#if 1
// 2 Funktionen deren Zeiger vorrücken (wie „const byte*&s“ zu sehen),
// dabei darf s in RAM oder Flash zeigen („von-neumannisiert“).
// Zeiger rückt um 1 Byte vor
#define takeByte(s) (__extension__({	\
byte r;					\
 asm("\trcall getbyte\n\tmov %0,r24":"=r"(r),"+z"(s)::"r24");\
 r;					\
}))
// Zeiger rückt um 1..3 Byte vor
#define takeUTF8(s) (__extension__({	\
 word r;				\
 asm("\trcall getutf8\n\tmovw %0,r24\n":"=r"(r),"+z"(s)::"r18","r19","r24","r25");\
 r;					\
}))
#else
word takeUTF8(const char*&s);
#endif

// Callback: Wird von usb.cpp als CDC-Klasse gerufen, wenn Daten kommen
extern void handleEp0Out();

//void eelog(const void*data,byte len);
Detected encoding: UTF-80