Skip to content

Commit

Permalink
Add led task
Browse files Browse the repository at this point in the history
  • Loading branch information
ojousima committed Aug 6, 2018
1 parent 2e74c5c commit 1c645db
Show file tree
Hide file tree
Showing 5 changed files with 105 additions and 13 deletions.
30 changes: 18 additions & 12 deletions main.c
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
#include "ruuvi_interface_log.h"
#include "ruuvi_interface_yield.h"
#include "ruuvi_boards.h"
#include "task_led.h"

#include <stdio.h>

Expand All @@ -18,7 +19,6 @@ int main(void)
// Init logging
ruuvi_driver_status_t status = RUUVI_DRIVER_SUCCESS;
status |= ruuvi_platform_log_init(APPLICATION_LOG_LEVEL);
ruuvi_platform_log(RUUVI_INTERFACE_LOG_INFO, "Logging started\r\n");
RUUVI_DRIVER_ERROR_CHECK(status, RUUVI_DRIVER_SUCCESS);

// Init yield
Expand All @@ -27,10 +27,13 @@ int main(void)

// Init GPIO
status |= ruuvi_platform_gpio_init();
ruuvi_platform_log(RUUVI_INTERFACE_LOG_INFO, "Peripherals initialized\r\n");
RUUVI_DRIVER_ERROR_CHECK(status, RUUVI_DRIVER_SUCCESS);

// Turn off sensors∫
// LEDs high / inactive
status |= task_led_init();
status |= task_led_write(RUUVI_BOARD_LED_RED, TASK_LED_ON);

// Turn off sensors
status |= ruuvi_platform_gpio_configure(RUUVI_BOARD_SPI_SS_ACCELERATION_PIN, RUUVI_INTERFACE_GPIO_MODE_OUTPUT_STANDARD);
status |= ruuvi_platform_gpio_write (RUUVI_BOARD_SPI_SS_ACCELERATION_PIN, RUUVI_INTERFACE_GPIO_HIGH);
status |= ruuvi_platform_gpio_configure(RUUVI_BOARD_SPI_SS_ENVIRONMENTAL_PIN, RUUVI_INTERFACE_GPIO_MODE_OUTPUT_STANDARD);
Expand All @@ -42,12 +45,6 @@ int main(void)
status |= ruuvi_platform_gpio_configure(RUUVI_BOARD_SPI_MOSI_PIN, RUUVI_INTERFACE_GPIO_MODE_OUTPUT_STANDARD);
status |= ruuvi_platform_gpio_write (RUUVI_BOARD_SPI_MOSI_PIN, RUUVI_INTERFACE_GPIO_HIGH);

// LEDs high / inactive
status |= ruuvi_platform_gpio_configure(RUUVI_BOARD_LED_RED, RUUVI_INTERFACE_GPIO_MODE_OUTPUT_HIGHDRIVE);
status |= ruuvi_platform_gpio_write (RUUVI_BOARD_LED_RED, RUUVI_INTERFACE_GPIO_HIGH);
status |= ruuvi_platform_gpio_configure(RUUVI_BOARD_LED_GREEN, RUUVI_INTERFACE_GPIO_MODE_OUTPUT_HIGHDRIVE);
status |= ruuvi_platform_gpio_write (RUUVI_BOARD_LED_GREEN, RUUVI_INTERFACE_GPIO_HIGH);

// Button, and SPI MISO lines pulled up
status |= ruuvi_platform_gpio_configure(RUUVI_BOARD_BUTTON_1, RUUVI_INTERFACE_GPIO_MODE_INPUT_PULLUP);
status |= ruuvi_platform_gpio_configure(RUUVI_BOARD_SPI_MISO_PIN, RUUVI_INTERFACE_GPIO_MODE_INPUT_PULLUP);
Expand All @@ -60,10 +57,19 @@ int main(void)
index += snprintf( message + index, sizeof(message) - index,", entering main loop\r\n");
ruuvi_platform_log(RUUVI_INTERFACE_LOG_INFO, message);

status |= task_led_write(RUUVI_BOARD_LED_RED, TASK_LED_OFF);

if(RUUVI_DRIVER_SUCCESS == status)
{
status |= task_led_write(RUUVI_BOARD_LED_GREEN, TASK_LED_ON);
}
ruuvi_platform_delay_ms(1000);
status |= task_led_write(RUUVI_BOARD_LED_GREEN, TASK_LED_OFF);

