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

📄 pciscc.c

📁 高速同步串口芯片PEB20534的驱动程序
💻 C
📖 第 1 页 / 共 2 页
字号:
#define  STRICT#include <windows.h>#pragma hdrstop#include <winioctl.h>
#include <windowsx.h>
#include <stdio.h>
#include <stdlib.h>

#include "flexdrv.h"#include "drv32.h"#include "pciscc.h"
#include "pciscc_ioctl.h"
#include "resource.h"

#define	DriverName	"PCISCCNT.SYS"
#define	DriverVer	"0.2b"
#define	ServiceName	"PCISCC"
#define	DeviceName	"\\\\.\\PCISCC"
/* global variables */
pciscc_state	state;
pciscc_config	config[4];

/* driver callback function list */__declspec(dllexport) u32 flexnet_driver(int func, int chan, int arg1, int arg2){	switch (func)	{		case drv_interfaceversion:			return DRIVER_INTERFACE_VERSION;
		case drv_ident:
			return (u32)l1_ident((byte)(chan - state.base_chan));		case drv_version:
			return (u32)l1_version((byte)(chan - state.base_chan));		case drv_config:
			return config_device((byte)(chan), (HWND)arg1, (byte)(arg2 - state.base_chan));		case drv_confinfo:
			return (u32)config_info((byte)(chan - state.base_chan));
		case drv_init_device:
			state.base_chan = chan;			return init_device((HKEY)arg2);		case drv_get_ch_cnt:
			return l1_get_ch_cnt();		case drv_exit:
			l1_exit((HKEY)arg1);
			break;		case drv_ch_active:
			return l1_ch_active((byte)(chan - state.base_chan));		case drv_init_kanal:
			return l1_init_kanal((byte)(chan - state.base_chan), (u16)arg1, (u16)arg2);		case drv_stat:
			return (u32)l1_stat((byte)(chan - state.base_chan), (byte)arg1);		case drv_ch_state:
			return l1_ch_state((byte)(chan - state.base_chan));		case drv_scale:
			return config[chan - state.base_chan].scale;
		case drv_tx_calib:
			l1_tx_calib((byte)(chan - state.base_chan), (byte)arg1);
			break;		case drv_set_led:
			break;		case drv_rx_frame:
			return (u32)l1_rx_frame();
		case drv_get_framebuf:
			return (u32)l1_get_framebuf((byte)(chan - state.base_chan));
		case drv_tx_frame:
			return l1_tx_frame();		case drv_get_txdelay:
			return config[chan - state.base_chan].txdelay / 10;		case drv_get_mode:
			return config[chan - state.base_chan].mode;		case drv_get_baud:
			return config[chan - state.base_chan].baud / 100;		case drv_set_txdelay:
			config[chan - state.base_chan].txdelay = arg1 * 10;
			break;
		default:			return 0;	}
	return 0;}BOOL WINAPI DllMain (HANDLE hModule, DWORD dwFunction, LPVOID lpNot){	switch(dwFunction)	{		case DLL_PROCESS_ATTACH:		case DLL_THREAD_ATTACH:
			state.hInst = hModule;
			break;		case DLL_PROCESS_DETACH:		case DLL_THREAD_DETACH:			break;	}	return 1;}
