/**
 * @brief Module/Interface for editing AVR registers 
 * @details This file is an interface to AVR registers or the avr/io.h
 * @author Jake G 
 * @date 2024 
 * @copyright None
 * @file RegEdit.h
 */

#ifndef REGEDIT_H
#define REGEDIT_H

#include <stdint.h>
#include <stdbool.h>


/**
 * @brief Sets the value of the register to 0xFF.
 * @param reg A pointer to a register 
 */
void RegEdit_SetRegister(void *reg);

/**
 * @brief Sets the value of the register to 0x00. 
 * @param reg A pointer to a register 
 */
void RegEdit_ClearRegister(void *reg);

/**
 * @brief Sets a single bit in the register.
 * @param reg A pointer to a register 
 * @param The bit's index or number in the register
 */
void RegEdit_SetBit(void *reg, uint8_t bit_num);

/**
 * @brief Clears a single bit in the register.
 * @param reg A pointer to a register 
 * @param The bit's index or number in the register
 */
void RegEdit_ClearBit(void *reg, uint8_t bit_num);

/**
 * @brief Checks if a single bit is set in the register.
 * @param reg A pointer to a register 
 * @param The bit's index or number in the register
 */
bool RegEdit_IsBitSet(void *reg, uint8_t bit_num);

/**
 * @brief Preforms logical OR Equals with the passed num.
 * @param reg A pointer to a register 
 * @param The bit's index or number in the register
 */
void RegEdit_OR_Num(void *reg, uint8_t num);

/**
 * @brief Preforms logical AND Equals with the passed num.
 * @param reg A pointer to a register 
 * @param The bit's index or number in the register
 */
void RegEdit_AND_Num(void *reg, uint8_t num);

/**
 * @brief Sets the register to the passed number value.
 * @param reg A pointer to a register 
 * @param The bit's index or number in the register
 */
void RegEdit_SetNum(void *reg, uint8_t num);

#endif //REGEDIT_H
