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

  1. 2024.03.18 집 정리
  2. 2024.03.17 뽀일이 털 밀기
  3. 2024.03.16 병원, 이발
  4. 2024.03.16 1.58bit
  5. 2024.03.14 다이소 웹캠.. M12 렌즈.. 계륵?!
  6. 2024.03.13 gps kalman
  7. 2024.03.13 uinput touch 장치 흉내내기
  8. 2024.03.12 touchscreen 장치 프로토콜 분석
  9. 2024.03.12 javascript groupby map
  10. 2024.03.12 uinput 으로 touchscreen을 만들기

가구 하나 사서 두개 버리려고 했는데

어쩌다 보니 정리용으로 쓰려고 이래저래 재사용

수납공간이 늘어서 좋긴한데.. 흐음..

'개소리 왈왈 > 육아관련 주저리' 카테고리의 다른 글

개 털 밀기!  (0) 2024.03.30
처갓댁에서 컴백  (0) 2024.03.24
뽀일이 털 밀기  (0) 2024.03.17
병원, 이발  (0) 2024.03.16
지름  (0) 2024.03.10
Posted by 구차니

밀고 나니 덩치가 반만해 지네 ㅋㅋ

'개소리 왈왈 > 육아관련 주저리' 카테고리의 다른 글

처갓댁에서 컴백  (0) 2024.03.24
집 정리  (0) 2024.03.18
병원, 이발  (0) 2024.03.16
지름  (0) 2024.03.10
입학식  (0) 2024.03.04
Posted by 구차니

어제 부터 갑자기 고개를 들기 힘들어서

부랴부랴 병원을 갔는데 일단은 일주일치 약

그리고 체외충격파.. -_-

 

목 엑스레이 찍고 했는데 결론은.. 목 근육에 염증이 생겼다고

엊그제 찌뿌둥해서 몽둥이로 두드린게 염증이 생긴듯..

이제 몸의 내구도나 방어력이 공격력보다 낮아진건가.. 큽..

 

아무튼 치료받고

머리 깍고, 머리를 감을수 없어 집에 와서 감음

'개소리 왈왈 > 육아관련 주저리' 카테고리의 다른 글

집 정리  (0) 2024.03.18
뽀일이 털 밀기  (0) 2024.03.17
지름  (0) 2024.03.10
입학식  (0) 2024.03.04
유난히 힘든 하루  (0) 2024.03.03
Posted by 구차니

 

log2(3) = 1.58 이라고

 

그나저나 +1 -1 0 으로 곱셈을 사실상 덧셈으로 처리하게 하다니

회로 복잡도가 어마어마 하게 낮아질듯

[링크 : https://endplan.ai/양자화-quantization-1-58bit/]

'이론 관련 > 컴퓨터 관련' 카테고리의 다른 글

uefi dxe pei  (0) 2024.04.01
radix 4 - fp4  (0) 2024.03.21
gps kalman  (0) 2024.03.13
db 식별/비식별 관계  (0) 2024.02.15
ffb - force feedback  (0) 2023.08.25
Posted by 구차니
개소리 왈왈/컴퓨터2024. 3. 14. 10:48

음.. 대충 보니 M12 렌즈 마운트 같아서

렌즈를 찾아보는데 영 없다 -_-!

초기형 라즈베리 카메라는 M12렌즈가 포함되었는데

가격이 낮아진 후기형이 나오면서 렌즈들이 멸종

 

카메라는 5천원에 다이소에서 샀는데

렌즈가 7천원이 넘으면.. 이거 해봐야 하는거 맞....나?

[링크 : http://itempage3.auction.co.kr/DetailView.aspx?itemno=E231434797]

 

16200원, 미니 렌즈 포함

[링크 : https://www.devicemart.co.kr/goods/view?no=10824332]

 

27000원, M12 렌즈 마운트, M12 렌즈 포함

[링크 : https://www.devicemart.co.kr/goods/view?no=10824336]

'개소리 왈왈 > 컴퓨터' 카테고리의 다른 글

컴퓨터 셋팅완료  (0) 2024.03.20
cpu, ram 적출  (0) 2024.03.19
다이소 웹캠  (0) 2024.02.24
2 포트 vs 4 포트 그리고 컴퓨터  (0) 2024.01.27
G4400T 내장 그래픽이...  (0) 2024.01.10
Posted by 구차니

GPS 값은 원체 튀다보니

그걸 가공없이 쓰면 추정이 불가능한데

kalman 필터를 적용해서 선형적으로 이동하는 것으로 보정이 가능하다.

 

[링크 : https://youtu.be/ZYexI6_zUMk?si=eDcBHxIn39Tq3gXl]

'이론 관련 > 컴퓨터 관련' 카테고리의 다른 글

radix 4 - fp4  (0) 2024.03.21
1.58bit  (0) 2024.03.16
db 식별/비식별 관계  (0) 2024.02.15
ffb - force feedback  (0) 2023.08.25
vRAN  (0) 2023.08.23
Posted by 구차니
프로그램 사용/uinput2024. 3. 13. 14:49

실제 장치에서 터치 한번 하는걸 흉내냈는데 안되서, 프로토콜 대로 구현하니 된다.

 

linux 5.10.72 이긴 한데 그거 영향인진 모르겠지만

Protocol A 로 구현하니 커서나 클릭도 안되는 것 같고

Protocol B를 따라 구현하니 된다.

 

3.4. Protocol Example B
Here is what a minimal event sequence for a two-contact touch would look like for a type B device:

ABS_MT_SLOT 0
ABS_MT_TRACKING_ID 45
ABS_MT_POSITION_X x[0]
ABS_MT_POSITION_Y y[0]
ABS_MT_SLOT 1
ABS_MT_TRACKING_ID 46
ABS_MT_POSITION_X x[1]
ABS_MT_POSITION_Y y[1]
SYN_REPORT
Here is the sequence after moving contact 45 in the x direction:

ABS_MT_SLOT 0
ABS_MT_POSITION_X x[0]
SYN_REPORT
Here is the sequence after lifting the contact in slot 0:

ABS_MT_TRACKING_ID -1
SYN_REPORT

[링크 : https://docs.kernel.org/input/multi-touch-protocol.html]

 

 

초기화

    struct uinput_setup usetup;
    int keys[] = {BTN_TOUCH}; // BTN_LEFT, BTN_RIGHT, 

    fd_touch = open("/dev/uinput", O_WRONLY | O_NONBLOCK);
    ioctl(fd_touch, UI_SET_EVBIT, EV_KEY);
    for(int i = 0; i < sizeof(keys) / sizeof(int); i++){
        ioctl(fd_touch, UI_SET_KEYBIT, keys[i]);
    }

    //Mouse Pointer events init
    ret = ioctl(fd_touch, UI_SET_EVBIT, EV_ABS);
    ret = ioctl(fd_touch, UI_SET_ABSBIT, ABS_MT_SLOT);
    ret = ioctl(fd_touch, UI_SET_ABSBIT, ABS_MT_POSITION_X);
    ret = ioctl(fd_touch, UI_SET_ABSBIT, ABS_MT_POSITION_Y);
    ret = ioctl(fd_touch, UI_SET_EVBIT, EV_SYN);

    struct uinput_abs_setup abs_setup_x;
    struct uinput_abs_setup abs_setup_y;
    memset(&abs_setup_x, 0, sizeof(abs_setup_x));
    memset(&abs_setup_y, 0, sizeof(abs_setup_y));
    abs_setup_x.code = ABS_MT_POSITION_X;
    abs_setup_x.absinfo.minimum = 0;
    abs_setup_x.absinfo.maximum = 1024;
    abs_setup_y.code = ABS_MT_POSITION_Y;
    abs_setup_y.absinfo.minimum = 0;
    abs_setup_y.absinfo.maximum = 768;
    ret = ioctl(fd_touch, UI_ABS_SETUP, &abs_setup_x);
    ret = ioctl(fd_touch, UI_ABS_SETUP, &abs_setup_y);

    memset(&usetup, 0, sizeof(usetup));
    usetup.id.bustype = BUS_USB;
    usetup.id.vendor = 0x4711;
    usetup.id.product = 0x0817;
    strcpy(usetup.name, "virtual touch device");
    ret = ioctl(fd_touch, UI_DEV_SETUP, &usetup);
    ret = ioctl(fd_touch, UI_DEV_CREATE);

 

터치(클릭) 처리

switch(buttonMask)
{
    default:
        printf("buttonMask[%02X]\n",buttonMask);
    break;
    
    case BUTTON_RELEASE:
        switch(prev_click)
        {
            case BUTTON_L_DOWN:
                printf("BUTTON_L_DOWN BUTTON_RELEASE\n");
                prev_click = -1;
                emit(fd_touch, EV_ABS, ABS_MT_TRACKING_ID, -1);
                emit(fd_touch, EV_SYN, SYN_REPORT, 0);
                break;
        }
        break;

    case BUTTON_L_DOWN:
        if(prev_click == -1)
        {
            printf("BUTTON_L_DOWN\n");
            prev_click = buttonMask;
            emit(fd_touch, EV_ABS, ABS_MT_SLOT, 0);
            emit(fd_touch, EV_ABS, ABS_MT_TRACKING_ID, track_id++);
            emit(fd_touch, EV_ABS, ABS_MT_POSITION_X, pos_x);
            emit(fd_touch, EV_ABS, ABS_MT_POSITION_Y, pos_y);
            emit(fd_touch, EV_ABS, ABS_X, pos_x);
            emit(fd_touch, EV_ABS, ABS_Y, pos_y);
            emit(fd_touch, EV_SYN, SYN_REPORT, 0);
        }
        else
        {
            printf("BUTTON_L_DOWN MOVE\n");
            emit(fd_touch, EV_ABS, ABS_MT_SLOT, 0);
            emit(fd_touch, EV_ABS, ABS_MT_POSITION_X, pos_x);
            emit(fd_touch, EV_ABS, ABS_MT_POSITION_Y, pos_y);
            emit(fd_touch, EV_ABS, ABS_X, pos_x);
            emit(fd_touch, EV_ABS, ABS_Y, pos_y);
            emit(fd_touch, EV_SYN, SYN_REPORT, 0);
        }
        break;
}

 

Posted by 구차니
프로그램 사용/uinput2024. 3. 12. 18:17

대충 봐선(?)

protocol A에 ABS_X, ABS_Y를 추가한 변종(?) 같긴한데

 

아래는 한번 터치해서 클릭하는 내용

BTN_TOUCH로 눌렸다 떼었다 라는 걸 보내주는데

깔끔(?) 하게 원격으로 좌표 + 떼어라 만 보내도 되는지 테스트 해봐야 할 듯 (눌렀다 없이 떼었다가 될지 모르겠음)

 

그 와중에 ABS_MT_TRACKING_ID는 왜 음수 값이 나오지?

 

세번의 터치가 있었는데(터치 1회, 드래그, 줌 인)

그 때 마다 ABS_MT_TRACKING_ID가 증가하고 매번 -1 로 BTN_TOUCH 0 을 누르기 전에 트래킹이

사용되지 않는다는걸 알려주는건가..?

마지막의 Tracking_id 2,3은 두 손가락으로 줌 인 한 거라, 각각의 손가락에 대해서 처리하는 듯

 

A non-negative tracking id is interpreted as a contact, and the value -1 denotes an unused slot

[링크 : https://www.kernel.org/doc/Documentation/input/multi-touch-protocol.txt]

Posted by 구차니

'Programming > javascript & HTML' 카테고리의 다른 글

자바스크립트 옵셔널 체이닝(optional chaining)  (0) 2024.04.08
qr decoder part 2  (0) 2024.04.07
javascript 숫자  (0) 2024.02.07
마우스로 테이블 열 변경하기  (0) 2024.02.02
html video 재생종료 event  (0) 2023.09.02
Posted by 구차니
프로그램 사용/uinput2024. 3. 12. 11:03

아래와 같이 설정하면 BTN_LEFT, BTN_RIGHT 때문에, udev에서 Mouse Touchscreen으로 인식된다.

    int keys[] = {BTN_LEFT, BTN_RIGHT, BTN_TOUCH};

    fd = open("/dev/uinput", O_WRONLY | O_NONBLOCK);

    //Custom key events init
    ioctl(fd, UI_SET_EVBIT, EV_KEY);
    for(int i = 0; i < sizeof(keys) / sizeof(int); i++){
        ioctl(fd, UI_SET_KEYBIT, keys[i]);
    }
[01:49:49.721] event5  - virtual touch driver: is tagged by udev as: Mouse Touchscreen
[01:49:49.722] event5  - virtual touch driver: kernel bug: device has min == max on ABS_MT_POSITION_X
[01:49:49.722] event5  - virtual touch driver: was rejected
[01:49:49.722] event5  - using input device '/dev/input/event5'

 

그래서 BTN_TOUCH만 넣으면 Mouse는 빠지고 Touchscreen만 뜨는데, 도대체 커널 버그 쪽은 어떻게 해결해야 할까?

    int keys[] = {BTN_TOUCH}; // BTN_LEFT, BTN_RIGHT

    fd = open("/dev/uinput", O_WRONLY | O_NONBLOCK);

    //Custom key events init
    ioctl(fd, UI_SET_EVBIT, EV_KEY);
    for(int i = 0; i < sizeof(keys) / sizeof(int); i++){
        ioctl(fd, UI_SET_KEYBIT, keys[i]);
    }
[01:50:22.720] event5  - virtual touch driver: is tagged by udev as: Touchscreen
[01:50:22.720] event5  - virtual touch driver: kernel bug: device has min == max on ABS_MT_POSITION_X
[01:50:22.720] event5  - virtual touch driver: was rejected
[01:50:22.720] event5  - not using input device '/dev/input/event5'

 

+

chatGPT 응답해준 것을 조합하면 아래와 같이 하면

일단 터치 장비로 인식은 되는데.. 커서도 안되고 터치 이동, 클릭을 어떻게 구현해야 하나...

void initializeTouchEvent(int fd) {
    struct uinput_setup usetup;
    int keys[] = {BTN_TOUCH}; // BTN_LEFT, BTN_RIGHT, 

    fd = open("/dev/uinput", O_WRONLY | O_NONBLOCK);
    ioctl(fd, UI_SET_EVBIT, EV_KEY);

    // 사용할 키 등록(터치니까 BTN_TOUCH 만, BTN_LEFT 나 BTN_RIGHT가 등록되면 마우스로 인식됨)
    for(int i = 0; i < sizeof(keys) / sizeof(int); i++){
       ioctl(fd, UI_SET_KEYBIT, keys[i]);
    }

    ioctl(fd, UI_SET_EVBIT, EV_ABS);
    ioctl(fd, UI_SET_ABSBIT, ABS_MT_SLOT);
    ioctl(fd, UI_SET_ABSBIT, ABS_MT_POSITION_X);
    ioctl(fd, UI_SET_ABSBIT, ABS_MT_POSITION_Y);
    ioctl(fd, UI_SET_ABSBIT, ABS_MT_TRACKING_ID);  // 요건 없어도 되는 듯
    ioctl(fd, UI_SET_EVBIT, EV_SYN);

    struct uinput_abs_setup abs_setup_x;
    struct uinput_abs_setup abs_setup_y;
    memset(&abs_setup_x, 0, sizeof(abs_setup_x));
    memset(&abs_setup_y, 0, sizeof(abs_setup_y));
    abs_setup_x.code = ABS_MT_POSITION_X;
    abs_setup_x.absinfo.minimum = 0; // 최솟값
    abs_setup_x.absinfo.maximum = 1024; // 최댓값
    abs_setup_y.code = ABS_MT_POSITION_Y;
    abs_setup_y.absinfo.minimum = 0; // 최솟값
    abs_setup_y.absinfo.maximum = 1024; // 최댓값

    ioctl(fd, UI_SET_ABSBIT, ABS_MT_POSITION_X);
    ioctl(fd, UI_SET_ABSBIT, ABS_MT_POSITION_Y);
    ioctl(fd, UI_ABS_SETUP, &abs_setup_x);
    ioctl(fd, UI_ABS_SETUP, &abs_setup_y);

    // 가상 디바이스를 생성
    memset(&usetup, 0, sizeof(usetup));
    usetup.id.bustype = BUS_USB;
    usetup.id.vendor = 0x1;
    usetup.id.product = 0x1;
    strcpy(usetup.name, "Virtual Touch Device");

    ioctl(fd, UI_DEV_SETUP, &usetup);
    ioctl(fd, UI_DEV_CREATE);
}
Posted by 구차니