'잡동사니'에 해당되는 글 13451건

  1. 2022.08.22 wayland atomic commit 패치?
  2. 2022.08.22 해피빈 기부
  3. 2022.08.21 둠 스위치 중고 구매
  4. 2022.08.21 니퍼, 롱노우즈 구매
  5. 2022.08.20 안테나 수리
  6. 2022.08.19 hdmi2usb 닌텐도 잘되네? 2
  7. 2022.08.18 TVS 다이오드
  8. 2022.08.18 golang channel
  9. 2022.08.17 weston screen shooter 뜯어보기
  10. 2022.08.17 adxl345 spi
프로그램 사용/wayland2022. 8. 22. 18:04

오랫만에 생각난김에 검색했는데 8월 2일 커밋된 따끈한 녀석 발견!

[링크 : https://gitlab.freedesktop.org/wayland/weston/-/commits/main?search=atomic]

 

음.. 잘 해결되면 좋겠네..

backend-drm: improve atomic commit failure handling


When an atomic commit fails then the output will be stuck in
REPAINT_AWAITING_COMPLETION state. It is waiting for a vblank event that was
never scheduled.
If the error is EBUSY then it can be expected to be a transient error. So
propagate the error and schedule a new repaint in the core compositor.

This is necessary because there are some circumstances when the commit can fail
unexpectedly:
- With 'state_invalid == true' one commit will disable all planes. If another
  commit for a different output is triggered immediately afterwards, then this
  commit can temporarily fail with EBUSY because it tries to use the same
  planes.
- At least with i915, if one commit enables an output then a second commit for a
  different output immediately afterwards can temporarily fail with EBUSY. This
  is probably caused by some hardware interdependency.
Signed-off-by: Michael Olbrich's avatarMichael Olbrich <m.olbrich@pengutronix.de>

 

libweston/backend-drm/drm.c의 drm_repaint_flush()와

libweston/compositor.c의 output_repaint_timer_hander() 쪽에 수정이 가해진다.

[링크 : https://gitlab.freedesktop.org/wayland/weston/-/commit/3b3fdc52c31f828ff0fb71d2c6ce7bdcc64f20a1]

[링크 : https://gitlab.freedesktop.org/wayland/weston/-/blob/3b3fdc52c31f828ff0fb71d2c6ce7bdcc64f20a1/libweston/backend-drm/drm.c]

'프로그램 사용 > wayland' 카테고리의 다른 글

weston 커서 숨기기  (0) 2024.02.26
wayland hdmi - touch 연결  (0) 2023.09.08
weston screen shooter 뜯어보기  (0) 2022.08.17
wayland glreadpixels 실패  (0) 2022.08.16
sway + wayvnc  (0) 2022.08.10
Posted by 구차니
개소리 왈왈/블로그2022. 8. 22. 13:47

소멸 콩이 있다고 하니 기부!

8월이니 웬지 마음이 가는 기부로

 

'개소리 왈왈 > 블로그' 카테고리의 다른 글

티스토리 드뎌 복구  (2) 2022.10.16
카카오 계정 통합  (0) 2022.08.26
티스토리 레이아웃 왕창 깨지네  (0) 2022.08.08
근 한달만의 블로그 정리  (2) 2022.07.21
게을러졌어...  (0) 2022.05.16
Posted by 구차니
게임/닌텐도 스위치2022. 8. 21. 22:46

3만원에 중고로 구매

지하철에서 들고 다니면서 엔딩이나 볼 수 있으면 좋겠네

(하라는 공부는 안하고!)

 

 

 

 

Posted by 구차니

다이소에서 3천원에 팔다니 참 좋은 세상이야.

그나저나 구매해 둔 HDMI 케이블은 써보질 못하네

 

내방이 더워서 빔 프로젝터 켜기가 두렵...

'개소리 왈왈 > 직딩의 비애' 카테고리의 다른 글

개발자 단상  (4) 2022.09.07
9월 그리고 2주년  (2) 2022.09.01
덥다.. 여름인가  (0) 2022.08.02
시간만 지나간다.  (0) 2022.07.18
상큼한 월요일. 지각 -_-  (0) 2022.07.04
Posted by 구차니

낑낑대며 대충 땜질

 

 

'개소리 왈왈 > 아마추어무선' 카테고리의 다른 글

안녕 rtl sdr  (0) 2023.03.20
김포공항 근처 다녀옴  (0) 2021.12.29
liveatc  (0) 2021.12.29
iss 주파수  (0) 2021.12.19
아부지 HAM 장비 뽀려뽀려  (0) 2021.12.18
Posted by 구차니
게임/닌텐도 스위치2022. 8. 19. 22:22

만만한(?) vlc로 하는데 잘 들어온다.

그냥 기본값으로 해서 그런지 모르겠지만 딜레이가 심해서 게임은 힘들거 같다.

닌텐도 정품 독으로 해서 잘 되는건가?

 

맥은 장치명이 신기하게 붙네

 

머 USB Video라고 장치명이 박혀있으니 그냥 기대한대로 나온듯.

% lsusb -t
  Bus 000.Dev 001: USB 2.0 Bus, 
  Bus 000.Dev 001: USB 2.0 Bus, 
  Bus 000.Dev 001: USB 3.0 Bus, 
    |__ Bus 020.Dev 005: USB Video, 480Mb/s
    |__ Bus 026.Dev 001: Hub, 480Mb/s
        |__ Bus 026.Dev 003: FaceTime HD Camera (Built-in), 480Mb/s
    |__ Bus 029.Dev 001: Hub, 480Mb/s
        |__ Bus 029.Dev 002: Hub, 480Mb/s
       |__ Bus 029.Dev 000: BRCM20702 Hub, 
           |__ Bus 029.Dev 000: Bluetooth USB Host Controller, 
            |__ Bus 029.Dev 004: Apple Internal Keyboard / Trackpad, 12Mb/s
            |__ Bus 029.Dev 005: Internal Memory Card Reader, 480Mb/s

 

Posted by 구차니
이론 관련/전기 전자2022. 8. 18. 14:54

펄스 전류라고 하니 꾸준한 고전압은 막지 못하지만

순간적인 전류를 막아주는 녀석으로 설계 이상의 전류가 들어올 경우 GND 쪽으로 전류를 흘려

본 회로의 손상을 방지해주는 역할을 한다.

 

T서지 등의 과전압이 인가되는 경우에는 ON 상태가 되어, 펄스 전류를 TVS 측에서 소비시킴으로써 과전압을 클램프하여, 후단의 IC를 보호합니다.


[링크 : https://www.rohm.co.kr/electronics-basics/diodes/di_what8]

 

TVS 다이오드는 일반적으로 낙뢰, 유도 부하 스위칭 및 전송 또는 데이터 회선 및 전자 회로와 관련된 정전기 방전(ESD)이 유도하는 것과 같은 전기 과압으로부터 보호하기 위해 사용됩니다.

[링크 : https://www.digikey.kr/ko/product-highlight/l/littelfuse/tvs-diodes]

 

[링크 : https://m.blog.naver.com/cubloc/220064263758]

[링크 : https://ttistoryy.tistory.com/18]

[링크 : https://ttistoryy.tistory.com/9]

 

 

'이론 관련 > 전기 전자' 카테고리의 다른 글

베어링 진동 측정 관련  (0) 2023.02.16
이동평균  (0) 2023.01.17
헤테로다인  (0) 2022.08.08
ramp wave = sawtooth wave  (0) 2022.08.03
PID 제어... 2?  (0) 2022.06.20
Posted by 구차니
Programming/golang2022. 8. 18. 12:18

<-

이런 연산자가 보여서 먼가 찾아보는 중

 

[링크 : https://etloveguitar.tistory.com/40]

[링크 : https://go.dev/ref/spec#Receive_operator]

[링크 : https://go.dev/ref/spec#Channel_types]

'Programming > golang' 카테고리의 다른 글

golang http.HandleFunc(pattern)  (0) 2022.08.31
golang mariadb 연동  (0) 2022.08.30
golang unused import  (0) 2022.07.20
golang websocket package  (0) 2022.07.15
go run ./  (2) 2022.04.18
Posted by 구차니
프로그램 사용/wayland2022. 8. 17. 16:49

weston_screenshooter_shoot()을 따라오는데 영 어딜 파야 나올지 감이 안온다.

아무튼.. libweston의 screenshooter.c가 실제적으로 수행되는 부분 같은데

//git\include\libweston\libweston.h
int
weston_screenshooter_shoot(struct weston_output *output, struct weston_buffer *buffer,
   weston_screenshooter_done_func_t done, void *data);

//git\libweston\screenshooter.c
WL_EXPORT int
weston_screenshooter_shoot(struct weston_output *output,
   struct weston_buffer *buffer,
   weston_screenshooter_done_func_t done, void *data)
{
struct screenshooter_frame_listener *l;

if (!wl_shm_buffer_get(buffer->resource)) {
done(data, WESTON_SCREENSHOOTER_BAD_BUFFER);
return -1;
}

buffer->shm_buffer = wl_shm_buffer_get(buffer->resource);
buffer->width = wl_shm_buffer_get_width(buffer->shm_buffer);
buffer->height = wl_shm_buffer_get_height(buffer->shm_buffer);

if (buffer->width < output->current_mode->width ||
    buffer->height < output->current_mode->height) {
done(data, WESTON_SCREENSHOOTER_BAD_BUFFER);
return -1;
}

l = malloc(sizeof *l);
if (l == NULL) {
done(data, WESTON_SCREENSHOOTER_NO_MEMORY);
return -1;
}

l->buffer = buffer;
l->output = output;
l->done = done;
l->data = data;
l->listener.notify = screenshooter_frame_notify;
wl_signal_add(&output->frame_signal, &l->listener);
weston_output_disable_planes_incr(output);
weston_output_damage(output);

return 0;
}

 

아무튼 추적을 계속해보면 아래와 같이 event_loop에 wl_event_loop_add_idle() 실행해서 추가해주고 끝.

//git\libweston\compositor.c
static void
weston_schedule_surface_protection_update(struct weston_compositor *compositor)
{
struct content_protection *cp = compositor->content_protection;
struct wl_event_loop *loop;

if (!cp || cp->surface_protection_update)
return;
loop = wl_display_get_event_loop(compositor->wl_display);
cp->surface_protection_update = wl_event_loop_add_idle(loop,
       notify_surface_protection_change,
       compositor);
}

WL_EXPORT void
weston_output_disable_planes_incr(struct weston_output *output)
{
output->disable_planes++;
/*
 * If disable_planes changes from 0 to non-zero, it means some type of
 * recording of content has started, and therefore protection level of
 * the protected surfaces must be updated to avoid the recording of
 * the protected content.
 */
if (output->disable_planes == 1)
weston_schedule_surface_protection_update(output->compositor);
}

 

struct content_protection은 누가 만드나 하면서 따라가보니

weston_compositor_enable_content_protection() 함수에서 만들어 주고 해당 함수는

//git\libweston\content-protection.c
WL_EXPORT int
weston_compositor_enable_content_protection(struct weston_compositor *compositor)
{
struct content_protection *cp;

cp = zalloc(sizeof(*cp));
if (cp == NULL)
return -1;
cp->compositor = compositor;

compositor->content_protection = cp;
wl_list_init(&cp->protected_list);
if (wl_global_create(compositor->wl_display,
     &weston_content_protection_interface, 1, cp,
     bind_weston_content_protection) == NULL)
return -1;

cp->destroy_listener.notify = cp_destroy_listener;
wl_signal_add(&compositor->destroy_signal, &cp->destroy_listener);
cp->debug = weston_compositor_add_log_scope(compositor, "content-protection-debug",
    "debug-logs for content-protection",
    NULL, NULL, NULL);
return 0;
}

 

drm_backend_create() 시에 b->atomic_modeset 조건에 의해서 생성된다.

//git\libweston\backend-drm\drm.c
static struct drm_backend *
drm_backend_create(struct weston_compositor *compositor,
   struct weston_drm_backend_config *config)
{
if (b->atomic_modeset)
if (weston_compositor_enable_content_protection(compositor) < 0)
weston_log("Error: initializing content-protection "
   "support failed.\n");
}

 

 

이름이 비슷한건지 걸려나오는 다른 녀석.

//protocol\weston-screenshooter-client-protocol.h
#define WESTON_SCREENSHOOTER_SHOOT 0

static inline void
weston_screenshooter_shoot(struct weston_screenshooter *weston_screenshooter, struct wl_output *output, struct wl_buffer *buffer)
{
wl_proxy_marshal((struct wl_proxy *) weston_screenshooter,
 WESTON_SCREENSHOOTER_SHOOT, output, buffer);
}

 

 wl_proxy_marshall()은 또 멀까해서 따라가 보지만.. 답이 안나온다 -_ㅠ

//wayland-main\src\wayland-client.c
WL_EXPORT struct wl_proxy *
wl_proxy_marshal_array_constructor_versioned(struct wl_proxy *proxy,
     uint32_t opcode,
     union wl_argument *args,
     const struct wl_interface *interface,
     uint32_t version)
{
return wl_proxy_marshal_array_flags(proxy, opcode, interface, version, 0, args);
}

WL_EXPORT struct wl_proxy *
wl_proxy_marshal_array_constructor(struct wl_proxy *proxy,
   uint32_t opcode, union wl_argument *args,
   const struct wl_interface *interface)
{
return wl_proxy_marshal_array_constructor_versioned(proxy, opcode,
    args, interface,
    proxy->version);
}


WL_EXPORT void
wl_proxy_marshal(struct wl_proxy *proxy, uint32_t opcode, ...)
{
union wl_argument args[WL_CLOSURE_MAX_ARGS];
va_list ap;

va_start(ap, opcode);
wl_argument_from_va_list(proxy->object.interface->methods[opcode].signature,
 args, WL_CLOSURE_MAX_ARGS, ap);
va_end(ap);

wl_proxy_marshal_array_constructor(proxy, opcode, args, NULL);
}

 

'프로그램 사용 > wayland' 카테고리의 다른 글

wayland hdmi - touch 연결  (0) 2023.09.08
wayland atomic commit 패치?  (0) 2022.08.22
wayland glreadpixels 실패  (0) 2022.08.16
sway + wayvnc  (0) 2022.08.10
wayvnc 0.5 릴리즈  (0) 2022.08.09
Posted by 구차니
embeded/raspberry pi2022. 8. 17. 15:54

SPI 통신시

2MHz 클럭에 3200Hz / 1600Hz 사용 가능

 

I2C 통신시

400kHz(고속 i2c)일 경우 800 Hz

100kHz(표준 i2c) 200 Hz에

SPI
The maximum SPI clock speed is 5 MHz with 100 pF maximum loading, and the timing scheme follows clock polarity (CPOL) = 1 and clock phase (CPHA) = 1.

Use of the 3200 Hz and 1600 Hz output data rates is only recommended with SPI communication rates greater than or equal to 2 MHz. The 800 Hz output data rate is recommended only for communication speeds greater than or equal to 400 kHz, and the remaining data rates scale proportionally. For example, the minimum recommended communication speed for a 200 Hz output data rate is 100 kHz

I2C
Due to communication speed limitations, the maximum output data rate when using 400 kHz I2C is 800 Hz and scales linearly with a change in the I2C communication speed. For example, using I2C at 100 kHz would limit the maximum ODR to 200 Hz

 

4 wire는 CS / SCLK / SDI / SDO를 쓴다면

3 wire는 CS / SCLK / SDIO 로 쓰는 듯.

(SDIO Serial Data Input Output의 약자 Secure Digital I/O의 약자이기도 하니.. 주의!)

[링크 : https://www.analog.com/media/en/technical-documentation/data-sheets/ADXL345.pdf]

Posted by 구차니