Print

USB-024評価用簡易アプリケーションのソースが見たい


USB-024評価用簡易アプリケーションのソースは公開できませんか

 このアプリケーションは、C++Builder2007とnrCommという市販通信コンポーネントを使用しています。本体の部分はわずかですので抜粋してお見せします。
実装しているのは、"1A"コマンドのみです。
nrCommについてはこちらをご覧ください)

 ソースコードは、処理の内容を説明するもので、コードが正しいとは限りません。

///////////////////////////////////////////

String convhex( unsigned char *p, int n )
{
int i;
unsigned char bcc;
String wk,ret;
    ret = "";
    for( i = 0; i < n ; i++ ){
        ret = ret + wk.sprintf("%02X ", p[i]);
    }
    //bcc = calcCRC( p , n-1 );
    bcc = 0;
    for( i = 0; i < n-1 ; i++ ){
        bcc = bcc ^ p[i];
    }
    if( bcc == p[i] ){
        ret = ret + " <bcc OK>";
    }else{
        ret = ret + " <bcc ERROR>";
    }
    return ret;
}

struct FM_1A {
	unsigned char  cmd;        // 0
	unsigned char  status;     // 1
    unsigned char  abs0;       // 2
    unsigned char  abs1;       // 3
    unsigned char  abs2;       // 4
    unsigned char  enid;       // 5
	unsigned char  abm0;       // 6
    unsigned char  abm1;       // 7
    unsigned char  abm2;       // 8
    unsigned char  almc;       // 9
    unsigned char  crc;        // 10
};

String kaiseki(  unsigned char *p, int n )
{
int abm,abs;
String ret,s1;
double wk, wk1;
struct FM_1A *tp;
	tp = (struct FM_1A *)p;
	if( tp->cmd == 0x1A ){
    	abs = tp->abs0 + (tp->abs1 << 8) + (tp->abs2 << 16);
    	abm = tp->abm0 + (tp->abm1 << 8) + (tp->abm2 << 16);
        abs &= 0xfffff;
        wk1 = abs * (360.0 / 0x100000) ;

        ret.sprintf("ABS=%10d | 角度=%9.2f | ABM=%10d", abs, wk1, abm );

    }else{
        ret = "";
    }
    return ret;

}

///////////////////////////////////////////
//---------------------------------------------------------------------------
int __fastcall TForm2::VCPExam()
{
TnrComm *pComm[1] = {nrComm1};
int i;
String tmp;
unsigned char cmd;
	cmd = (unsigned char) StrToInt("0x"+ComboBox_cmd->Text);
    tmp.sprintf( "%c", cmd );
    RecvStreamData = new char[gSendStreamBurden];

	AddMemo("SEND : "+ ComboBox_cmd->Text );

    RecvPos = 0;

    QueryPerformanceCounter(&StartTime);
    pComm[0]->SendString( tmp );

    // 受信は nrCommAfterReceiv で行われるのでしばらく待つ
    for(int i=0; i< 2 ; i++){
    	Sleep( 100 );
   	 	Application->ProcessMessages();
    }

    tmp = convhex( RecvStreamData, RecvPos );   // HEX 変換
    AddMemo( "RCV  : " + tmp );
    if( (tmp = kaiseki( RecvStreamData, RecvPos )) != "" ){
    	AddMemo_kaiseki( tmp );
    }
	delete []RecvStreamData;

    return 0;

}
//---------------------------------------------------------------------------
void __fastcall TForm2::nrCommAfterReceive(TObject *Com, Pointer Buffer,
      DWORD Received)
{

    int RecvNum;
    char *pBuffer;

    RecvNum = (int)Received;
    pBuffer = (char*)Buffer;

    	//受信した数だけバッファに取込む
    for( ; RecvNum; RecvNum--)
    {
    	RecvStreamData[RecvPos] = *pBuffer;
        pBuffer++;				//Src位置のインクリメント
        RecvPos++;  			//Dest位置のインクリメント
    }

   	RecvStreamData[RecvPos] = 0;

}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button_testClick(TObject *Sender)
{
	VCPExam();       // 上にある
}
//---------------------------------------------------------------------------
void __fastcall TForm2::nrDeviceBox1Change(TObject *Sender)
{
	unsigned short com;

	com = nrComm1->ComPortNo;

}
//---------------------------------------------------------------------------
void __fastcall TForm2::WMDeviceChange(TMessage &Msg)
{
	Memo->Lines->Add("@デバイスを登録中です..." + IntToStr(gDeviceChangeTimes++));

    if((gDeviceChangeTimes%6)==0)
    {
        nrComm1->WMDeviceChange(Msg);

    }

    ResetTimer(10);
}
//---------------------------------------------------------------------------
void __fastcall TForm2::ResetTimer(int value)
{
    gTimerInterval = value;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::ReportComNames()
{
    int deviceCnt;
    String str;
    TnrDevice *p;

    deviceCnt = nrComm1->DeviceCount;

	Memo->Lines->Add("/*----- 現在認識中のポート-----*/");

    for(int i=0; i<devicecnt; nrcomm1-="" str="・">Device[i]->NameFriendly;
        Memo->Lines->Add(str);
    }

    Memo->Lines->Add("/*-----------------------------------*/");
}
//---------------------------------------------------------------------------
       
//---------------------------------------------------------------------------
void __fastcall TForm2::Button_com_closeClick(TObject *Sender)
{
	if(nrComm1->Active == TRUE) nrComm1->Active = FALSE;
    Button_test->Enabled = False;

}
//---------------------------------------------------------------------------

//---------------------------------------------------------------------------
void __fastcall TForm2::AddMemo(String str)
{
	Memo->Lines->Add(str);
}
void __fastcall TForm2::AddMemo_kaiseki(String str)
{
	Memo_kaiseki->Lines->Add(str);
}

//---------------------------------------------------------------------------


void __fastcall TForm2::All_Reset()
{

 if(nrComm1->Active == TRUE) nrComm1->Active = FALSE;


}
//---------------------------------------------------------------------------




void __fastcall TForm2::Timer_TimeoutTimer(TObject *Sender)
{
    if(gUartTimeoutCounter>0){
    	gUartTimeoutCounter--;
    }
}
//---------------------------------------------------------------------------




void __fastcall TForm2::CheckBox1Click(TObject *Sender)
{
	Timer1->Enabled = CheckBox1->Checked;
}
//---------------------------------------------------------------------------

void __fastcall TForm2::Timer1Timer(TObject *Sender)
{
static int cnt = 0;
	if( Button_test->Enabled ){
		Button_test->Click();
        cnt++;
        if( cnt > 1000 ){
        	CheckBox1->Checked = False;
            cnt = 0;
        }
    }
}
//---------------------------------------------------------------------------


[kw] 2012-03-07 USB-024 TEC-FA


[]