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
[]