while (1)
{
ruuvi_platform_log(RUUVI_INTERFACE_LOG_INFO, "Going to sleep\r\n");
ruuvi_platform_yield();
ruuvi_platform_log(RUUVI_INTERFACE_LOG_INFO, "Waking up\r\n");
status |= task_led_cycle();
RUUVI_DRIVER_ERROR_CHECK(status, RUUVI_DRIVER_SUCCESS);
ruuvi_platform_delay_ms(500);
}
}
4 changes: 3 additions & 1 deletion targets/ruuvitag_b/armgcc/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,8 @@ SRC_FILES += \
$(PROJ_DIR)/ruuvi.drivers.c/nrf5_sdk15_platform/gpio/ruuvi_platform_gpio.c \
$(PROJ_DIR)/ruuvi.drivers.c/nrf5_sdk15_platform/log/ruuvi_platform_log.c \
$(PROJ_DIR)/ruuvi.drivers.c/nrf5_sdk15_platform/yield/ruuvi_platform_yield.c \
$(PROJ_DIR)/ruuvi.drivers.c/nrf5_sdk15_platform/ruuvi_platform_error.c
$(PROJ_DIR)/ruuvi.drivers.c/nrf5_sdk15_platform/ruuvi_platform_error.c \
$(PROJ_DIR)/tasks/task_led.c

# Include folders common to all targets
INC_FOLDERS += \
Expand Down Expand Up @@ -194,6 +195,7 @@ INC_FOLDERS += \
$(PROJ_DIR)/ruuvi.drivers.c/interfaces/log \
$(PROJ_DIR)/ruuvi.drivers.c/interfaces/yield \
$(PROJ_DIR)/ruuvi.drivers.c/nrf5_sdk15_platform \
$(PROJ_DIR)/tasks/



Expand Down
6 changes: 6 additions & 0 deletions targets/ruuvitag_b/ses/ruuvi.firmware.c.emProject
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,12 @@
filter="*.h"
path="../../../application_config"
recurse="Yes" />
<folder
Name="tasks"
exclude=""
filter="*.c;*.h"
path="../../../tasks"
recurse="Yes" />
</folder>
<folder Name="nRF_Segger_RTT">
<file file_name="../../../../nRF5_SDK_15.0.0_a53641a/external/segger_rtt/SEGGER_RTT.c" />
Expand Down
35 changes: 35 additions & 0 deletions tasks/task_led.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
#include "task_led.h"
#include "ruuvi_driver_error.h"
#include "ruuvi_interface_gpio.h"
#include <stddef.h>

ruuvi_driver_status_t task_led_init(void)
{
ruuvi_driver_status_t err_code = RUUVI_DRIVER_SUCCESS;
err_code |= ruuvi_platform_gpio_init();
uint8_t leds[] = RUUVI_BOARD_LEDS_LIST;
for(size_t ii = 0; ii < RUUVI_BOARD_LEDS_NUMBER; ii++)
{
ruuvi_platform_gpio_configure(leds[ii], RUUVI_INTERFACE_GPIO_MODE_OUTPUT_HIGHDRIVE);
ruuvi_platform_gpio_write(leds[ii], !RUUVI_BOARD_LEDS_ACTIVE_STATE);
}

return err_code;
}

ruuvi_driver_status_t task_led_write(uint8_t led, task_led_state_t state)
{
ruuvi_driver_status_t err_code = RUUVI_DRIVER_SUCCESS;
err_code |= ruuvi_platform_gpio_write(led, state);
return err_code;
}

ruuvi_driver_status_t task_led_cycle(void)
{
ruuvi_driver_status_t err_code = RUUVI_DRIVER_SUCCESS;
static uint8_t phase = 0;
uint8_t leds[] = RUUVI_BOARD_LEDS_LIST;
err_code |= ruuvi_platform_gpio_toggle(leds[phase++]);
if(RUUVI_BOARD_LEDS_NUMBER <= phase) { phase = 0; }
return err_code;
}
43 changes: 43 additions & 0 deletions tasks/task_led.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
/**
* Ruuvi Firmware 3.x LED tasks.
*
* License: BSD-3
* Author: Otso Jousimaa <otso@ojousima.net>
**/

#ifndef TASK_LED_H
#define TASK_LED_H

#include "ruuvi_boards.h"
#include "ruuvi_driver_error.h"

typedef enum{
TASK_LED_ON = RUUVI_BOARD_LEDS_ACTIVE_STATE,
TASK_LED_OFF = !RUUVI_BOARD_LEDS_ACTIVE_STATE
}task_led_state_t;

/**
* LED initialization function. Configures GPIOs as high-drive output and sets LEDs as inactive.
*
* return: Status code from the stack. RUUVI_DRIVER_SUCCESS if no errors occured.
**/
ruuvi_driver_status_t task_led_init(void);

/**
* LED write function. Set given LED ON or OFF.
*
* parameter led: LED to change, use constant from RUUVI_BOARDS
* parameter state: New state of given led
*
* return: Status code from the stack. RUUVI_DRIVER_SUCCESS if no errors occured.
**/
ruuvi_driver_status_t task_led_write(uint8_t led, task_led_state_t state);

/**
* Task demonstrator, cycles LEDs ON and OFF in sequence.
*
* return: Status code from the stack. RUUVI_DRIVER_SUCCESS if no errors occured.
*/
ruuvi_driver_status_t task_led_cycle(void);

#endif

0 comments on commit 1c645db

Please sign in to comment.