mirror of
https://github.com/espressif/esp-nimble.git
synced 2026-11-13 07:50:34 +00:00
This patch adds port of Nimble stack to FreeRTOS based on nRF5 SDK. It's split into 'common' part which can be used a base for porting to any other platform and 'freertos_nrf5_sdk' which has FreeRTOS-specific files and makefile. Building and flashing is similar to other demo apps from nRF5 SDK: $ make -C porting/freertos_nrf5_sdk The resulting image can be flashed on nRF52 DK: $ make -C porting/freertos_nrf5_sdk flash Location of nRF5 SDK is set by NRF5_SDK_ROOT variable. By default it is set to 'nrf5_sdk' subdirectory so a symlink would work just fine: $ ln -s <x>/nRF5_SDK_12.3.0_d7731ad porting/freertos_nrf5_sdk/nrf5_sdk
124 lines
3.3 KiB
C
124 lines
3.3 KiB
C
/*
|
|
* Licensed to the Apache Software Foundation (ASF) under one
|
|
* or more contributor license agreements. See the NOTICE file
|
|
* distributed with this work for additional information
|
|
* regarding copyright ownership. The ASF licenses this file
|
|
* to you under the Apache License, Version 2.0 (the
|
|
* "License"); you may not use this file except in compliance
|
|
* with the License. You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing,
|
|
* software distributed under the License is distributed on an
|
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
* KIND, either express or implied. See the License for the
|
|
* specific language governing permissions and limitations
|
|
* under the License.
|
|
*/
|
|
|
|
#ifndef _OS_DEV_H
|
|
#define _OS_DEV_H
|
|
|
|
#include <os/os.h>
|
|
|
|
#include "os/queue.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
struct os_dev;
|
|
|
|
/*
|
|
* Initialization order, defines when a device should be initialized
|
|
* by the Mynewt kernel.
|
|
*
|
|
*/
|
|
#define OS_DEV_INIT_PRIMARY (1)
|
|
#define OS_DEV_INIT_SECONDARY (2)
|
|
#define OS_DEV_INIT_KERNEL (3)
|
|
|
|
#define OS_DEV_INIT_F_CRITICAL (1 << 0)
|
|
|
|
|
|
#define OS_DEV_INIT_PRIO_DEFAULT (0xff)
|
|
|
|
/**
|
|
* Device status, so functions can ensure device is called in a
|
|
* consistent state.
|
|
*/
|
|
#define OS_DEV_F_STATUS_READY (1 << 0)
|
|
#define OS_DEV_F_STATUS_OPEN (1 << 1)
|
|
#define OS_DEV_F_STATUS_SUSPENDED (1 << 2)
|
|
#define OS_DEV_F_INIT_CRITICAL (1 << 3)
|
|
|
|
typedef int (*os_dev_init_func_t)(struct os_dev *, void *);
|
|
typedef int (*os_dev_open_func_t)(struct os_dev *, uint32_t,
|
|
void *);
|
|
typedef int (*os_dev_suspend_func_t)(struct os_dev *, os_time_t, int);
|
|
typedef int (*os_dev_resume_func_t)(struct os_dev *);
|
|
typedef int (*os_dev_close_func_t)(struct os_dev *);
|
|
|
|
struct os_dev_handlers {
|
|
os_dev_open_func_t od_open;
|
|
os_dev_suspend_func_t od_suspend;
|
|
os_dev_resume_func_t od_resume;
|
|
os_dev_close_func_t od_close;
|
|
};
|
|
|
|
/*
|
|
* Device structure.
|
|
*/
|
|
struct os_dev {
|
|
struct os_dev_handlers od_handlers;
|
|
os_dev_init_func_t od_init;
|
|
void *od_init_arg;
|
|
uint8_t od_stage;
|
|
uint8_t od_priority;
|
|
uint8_t od_open_ref;
|
|
uint8_t od_flags;
|
|
char *od_name;
|
|
STAILQ_ENTRY(os_dev) od_next;
|
|
};
|
|
|
|
#define OS_DEV_SETHANDLERS(__dev, __open, __close) \
|
|
(__dev)->od_handlers.od_open = (__open); \
|
|
(__dev)->od_handlers.od_close = (__close);
|
|
|
|
static inline int
|
|
os_dev_suspend(struct os_dev *dev, os_time_t suspend_t, uint8_t force)
|
|
{
|
|
if (dev->od_handlers.od_suspend == NULL) {
|
|
return (0);
|
|
} else {
|
|
return (dev->od_handlers.od_suspend(dev, suspend_t, force));
|
|
}
|
|
}
|
|
|
|
static inline int
|
|
os_dev_resume(struct os_dev *dev)
|
|
{
|
|
if (dev->od_handlers.od_resume == NULL) {
|
|
return (0);
|
|
} else {
|
|
return (dev->od_handlers.od_resume(dev));
|
|
}
|
|
}
|
|
|
|
int os_dev_create(struct os_dev *dev, char *name, uint8_t stage,
|
|
uint8_t priority, os_dev_init_func_t od_init, void *arg);
|
|
struct os_dev *os_dev_lookup(char *name);
|
|
int os_dev_initialize_all(uint8_t stage);
|
|
int os_dev_suspend_all(os_time_t, uint8_t);
|
|
int os_dev_resume_all(void);
|
|
struct os_dev *os_dev_open(char *devname, uint32_t timo, void *arg);
|
|
int os_dev_close(struct os_dev *dev);
|
|
void os_dev_reset(void);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* _OS_DEV_H */
|