wolfBoot-examples/riotOS-nrf52840dk-ble/nrf52-gatt-service/main.c

106 lines
2.9 KiB
C

/* main.c
*
* Copyright (C) 2021 wolfSSL Inc.
*
* wolfBoot fw-update example RIOT application, running on nRF52840.
*
* wolfBoot is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* wolfBoot is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
*
*/
#include <stdio.h>
#include "board.h"
#include "net/ipv6/addr.h"
#include "net/gnrc.h"
#include "net/gnrc/netif.h"
#include "shell.h"
#include "periph/flashpage.h"
#include "thread.h"
#include "periph/uart.h"
#include "periph/gpio.h"
#include "xtimer.h"
#include "ringbuffer.h"
#include "wolfboot/wolfboot.h"
#include "mutex.h"
#include "msg.h"
#ifndef SHELL_BUFSIZE
#define SHELL_BUFSIZE (128U)
#endif
#define DISPATCHER_PRIO (THREAD_PRIORITY_MAIN - 1)
#define BT_PRIO (THREAD_PRIORITY_MAIN - 1)
#define MSGQ_SIZE (4)
#define GPIO_WAKEUP GPIO_PIN(1,11)
// Globals
//
static mutex_t fwupdate_mutex = MUTEX_INIT;
static kernel_pid_t gatt_srv_pid;
static char gatt_srv_stack[THREAD_STACKSIZE_MAIN];
static msg_t gatt_srv_msgq[MSGQ_SIZE];
static xtimer_t quotes_msg_timer;
#define STDIO_UART_DEV (UART_UNDEF)
static int cmd_info(int argc, char **argv)
{
(void)argc;
(void)argv;
puts("GATT services for secure firmware updates\n");
printf("You are running RIOT on %s.\n", RIOT_BOARD);
printf("This board features a %s MCU.\n", RIOT_MCU);
puts("Bootloader info: \n");
printf(" - Running firmware version %08x\n", (unsigned)wolfBoot_current_firmware_version());
printf(" - Update firmware version %08x\n", (unsigned)wolfBoot_update_firmware_version());
puts("\n UART INFO:");
printf(" - Available devices: %i\n", UART_NUMOF);
if (STDIO_UART_DEV != UART_UNDEF) {
printf(" - UART used for STDIO (the shell): UART_DEV(%i)\n\n", STDIO_UART_DEV);
}
return 0;
}
void *gatt_srv(void*);
static const shell_command_t shell_commands[] = {
{ "info", "device info", cmd_info },
{ NULL, NULL, NULL }
};
int main(void)
{
/* initialize UART */
char line_buf[SHELL_BUFSIZE];
/* initialize GPIO WAKEUP */
gpio_init(GPIO_WAKEUP, GPIO_OUT);
gpio_set(GPIO_WAKEUP);
/* Gatt Server */
gatt_srv_pid = thread_create(gatt_srv_stack, sizeof(gatt_srv_stack),
DISPATCHER_PRIO - 1, 0, gatt_srv, NULL, "BLE_gatt");
/* run the shell */
shell_run(shell_commands, line_buf, SHELL_BUFSIZE);
return 0;
}