⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 proppage.c

📁 一个linux下rs485驱动程序的源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
/********************************************************************/
BOOL APIENTRY PropertyPageProvider(LPVOID Info, LPFNADDPROPSHEETPAGE AddFunc, LPARAM Lparam)
{
  PSP_PROPSHEETPAGE_REQUEST pprPropPageRequest;
  PROPSHEETPAGE             psp, psp_about;
  HPROPSHEETPAGE            hpsp, hpsp_about;
  PPORT_PARAMS              params = NULL; 

  pprPropPageRequest = (PSP_PROPSHEETPAGE_REQUEST) Info;
  if (pprPropPageRequest->PageRequested == SPPSR_ENUM_ADV_DEVICE_PROPERTIES) {
    params = (PPORT_PARAMS) LocalAlloc(LPTR, sizeof(PORT_PARAMS));
    if (!params) {
       MessageBox( GetFocus(), ERROR_MEMORY_STRING, applet_name, MB_OK | MB_ICONHAND | MB_SYSTEMMODAL);
       return FALSE;
    }
    InitPortParams( params, pprPropPageRequest->DeviceInfoSet, pprPropPageRequest->DeviceInfoData);
//    if ( IsMyDevice(pprPropPageRequest->DeviceInfoSet, pprPropPageRequest->DeviceInfoData) == MY_DEVICE) {
      hpsp = InitSettingsPage(&psp, params);
      if (!hpsp) {
        return FALSE;
      }    
      if ( !(*AddFunc)( hpsp, Lparam)) {
        DestroyPropertySheetPage(hpsp);
        return FALSE;
      }
//    }
  }
  return TRUE;
}



/********************************************************************/
BOOL FillSettingCommDlg( HWND hDlg, IN PPORT_PARAMS params)
{

#define DWSIZE sizeof(DWORD)

//  SHORT shIndex;
  TCHAR str[256]; //, hlp[20];
  DWORD size, i = 0; //, j;
  LONG ret; //, idx;
//  BOOL b;
//  HANDLE hCom;
  HKEY hDeviceKey;
  HWND item;

  // defualt values
  params->PortSettings.DefBaudRate = 19200;
  params->PortSettings.DefDebug = 0;
  params->PortSettings.DefAddress = 2;
  params->PortSettings.DefProMode = 0;
 
  hDeviceKey = SetupDiOpenDevRegKey( params->DeviceInfoSet, params->DeviceInfoData, DICS_FLAG_GLOBAL, 0, DIREG_DEV, KEY_READ);
  if ( hDeviceKey == INVALID_HANDLE_VALUE) {
    goto FillCommDlgError;
  } else {
    size = DWSIZE;
    ret = RegQueryValueEx( hDeviceKey, ULANBAUDRATE, NULL, NULL, (PBYTE) &i, &size);
    if ( ret == ERROR_SUCCESS && size==DWSIZE) {
      params->PortSettings.DefBaudRate = i;
    }
    size = DWSIZE;
    ret = RegQueryValueEx( hDeviceKey, ULANMYADDRESS, NULL, NULL, (PBYTE) &i, &size);
    if ( ret == ERROR_SUCCESS && size==DWSIZE) {
      params->PortSettings.DefAddress = i;
    }
    size = DWSIZE;
    ret = RegQueryValueEx( hDeviceKey, ULANDEBUG, NULL, NULL, (PBYTE) &i, &size);
    if ( ret == ERROR_SUCCESS && size==DWSIZE) {
      params->PortSettings.DefDebug = i;
    }
    size = DWSIZE;
    ret = RegQueryValueEx( hDeviceKey, ULANPROMODE, NULL, NULL, (PBYTE) &i, &size);
    if ( ret == ERROR_SUCCESS && size==DWSIZE) {
      params->PortSettings.DefProMode = i;
    }
    RegCloseKey( hDeviceKey);
  }

  i = 0; item = GetDlgItem( hDlg, PP_ULAN_BAUD);
  ret = 0; // def.select
  while( baud_tbl[i]) {
    wsprintf( str, L"%d", baud_tbl[i]);
    SendMessage( item, CB_ADDSTRING, 0, (LPARAM)str);
    if ( params->PortSettings.DefBaudRate == baud_tbl[i]) 
      ret = i;
	  i++;
  }
  SendMessage( item, CB_SETCURSEL, ret, 0);
  params->PortSettings.BaudRate = baud_tbl[ret];

  item = GetDlgItem( hDlg, PP_ULAN_ADDR);
  wsprintf( str, L"%d", params->PortSettings.DefAddress);
  SetWindowText( item, str);
  SendMessage( item, EM_LIMITTEXT, 3, 0); // limit text length
  params->PortSettings.Address = params->PortSettings.DefAddress;

  i = 0; item = GetDlgItem( hDlg, PP_ULAN_DEBUG);
  ret = 0; // def.select
  while( debug_tbl[i]) {
    SendMessage( item, CB_ADDSTRING, 0, (LPARAM)debug_tbl[i]);
	  i++;
  }
  SendMessage( item, CB_SETCURSEL, params->PortSettings.DefDebug, 0);
  params->PortSettings.Debug = params->PortSettings.DefDebug;

  
  CheckDlgButton( hDlg, PP_ULAN_PMODE, ( params->PortSettings.DefProMode) ? BST_CHECKED : BST_UNCHECKED);
  params->PortSettings.ProMode = params->PortSettings.DefProMode;

  EnableWindow( GetDlgItem( hDlg, IDC_RESTORE), FALSE);
//  ShowWindow( GetDlgItem( hDlg, IDC_BOK), SW_HIDE);
  return TRUE;
 FillCommDlgError:
  SetVisibleAndEnable( hDlg, FALSE, FALSE);
  return FALSE;
} /* FillCommDlg */