static BOOL CALLBACK EdParmDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	char buf[32];
	int i,idx;
	int value;

	switch (uMsg)
	{
		case WM_INITDIALOG:
			idx = 0;
			for (i = 1200; i <= 1228800; i *= 2)
			{
				sprintf(buf,"%d",i);
				SendMessage(GetDlgItem(hDlg,IDC_BAUDRATE_0),CB_ADDSTRING,0,(LPARAM)buf);
				SendMessage(GetDlgItem(hDlg,IDC_BAUDRATE_1),CB_ADDSTRING,0,(LPARAM)buf);
				SendMessage(GetDlgItem(hDlg,IDC_BAUDRATE_2),CB_ADDSTRING,0,(LPARAM)buf);
				SendMessage(GetDlgItem(hDlg,IDC_BAUDRATE_3),CB_ADDSTRING,0,(LPARAM)buf);
				if (config[0].baud == i)
					ComboBox_SetCurSel(GetDlgItem(hDlg,IDC_BAUDRATE_0),idx);
				if (config[1].baud == i)
					ComboBox_SetCurSel(GetDlgItem(hDlg,IDC_BAUDRATE_1),idx);
				if (config[2].baud == i)
					ComboBox_SetCurSel(GetDlgItem(hDlg,IDC_BAUDRATE_2),idx);
				if (config[3].baud == i)
					ComboBox_SetCurSel(GetDlgItem(hDlg,IDC_BAUDRATE_3),idx);
				idx++;
			}

			sprintf(buf,"%d",config[0].txdelay);
			SetDlgItemText(hDlg,IDC_TXDELAY_0,buf);
			sprintf(buf, "%d", config[1].txdelay);
			SetDlgItemText(hDlg,IDC_TXDELAY_1,buf);
			sprintf(buf,"%d",config[2].txdelay);
			SetDlgItemText(hDlg,IDC_TXDELAY_2,buf);
			sprintf(buf,"%d",config[3].txdelay);
			SetDlgItemText(hDlg,IDC_TXDELAY_3,buf);

			CheckDlgButton(hDlg,IDC_DUPLEX_0,config[0].mode & MODE_d ? BST_CHECKED : BST_UNCHECKED);
			CheckDlgButton(hDlg,IDC_DUPLEX_1,config[1].mode & MODE_d ? BST_CHECKED : BST_UNCHECKED);
			CheckDlgButton(hDlg,IDC_DUPLEX_2,config[2].mode & MODE_d ? BST_CHECKED : BST_UNCHECKED);
			CheckDlgButton(hDlg,IDC_DUPLEX_3,config[3].mode & MODE_d ? BST_CHECKED : BST_UNCHECKED);
			CheckDlgButton(hDlg,IDC_RXCLOCK_0,config[0].mode & MODE_r ? BST_CHECKED : BST_UNCHECKED);
			CheckDlgButton(hDlg,IDC_RXCLOCK_1,config[1].mode & MODE_r ? BST_CHECKED : BST_UNCHECKED);
			CheckDlgButton(hDlg,IDC_RXCLOCK_2,config[2].mode & MODE_r ? BST_CHECKED : BST_UNCHECKED);
			CheckDlgButton(hDlg,IDC_RXCLOCK_3,config[3].mode & MODE_r ? BST_CHECKED : BST_UNCHECKED);
			CheckDlgButton(hDlg,IDC_TXCLOCK_0,config[0].mode & MODE_t ? BST_CHECKED : BST_UNCHECKED);
			CheckDlgButton(hDlg,IDC_TXCLOCK_1,config[1].mode & MODE_t ? BST_CHECKED : BST_UNCHECKED);
			CheckDlgButton(hDlg,IDC_TXCLOCK_2,config[2].mode & MODE_t ? BST_CHECKED : BST_UNCHECKED);
			CheckDlgButton(hDlg,IDC_TXCLOCK_3,config[3].mode & MODE_t ? BST_CHECKED : BST_UNCHECKED);
			CheckDlgButton(hDlg,IDC_NRZCODE_0,config[0].mode & MODE_z ? BST_CHECKED : BST_UNCHECKED);
			CheckDlgButton(hDlg,IDC_NRZCODE_1,config[1].mode & MODE_z ? BST_CHECKED : BST_UNCHECKED);
			CheckDlgButton(hDlg,IDC_NRZCODE_2,config[2].mode & MODE_z ? BST_CHECKED : BST_UNCHECKED);
			CheckDlgButton(hDlg,IDC_NRZCODE_3,config[3].mode & MODE_z ? BST_CHECKED : BST_UNCHECKED);
			break;
                
        case WM_COMMAND:
			switch (GET_WM_COMMAND_ID(wParam, lParam))
			{
				case IDC_TXD_UP_0:
					GetDlgItemText(hDlg,IDC_TXDELAY_0,buf,sizeof(buf));
					value = strtol(buf,NULL,0);
					if (value < 2550)
						value += 10;
					sprintf(buf,"%d",value);
					SetDlgItemText(hDlg,IDC_TXDELAY_0,buf);
					break;

				case IDC_TXD_DOWN_0:
					GetDlgItemText(hDlg,IDC_TXDELAY_0,buf,sizeof(buf));
					value = strtol(buf,NULL,0);
					if (value >= 10)
						value -= 10;
					sprintf(buf,"%d",value);
					SetDlgItemText(hDlg,IDC_TXDELAY_0,buf);
					break;

				case IDC_TXD_UP_1:
					GetDlgItemText(hDlg,IDC_TXDELAY_1,buf,sizeof(buf));
					value = strtol(buf,NULL,0);
					if (value < 2550)
						value += 10;
					sprintf(buf,"%d",value);
					SetDlgItemText(hDlg,IDC_TXDELAY_1,buf);
					break;

				case IDC_TXD_DOWN_1:
					GetDlgItemText(hDlg,IDC_TXDELAY_1,buf,sizeof(buf));
					value = strtol(buf,NULL,0);
					if (value >= 10)
						value -= 10;
					sprintf(buf,"%d",value);
					SetDlgItemText(hDlg,IDC_TXDELAY_1,buf);
					break;

				case IDC_TXD_UP_2:
					GetDlgItemText(hDlg,IDC_TXDELAY_2,buf,sizeof(buf));
					value = strtol(buf,NULL,0);
					if (value < 2550)
						value += 10;
					sprintf(buf,"%d",value);
					SetDlgItemText(hDlg,IDC_TXDELAY_2,buf);
					break;

				case IDC_TXD_DOWN_2:
					GetDlgItemText(hDlg,IDC_TXDELAY_2,buf,sizeof(buf));
					value = strtol(buf,NULL,0);
					if (value >= 10)
						value -= 10;
					sprintf(buf,"%d",value);
					SetDlgItemText(hDlg,IDC_TXDELAY_2,buf);
					break;

				case IDC_TXD_UP_3:
					GetDlgItemText(hDlg,IDC_TXDELAY_3,buf,sizeof(buf));
					value = strtol(buf,NULL,0);
					if (value < 2550)
						value += 10;
					sprintf(buf,"%d",value);
					SetDlgItemText(hDlg,IDC_TXDELAY_3,buf);
					break;

				case IDC_TXD_DOWN_3:
					GetDlgItemText(hDlg,IDC_TXDELAY_3,buf,sizeof(buf));
					value = strtol(buf,NULL,0);
					if (value >= 10)
						value -= 10;
					sprintf(buf,"%d",value);
					SetDlgItemText(hDlg,IDC_TXDELAY_3,buf);
					break;

				case IDCANCEL:
					EndDialog(hDlg, 0);
					break;

				case IDOK:
					config[0].mode = 0;
					config[0].mode |= (IsDlgButtonChecked(hDlg, IDC_DUPLEX_0) == BST_CHECKED) ? MODE_d : 0;
					config[0].mode |= (IsDlgButtonChecked(hDlg, IDC_NRZCODE_0) == BST_CHECKED) ? MODE_z : 0;
					config[0].mode |= (IsDlgButtonChecked(hDlg, IDC_RXCLOCK_0) == BST_CHECKED) ? MODE_r : 0;
					config[0].mode |= (IsDlgButtonChecked(hDlg, IDC_TXCLOCK_0) == BST_CHECKED) ? MODE_t : 0;
					config[1].mode = 0;
					config[1].mode |= (IsDlgButtonChecked(hDlg, IDC_DUPLEX_1) == BST_CHECKED) ? MODE_d : 0;
					config[1].mode |= (IsDlgButtonChecked(hDlg, IDC_NRZCODE_1) == BST_CHECKED) ? MODE_z : 0;
					config[1].mode |= (IsDlgButtonChecked(hDlg, IDC_RXCLOCK_1) == BST_CHECKED) ? MODE_r : 0;
					config[1].mode |= (IsDlgButtonChecked(hDlg, IDC_TXCLOCK_1) == BST_CHECKED) ? MODE_t : 0;
					config[2].mode = 0;
					config[2].mode |= (IsDlgButtonChecked(hDlg, IDC_DUPLEX_2) == BST_CHECKED) ? MODE_d : 0;
					config[2].mode |= (IsDlgButtonChecked(hDlg, IDC_NRZCODE_2) == BST_CHECKED) ? MODE_z : 0;
					config[2].mode |= (IsDlgButtonChecked(hDlg, IDC_RXCLOCK_2) == BST_CHECKED) ? MODE_r : 0;
					config[2].mode |= (IsDlgButtonChecked(hDlg, IDC_TXCLOCK_2) == BST_CHECKED) ? MODE_t : 0;
					config[3].mode = 0;
					config[3].mode |= (IsDlgButtonChecked(hDlg, IDC_DUPLEX_3) == BST_CHECKED) ? MODE_d : 0;
					config[3].mode |= (IsDlgButtonChecked(hDlg, IDC_NRZCODE_3) == BST_CHECKED) ? MODE_z : 0;
					config[3].mode |= (IsDlgButtonChecked(hDlg, IDC_RXCLOCK_3) == BST_CHECKED) ? MODE_r : 0;
					config[3].mode |= (IsDlgButtonChecked(hDlg, IDC_TXCLOCK_3) == BST_CHECKED) ? MODE_t : 0;

					GetDlgItemText(hDlg,IDC_TXDELAY_0,buf,sizeof(buf));
					config[0].txdelay = strtol(buf,NULL,0);
					GetDlgItemText(hDlg,IDC_TXDELAY_1,buf,sizeof(buf));
					config[1].txdelay = strtol(buf,NULL,0);
					GetDlgItemText(hDlg,IDC_TXDELAY_2,buf,sizeof(buf));
					config[2].txdelay = strtol(buf,NULL,0);
					GetDlgItemText(hDlg,IDC_TXDELAY_3,buf,sizeof(buf));
					config[3].txdelay = strtol(buf,NULL,0);

					config[0].baud = (1 << ComboBox_GetCurSel(GetDlgItem(hDlg,IDC_BAUDRATE_0))) * 1200;
					config[1].baud = (1 << ComboBox_GetCurSel(GetDlgItem(hDlg,IDC_BAUDRATE_1))) * 1200;
					config[2].baud = (1 << ComboBox_GetCurSel(GetDlgItem(hDlg,IDC_BAUDRATE_2))) * 1200;
					config[3].baud = (1 << ComboBox_GetCurSel(GetDlgItem(hDlg,IDC_BAUDRATE_3))) * 1200;

					EndDialog(hDlg, 1);
					break;
			}
			break;
	
		default:
			return FALSE;
	}
	return TRUE;
}

int system_isnt4(void)
{
	OSVERSIONINFO OsVer;

	OsVer.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
	if (!GetVersionEx((OSVERSIONINFO *)&OsVer))
		return 0;
	if (OsVer.dwPlatformId != VER_PLATFORM_WIN32_NT)
		return 0;
	if (OsVer.dwMajorVersion != 4)
		return 0;
	return 1;
}

int flex_home(char *Path, int Len)
{
	HKEY	hKeyFlex;
	long	Status;

	Status = RegOpenKeyEx(	HKEY_LOCAL_MACHINE,TEXT("SOFTWARE\\FlexNet"),0L,
							KEY_READ,&hKeyFlex);
	if (Status != ERROR_SUCCESS)
		return 0;
	Status = RegQueryValueEx(hKeyFlex,TEXT("Home"),NULL,NULL,Path,&Len);
	RegCloseKey(hKeyFlex);
	if (Status != ERROR_SUCCESS)
		return 0;
	return strlen(Path);
}

int create_service(char *Name, char *Path)
{
	SC_HANDLE		scm;
	SC_HANDLE		scs;
	int				ret = 0;

	scm = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
	if (!scm)

⌨️ 快捷键说明

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