|
모르겠습니다.
어디를 건드려야 할지.. 데이터를 보드에 마이컴으로 보내야 하는데..
펌웨어쪽은 데이터를 받을 수 있게 되어 있다는데....
통째로 올릴께요. 고수님들 한번 봐주세요.
버튼을 누르면 헥사값으로 0x01이 보내져야 합니다. 부탁 드릴께요.. ㅠ.ㅜ
//---------------------------------------------------------------------------
#include <vcl.h>
#include <stdio.h>
#pragma hdrstop
#include "frmMain.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TFormMain *FormMain;
//---------------------------------------------------------------------------
// 통신 설정 옵션인 TCommParam 을 설정한다
void __fastcall TFormMain::SetCommParam(void)
{
CommParam.PortNo = cbCOM->ItemIndex + 1;
CommParam.BaudRate = rdSpeed->Items->Strings[rdSpeed->ItemIndex].ToInt();
CommParam.ByteSize = 8;
switch(rdStopbit->ItemIndex)
{
case 0:
CommParam.StopBits = STOPBIT_1;
break;
case 1:
CommParam.StopBits = STOPBIT_15;
break;
case 2:
CommParam.StopBits = STOPBIT_2;
break;
}
switch(rdParity->ItemIndex)
{
case 0:
CommParam.Parity = PARITY_NONE;
break;
case 1:
CommParam.Parity = PARITY_EVEN;
break;
case 2:
CommParam.Parity = PARITY_ODD;
break;
}
}
//---------------------------------------------------------------------------
// 수신된 Data의 값들을 16진수로 보여준다
void __fastcall TFormMain::ShowRcvData(int iLen, char *bData)
{
// BYTE TempBuff[5];
BYTE TempBuff[8];
AnsiString RcvData1;
int RcvData2;
int RcvData3;
POINT pt;
GetCursorPos (&pt);
SetCursorPos (bData[2]+pt.x, bData[1]+pt.y);
CaptureImage->Canvas->MoveTo(pt.x-Left-3, pt.y-Top-45);
CaptureImage->Canvas->LineTo(bData[2]+pt.x-Left-3, bData[1]+pt.y-Top-45);
for(int i=0; i<iLen; i++)
{
RcvData2 = bData[1];
RcvData3 = bData[2];
}
ListBox2->Items->Add(RcvData2);
ListBox3->Items->Add(RcvData3);
}
//---------------------------------------------------------------------------
// 쓰레드에 의해 Data가 수신되면 SendMessage에 의해 호출된다. 즉 수신버퍼에
// TMessage의 WParam의 길이만큼 Data가 수신된 후 호출된다
void __fastcall TFormMain::UMEvnRxChar(TMessage &Message)
{
int iLen;
BYTE RcvBuff[4096];
if(RadioGroupRecvType->ItemIndex == 1) return;
iLen = RS232C->ReadData(Message.WParam, RcvBuff);
ShowRcvData(iLen, RcvBuff);
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::ClearEdit(void)
{
EditCode->Text = "";
EditLength->Text = "";
EditData->Text = "";
}
//---------------------------------------------------------------------------
// 송신할 데이타를 TDataType 구조체에 넣어준다
void __fastcall TFormMain::MakeSendData(void)
{
if(TxBuff.Data)
{
delete []TxBuff.Data;
}
ZeroMemory(&TxBuff, sizeof(TDataType));
TxBuff.Code = (BYTE)EditCode->Text.ToInt();
TxBuff.Len = (short int)EditLength->Text.ToInt();
TxBuff.Data = (BYTE *)new BYTE[TxBuff.Len+2];
strcpy(TxBuff.Data, EditData->Text.c_str());
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::FormCreate(TObject *Sender)
{
TxBuff.Data = NULL;
cbCOM->ItemIndex = 0;
EditLength->Text = EditData->Text.Length();
RS232C = new TRS232C();
RS232C->SetHWND(Handle);
btnSetup->Click();
CaptureImage->Canvas->FillRect(ClientRect);
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::FormDestroy(TObject *Sender)
{
if(TxBuff.Data)
{
delete []TxBuff.Data;
}
delete RS232C;
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::btnSetupClick(TObject *Sender)
{
DWORD dwDtr, dwRts;
switch(RadioGroupDtr->ItemIndex)
{
case 0:
dwDtr = DTR_DISABLE;
break;
case 1:
dwDtr = DTR_ENABLE;
break;
case 2:
dwDtr = DTR_HANDSHAKE;
break;
}
switch(RadioGroupDtr->ItemIndex)
{
case 0:
dwRts = RTS_DISABLE;
break;
case 1:
dwRts = RTS_ENABLE;
break;
case 2:
dwRts = RTS_HANDSHAKE;
break;
case 3:
dwRts = RTS_TOGGLE;
break;
}
SetCommParam();
RS232C->SetDtrControl(dwDtr);
RS232C->SetRtsControl(dwRts);
if(!RS232C->Open(&CommParam)) ShowMessage("Open Failed!");
RS232C->ClearTxBuffer();
RS232C->ClearRxBuffer();
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::btnSendClick(TObject *Sender)
{
if(!RS232C->IsOpened())
{
ShowMessage("Open Failed!");
return;
}
//else ShowMessage("Open Success");
RS232C->ClearTxBuffer();
MakeSendData();
if(!RS232C->WriteData(3, (BYTE *)&TxBuff))
{
ShowMessage("Header Send Error");
}
//else ShowMessage(IntToStr(&TxBuff));
if(!RS232C->WriteData(TxBuff.Len, TxBuff.Data))
{
ShowMessage("Body Send Error");
}
unsigned char packet; 이 부분을 추가해서 데이터를 보내려 했는데 안되네요
packet = 0x01;
if (RS232C->WriteData(8, (char*)packet))
{
ShowMessage("Data Send OK");
}
else ShowMessage("Error");
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::EditDataExit(TObject *Sender)
{
EditLength->Text = EditData->Text.Length();
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::FormActivate(TObject *Sender)
{
EditCode->SetFocus();
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::btnRcvClick(TObject *Sender)
{
int iLen;
BYTE bRcvBuff[4096];
iLen = RS232C->ReadData(30, bRcvBuff);
if(!iLen) ShowMessage("TimeOut");
else ShowRcvData(iLen, bRcvBuff);
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::RadioGroupRecvTypeClick(TObject *Sender)
{
btnRcv->Enabled = (RadioGroupRecvType->ItemIndex == 1);
}
//---------------------------------------------------------------------------
__fastcall TFormMain::TFormMain(TComponent* Owner)
: TForm(Owner)
{
int i;
int test_x[10] = {0, 70, 140, 210, 280, 350, 420, 490, 560, 630};
int test_y[10] = {0, 70, 140, 210, 280, 350, 420, 490, 560, 630};
for (i=0; i< 10; i++)
{
pt[i].x = test_x[i];
pt[i].y = test_y[i];
is_est[i] = false;
}
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::imgClearClick(TObject *Sender)
{
CaptureImage->Canvas->Refresh();
CaptureImage->Canvas->FillRect(ClientRect);
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::imgImageSaveClick(TObject *Sender)
{
String file_name = IntToStr(m_numImages + 1) + ".bmp";
CaptureImage->Picture->SaveToFile(file_name);
int index = (m_numImages % 10) + 1;
TImage *img = (TImage *) FindComponent("Image" + IntToStr(index));
img->Picture->LoadFromFile(file_name);
m_numImages++;
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::imgDeleteClick(TObject *Sender)
{
if (m_numImages > 0) {
String file_name = IntToStr(m_numImages) + ".bmp";
DeleteFile(file_name);
m_numImages--;
}
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::imgExitClick(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::imgClearAllClick(TObject *Sender)
{
CaptureImage->Canvas->Refresh();
CaptureImage->Canvas->FillRect(ClientRect);
Image1->Canvas->Refresh();
Image1->Canvas->FillRect(ClientRect);
Image2->Canvas->Refresh();
Image2->Canvas->FillRect(ClientRect);
Image3->Canvas->Refresh();
Image3->Canvas->FillRect(ClientRect);
Image4->Canvas->Refresh();
Image4->Canvas->FillRect(ClientRect);
Image5->Canvas->Refresh();
Image5->Canvas->FillRect(ClientRect);
Image6->Canvas->Refresh();
Image6->Canvas->FillRect(ClientRect);
Image7->Canvas->Refresh();
Image7->Canvas->FillRect(ClientRect);
Image8->Canvas->Refresh();
Image8->Canvas->FillRect(ClientRect);
Image9->Canvas->Refresh();
Image9->Canvas->FillRect(ClientRect);
Image10->Canvas->Refresh();
Image10->Canvas->FillRect(ClientRect);
}
//---------------------------------------------------------------------------
|