#ifndef OBUS_UTIL_H
#define OBUS_UTIL_H

#include "Arduino.h"


uint32_t unpack_4b_into_u32(uint8_t *data);
void pack_u32_into_4b(uint8_t *dest, uint32_t data);

uint16_t unpack_2b_into_u16(uint8_t *data);
void pack_u16_into_2b(uint8_t *dest, uint16_t data);


class Debounced {
	private:
		uint16_t press_count;
		bool pressing;
		uint32_t press_last_detected;
		uint32_t debounce;
	public:
		Debounced(uint32_t debounce_time) :
			press_count(0),
			pressing(false),
			press_last_detected(0),
			debounce(debounce_time)
			{};
		Debounced() : Debounced(50) {};

		bool loop(bool currently_down);
		uint16_t get_press_count();
};

#endif /* end of include guard: OBUS_UTIL_H */
