Skip to content

Commit

Permalink
drivers complete
Browse files Browse the repository at this point in the history
  • Loading branch information
Sabramz committed Apr 13, 2024
1 parent a536f4f commit 7070d2b
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 44 deletions.
5 changes: 5 additions & 0 deletions general/include/max7314.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,11 @@ void max7314_init(max7314_t *max, I2C_HandleTypeDef *i2c_handle);

HAL_StatusTypeDef max7314_write_config(max7314_t *max, uint8_t *config);

/**
* @brief Set the intensity of the output pins (low or high)
*/
HAL_StatusTypeDef max7314_set_global_intensity(max7314_t *max, uint8_t level);

/**
* @brief Set pin to be an input or an output pin
*/
Expand Down
58 changes: 14 additions & 44 deletions general/src/max7314.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,13 @@ HAL_StatusTypeDef write_word(max7314_t *max, uint16_t address, uint8_t *data) {
void max7314_init(max7314_t *max, I2C_HandleTypeDef *i2c_handle) {
max->i2c_handle = i2c_handle;
max->dev_addr = max->dev_addr << 1u ; /* shifted one to the left cuz STM says so */

uint8_t turn_off = 0b11110000;
write_reg(max, MAX7314_PHASE_0_OUTPUTS_0_7, &turn_off);

}


HAL_StatusTypeDef max7314_set_global_intensity(max7314_t *max, uint8_t level) {

HAL_StatusTypeDef status;
Expand All @@ -38,20 +43,16 @@ HAL_StatusTypeDef max7314_set_global_intensity(max7314_t *max, uint8_t level) {
if (level == 0) {
master_intensity = 0x00;
} else {
master_intensity = 0x0F;
master_intensity = 0xFF;
}

status = write_reg(max, MAX7314_MASTER_INTENSITY, &master_intensity);
if (status != HAL_OK) {
return status;
}
}

// PHASE 0 OUTPUT BIT 1: PIN HIGH NOT PULLED DOWN
// PHASE 0 OUTPUT BIT 0: PIN LOW PULLED DOWN

// uint8_t do_nothing = 0b11111111;
// write_reg(max, MAX7314_PHASE_0_OUTPUTS_0_7, &do_nothing);
return HAL_OK;
}

HAL_StatusTypeDef max7314_write_config(max7314_t *max, uint8_t *config) {
return write_reg(max, MAX7314_CONFIG_REG, config);
Expand All @@ -62,38 +63,6 @@ HAL_StatusTypeDef max7314_set_pin_mode(max7314_t *max, uint8_t pin, uint8_t mode
uint8_t conf_data;
HAL_StatusTypeDef status;

if (pin < 7) {
/* Read current port configuration */
status = read_reg(max, MAX7314_PORT_CONFIG_0_TO_7, &conf_data);
if (status != HAL_OK)
return status;

/* Change port configuration of desired pin. Bit manip sets one bit to mode. */
conf_data = (conf_data & ~(1u << pin)) | (mode << pin);
status = write_reg(max, MAX7314_PORT_CONFIG_0_TO_7, &conf_data);
if (status != HAL_OK)
return status;

} else {
/* Same as above but for different register */
status = read_reg(max, MAX7314_PORT_CONFIG_8_TO_15, &conf_data);
if (status != HAL_OK)
return status;

conf_data = (conf_data & ~(1u << (pin - REG_SIZE))) | (mode << (pin - REG_SIZE));
status = write_reg(max, MAX7314_PORT_CONFIG_8_TO_15, &conf_data);
if (status != HAL_OK)
return status;
}

return HAL_OK;
}

HAL_StatusTypeDef max7314_set_pin_modes(max7314_t *max, max7314_pin_regs_t reg, uint8_t *pin_configs)
{
uint8_t conf_data;
HAL_StatusTypeDef status;

if (pin < 7) {
/* Read current port configuration */
status = read_reg(max, MAX7314_PHASE_0_OUTPUTS_0_7, &conf_data);
Expand Down Expand Up @@ -136,7 +105,7 @@ HAL_StatusTypeDef max7314_read_pin(max7314_t *max, uint8_t pin, bool *state)
if (status != HAL_OK)
return status;

*state = (pin_data & (1u << pin)) > 0;
*state = (pin_data & (1u << pin)) > 0;
} else {
status = read_reg(max, MAX7314_INPUT_PORTS_8_TO_15, &pin_data);
if (status != HAL_OK)
Expand All @@ -148,6 +117,8 @@ HAL_StatusTypeDef max7314_read_pin(max7314_t *max, uint8_t pin, bool *state)
return HAL_OK;
}

/* PHASE 0 OUTPUT BIT 1: PIN HIGH NOT PULLED DOWN */
/* PHASE 0 OUTPUT BIT 0: PIN LOW PULLED DOWN */
HAL_StatusTypeDef max7314_set_pin_state(max7314_t *max, uint8_t pin, bool state)
{
uint8_t pin_data;
Expand All @@ -159,7 +130,6 @@ HAL_StatusTypeDef max7314_set_pin_state(max7314_t *max, uint8_t pin, bool state)
reg += 1;
}

/* Bit manipulation changes only the bits we want to. */
if (state) {
pin_state = 1;
} else {
Expand All @@ -172,13 +142,13 @@ HAL_StatusTypeDef max7314_set_pin_state(max7314_t *max, uint8_t pin, bool state)

/* Clear bit at position, then set it to state*/
if (pin < 8) {
pin_data = (pin_data & ~(1u << pin)) | (state << pin);
pin_data = (pin_data & ~(1u << pin)) | (pin_state << pin);
} else {
pin_data = (pin_data & ~(1u << (pin - REG_SIZE))) | (state << (pin - REG_SIZE));
pin_data = (pin_data & ~(1u << (pin - REG_SIZE))) | (pin_state << (pin - REG_SIZE));
}

// /* Write to register containing the desired pin */
status = write_reg(max, reg, &pin_data);

return HAL_OK;
}
}

0 comments on commit 7070d2b

Please sign in to comment.