C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[44725] 소스를 통째로 올릴께요.. 고수님들 봐주세요.. ㅠ.ㅜ
허접 [khlee0123] 1314 읽음    2006-05-03 22:52
모르겠습니다.
어디를 건드려야 할지..   데이터를 보드에 마이컴으로 보내야 하는데..
펌웨어쪽은 데이터를 받을 수 있게 되어 있다는데....
통째로 올릴께요.  고수님들 한번 봐주세요.
버튼을 누르면 헥사값으로 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);

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

+ -

관련 글 리스트
44725 소스를 통째로 올릴께요.. 고수님들 봐주세요.. ㅠ.ㅜ 허접 1314 2006/05/03
44764     Re:소스를 통째로 올릴께요.. 고수님들 봐주세요.. ㅠ.ㅜ 이용식 954 2006/05/06
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.