/********************************************************************/
void RestorePortSettings( HWND hDlg, PPORT_PARAMS params)
{
  TCHAR str[20];
  int ret;

  // Baudrate
  wsprintf( str, L"%d", params->PortSettings.DefBaudRate);
  ret = SendDlgItemMessage( hDlg, PP_ULAN_BAUD, CB_FINDSTRING, -1, (LPARAM) str);
  SendDlgItemMessage( hDlg, PP_ULAN_BAUD, CB_SETCURSEL, ret, 0L);
  params->PortSettings.BaudRate = params->PortSettings.DefBaudRate;
  // Address
  wsprintf( str, L"%d", params->PortSettings.DefAddress);
  SetWindowText( GetDlgItem( hDlg, PP_ULAN_ADDR), str);
  params->PortSettings.Address = params->PortSettings.DefAddress;
  // Debug
  SendDlgItemMessage( hDlg, PP_ULAN_DEBUG, CB_SETCURSEL, params->PortSettings.DefDebug, 0L);
  params->PortSettings.Debug = params->PortSettings.DefDebug;
  // ProMode
  CheckDlgButton( hDlg, PP_ULAN_PMODE, ( params->PortSettings.DefProMode) ? BST_CHECKED : BST_UNCHECKED);
  params->PortSettings.ProMode = params->PortSettings.DefProMode;
}

/********************************************************************/
BOOL SetPortSettings( IN HWND hDlg, IN PPORT_PARAMS params)
{
  TCHAR  str[20];
  DWORD  size, val;
  HKEY   hDeviceKey = NULL;
  LONG   ret;
/*
wsprintf( str,L"D:0x%X,%d,%d,%d -> N:0x%X,%d,%d,%d", params->PortSettings.DefBaudRate, params->PortSettings.DefDataBits,
          params->PortSettings.DefParity,params->PortSettings.DefStopBits,params->PortSettings.BaudRate,
          params->PortSettings.DataBits,params->PortSettings.Parity,params->PortSettings.StopBits);
MessageBox( hDlg, str,L"TEST - parm",MB_OK);
*/
  // quick return - no change
  if (( params->PortSettings.DefBaudRate == params->PortSettings.BaudRate) &&
      ( params->PortSettings.DefAddress  == params->PortSettings.Address) &&
      ( params->PortSettings.DefDebug    == params->PortSettings.Debug) &&
      ( params->PortSettings.DefProMode  == params->PortSettings.ProMode)) {
    return FALSE;
  }

  hDeviceKey = SetupDiOpenDevRegKey( params->DeviceInfoSet, params->DeviceInfoData, DICS_FLAG_GLOBAL, 0, DIREG_DEV, KEY_WRITE);
  if ( hDeviceKey == INVALID_HANDLE_VALUE) {
    goto SetPortSettingsError;
  }
  // BaudRate
//  if ( params->PortSettings.DefBaudRate != params->PortSettings.BaudRate) {
    GetWindowText( GetDlgItem( hDlg, PP_ULAN_BAUD), str, 20);
    val = myatoi( str);
    ret = RegSetValueEx( hDeviceKey, ULANBAUDRATE, 0, REG_DWORD, (BYTE *) &val, sizeof(val));
    if ( ret != ERROR_SUCCESS) goto SetPortSettingsError;      
//  }
  // Address
//  if ( params->PortSettings.DefAddress != params->PortSettings.Address) {
    GetWindowText( GetDlgItem( hDlg, PP_ULAN_ADDR), str, 20);
    val = myatoi( str);
    ret = RegSetValueEx( hDeviceKey, ULANMYADDRESS, 0, REG_DWORD, (BYTE *) &val, sizeof(val));
    if ( ret != ERROR_SUCCESS) goto SetPortSettingsError;      
//  }
  // Debug
//  if ( params->PortSettings.DefDebug != params->PortSettings.Debug) {
    val = SendDlgItemMessage( hDlg, PP_ULAN_DEBUG, CB_GETCURSEL, 0 ,0);
    ret = RegSetValueEx( hDeviceKey, ULANDEBUG, 0, REG_DWORD, (BYTE *) &val, sizeof(val));
    if ( ret != ERROR_SUCCESS) goto SetPortSettingsError;      
//  }
  // ProMode
//  if ( params->PortSettings.DefProMode != params->PortSettings.ProMode) {
    if( IsDlgButtonChecked( hDlg, PP_ULAN_PMODE) == BST_CHECKED)
      val = 1;
    else
      val = 0;
    ret = RegSetValueEx( hDeviceKey, ULANPROMODE, 0, REG_DWORD, (BYTE *) &val, sizeof(val));
    if ( ret != ERROR_SUCCESS) goto SetPortSettingsError;      
//  }

  RegCloseKey( hDeviceKey);
  return TRUE;
 SetPortSettingsError:
  if ( hDeviceKey) RegCloseKey( hDeviceKey);
  return FALSE;
}

/********************************************************************/
VOID SetVisibleAndEnable( HWND hDlg, BOOL chng, BOOL ok) {
  if ( !chng) {
    EnableWindow( GetDlgItem( hDlg, PP_ULAN_BAUD), FALSE);
    EnableWindow( GetDlgItem( hDlg, PP_ULAN_ADDR), FALSE);
    EnableWindow( GetDlgItem( hDlg, PP_ULAN_DEBUG), FALSE);
    EnableWindow( GetDlgItem( hDlg, PP_ULAN_PMODE), FALSE);

    EnableWindow( GetDlgItem( hDlg, IDC_LBAUD), FALSE);
    EnableWindow( GetDlgItem( hDlg, IDC_LADDR), FALSE);
    EnableWindow( GetDlgItem( hDlg, IDC_LDEBUG), FALSE);

    EnableWindow( GetDlgItem( hDlg, IDC_RESTORE), FALSE);
    EnableWindow( GetDlgItem(  hDlg, IDC_GSET), FALSE);
  }
//  if ( !ok) {
//    ShowWindow( GetDlgItem( hDlg, IDC_BOK), SW_HIDE);
//  }
}



/********************************************************************/
int myatoi(LPTSTR pszInt)
{
  int retval = 0;
  if ( pszInt) {
    while ( *pszInt) {
      if (( *pszInt >= TEXT('0')) && ( *pszInt <= TEXT('9'))) {
        retval = retval * 10 + (int)(*pszInt-TEXT('0'));
      }
      pszInt++;
    }
  }
  return (retval);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -