#ifndef __SR_74HC165_H__
#define __SR_74HC165_H__

struct sr_74hc165 {
 uint8_t pin_data;
 uint8_t pin_load;
 uint8_t pin_clock;
};

/*
 * Init a shift register structure.
 * prms:
 *  shreg - shift reg struct
 *  pin_load  - load pin (SH/LD)
 *  pin_clock - clock pin (CLK)
 *  pin_data  - data pin (Qh)
 */
void sr_74hc165_init(struct sr_74hc165 *shreg, uint8_t pin_load, uint8_t pin_clock, uint8_t pin_data);

/*
 * Load data into a specified register.
 * prms:
 *  shreg - shift reg struct
 */
void sr_74hc165_load(struct sr_74hc165 *shreg);

/*
 * Read the next bit of data from specified shift reg.
 * prms:
 *  shreg - shift reg struct
 * ret:
 *  VAL - a one bit
 *
 * After a bit is read a reg data is shifted (prepared for the next function call).
 */
uint8_t sr_74hc165_read_nextbit(struct sr_74hc165 *shreg);

/*
 * Read the next byte of data from specified shift reg.
 * prms:
 *  shreg - shift reg struct
 * ret:
 *  VAL - a one byte
 */
uint8_t sr_74hc165_read_nextbyte(struct sr_74hc165 *shreg);

#endif /* __SR_74HC165_H__ */
