form_imelody.cpp
上传用户:gelin96
上传日期:2017-01-08
资源大小:20993k
文件大小:11k
源码类别:

MTK

开发平台:

C++ Builder

  1. /*****************************************************************************
  2. *  Copyright Statement:
  3. *  --------------------
  4. *  This software is protected by Copyright and the information contained
  5. *  herein is confidential. The software may not be copied and the information
  6. *  contained herein may not be used or disclosed except with the written
  7. *  permission of MediaTek Inc. (C) 2005
  8. *
  9. *  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
  10. *  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
  11. *  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
  12. *  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
  13. *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
  14. *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
  15. *  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
  16. *  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
  17. *  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
  18. *  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
  19. *  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
  20. *  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
  21. *
  22. *  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
  23. *  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
  24. *  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
  25. *  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
  26. *  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
  27. *
  28. *  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
  29. *  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
  30. *  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
  31. *  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
  32. *  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
  33. *
  34. *****************************************************************************/
  35. /*****************************************************************************
  36.  *
  37.  * Filename:
  38.  * ---------
  39.  *   form_imelody.cpp
  40.  *
  41.  * Project:
  42.  * --------
  43.  *   Maui META APP
  44.  *
  45.  * Description:
  46.  * ------------
  47.  *   iMelody form source
  48.  *
  49.  * Author:
  50.  * -------
  51.  *  Andy Ueng (mtk00490)
  52.  *
  53.  *============================================================================
  54.  *             HISTORY
  55.  * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
  56.  *------------------------------------------------------------------------------
  57.  * $Revision$
  58.  * $Modtime$
  59.  * $Log$
  60.  * 
  61.  *------------------------------------------------------------------------------
  62.  * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
  63.  *============================================================================
  64.  ****************************************************************************/
  65. //---------------------------------------------------------------------------
  66. #include <vcl.h>
  67. #pragma hdrstop
  68. #include "form_iMelody.h"
  69. #include "meta.h"
  70. #include "META_iMelody_cb.h"
  71. extern void imelody_play_cnf_cb( FT_IMELODY_PLAY_CNF cnf, short token, void *usrData);
  72. extern void imelody_play_over_ind_cb(short token, void *usrData);
  73. extern void imelody_stop_cnf_cb( FT_IMELODY_STOP_CNF cnf, short token, void *usrData);
  74. //---------------------------------------------------------------------------
  75. #pragma package(smart_init)
  76. #pragma resource "*.dfm"
  77. TfrmiMelody *frmiMelody;
  78. // added by Andy Ueng
  79. static int Default_Repeats = 1;
  80. static int Default_SpeakerVolume = 128;
  81. static int Default_BuzzerVolume = 4;
  82. // end of added
  83. void  TfrmiMelody::ShowHintLabel( TControl *sender, char* hint )
  84. {
  85.    TPoint pt0 = this->ClientOrigin;
  86.    TPoint pt1 = sender->ClientOrigin;
  87.    lblHint->Left = (pt1.x-pt0.x);
  88.    lblHint->Top  = (pt1.y-pt0.y)+sender->Height+3;
  89.    lblHint->Caption = hint;
  90.    lblHint->Visible = true;
  91.    HintTimer->Enabled = true;
  92. }
  93. //---------------------------------------------------------------------------
  94. __fastcall TfrmiMelody::TfrmiMelody(TComponent* Owner)
  95.         : TForm(Owner)
  96. {
  97.  memoiMelody->Clear();
  98.  RadioButtonSpeaker->Checked = true;
  99.  RadioButtonBuzzer->Checked = false;
  100.   btnPlayiMelody->Enabled = false;
  101.    btnStopPlayiMelody->Enabled = false;
  102. }
  103. //---------------------------------------------------------------------------
  104. void __fastcall TfrmiMelody::btnStopPlayiMelodyClick(TObject *Sender)
  105. {
  106.  // added by Andy Ueng
  107.   sb_L1sp->Panels->Items[0]->Text = (AnsiString) "  Stop play iMelody";
  108.     sb_L1sp->Panels->Items[1]->Text = "";
  109.    META_Cancel_r (IMELODY_PLAY_token);
  110.     META_RESULT  mr1 = META_iMelody_Stop(imelody_stop_cnf_cb, &IMELODY_STOP_token, NULL);
  111.     if ( mr1 != META_SUCCESS )
  112.     {
  113.        META_result_handler( mr1 );
  114.        return;
  115.     }
  116.  btnPlayiMelody->Enabled = true;
  117.    btnStopPlayiMelody->Enabled = false;
  118.  // end of added
  119. }
  120. //---------------------------------------------------------------------------
  121. void __fastcall TfrmiMelody::btnPlayiMelodyClick(TObject *Sender)
  122. {
  123.  unsigned char repeats;
  124.  unsigned char SpeakerVolume;
  125.  unsigned char BuzzerVolume;
  126.  unsigned int buf_len = 0;
  127.  int i, j;
  128.  unsigned char LineFeed ='n';
  129.  unsigned char SpaceChar = ' ';
  130.  unsigned char NullChar ='';
  131.  char MemoLine[MAX_IMELODY_FILE_SIZE];
  132.  unsigned char iMelodyBuf[MAX_IMELODY_FILE_SIZE];
  133.  AnsiString AnsiBuf;
  134.  bool flag_imelody_song_end=true;
  135.  MemoLine[0]='';
  136.  iMelodyBuf[0]='';
  137.  sb_L1sp->Panels->Items[0]->Text = (AnsiString) "  Play iMelody";
  138.  sb_L1sp->Panels->Items[1]->Text = "";
  139.     if( !IsValidRepeats( edtRepeats->Text, repeats ) )      {  edtRepeatsCheck(edtRepeats);      return;   }
  140.     imelody_play_req.repeats = edtRepeats->Text.ToInt();
  141.     if(RadioButtonSpeaker->Checked)
  142.       {
  143.        if( !IsValidSpeakerVolume( edtSpeakerVolume->Text, SpeakerVolume ) )      {  edtSpeakerVolumeCheck(edtSpeakerVolume);      return;   }
  144.           imelody_play_req.Speaker_Buzzer_volume = edtSpeakerVolume->Text.ToInt();
  145.        imelody_play_req.Output_Inf = IMY_TO_GMI;
  146.       }
  147.     if(RadioButtonBuzzer->Checked)
  148.       {
  149.        if( !IsValidBuzzerVolume( edtBuzzerVolume->Text, BuzzerVolume ) )      {  edtSpeakerVolumeCheck(edtSpeakerVolume);      return;   }
  150.           imelody_play_req.Speaker_Buzzer_volume = edtBuzzerVolume->Text.ToInt();
  151.        imelody_play_req.Output_Inf = IMY_TO_BUZZER;
  152.       }
  153.     for(i=0; i<memoiMelody->Lines->Count;i++)
  154.       {
  155.        for(j=0; j<MAX_IMELODY_FILE_SIZE; j++)
  156.          {
  157.           MemoLine[j] = ' ';
  158.          }
  159.      strcpy(MemoLine, memoiMelody->Lines->Strings[i].c_str());
  160.       strcat(MemoLine, &NullChar);
  161.       if(strncmp(MemoLine, "MELODY:", 7)==0)
  162.         {
  163.          flag_imelody_song_end = false;
  164.         }
  165.       if(strncmp(MemoLine, "END:IMELODY", 11)==0)
  166.         {
  167.          flag_imelody_song_end = true;
  168.         }
  169.       strcat(iMelodyBuf, MemoLine);
  170.       
  171.        buf_len =  buf_len + strlen(MemoLine);
  172.        if(i != memoiMelody->Lines->Count -1 && flag_imelody_song_end == true )
  173.          {
  174.           strcat(iMelodyBuf, "n");
  175.           buf_len++;
  176.          }
  177.       }
  178.     strcat(iMelodyBuf, &NullChar);
  179.    imelody_play_req.buf = iMelodyBuf;
  180.     imelody_play_req.buf_len = buf_len;
  181.     // end of modified
  182.      if ( Sender != NULL )
  183.      {
  184.        dynamic_cast <TControl *>(Sender)->Enabled = false;
  185.      }
  186.    
  187.       META_RESULT mr1 = META_iMelody_Play( imelody_play_req,
  188.                                          imelody_play_cnf_cb,
  189.                                          imelody_play_over_ind_cb,
  190.                                          &IMELODY_PLAY_token,
  191.                                          NULL );
  192.    
  193.     if ( mr1 != META_SUCCESS )
  194.     {
  195.        META_result_handler( mr1 );
  196.        if ( Sender != NULL )
  197.        {
  198.           dynamic_cast <TControl *>(Sender)->Enabled = true;
  199.        }
  200.        return;
  201.     }
  202.    btnPlayiMelody->Enabled = false;
  203.    btnStopPlayiMelody->Enabled = true;
  204. }
  205. //---------------------------------------------------------------------------
  206. void __fastcall TfrmiMelody::btnSaveMemotoFileClick(TObject *Sender)
  207. {
  208.   bool ok;
  209. //  char str[512];
  210.    ok = SaveDialog->Execute();
  211.    if( !ok )
  212.       return;
  213.    else
  214.      {
  215.       memoiMelody->Lines->SaveToFile(SaveDialog->FileName );
  216.      }
  217. }
  218. //---------------------------------------------------------------------------
  219. void __fastcall TfrmiMelody::btnLoadFromFileClick(TObject *Sender)
  220. {
  221.    bool ok;
  222.    
  223.    ok = OpenDialog->Execute();
  224.    if( !ok )
  225.       return;
  226.    else
  227.      {
  228.       memoiMelody->Lines->LoadFromFile(OpenDialog->FileName);
  229.       btnPlayiMelody->Enabled = true;
  230.      }
  231. }
  232. //---------------------------------------------------------------------------
  233. void __fastcall TfrmiMelody::edtRepeatsCheck(TObject *Sender)
  234. {
  235.    int  i;
  236.    int  data;
  237.    AnsiString  text;
  238.    TEdit *edit = (TEdit*)Sender;
  239.    char  hint[256] =
  240.    {   " value shall be 0~255 "
  241.    };
  242.    text = edit->Text;
  243.    if( !IsValidRepeats( text, data ) )
  244.    {
  245.       edit->Text = Default_Repeats;
  246.       ShowHintLabel( edit, hint );
  247.       edit->SetFocus();
  248.       return;
  249.    }
  250. }
  251. //---------------------------------------------------------------------------
  252. void __fastcall TfrmiMelody::HintTimerTimer(TObject *Sender)
  253. {
  254.    HintTimer->Enabled = false;
  255.    lblHint->Visible = false;
  256. }
  257. //---------------------------------------------------------------------------
  258. void __fastcall TfrmiMelody::edtSpeakerVolumeCheck(TObject *Sender)
  259. {
  260.   // added by Andy Ueng
  261.    int  i;
  262.    int  data;
  263.    AnsiString  text;
  264.    TEdit *edit = (TEdit*)Sender;
  265.    char  hint[256] =
  266.    {   " value shall be 0~255 "
  267.    };
  268.    text = edit->Text;
  269.    if( !IsValidSpeakerVolume( text, data ) )
  270.    {
  271.       edit->Text = Default_SpeakerVolume;
  272.       ShowHintLabel( edit, hint );
  273.       edit->SetFocus();
  274.       return;
  275.    }
  276.   // end of added
  277. }
  278. //---------------------------------------------------------------------------
  279. void __fastcall TfrmiMelody::edtBuzzerVolumeCheck(TObject *Sender)
  280. {
  281.  // added by Andy Ueng
  282.    int  i;
  283.    int  data;
  284.    AnsiString  text;
  285.    TEdit *edit = (TEdit*)Sender;
  286.    char  hint[256] =
  287.    {   " value shall be 0~7 "
  288.    };
  289.    text = edit->Text;
  290.    if( !IsValidBuzzerVolume( text, data ) )
  291.    {
  292.       edit->Text = Default_BuzzerVolume;
  293.       ShowHintLabel( edit, hint );
  294.       edit->SetFocus();
  295.       return;
  296.    }
  297.   // end of added
  298. }
  299. //---------------------------------------------------------------------------