Source file: /~heha/Mikrocontroller/RpiI2cClockStretcher/i2c.zip/usb.h

#pragma once
#include <avr/io.h>
#include <avr/pgmspace.h>	// PSTR

typedef unsigned char byte;
typedef unsigned short word;
typedef unsigned long dword;
#define F(s) (PSTR(s)+0x8000)		// Flash-String, bspw. F("Hallo")
#define FP(s) (((const byte*)s)+0x8000)	// Flash-Pointer, bspw. const PROGMEM char k[]="Welt"; const char*p=FP(k); 
#define elemof(x) (sizeof(x)/sizeof(*(x)))
#define NOINIT __attribute__((section(".noinit")))

// Funktionen von usb.cpp (allgemein)
// Callbacks
//bool onEp0Data();
// Funktionen
namespace usb{
void Init();
void Poll();
extern struct SetupDesc{
 byte bmRequestType, bRequest;
 word wValue;
 word wIndex;
 word wLength;
 operator byte*() {return (byte*)this;}
}setup;
//bool Ep0Recv(byte*data, word len);		// len ≤ wLength ≤ 4096, blockierend
//bool Ep0Send(const void*data, word len);	// len ≤ wLength ≤ 4096, blockierend
}

namespace i2c{
 bool send();
 bool recv();
 enum{			// Angaben für wValueH
  f10bit = 0x04,	// 10-Bit-Adressierung erzwingen
  fNoRep = 0x08,	// Repeated-Start (zwischen Adresse-Setzen und Lesen) vermeiden
  fAddr = 0x30,		// Eine Adressangabe schaltet vor dem Lesen einen I²C-Schreibzyklus
  fAddr8 = 0x10,	// wIndexL = 8-Bit-Adresse (eines 24Cxx-EEPROM o.ä. Chips)
  fAddrHL = 0x20,	// Erst High, dann Low (typisch I²C)
  fAddrLH = 0x30,	// Erst Low, dann High (untypisch)
  fNoStart = 0x40,
  fNoStop = 0x80,
  eNoStart = 1,		// Startsequenz ausgeben geht nicht (Busfehler)
  eNoAddr,		// NAK bei I²C-Adresse
  eNoSub,		// NAK bei Subadresse
  eEarlyNak,		// NAK beim Datensenden vor dem letzten Byte
  eUsbHickup,		// USB-FIFO-Problem
  eOther,
  eRead = 16,		// Fehler beim Leseteil
 };
 extern byte lastError;
}
Detected encoding: UTF-80