mirror of
https://github.com/firestar5683/StarPilot.git
synced 2026-10-01 03:43:46 +08:00
openpilot v0.8.2 release
This commit is contained in:
@@ -44,17 +44,6 @@ opensans_regular.o: ../../../assets/fonts/opensans_regular.ttf
|
||||
@echo "[ bin2o ] $@"
|
||||
cd '$(dir $<)' && ld -r -b binary '$(notdir $<)' -o '$(abspath $@)'
|
||||
|
||||
%.o: %.c
|
||||
mkdir -p $(@D)
|
||||
@echo "[ CC ] $@"
|
||||
$(CC) $(CPPFLAGS) $(CFLAGS) \
|
||||
-I../../.. \
|
||||
-I$(PHONELIBS)/android_frameworks_native/include \
|
||||
-I$(PHONELIBS)/android_system_core/include \
|
||||
-I$(PHONELIBS)/android_hardware_libhardware/include \
|
||||
$(NANOVG_FLAGS) \
|
||||
-c -o '$@' '$<'
|
||||
|
||||
%.o: %.cc
|
||||
mkdir -p $(@D)
|
||||
@echo "[ CXX ] $@"
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
#include <math.h>
|
||||
#include <unistd.h>
|
||||
#include <assert.h>
|
||||
|
||||
#include <memory>
|
||||
#include <GLES3/gl3.h>
|
||||
#include <EGL/egl.h>
|
||||
#include <EGL/eglext.h>
|
||||
@@ -21,26 +21,27 @@
|
||||
#define COLOR_WHITE nvgRGBA(255, 255, 255, 255)
|
||||
#define MAX_TEXT_SIZE 2048
|
||||
|
||||
extern const unsigned char _binary_opensans_regular_ttf_start[];
|
||||
extern const unsigned char _binary_opensans_regular_ttf_end[];
|
||||
extern const uint8_t bin_opensans_regular[] asm("_binary_opensans_regular_ttf_start");
|
||||
extern const uint8_t *bin_opensans_regular_end asm("_binary_opensans_regular_ttf_end");
|
||||
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
int err;
|
||||
|
||||
// spinner
|
||||
int fb_w, fb_h;
|
||||
FramebufferState *fb = framebuffer_init("text", 0x00001000, false,
|
||||
std::unique_ptr<FrameBuffer> fb = std::make_unique<FrameBuffer>("text", 0x00001000, false,
|
||||
&fb_w, &fb_h);
|
||||
assert(fb);
|
||||
|
||||
NVGcontext *vg = nvgCreateGLES3(NVG_ANTIALIAS | NVG_STENCIL_STROKES);
|
||||
assert(vg);
|
||||
|
||||
int font = nvgCreateFontMem(vg, "regular", (unsigned char*)_binary_opensans_regular_ttf_start, _binary_opensans_regular_ttf_end-_binary_opensans_regular_ttf_start, 0);
|
||||
assert(font >= 0);
|
||||
int font = nvgCreateFontMem(vg, "regular", (unsigned char*)bin_opensans_regular, (bin_opensans_regular_end - bin_opensans_regular), 0);
|
||||
assert(font >= 0);
|
||||
|
||||
// Awake
|
||||
framebuffer_set_power(fb, HWC_POWER_MODE_NORMAL);
|
||||
fb->set_power(HWC_POWER_MODE_NORMAL);
|
||||
set_brightness(255);
|
||||
|
||||
glClearColor(0.1, 0.1, 0.1, 1.0);
|
||||
@@ -67,7 +68,7 @@ assert(font >= 0);
|
||||
float y = 150;
|
||||
|
||||
// Copy text
|
||||
char * text = malloc(MAX_TEXT_SIZE);
|
||||
char * text = (char *)malloc(MAX_TEXT_SIZE);
|
||||
strncpy(text, argv[1], MAX_TEXT_SIZE);
|
||||
|
||||
float lineh;
|
||||
@@ -105,7 +106,7 @@ assert(font >= 0);
|
||||
|
||||
// Draw to screen
|
||||
nvgEndFrame(vg);
|
||||
framebuffer_swap(fb);
|
||||
fb->swap();
|
||||
assert(glGetError() == GL_NO_ERROR);
|
||||
|
||||
|
||||
+28
-34
@@ -6,7 +6,6 @@
|
||||
#include <algorithm>
|
||||
|
||||
#include "common/util.h"
|
||||
#include "common/utilpp.h"
|
||||
#include "common/params.h"
|
||||
#include "common/touch.h"
|
||||
#include "common/swaglog.h"
|
||||
@@ -15,11 +14,7 @@
|
||||
#include "paint.hpp"
|
||||
#include "android/sl_sound.hpp"
|
||||
|
||||
volatile sig_atomic_t do_exit = 0;
|
||||
static void set_do_exit(int sig) {
|
||||
do_exit = 1;
|
||||
}
|
||||
|
||||
ExitHandler do_exit;
|
||||
static void ui_set_brightness(UIState *s, int brightness) {
|
||||
static int last_brightness = -1;
|
||||
if (last_brightness != brightness && (s->awake || brightness == 0)) {
|
||||
@@ -30,27 +25,27 @@ static void ui_set_brightness(UIState *s, int brightness) {
|
||||
}
|
||||
|
||||
static void handle_display_state(UIState *s, bool user_input) {
|
||||
|
||||
static int awake_timeout = 0;
|
||||
awake_timeout = std::max(awake_timeout-1, 0);
|
||||
|
||||
// tap detection while display is off
|
||||
const float accel_samples = 5*UI_FREQ;
|
||||
static float accel_prev, gyro_prev = 0;
|
||||
constexpr float accel_samples = 5*UI_FREQ;
|
||||
static float accel_prev = 0., gyro_prev = 0.;
|
||||
|
||||
bool accel_trigger = abs(s->accel_sensor - accel_prev) > 0.2;
|
||||
bool gyro_trigger = abs(s->gyro_sensor - gyro_prev) > 0.15;
|
||||
user_input = user_input || (accel_trigger && gyro_trigger);
|
||||
gyro_prev = s->gyro_sensor;
|
||||
accel_prev = (accel_prev*(accel_samples - 1) + s->accel_sensor) / accel_samples;
|
||||
bool should_wake = s->started || s->ignition || user_input;
|
||||
if (!should_wake) {
|
||||
// tap detection while display is off
|
||||
bool accel_trigger = abs(s->accel_sensor - accel_prev) > 0.2;
|
||||
bool gyro_trigger = abs(s->gyro_sensor - gyro_prev) > 0.15;
|
||||
should_wake = accel_trigger && gyro_trigger;
|
||||
gyro_prev = s->gyro_sensor;
|
||||
accel_prev = (accel_prev * (accel_samples - 1) + s->accel_sensor) / accel_samples;
|
||||
}
|
||||
|
||||
// determine desired state
|
||||
bool should_wake = s->awake;
|
||||
if (user_input || s->ignition || s->started) {
|
||||
should_wake = true;
|
||||
if (should_wake) {
|
||||
awake_timeout = 30*UI_FREQ;
|
||||
} else if (awake_timeout == 0){
|
||||
should_wake = false;
|
||||
} else if (awake_timeout > 0){
|
||||
--awake_timeout;
|
||||
should_wake = true;
|
||||
}
|
||||
|
||||
// handle state transition
|
||||
@@ -58,7 +53,7 @@ static void handle_display_state(UIState *s, bool user_input) {
|
||||
s->awake = should_wake;
|
||||
int display_mode = s->awake ? HWC_POWER_MODE_NORMAL : HWC_POWER_MODE_OFF;
|
||||
LOGW("setting display mode %d", display_mode);
|
||||
framebuffer_set_power(s->fb, display_mode);
|
||||
s->fb->set_power(display_mode);
|
||||
|
||||
if (s->awake) {
|
||||
system("service call window 18 i32 1");
|
||||
@@ -67,10 +62,10 @@ static void handle_display_state(UIState *s, bool user_input) {
|
||||
}
|
||||
|
||||
static void handle_vision_touch(UIState *s, int touch_x, int touch_y) {
|
||||
if (s->started && (touch_x >= s->scene.viz_rect.x - bdr_s)
|
||||
if (s->started && (touch_x >= s->viz_rect.x - bdr_s)
|
||||
&& (s->active_app != cereal::UiLayoutState::App::SETTINGS)) {
|
||||
if (!s->scene.frontview) {
|
||||
s->scene.uilayout_sidebarcollapsed = !s->scene.uilayout_sidebarcollapsed;
|
||||
s->sidebar_collapsed = !s->sidebar_collapsed;
|
||||
} else {
|
||||
Params().write_db_value("IsDriverViewEnabled", "0", 1);
|
||||
}
|
||||
@@ -78,13 +73,13 @@ static void handle_vision_touch(UIState *s, int touch_x, int touch_y) {
|
||||
}
|
||||
|
||||
static void handle_sidebar_touch(UIState *s, int touch_x, int touch_y) {
|
||||
if (!s->scene.uilayout_sidebarcollapsed && touch_x <= sbr_w) {
|
||||
if (!s->sidebar_collapsed && touch_x <= sbr_w) {
|
||||
if (settings_btn.ptInRect(touch_x, touch_y)) {
|
||||
s->active_app = cereal::UiLayoutState::App::SETTINGS;
|
||||
} else if (home_btn.ptInRect(touch_x, touch_y)) {
|
||||
if (s->started) {
|
||||
s->active_app = cereal::UiLayoutState::App::NONE;
|
||||
s->scene.uilayout_sidebarcollapsed = true;
|
||||
s->sidebar_collapsed = true;
|
||||
} else {
|
||||
s->active_app = cereal::UiLayoutState::App::HOME;
|
||||
}
|
||||
@@ -99,14 +94,14 @@ static void update_offroad_layout_state(UIState *s, PubMaster *pm) {
|
||||
if (timeout > 0) {
|
||||
timeout--;
|
||||
}
|
||||
if (prev_collapsed != s->scene.uilayout_sidebarcollapsed || prev_app != s->active_app || timeout == 0) {
|
||||
if (prev_collapsed != s->sidebar_collapsed || prev_app != s->active_app || timeout == 0) {
|
||||
MessageBuilder msg;
|
||||
auto layout = msg.initEvent().initUiLayoutState();
|
||||
layout.setActiveApp(s->active_app);
|
||||
layout.setSidebarCollapsed(s->scene.uilayout_sidebarcollapsed);
|
||||
layout.setSidebarCollapsed(s->sidebar_collapsed);
|
||||
pm->send("offroadLayout", msg);
|
||||
LOGD("setting active app to %d with sidebar %d", (int)s->active_app, s->scene.uilayout_sidebarcollapsed);
|
||||
prev_collapsed = s->scene.uilayout_sidebarcollapsed;
|
||||
LOGD("setting active app to %d with sidebar %d", (int)s->active_app, s->sidebar_collapsed);
|
||||
prev_collapsed = s->sidebar_collapsed;
|
||||
prev_app = s->active_app;
|
||||
timeout = 2 * UI_FREQ;
|
||||
}
|
||||
@@ -114,7 +109,6 @@ static void update_offroad_layout_state(UIState *s, PubMaster *pm) {
|
||||
|
||||
int main(int argc, char* argv[]) {
|
||||
setpriority(PRIO_PROCESS, 0, -14);
|
||||
signal(SIGINT, (sighandler_t)set_do_exit);
|
||||
SLSound sound;
|
||||
|
||||
UIState uistate = {};
|
||||
@@ -148,7 +142,7 @@ int main(int argc, char* argv[]) {
|
||||
|
||||
while (!do_exit) {
|
||||
if (!s->started) {
|
||||
usleep(50 * 1000);
|
||||
util::sleep_for(50);
|
||||
}
|
||||
double u1 = millis_since_boot();
|
||||
|
||||
@@ -169,7 +163,7 @@ int main(int argc, char* argv[]) {
|
||||
}
|
||||
|
||||
// up one notch every 5 m/s
|
||||
s->sound->setVolume(fmin(MAX_VOLUME, MIN_VOLUME + s->scene.controls_state.getVEgo() / 5));
|
||||
s->sound->setVolume(fmin(MAX_VOLUME, MIN_VOLUME + s->scene.car_state.getVEgo() / 5));
|
||||
|
||||
// set brightness
|
||||
float clipped_brightness = fmin(512, (s->light_sensor*brightness_m) + brightness_b);
|
||||
@@ -184,7 +178,7 @@ int main(int argc, char* argv[]) {
|
||||
// warn on sub 15fps
|
||||
LOGW("slow frame(%llu) time: %.2f", (s->sm)->frame, u2-u1);
|
||||
}
|
||||
framebuffer_swap(s->fb);
|
||||
s->fb->swap();
|
||||
}
|
||||
|
||||
handle_display_state(s, true);
|
||||
|
||||
Reference in New Issue
Block a user