2014年7月22日 星期二

編譯sunxi-tools

mowei@mowei ~/A10/sunxi-tools $ make
gcc -g -O0 -Wall -Wextra -std=c99 -D_POSIX_C_SOURCE=200112L -Iinclude/  -o fexc fexc.c script.c script_uboot.c script_bin.c script_fex.c
ln -s fexc bin2fex
ln -s fexc fex2bin
gcc -g -O0 -Wall -Wextra -std=c99 -D_POSIX_C_SOURCE=200112L -Iinclude/  -o bootinfo bootinfo.c
bootinfo.c: In function ‘print_script’:
bootinfo.c:274:25: warning: unused parameter ‘script’ [-Wunused-parameter]
 void print_script(void *script)
                         ^
gcc -g -O0 -Wall -Wextra -std=c99 -D_POSIX_C_SOURCE=200112L -Iinclude/ `pkg-config --cflags libusb-1.0`  -o fel fel.c  `pkg-config --libs libusb-1.0`
Package libusb-1.0 was not found in the pkg-config search path.
Perhaps you should add the directory containing `libusb-1.0.pc'
to the PKG_CONFIG_PATH environment variable
No package 'libusb-1.0' found
Package libusb-1.0 was not found in the pkg-config search path.
Perhaps you should add the directory containing `libusb-1.0.pc'
to the PKG_CONFIG_PATH environment variable
No package 'libusb-1.0' found
fel.c:22:20: fatal error: libusb.h: No such file or directory
 #include <libusb.h>
                    ^
compilation terminated.
make: *** [fel] Error 1

找不到檔案~
sudo apt-get install libusb-1.0-0-dev

解決~

2014年7月20日 星期日

C++ CURL 下載圖片

想要把之前的專題架設在RPI
原本要從廠商提供的SDK向DVR主機
拉H264串流下來解碼成圖片做處理
可是!

他沒有提供ARM的動態函式庫...
(虧我還花了一天找RPI硬解H264)

所以尋找替代方案!
所幸DVR提供網頁線上瀏覽
直接抓圖下來
連轉檔都省下來了!!

再拉圖下來有Authorization問題
要輸入帳號密碼才能登入下載

有兩種解法
以我這邊的DVR網址為例
原網址為
http://127.0.0.1/cgi-bin/net_jpeg.cgi?ch=0

第一種
再前面加入"帳號:密碼@"如下
http://user:pass@127.0.0.1/cgi-bin/net_jpeg.cgi?ch=0

第二種
再Header 自己添加Authorization
headers = curl_slist_append(headers,"Authorization: Basic XXXXXXXXXXX");
XXXXXXXXXXX為 user:pass 進行 base64運算結果
詳情參考WIKI:HTTP基本認證

後記:
再抓DVR的圖時間耗費的很久
原本以為是keep-alive的問題減少握手次數因該可以加快速度
我還以為是我程式碼寫錯
結果DVR主機不支援........
而花費的時間大都再內部的轉檔吧!(猜測)

使用範例multi-app
去同時抓圖下來(16張)
大概花費2秒
比原本一張1秒好多了
不過同時抓有時候程式會卡住...
不知道是主機來不及反應還是網路塞車了

下面程式碼使用QT且只能單張下載
可以參考multi-app修改

dlimage.h
#ifndef DIMAGE_H
#define DIMAGE_H

#include <curl/curl.h>
#include <QString>
#include <QImage>

class DLimage
{
public:
    DLimage(QString srcUrl);

public:
    bool ChangeUrl(QString srcUrl);
    bool DownloadJpeg();
    QImage& GetImage();

private:
    QString srcUrl;
    QByteArray tempfile ;
    QImage newImage;
};

#endif // DIMAGE_H

dlimage.cpp
#include "dlimage.h"
#include<iostream>
#include<QImageReader>
#include <QBuffer>

DLimage::DLimage(QString srcUrl)
{
    this->srcUrl=srcUrl;
}
bool DLimage::ChangeUrl(QString srcUrl)
{
    this->srcUrl=srcUrl;
    return true;
}
size_t callbackfunction(void *ptr, size_t size, size_t nmemb, void* userdata)
{
    int len= size*nmemb;
    QByteArray *tempfile =(QByteArray*) userdata;
    tempfile->append(QByteArray((char*)ptr,nmemb));

    return len;
}
bool DLimage::DownloadJpeg()
{
    CURL* curlCtx = curl_easy_init();
    struct curl_slist *headers = NULL;

    headers = curl_slist_append(headers,"Connection:keep-alive");
    headers = curl_slist_append(headers,"Authorization: Basic XXXXXXXXXXX"); //base64 

    curl_easy_setopt(curlCtx, CURLOPT_HTTPHEADER, headers);
    curl_easy_setopt(curlCtx, CURLOPT_URL,srcUrl.toLocal8Bit().constData());
    curl_easy_setopt(curlCtx, CURLOPT_WRITEDATA,&tempfile);
    curl_easy_setopt(curlCtx, CURLOPT_WRITEFUNCTION, callbackfunction);
    curl_easy_setopt(curlCtx, CURLOPT_FOLLOWLOCATION, 1);

    CURLcode rc = curl_easy_perform(curlCtx);
    if (rc)
    {
        std::cout<<"!!! Failed to download: "<<srcUrl.toLocal8Bit().constData()<<std::endl;
        return false;
    }

    long res_code = 0;
    curl_easy_getinfo(curlCtx, CURLINFO_RESPONSE_CODE, &res_code);
    if (!((res_code == 200 || res_code == 201) && rc != CURLE_ABORTED_BY_CALLBACK))
    {
        std::cout<<"!!! Response code: "<<res_code<<std::endl;
        return false;
    }

    curl_easy_cleanup(curlCtx);
    curl_slist_free_all(headers);
    headers = NULL;

    //save Image from QByteArray
    QBuffer buffer(&tempfile);
    buffer.open( QIODevice::ReadOnly);
    QImageReader reader(&buffer);
    newImage = reader.read();//Copy
    buffer.close();
    tempfile.clear();

    return true;
}
QImage& DLimage::GetImage()
{
    return newImage;
}

2014年7月17日 星期四

2014年7月13日 星期日

MINT 17 安裝WINE 1.7

$ sudo add-apt-repository ppa:ubuntu-wine/ppa
$ sudo apt-get update
$ sudo apt-get install wine1.7
$ sudo apt-get install winetricks
$ sudo apt-get install playonlinux
$ rm -r ~/.wine
$ WINEARCH=win32 WINEPREFIX=~/.wine winecfg
$ winetricks dotnet20 gdiplus


開啟OSU~
玩起來難度好像上升了....=W="

玩日文遊戲要加上
LANG=ja_JP.UTF-8


來源:
http://zackwang.blogspot.tw/2013/11/ubuntu-1310-wine-173.html
http://www.mybubbleteatime.com/2013/06/getting-osu-to-work-in-linux-mint-15.html

預測2031/1/1可能 TWCA 憑證 IOS會出現不信任

緣由: TWCA CYBER Root CA 有兩張、兩個效期 (2030、2047年到期) 推測TWCA 預計 2030年12月會停用: TWCA CYBER Root CA (2030 年到期) TWCA Global Root CA 改用啟用: TWCA CYBER ...