2016年6月3日金曜日

SmartLaser用のアプリを0から開発する。その1

SmartLaserCO2というのを研究開発目的で購入したのですが、

出力用のアプリがかなり残念な出来なので、
これを0からというか1から開発してみます。
まぁもちろん、前情報としてかなり問題があること自体はわかっていて
手持ちのイラレで作ったSVGがかなりの確率で読み込めませんし、
閉領域もNGだし、画像もかなりアバウトです。

※Pythonコードに手を入れるというメンドイことはやりません。^^;



最初の段階でやってみるのは、解析とテストです。
幸い、現状のアプリにはGコード出力機能があるので、それを多少の手がかりにして進めます。


今回は、SmartlaserCo2(mini)は、USB接続によるCOMポート出力なので、
COMポート一覧を取得してSmartLaserが接続されているCOMポートかどうかを判断する部分から始めます。
ということで、C++(Windows)で書くと、こんな感じ。
JSONを扱うクラスが数か所でてきますが、これは値を保存する構造体代わりに使っています。
取得したサンプルはこんな感じ。
/*
    COMポートリスト取得
    ↓結果サンプル
{
    "comlist":[
        {
            "friendlyname":"通信ポート (COM1)"
            ,"name":"COM1"
        }
    ]
}
*/
コードはこんな感じです

int aCom::getComList(aDom8* pZ){
    aDom8& Z = *pZ;    //    JSON-Object
    char    buffer[256];
    memset(buffer,0,sizeof(buffer));
    DWORD    Length = 0;
    HDEVINFO hDevInfo = ::SetupDiGetClassDevs( &GUID_DEVINTERFACE_COMPORT, NULL, 0/*hwnd*/, ( DIGCF_PRESENT | DIGCF_DEVICEINTERFACE ) );
    DWORD w=0;
    SP_DEVINFO_DATA DeviceInfoData = {sizeof(SP_DEVINFO_DATA)};
    for(w=0; ::SetupDiEnumDeviceInfo( hDevInfo, w, &DeviceInfoData ); w++){
        ::SetupDiGetDeviceRegistryPropertyA( hDevInfo, &DeviceInfoData, SPDRP_FRIENDLYNAME, 0, (unsigned char*)buffer,sizeof(buffer),&Length );
        Z[w]["friendlyname"] = (const char*)buffer;    //    JSON-Object
        HKEY key = ::SetupDiOpenDevRegKey( hDevInfo, &DeviceInfoData,  DICS_FLAG_GLOBAL, 0, DIREG_DEV, KEY_QUERY_VALUE );
        if(key){
            DWORD type = 0;
            DWORD size = sizeof( buffer );
            ::RegQueryValueExA(key,  "PortName", 0, &type, (unsigned char*)buffer, &size);
            Z[w]["name"] = (const char*)buffer;    //    JSON-Object
        }
    }
    return    w;
}

っと、ここまではよかったのです。
きっと、【Arduino Mega 2560(COM3)】みたいな感じで、friendlynameが取れると思ってたのです。
しかし、、、残念ながらこのやりかたでは、仮想COMが取れませんでした。
んーーー。
仕方ない。。。WDKいれて、やるか。。。(>_<)

つづく。

0 件のコメント:

コメントを投稿