Files @ c1b2840961f0
Branch filter:

Location: therm-ng/src/system/gpio.c - annotation

Ethan Zonca <ethanzonca>
Hacking thermostatic mode into operation. This code needs some love.
667b32311f8f
667b32311f8f
667b32311f8f
667b32311f8f
667b32311f8f
667b32311f8f
667b32311f8f
667b32311f8f
752fd27f607a
752fd27f607a
752fd27f607a
667b32311f8f
667b32311f8f
667b32311f8f
667b32311f8f
667b32311f8f
b61e1f4d75c5
667b32311f8f
b61e1f4d75c5
b61e1f4d75c5
b61e1f4d75c5
b61e1f4d75c5
667b32311f8f
667b32311f8f
b61e1f4d75c5
b61e1f4d75c5
b61e1f4d75c5
b61e1f4d75c5
b61e1f4d75c5
b61e1f4d75c5
667b32311f8f
667b32311f8f
574fd84a2bf8
b61e1f4d75c5
b61e1f4d75c5
b61e1f4d75c5
667b32311f8f
574fd84a2bf8
574fd84a2bf8
574fd84a2bf8
574fd84a2bf8
b61e1f4d75c5
b61e1f4d75c5
b61e1f4d75c5
b61e1f4d75c5
667b32311f8f
667b32311f8f
b61e1f4d75c5
b61e1f4d75c5
b61e1f4d75c5
667b32311f8f
b61e1f4d75c5
b61e1f4d75c5
667b32311f8f
b61e1f4d75c5
b61e1f4d75c5
574fd84a2bf8
667b32311f8f
667b32311f8f
752fd27f607a
752fd27f607a
752fd27f607a
752fd27f607a
752fd27f607a
752fd27f607a
752fd27f607a
752fd27f607a
752fd27f607a
752fd27f607a
752fd27f607a
752fd27f607a
752fd27f607a
752fd27f607a
752fd27f607a
752fd27f607a
752fd27f607a
574fd84a2bf8
574fd84a2bf8
574fd84a2bf8
574fd84a2bf8
574fd84a2bf8
574fd84a2bf8
574fd84a2bf8
574fd84a2bf8
574fd84a2bf8
574fd84a2bf8
574fd84a2bf8
574fd84a2bf8
574fd84a2bf8
574fd84a2bf8
574fd84a2bf8
574fd84a2bf8
574fd84a2bf8
752fd27f607a
752fd27f607a
752fd27f607a
752fd27f607a
b61e1f4d75c5
752fd27f607a
752fd27f607a
752fd27f607a
752fd27f607a
b61e1f4d75c5
752fd27f607a
752fd27f607a
752fd27f607a
752fd27f607a
b61e1f4d75c5
752fd27f607a
752fd27f607a
752fd27f607a
9ae5559ab974
9ae5559ab974
9ae5559ab974
9ae5559ab974
9ae5559ab974
9ae5559ab974
9ae5559ab974
9ae5559ab974
9ae5559ab974
9ae5559ab974
9ae5559ab974
9ae5559ab974
9ae5559ab974
9ae5559ab974
9ae5559ab974
9ae5559ab974
9ae5559ab974
9ae5559ab974
//
// GPIO: configure general-purpose inputs/outputs
//

#include "stm32f3xx_hal.h"
#include "gpio.h"


// Private variables
// Increase on each press, and increase at a fast rate after duration elapsed of continuously holding down... somehow...
static uint32_t change_time_reset = 0;


// Initialize GPIOs
void gpio_init(void)
{
    GPIO_InitTypeDef GPIO_InitStruct;

    // GPIO Ports Clock Enable
    __GPIOA_CLK_ENABLE();
    __GPIOB_CLK_ENABLE();
    __GPIOF_CLK_ENABLE();


    // Configure LED GPIO pins
    GPIO_InitStruct.Pin = LED_PIN;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct);


    GPIO_InitStruct.Pin = SW_A_Pin|SW_B_Pin|SW_C_Pin|SW_D_Pin|AUX_INPUT_Pin;
    GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
    GPIO_InitStruct.Pull = GPIO_PULLUP;
    HAL_GPIO_Init(SW_C_GPIO_Port, &GPIO_InitStruct);

    GPIO_InitStruct.Pin = AUX_RETURN_Pin;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    HAL_GPIO_Init(AUX_RETURN_GPIO_Port, &GPIO_InitStruct);

    GPIO_InitStruct.Pin = SW_BTN_Pin;
    GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
    GPIO_InitStruct.Pull = GPIO_PULLUP;
    HAL_GPIO_Init(SW_BTN_GPIO_Port, &GPIO_InitStruct);


    /* EXTI interrupt init*/
    HAL_NVIC_SetPriority(EXTI9_5_IRQn, 0, 0);
    HAL_NVIC_EnableIRQ(EXTI9_5_IRQn);

    HAL_NVIC_SetPriority(EXTI15_10_IRQn, 0, 0);
    HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);

    // Define startup State
    HAL_GPIO_WritePin(LED, 0);
    HAL_GPIO_WritePin(AUX_RETURN, 0);

}


// Increment/decrement unsigned variable with up/down buttons
void user_input(uint16_t* to_modify)
{
    if(CHANGE_ELAPSED) {
        if(!HAL_GPIO_ReadPin(SW_UP) ) {
            CHANGE_RESET;
            (*to_modify)++;
        }
        else if(!HAL_GPIO_ReadPin(SW_DOWN) && (*to_modify) > 0) {
            CHANGE_RESET;
            (*to_modify)--;
        }
    }
}

// Increment/decrement unsigned variable with up/down buttons
void user_input_min_max(uint16_t* to_modify, uint16_t min, uint16_t max)
{
    if(CHANGE_ELAPSED) {
        if(!HAL_GPIO_ReadPin(SW_UP) && ((*to_modify) < max))
        {
            CHANGE_RESET;
            (*to_modify)++;
        }
        else if(!HAL_GPIO_ReadPin(SW_DOWN) && ((*to_modify) > min))
        {
            CHANGE_RESET;
            (*to_modify)--;
        }
    }
}


// Increment/decrement signed variable with up/down buttons
void user_input_signed(int32_t* to_modify)
{
    //fixme: need to cast to 16/32 bits correctly
    if(CHANGE_ELAPSED) {
        if(!HAL_GPIO_ReadPin(SW_UP) ) {
            CHANGE_RESET;
            if (*to_modify < 32768)
                (*to_modify)++;
        }
        else if(!HAL_GPIO_ReadPin(SW_DOWN)) {
            CHANGE_RESET;
            if (*to_modify >= -32768)
                (*to_modify)--;
        }
    }
}

// Increment/decrement signed variable with up/down buttons
void user_input_float(float* to_modify)
{
    //fixme: need to cast to 16/32 bits correctly
    if(CHANGE_ELAPSED) {
        if(!HAL_GPIO_ReadPin(SW_UP) ) {
            CHANGE_RESET;
            if (*to_modify < 32768)
                (*to_modify)++;
        }
        else if(!HAL_GPIO_ReadPin(SW_DOWN)) {
            CHANGE_RESET;
            if (*to_modify >= -32768)
                (*to_modify)--;
        }
    }
}