Skip to content

WIP: RTEMS6 #4

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 4 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions include/grisp.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,11 +36,24 @@ extern "C" {
#define GRISP
#define GRISP_PLATFORM_GRISP_BASE
#define GRISP_PLATFORM "grisp_base"
#define grisp_is_industrialgrisp() false
#endif
#if defined LIBBSP_ARM_IMX_BSP_H
#define GRISP
#define GRISP_PLATFORM_GRISP2
#define GRISP_PLATFORM "grisp2"

#include <bsp/fdt.h>
#include <libfdt.h>

static inline bool grisp_is_industrialgrisp(void)
{
const void *fdt = bsp_fdt_get();
const int node = fdt_path_offset(fdt, "/");
const char igrisp_compat[] = "embeddedbrains,industrialgrisp";

return (fdt_node_check_compatible(fdt, node, igrisp_compat) == 0);
}
#endif

#ifdef __cplusplus
Expand Down
6 changes: 5 additions & 1 deletion include/grisp/init.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,13 +50,17 @@ extern "C" {
#define GRISP_I2C0_DEVICE "/dev/i2c-0"
#define GRISP_I2C1_FDT_ALIAS "i2c1"
#define GRISP_I2C1_DEVICE "/dev/i2c-1"

#define GRISP_INDUSTRIAL_SPI_ONBOARD_FDT_ALIAS "spi0"
#define GRISP_INDUSTRIAL_SPI_PMOD_FDT_ALIAS "spi2"
#define GRISP_INDUSTRIAL_I2C_FDT_ALIAS "i2c0"
#endif

typedef void (*grisp_check_and_create_wlandev)(void);

void grisp_init_buses(void);
void grisp_init_libbsd(void);
void grisp_init_sd_card(void);
void grisp_init_sd_card(const char *rootdir);
void grisp_init_lower_self_prio(void);
rtems_status_code grisp_init_wait_for_sd(void);
void grisp_saf1761_basic_init(void);
Expand Down
19 changes: 14 additions & 5 deletions src/init.c
Original file line number Diff line number Diff line change
Expand Up @@ -88,8 +88,10 @@ static rtems_id wait_mounted_task_id = RTEMS_INVALID_ID;

static rtems_status_code
media_listener(rtems_media_event event, rtems_media_state state,
const char *src, const char *dest, void *arg)
const char *src, const char *dest, const char *arg)
{
char fdt_target[192] = "";

printf(
"media listener: event = %s, state = %s, src = %s",
rtems_media_event_description(event),
Expand All @@ -102,13 +104,20 @@ media_listener(rtems_media_event event, rtems_media_state state,
}

if (arg != NULL) {
printf(", arg = %p\n", arg);
strlcpy(fdt_target, arg, 192);
size_t length = strlen(arg);
if (fdt_target[length - 1] == '/') {
fdt_target[length - 1] = '\0';
}
printf(", fdt_target = %s\n", fdt_target);
}

printf("\n");

if (event == RTEMS_MEDIA_EVENT_MOUNT &&
state == RTEMS_MEDIA_STATE_SUCCESS) {
state == RTEMS_MEDIA_STATE_SUCCESS &&
dest != NULL && arg != NULL &&
strcmp(dest, fdt_target) == 0) {
rtems_event_send(wait_mounted_task_id, EVT_MOUNTED);
}

Expand Down Expand Up @@ -168,7 +177,7 @@ grisp_init_lower_self_prio(void)
}

void
grisp_init_sd_card(void)
grisp_init_sd_card(const char *rootdir)
{
rtems_status_code sc;

Expand All @@ -180,7 +189,7 @@ grisp_init_sd_card(void)
sc = rtems_media_initialize();
assert(sc == RTEMS_SUCCESSFUL);

sc = rtems_media_listener_add(media_listener, NULL);
sc = rtems_media_listener_add(media_listener, rootdir);
assert(sc == RTEMS_SUCCESSFUL);

sc = rtems_media_server_initialize(
Expand Down
29 changes: 20 additions & 9 deletions src/led.c
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
#include <bsp.h>
#include <assert.h>

#include <grisp.h>
#include <grisp/led.h>

#ifdef LIBBSP_ARM_ATSAM_BSP_H
Expand Down Expand Up @@ -109,7 +110,8 @@ static struct {
struct imx_gpio_pin green;
struct imx_gpio_pin blue;
} leds[2];
struct imx_gpio_pin led_som;
static struct imx_gpio_pin led_som;
static bool only_green_led;

static void
grisp2_init_led_by_fdt(
Expand All @@ -133,12 +135,19 @@ grisp2_init_leds(void)
const void *fdt;

fdt = bsp_fdt_get();
grisp2_init_led_by_fdt(&leds[0].red, fdt, "/leds/grisp-rgb1-red");
grisp2_init_led_by_fdt(&leds[0].green, fdt, "/leds/grisp-rgb1-green");
grisp2_init_led_by_fdt(&leds[0].blue, fdt, "/leds/grisp-rgb1-blue");
grisp2_init_led_by_fdt(&leds[1].red, fdt, "/leds/grisp-rgb2-red");
grisp2_init_led_by_fdt(&leds[1].green, fdt, "/leds/grisp-rgb2-green");
grisp2_init_led_by_fdt(&leds[1].blue, fdt, "/leds/grisp-rgb2-blue");
if (grisp_is_industrialgrisp()) {
grisp2_init_led_by_fdt(&leds[0].green, fdt, "/leds/igrisp-mcu-led");
grisp2_init_led_by_fdt(&leds[1].green, fdt, "/leds/igrisp-rfid-led");
only_green_led = true;
} else {
grisp2_init_led_by_fdt(&leds[0].red, fdt, "/leds/grisp-rgb1-red");
grisp2_init_led_by_fdt(&leds[0].green, fdt, "/leds/grisp-rgb1-green");
grisp2_init_led_by_fdt(&leds[0].blue, fdt, "/leds/grisp-rgb1-blue");
grisp2_init_led_by_fdt(&leds[1].red, fdt, "/leds/grisp-rgb2-red");
grisp2_init_led_by_fdt(&leds[1].green, fdt, "/leds/grisp-rgb2-green");
grisp2_init_led_by_fdt(&leds[1].blue, fdt, "/leds/grisp-rgb2-blue");
only_green_led = false;
}
grisp2_init_led_by_fdt(&led_som, fdt, "/leds/phycore-green");
}

Expand All @@ -149,9 +158,11 @@ grisp_led_set(int led_nr, bool r, bool g, bool b)
pthread_once(&once, grisp2_init_leds);

if (led_nr != LED_SOM) {
imx_gpio_set_output(&leds[led_nr-1].red, r ? 1 : 0);
if (!only_green_led) {
imx_gpio_set_output(&leds[led_nr-1].red, r ? 1 : 0);
imx_gpio_set_output(&leds[led_nr-1].blue, b ? 1 : 0);
}
imx_gpio_set_output(&leds[led_nr-1].green, g ? 1 : 0);
imx_gpio_set_output(&leds[led_nr-1].blue, b ? 1 : 0);
} else {
imx_gpio_set_output(&led_som, g ? 1 : 0);
}
Expand Down