#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-8 | 0
|