2016年6月3日金曜日

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

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

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

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



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


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

  1. int aCom::getComList(aDom8* pZ){  
  2.     aDom8& Z = *pZ;    //    JSON-Object  
  3.     char    buffer[256];  
  4.     memset(buffer,0,sizeof(buffer));  
  5.     DWORD    Length = 0;  
  6.     HDEVINFO hDevInfo = ::SetupDiGetClassDevs( &GUID_DEVINTERFACE_COMPORT, NULL, 0/*hwnd*/, ( DIGCF_PRESENT | DIGCF_DEVICEINTERFACE ) );  
  7.     DWORD w=0;  
  8.     SP_DEVINFO_DATA DeviceInfoData = {sizeof(SP_DEVINFO_DATA)};  
  9.     for(w=0; ::SetupDiEnumDeviceInfo( hDevInfo, w, &DeviceInfoData ); w++){  
  10.         ::SetupDiGetDeviceRegistryPropertyA( hDevInfo, &DeviceInfoData, SPDRP_FRIENDLYNAME, 0, (unsigned char*)buffer,sizeof(buffer),&Length );  
  11.         Z[w]["friendlyname"] = (const char*)buffer;    //    JSON-Object  
  12.         HKEY key = ::SetupDiOpenDevRegKey( hDevInfo, &DeviceInfoData,  DICS_FLAG_GLOBAL, 0, DIREG_DEV, KEY_QUERY_VALUE );  
  13.         if(key){  
  14.             DWORD type = 0;  
  15.             DWORD size = sizeof( buffer );  
  16.             ::RegQueryValueExA(key,  "PortName", 0, &type, (unsigned char*)buffer, &size);  
  17.             Z[w]["name"] = (const char*)buffer;    //    JSON-Object  
  18.         }  
  19.     }  
  20.     return    w;  
  21. }  
っと、ここまではよかったのです。
きっと、【Arduino Mega 2560(COM3)】みたいな感じで、friendlynameが取れると思ってたのです。
しかし、、、残念ながらこのやりかたでは、仮想COMが取れませんでした。
んーーー。
仕方ない。。。WDKいれて、やるか。。。(>_<)

つづく。

0 件のコメント:

コメントを投稿