Header
Product Comparison: USB I2C | USB SPI | USB GPIO
  • My Account
  • Shopping Cart
  • Products
  • My Account
  • About
  • Products
  • PC-I2C/SPI/GPIO Adapters
  • Main Page
  • Classes
  • Files
  • File List
  • File Members

D:/_sources/u2c_12/ControlPanel/SpiConfigDlg.cpp

Go to the documentation of this file.
00001 // Copyright (C)2006 Diolan ( http://www.diolan.com )
00002 //
00003 // This program is free software; you can redistribute it and/or
00004 // modify it under the terms of the GNU General Public License
00005 // as published by the Free Software Foundation
00006 //
00007 // This program is distributed in the hope that it will be useful,
00008 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00009 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00010 // GNU General Public License for more details.
00011 
00012 
00013 #include "stdafx.h"
00014 #include "ControlPanel.h"
00015 #include "SpiConfigDlg.h"
00016 #include ".\spiconfigdlg.h"
00017 #include "../common/I2cBridge.h"
00018 #include "../common/u2c_common_func.h"
00019 
00020 bool ConfigureSpi(HANDLE hDevice, BOOL* pUseSS, ULONG* pSSPin, BOOL* pActiveHigh)
00021 {
00022         U2C_RESULT res = U2C_SUCCESS;
00023         BYTE Cpol, Cpha;
00024         BYTE Freq;
00025         try
00026         {
00027                 if (U2C_SUCCESS != (res = U2C_SpiGetConfig(hDevice, &Cpol, &Cpha)))
00028                         throw res;
00029                 if (U2C_SUCCESS != (res = U2C_SpiGetFreq(hDevice, &Freq)))
00030                         throw res;
00031                 CSpiConfigDlg dlg(hDevice, Cpol, Cpha, Freq, *pUseSS, *pSSPin, *pActiveHigh);
00032                 dlg.DoModal();
00033                 *pUseSS = dlg.m_UseSS;
00034                 *pSSPin = dlg.m_SSPin;
00035                 *pActiveHigh = dlg.m_ActiveHigh;
00036                 return true;
00037         }
00038         catch (U2C_RESULT res)
00039         {
00040                 switch (res)
00041                 {
00042                 case U2C_NOT_IMPLEMENTED:
00043                         {
00044                                 ShowNotImplementedMessage();
00045                                 return false;
00046                         }
00047                 case U2C_HARDWARE_NOT_FOUND:
00048                         {
00049                                 MessageBox(NULL, "U2C device not connected", NULL, MB_OK|MB_ICONEXCLAMATION);
00050                                 return false;
00051                         }
00052                 default:
00053                         {
00054                                 CString str;
00055                                 str.Format("SPI configuration failed, error - %d", res);
00056                                 MessageBox(NULL, str, NULL, MB_OK|MB_ICONEXCLAMATION);
00057                                 return false;
00058                         }
00059                 }
00060         }
00061 }
00062 
00063 // CSpiConfigDlg dialog
00064 IMPLEMENT_DYNAMIC(CSpiConfigDlg, CDialog)
00065 CSpiConfigDlg::CSpiConfigDlg(CWnd* pParent /*=NULL*/)
00066         : CDialog(CSpiConfigDlg::IDD, pParent)
00067         , m_hDevice(INVALID_HANDLE_VALUE)
00068         , m_Cpol(0), m_Cpha(0)
00069         , m_Freq(0)
00070 {
00071 }
00072 
00073 CSpiConfigDlg::CSpiConfigDlg(HANDLE hDevice, BYTE Cpol, BYTE Cpha, BYTE Freq, BOOL UseSS, ULONG SSPin, BOOL ActiveHigh)
00074         : CDialog(CSpiConfigDlg::IDD, NULL)
00075         , m_hDevice(hDevice)
00076         , m_Cpol(Cpol), m_Cpha(Cpha)
00077         , m_Freq(Freq)
00078         , m_UseSS(UseSS)
00079         , m_SSPin(SSPin)
00080         , m_ActiveHigh(ActiveHigh)
00081 {
00082 }
00083 
00084 
00085 CSpiConfigDlg::~CSpiConfigDlg()
00086 {
00087 }
00088 
00089 CSpiConfigDlg::SSpiFreq CSpiConfigDlg::sm_Freq[] =
00090 {
00091         {"200 kHz", U2C_SPI_FREQ_200KHZ},
00092         {"100 kHz", U2C_SPI_FREQ_100KHZ},
00093         {"83 kHz", U2C_SPI_FREQ_83KHZ},
00094         {"71 kHz", U2C_SPI_FREQ_71KHZ},
00095         {"62 kHz", U2C_SPI_FREQ_62KHZ},
00096         {"50 kHz", U2C_SPI_FREQ_50KHZ},
00097         {"25 kHz", U2C_SPI_FREQ_25KHZ},
00098         {"10 kHz", U2C_SPI_FREQ_10KHZ},
00099         {"5 kHz", U2C_SPI_FREQ_5KHZ},
00100         {"2 kHz", U2C_SPI_FREQ_2KHZ},
00101 };
00102 
00103 
00104 
00105 void CSpiConfigDlg::DoDataExchange(CDataExchange* pDX)
00106 {
00107         CDialog::DoDataExchange(pDX);
00108         DDX_Control(pDX, IDC_SPI_FREQ, m_SpiFreq);
00109 }
00110 
00111 
00112 BEGIN_MESSAGE_MAP(CSpiConfigDlg, CDialog)
00113         ON_BN_CLICKED(IDC_APPLY, OnBnClickedApply)
00114         ON_COMMAND(IDC_CPOL_0, OnChangeSetting)
00115         ON_COMMAND(IDC_CPOL_1, OnChangeSetting)
00116         ON_COMMAND(IDC_CPHA_0, OnChangeSetting)
00117         ON_COMMAND(IDC_CPHA_1, OnChangeSetting)
00118         ON_CBN_SELCHANGE(IDC_SPI_FREQ, OnChangeSetting)
00119         ON_CBN_SELCHANGE(IDC_SS_PIN, OnChangeSetting)
00120         ON_COMMAND(IDC_SS_ACTIVE_HIGH, OnChangeSetting)
00121         ON_BN_CLICKED(IDOK, OnBnClickedOk)
00122         ON_BN_CLICKED(IDC_SS, OnBnClickedSs)
00123 END_MESSAGE_MAP()
00124 
00125 
00126 // CSpiConfigDlg message handlers
00127 
00128 
00129 BOOL CSpiConfigDlg::OnInitDialog()
00130 {
00131         CDialog::OnInitDialog();
00132         ((CButton*)GetDlgItem(IDC_CPOL_0))->SetCheck(m_Cpol?BST_UNCHECKED:BST_CHECKED);
00133         ((CButton*)GetDlgItem(IDC_CPOL_1))->SetCheck(m_Cpol?BST_CHECKED:BST_UNCHECKED);
00134         ((CButton*)GetDlgItem(IDC_CPHA_0))->SetCheck(m_Cpha?BST_UNCHECKED:BST_CHECKED);
00135         ((CButton*)GetDlgItem(IDC_CPHA_1))->SetCheck(m_Cpha?BST_CHECKED:BST_UNCHECKED);
00136         ((CButton*)GetDlgItem(IDC_SS))->SetCheck(m_UseSS?BST_CHECKED:BST_UNCHECKED);
00137         ((CButton*)GetDlgItem(IDC_SS_ACTIVE_HIGH))->SetCheck(m_ActiveHigh?BST_CHECKED:BST_UNCHECKED);
00138 
00139 
00140         int i;
00141         int FreqNum = sizeof(sm_Freq) / sizeof(SSpiFreq);
00142         for(i = 0; i < FreqNum; i++)
00143         {
00144                 m_SpiFreq.AddString(sm_Freq[i].m_Text);
00145         }
00146         for(i = 0; i < FreqNum; i++)
00147         {
00148                 if (m_Freq <= sm_Freq[i].m_Value)
00149                 {
00150                         m_SpiFreq.SetCurSel(i);
00151                         break;
00152                 }
00153         }
00154 
00155         // Fill Slave Select Pin combo box
00156         CComboBox* pSSPin = (CComboBox*)GetDlgItem(IDC_SS_PIN);
00157         pSSPin->ResetContent();
00158         for(char port = 'A'; port <= 'C'; port++)
00159         {
00160                 for(char pin = '0'; pin <= '7'; pin++)
00161                 {
00162                         char name[4];
00163                         name[0]='P'; name[1]=port; name[2]=pin; name[3]=0;
00164                         pSSPin->AddString(name);
00165                 }
00166         }
00167         pSSPin->SetCurSel(m_SSPin); 
00168 
00169         if(m_UseSS)
00170         { 
00171                 GetDlgItem(IDC_SS_PIN)->EnableWindow(TRUE);
00172                 GetDlgItem(IDC_SS_ACTIVE_HIGH)->EnableWindow(TRUE);
00173         }
00174         else
00175         {
00176                 GetDlgItem(IDC_SS_PIN)->EnableWindow(FALSE);
00177                 GetDlgItem(IDC_SS_ACTIVE_HIGH)->EnableWindow(FALSE);
00178         }
00179 
00180 
00181         return TRUE;  // return TRUE unless you set the focus to a control
00182 }
00183 bool CSpiConfigDlg::Apply()
00184 {
00185         if (((CButton*)GetDlgItem(IDC_CPOL_0))->GetCheck() == BST_CHECKED)
00186                 m_Cpol = 0;
00187         else
00188                 m_Cpol = 1;
00189 
00190         if (((CButton*)GetDlgItem(IDC_CPHA_0))->GetCheck() == BST_CHECKED)
00191                 m_Cpha = 0;
00192         else
00193                 m_Cpha = 1;
00194         m_Freq = sm_Freq[m_SpiFreq.GetCurSel()].m_Value;
00195 
00196 
00197         if(((CButton*)GetDlgItem(IDC_SS))->GetCheck() == BST_CHECKED)
00198                 m_UseSS = TRUE;
00199         else
00200                 m_UseSS = FALSE;
00201 
00202         if(((CButton*)GetDlgItem(IDC_SS_ACTIVE_HIGH))->GetCheck() == BST_CHECKED)
00203                 m_ActiveHigh = TRUE;
00204         else
00205                 m_ActiveHigh = FALSE;
00206 
00207         CComboBox* pSSPin = (CComboBox*)GetDlgItem(IDC_SS_PIN);
00208         if (CB_ERR != pSSPin->GetCurSel())
00209         {
00210                 m_SSPin = (ULONG)pSSPin->GetCurSel();
00211         }
00212 
00213         U2C_RESULT res = U2C_SUCCESS;
00214         try
00215         {
00216                 if (U2C_SUCCESS != (res = U2C_SpiSetConfig(m_hDevice, m_Cpol, m_Cpha)))
00217                         throw res;
00218                 if (U2C_SUCCESS != (res = U2C_SpiSetFreq(m_hDevice, m_Freq)))
00219                         throw res;
00220                 if(m_UseSS)
00221                 {
00222                         if (U2C_SUCCESS != (res = U2C_SpiConfigSS(m_hDevice, m_SSPin, m_ActiveHigh)))
00223                                 throw res;
00224                 }
00225         }
00226         catch (U2C_RESULT res)
00227         {
00228                 switch (res)
00229                 {
00230                 case U2C_NOT_IMPLEMENTED:
00231                         {
00232                                 ShowNotImplementedMessage();
00233                                 return false;
00234                         }
00235                 case U2C_HARDWARE_NOT_FOUND:
00236                         {
00237                                 MessageBox("U2C device not connected", NULL, MB_OK|MB_ICONEXCLAMATION);
00238                                 return false;
00239                         }
00240                 default:
00241                         {
00242                                 CString str;
00243                                 str.Format("SPI configuration failed, error - %d", res);
00244                                 MessageBox(str, NULL, MB_OK|MB_ICONEXCLAMATION);
00245                                 return false;
00246                         }
00247                 }
00248         }
00249         return true;
00250 }
00251 
00252 void CSpiConfigDlg::OnBnClickedApply()
00253 {
00254         if(Apply())
00255                 GetDlgItem(IDC_APPLY)->EnableWindow(FALSE);
00256 }
00257 
00258 void CSpiConfigDlg::OnChangeSetting()
00259 {
00260         GetDlgItem(IDC_APPLY)->EnableWindow(TRUE);
00261 }
00262 void CSpiConfigDlg::OnBnClickedOk()
00263 {
00264         if(Apply())
00265                 OnOK();
00266 }
00267 
00268 void CSpiConfigDlg::OnBnClickedSs()
00269 {
00270         if(((CButton*)GetDlgItem(IDC_SS))->GetCheck() == BST_CHECKED)
00271         { 
00272                 GetDlgItem(IDC_SS_PIN)->EnableWindow(TRUE);
00273                 GetDlgItem(IDC_SS_ACTIVE_HIGH)->EnableWindow(TRUE);
00274         }
00275         else
00276         {
00277                 GetDlgItem(IDC_SS_PIN)->EnableWindow(FALSE);
00278                 GetDlgItem(IDC_SS_ACTIVE_HIGH)->EnableWindow(FALSE);
00279         }
00280         OnChangeSetting();
00281 }
  • Products
  • PC-I2C/SPI/GPIO Adapters
  • Comparison
  • PC-I2C/SPI/GPIO Adapter DLN-1
  • USB-I2C/SPI/GPIO Adapter DLN-2
  • Multiprotocol Master DLN-4M
  • Multiprotocol Slave DLN-4S
  • Downloads
  • Software
  • Documentation
  • SW Tools & Examples
  • Development Boards
  • Open Source Projects
  • Discontinued Products
  • API Documentation
  • Downloads
  • SW Tools and Examples
footer top footer bottom
© Copyright Diolan 2006-2012