楽天Kobo Touchをディスプレイにする



e-ink8000
Kobo TouchVNC()




ツールチェインの準備


linuxcrosstool-ngKobo使libcgcc + make
eglibc 2_15Kobo使glibc 2.11.1ABILinuxOK

ヘッダファイルの準備


KoboGitHub


https://github.com/kobolabs/Kobo-Reader/tree/master/hw/imx508/cls


Linuxinclude/linuxsysroot/usr/include/linux

ドキュメントの準備


Freescale


http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=IMX50_SW


"i.MX50 EVK Linux Documentation Bundle" mx50_linux.pdf

OpenVGKobo使

SDLとlibvncclientの準備


SDLSDL2SDL 1.2使SDL2(fbcon)Koboe-ink(/dev/fb0)
libvncclientCMakeLists.txtvncclient
libvncclientSDLvncviewer

罠への対処





export SDL_NOMOUSE=1 


SDLfbconopenSDL_NOMOUSE


VNC800 x 600


800 x 600






Koboe-inkioctl
#include <fcntl.h>
#include <sys/types.h>
#include <linux/mxcfb.h>
#include <sys/ioctl.h>

int mxcfb = -1;
static void
mxc_damage(int x, int y, int w, inth){
    struct mxcfb_update_data param;
    const int MARKER = 999;
    int r;
    if(mxcfb<0){
        mxcfb = open("/dev/fb0", O_RDWR);
    }
    if(mxcfb<0){
        printf("mxcfb open error!\n");
    }

    param.update_region.left = x;
    param.update_region.top = y;
    param.update_region.width = w;
    param.update_region.height = h;
    param.waveform_mode = WAVEFORM_MODE_AUTO;
    param.update_mode = UPDATE_MODE_PARTIAL;
    param.update_marker = MARKER;
    param.temp = 0;
    param.flags = 0;
    /* alt_buffer_data */
    r = ioctl(mxcfb, MXCFB_SEND_UPDATE, &param);
    printf("send update = %d\n",r);
#if 0
    r = ioctl(mxcfb, MXCFB_WAIT_FOR_UPDATE_COMPLETE, &MARKER);
    printf("wait = %d\n",r);
#endif

}

flags2(PDF)
flags16
waitwait

misc

↑のdamageコードが今回唯一書いたコードで、こんなにコーディングなしでVNCクライアントが作れるのは非常に便利だと思った。
今回はSDL側(UpdateRect)にこのコードを仕込んだが、本来はアプリケーションがアップデートの挙動を制御するはず。
本来のGUIシェル(Nickel)との共存方法を考えないといけない。多分Home長押しをトラップしてNickelを殺したり再起動したりする小さなDaemonを書くのがいいだろう。