📄 led.c
字号:
#include <windows.h>
#include <nkintr.h>
#include <devload.h>
#include "xsc1.h"
#include "gpio.h"
#define IOCTL_LED_ON 0
#define IOCTL_LED_OFF 1
volatile GPIO_REGS *v_pGPIOReg = NULL;
BOOL bOpened = FALSE;
PVOID VirtualAllocCopy(unsigned size,char *str,PVOID pVirtualAddress);
DWORD LED_Init(DWORD Identifier)
{
if (v_pGPIOReg == NULL)
v_pGPIOReg = (volatile GPIO_REGS *)VirtualAllocCopy(0x400,
(char *)TEXT("LED: GPIO_BASE_U_VIRTUAL"),
(PVOID)GPIO_BASE_U_VIRTUAL);
if (v_pGPIOReg == NULL)
return FALSE;
v_pGPIOReg->GPDR_x |= GPIO_21;
v_pGPIOReg->GAFR1_x &= 0xFF3FFFFF;
v_pGPIOReg->GPSR_x |= GPIO_21;
return TRUE;
}
BOOL LED_Deinit(DWORD hDeviceContext)
{
if (v_pGPIOReg)
{
VirtualFree((void *)v_pGPIOReg, 0x400, MEM_RELEASE);
v_pGPIOReg = NULL;
}
return TRUE;
}
DWORD LED_Open(DWORD hDeviceContext, DWORD AccessCode, DWORD ShareMode)
{
if (bOpened)
return FALSE;
else
{
bOpened = TRUE;
return TRUE;
}
}
BOOL LED_Close(DWORD hOpenContext)
{
if (bOpened)
{
bOpened = FALSE;
return TRUE;
}
else
return FALSE;
}
BOOL LED_IOControl(
DWORD hOpenContext,
DWORD dwCode, PBYTE pBufIn,
DWORD dwLenIn, PBYTE pBufOut, DWORD dwLenOut,
PDWORD pdwActualOut)
{
switch (dwCode)
{
case IOCTL_LED_ON:
v_pGPIOReg->GPCR_x |= GPIO_21;
return TRUE;
case IOCTL_LED_OFF:
v_pGPIOReg->GPSR_x |= GPIO_21;
return TRUE;
default:
return FALSE;
}
}
DWORD LED_Read(DWORD hOpenContext, PBYTE pBuffer, DWORD Count) {return 0;}
DWORD LED_Write(DWORD hOpenContext, PBYTE pBuffer, DWORD Count) {return 0;}
DWORD LED_Seek(DWORD hOpenContext, LONG Position, DWORD Type) {return (ULONG)-1;}
BOOL LED_PowerDown(DWORD hDeviceContext) {return TRUE;}
BOOL LED_PowerUp(DWORD hDeviceContext) {return TRUE;}
BOOL DllEntry(HINSTANCE hinstDll, DWORD dwReason, LPVOID lpReserved)
{
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -