aboutsummaryrefslogtreecommitdiffstats
path: root/docs/1_Hardware_Support/Overview.md
blob: f05237bdefae795e94c6ee1c09f0ccc89d77560a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
---
title: Supported Boards
---

The following table briefs about the various hardware platforms, supported by AGL :

**NOTE:** Further information about AGL Distribution available at [AGL wiki](https://wiki.automotivelinux.org/agl-distro).

### AGL Reference Machines

|      BOARD      |    $MACHINE    | ARCHITECHTURE |
|:---------------:|:--------------:|:-------------:|
|       QEMU      |   qemu-x86-64  |      x86      |
|                 |    qemu-arm    |     arm32     |
|                 |   qemu-arm64   |     arm64     |
|                 |                |               |
|    RCar Gen 3   |     h3ulcb     |     arm64     |
|                 | h3-salvator-x  |     arm64     |
|                 |      h3-kf     |     arm64     |
|                 |     m3ulcb     |     arm64     |
|                 | m3-salvator-x  |     arm64     |
|                 |      m3-kf     |     arm64     |
|                 |                |               |
|  Raspberry Pi   |  raspberrypi4  |     arm64     |

### Community supported Machines

|    BOARD   	|     $MACHINE     	| ARCHITECHTURE |
|:-------------:|:-----------------:|:-------------:|
|  BeagleBone 	|        bbe       	|     arm32     |
|            	|    beaglebone    	|     arm32     |
|            	|                  	|               |
|   i. MX 6  	|      cubox-i     	|     arm32     |
|            	| imx6qdlsabreauto 	|     arm32     |
|            	|    nitrogen6x    	|     arm32     |
|            	|                  	|               |
|   i. MX 8  	|     imx8mqevk    	|     arm64     |
|            	|   imx8mqevk-viv  	|     arm64     |
|            	|                  	|               |
|  Snapdragon 	| dragonboard-410c 	|     arm64     |
|            	| dragonboard-820c 	|     arm64     |
|            	|                  	|               |
|    ARC HS   	|       hsdk       	|      ARC      |


### Supported Images

AGL supports a variety of interfaces, each requiring unique setup configuration.

#### 1. In-Vehicle Infotainment (IVI)

**Supported boards** :

AGL Reference Boards (QEMU, RCar Gen 3 & Raspberry Pi 4)

Community supported Machines (i. MX 6, i. MX 8, Snapdragon & ARC HS)

* Qt Based :

    * Setting up flags at `aglsetup` script :

        ```sh
        $ source meta-agl/scripts/aglsetup.sh -f -m $MACHINE -b build-$MACHINE agl-demo

        #To enable Developer Options
        $ source meta-agl/scripts/aglsetup.sh -f -m $MACHINE -b build-$MACHINE agl-demo agl-devel
        ```

    * Building target image :

        ```sh
        $ time bitbake agl-demo-platform
        ```

* HTML5 Based :

    * Setting up flags at `aglsetup` script :

        ```sh
        $ source meta-agl/scripts/aglsetup.sh -f -m $MACHINE -b build-$MACHINE agl-demo agl-profile-graphical-html5

        # To enable Developer Options
        $ source meta-agl/scripts/aglsetup.sh -f -m $MACHINE -b build-$MACHINE agl-demo agl-profile-graphical-html5 agl-devel
        ```

    * Building target image :

        ```sh
        $ time bitbake agl-demo-platform-html5
        ```


#### 2. Instrument Cluster

**Supported boards** :

AGL Reference Boards (QEMU, RCar Gen 3 & Raspberry Pi 4)

* Setting up flags at `aglsetup` script :

    ```sh
    $ source meta-agl/scripts/aglsetup.sh -f -m $MACHINE -b build-$MACHINE agl-cluster-demo

    # To enable Developer Options
    $ source meta-agl/scripts/aglsetup.sh -f -m $MACHINE -b build-$MACHINE agl-cluster-demo agl-devel
    ```

* Building target image :

    ```sh
    $ time bitbake agl-cluster-demo
    ```

#### 3. Telematics

Headless demo platform for low-spec boards.

**Supported boards** :

Community supported Machines (BeagleBone)


* Setting up flags at `aglsetup` script :

    ```sh
    $ source meta-agl/scripts/aglsetup.sh -f -m $MACHINE -b build-$MACHINE agl-telematics-demo

    # To enable Developer Options
    $ source meta-agl/scripts/aglsetup.sh -f -m $MACHINE -b build-$MACHINE agl-telematics-demo agl-devel
    ```

* Building target image :

    ```sh
    $ time bitbake agl-telematics-demo
    ```
pan> #include "wayland.hpp" #include <algorithm> #include <mutex> #include <json.h> extern "C" { #include <afb/afb-binding.h> #include <systemd/sd-event.h> } namespace { struct afb_instance { std::unique_ptr<wl::display> display; wm::App app; afb_instance() : display{new wl::display}, app{this->display.get()} {} int init(); }; struct afb_instance *g_afb_instance; int afb_instance::init() { return this->app.init(); } int display_event_callback(sd_event_source *evs, int /*fd*/, uint32_t events, void * /*data*/) { ST(); if ((events & EPOLLHUP) != 0) { HMI_ERROR("wm", "The compositor hung up, dying now."); delete g_afb_instance; g_afb_instance = nullptr; goto error; } if ((events & EPOLLIN) != 0u) { { STN(display_read_events); g_afb_instance->app.display->read_events(); g_afb_instance->app.set_pending_events(); } { // We want do dispatch pending wayland events from within // the API context STN(winman_ping_api_call); afb_service_call("windowmanager", "ping", json_object_new_object(), [](void *c, int st, json_object *j) { STN(winman_ping_api_call_return); }, nullptr); } } return 0; error: sd_event_source_unref(evs); if (getenv("WINMAN_EXIT_ON_HANGUP") != nullptr) { exit(1); } return -1; } // _ _ _ _ _ _ _ ____ // | |__ (_)_ __ __| (_)_ __ __ _ (_)_ __ (_) |_ / /\ \ // | '_ \| | '_ \ / _` | | '_ \ / _` | | | '_ \| | __| | | | // | |_) | | | | | (_| | | | | | (_| | | | | | | | |_| | | | // |_.__/|_|_| |_|\__,_|_|_| |_|\__, |___|_|_| |_|_|\__| | | | // |___/_____| \_\/_/ int binding_init_() { HMI_NOTICE("wm", "WinMan ver. %s", WINMAN_VERSION_STRING); if (g_afb_instance != nullptr) { HMI_ERROR("wm", "Wayland context already initialized?"); return 0; } if (getenv("XDG_RUNTIME_DIR") == nullptr) { HMI_ERROR("wm", "Environment variable XDG_RUNTIME_DIR not set"); goto error; } { // wait until wayland compositor starts up. int cnt = 0; g_afb_instance = new afb_instance; while (!g_afb_instance->display->ok()) { cnt++; if (20 <= cnt) { HMI_ERROR("wm", "Could not connect to compositor"); goto error; } HMI_ERROR("wm", "Wait to start weston ..."); sleep(1); delete g_afb_instance; g_afb_instance = new afb_instance; } } if (g_afb_instance->init() == -1) { HMI_ERROR("wm", "Could not connect to compositor"); goto error; } { int ret = sd_event_add_io(afb_daemon_get_event_loop(), nullptr, g_afb_instance->display->get_fd(), EPOLLIN, display_event_callback, g_afb_instance); if (ret < 0) { HMI_ERROR("wm", "Could not initialize afb_instance event handler: %d", -ret); goto error; } } atexit([] { delete g_afb_instance; }); return 0; error: delete g_afb_instance; g_afb_instance = nullptr; return -1; } int binding_init() noexcept { try { return binding_init_(); } catch (std::exception &e) { HMI_ERROR("wm", "Uncaught exception in binding_init(): %s", e.what()); } return -1; } } // namespace #include "afb_binding_glue.inl" namespace wm { void binding_api::send_event(char const *evname, char const *label) { HMI_DEBUG("wm", "%s: %s(%s)", __func__, evname, label); json_object *j = json_object_new_object(); json_object_object_add(j, kKeyDrawingName, json_object_new_string(label)); int ret = afb_event_push(g_afb_instance->app.map_afb_event[evname], j); if (ret != 0) { HMI_DEBUG("wm", "afb_event_push failed: %m"); } } void binding_api::send_event(char const *evname, char const *label, char const *area) { HMI_DEBUG("wm", "%s: %s(%s, %s)", __func__, evname, label, area); json_object *j = json_object_new_object(); json_object_object_add(j, kKeyDrawingName, json_object_new_string(label)); json_object_object_add(j, kKeyDrawingArea, json_object_new_string(area)); int ret = afb_event_push(g_afb_instance->app.map_afb_event[evname], j); if (ret != 0) { HMI_DEBUG("wm", "afb_event_push failed: %m"); } } } // namespace wm extern "C" const struct afb_binding_v2 afbBindingV2 = { "windowmanager", nullptr, nullptr, windowmanager_verbs, nullptr, binding_init, nullptr, 0};