#ifndef _ONEWIRE_H_ #define _ONEWIRE_H_ // Status register bits #define STATUS_DIR 0x80 #define STATUS_TSB 0x40 #define STATUS_SBR 0x20 #define STATUS_RST 0x10 #define STATUS_LL 0x08 #define STATUS_SD 0x04 #define STATUS_PPD 0x02 #define STATUS_1WB 0x01 // Config register bits #define CONFIG_1WS 0x08 #define CONFIG_SPU 0x04 #define CONFIG_PPM 0x02 #define CONFIG_APU 0x01 // DS2482 I2C commands #define DS2482_DEVRESET 0xF0 #define DS2482_READPOINTER 0xE1 #define DS2482_WRITECONF 0xD2 #define DS2482_1WRESET 0xB4 #define DS2482_WRITEBIT 0x87 #define DS2482_WRITEBYTE 0xA5 #define DS2482_READBYTE 0x96 #define DS2482_TRIPLET 0x78 // DS2482 registers #define DS2482REG_STATUS 0xF0 #define DS2482REG_READ 0xE1 #define DS2482REG_CONF 0xC3 // 1-wire commands common to all devices #define OW_SEARCHROM 0xF0 #define OW_READROM 0x33 #define OW_MATCHROM 0x55 #define OW_SKIPROM 0xCC #define OW_ALARMSEARCH 0xEC struct owaddr { // LSB first unsigned char family; unsigned char id[6]; unsigned char crc; }; void ds2482_config(unsigned char config); void ow_spu(int strong_pullup); unsigned char ow_wait(); unsigned char ow_reset(); unsigned char ow_triplet(int direction); void ow_readbytes(unsigned char *buf, int count); void ow_writebytes(unsigned char *buf, int count); void ow_writecommand(unsigned char command); int ow_readbit(); unsigned char ow_crc(unsigned char *buf, int count); int owaddr_getbit(const struct owaddr *addr, int bitno); void owaddr_setbit(struct owaddr *addr, int bitno, int value); void owaddr_copy(struct owaddr *dest, const struct owaddr *src, int startbit, int count); int ow_bussearch(void (*resultfunc)(struct owaddr *)); void ow_matchrom(const struct owaddr *addr); void ow_initialize(char *device); #endif