📄 devicetask.h
字号:
/*
* description :
* Maker :
* Copyright : (C)2003,SEIKO EPSON Corp. All Rights Reserved.
*/
#ifndef DEVICE_TASK_H
#define DEVICE_TASK_H
#ifdef __cplusplus
extern "C" {
#endif /* cplusplus */
#include "SPRDEF.h"
#include <SampleTask.h>
#include <DeviceTaskAPI.h>
#include "OSCall.h"
//==========================================================================//
//--------------------------------------------------------------------------//
// Necessary for RTOS //
//--------------------------------------------------------------------------//
// Task : DEVICETask //
// Fixed lenth memory block : MPF_ID_MSGDEVICE //
// Mailbox : MBX_ID_DEVICE //
// Event flag : FLG_ID_DEVICE //
// Semaphore : SEMID_DEVICE //
//==========================================================================//
//--------------------------------------------------------------------------
// DEVICE IRQ number
//--------------------------------------------------------------------------
#define DEVICE_CHIP_INT (8) // IRQ 8
//--------------------------------------------------------------------------
// Setting value for DEVICE task
//--------------------------------------------------------------------------
#define TSK_EXINFO_DEVICE (NULL) // Enhancing information
#define TSK_ATTRIBUTE_DEVICE (OS_TA_HLNG) // Attribute
#define TSK_PRIORITY_DEVICE (4) // Priority level
#define TSK_STACK_SIZE_DEVICE (1024) // Stack size
#define TSK_STACK_ADD_DEVICE (0) // Stack address
//--------------------------------------------------------------------------
// Fixed length memory pool for DEVICE message transfer
//--------------------------------------------------------------------------
#define MPF_ATTRIBUTE_DEVICE_MSG (OS_TA_TFIFO) // Attribute
#define MPF_BLOCK_CNT_DEVICE_MSG (8) // Number of block
#define MPF_BLOCK_SIZE_DEVICE_MSG (44 + OS_TMSG_SIZE) // Block size
#define MPF_BLOCK_ADD_DEVICE_MSG (NULL) // Block address
//--------------------------------------------------------------------------
// Fixed length memory pool for DEVICE data transfer
//--------------------------------------------------------------------------
// DATA64
#define MPF_ATTRIBUTE_DEVICE_DATA64 (OS_TA_TFIFO) // Attribute
#define MPF_BLOCK_CNT_DEVICE_DATA64 (2) // Number of block
#define MPF_BLOCK_SIZE_DEVICE_DATA64 (64) // Block size
#define MPF_BLOCK_ADD_DEVICE_DATA64 (NULL) // Block address
// DATA128
#define MPF_ATTRIBUTE_DEVICE_DATA128 (OS_TA_TFIFO) // Attribute
#define MPF_BLOCK_CNT_DEVICE_DATA128 (2) // Number of block
#define MPF_BLOCK_SIZE_DEVICE_DATA128 (128) // Block size
#define MPF_BLOCK_ADD_DEVICE_DATA128 (NULL) // Block address
// DATA256
#define MPF_ATTRIBUTE_DEVICE_DATA256 (OS_TA_TFIFO) // Attribute
#define MPF_BLOCK_CNT_DEVICE_DATA256 (2) // Number of block
#define MPF_BLOCK_SIZE_DEVICE_DATA256 (256) // Block size
#define MPF_BLOCK_ADD_DEVICE_DATA256 (NULL) // Block address
// DATA512
#define MPF_ATTRIBUTE_DEVICE_DATA512 (OS_TA_TFIFO) // Attribute
#define MPF_BLOCK_CNT_DEVICE_DATA512 (1) // Number of block
#define MPF_BLOCK_SIZE_DEVICE_DATA512 (512) // Block size
#define MPF_BLOCK_ADD_DEVICE_DATA512 (NULL) // Block address
//--------------------------------------------------------------------------
// DEVICE Mailbox
//--------------------------------------------------------------------------
#define MBX_ATTRIBUTE_DEVICE (OS_TA_TFIFO) // Attribute
#define MBX_MAX_PRI_DEVICE (1) // Priority's maximum value
#define MBX_PRI_ADD_DEVICE (NULL) // Address of message queue header
#define MSGDEVICE_DATASIZE (32) // Size of DEVICE message data
#define MPF_DATA64_SIZE (64) // Data area(64 bytes)
#define MPF_DATA128_SIZE (128) // Data area(128 bytes)
#define MPF_DATA256_SIZE (256) // Data area(256 bytes)
#define MPF_DATA512_SIZE (512) // Data area(512 bytes)
// Declaration for Mailbox structure
typedef struct _DEVICE_MSG{ /* Mailbox for DEVICE task */
MSGHEAD msgHead; /* Message header */
UCHAR msgData[MSGDEVICE_DATASIZE]; /* Message data */
} DEVICE_MSG, *PDEVICE_MSG;
//--------------------------------------------------------------------------
// DEVICE: Event flag
//--------------------------------------------------------------------------
#define FLG_ATTRIBUTE_DEVICE (OS_TA_TFIFO) // Attribute
#define FLG_PATTERN_DEVICE (0) // Bit pattern's initial value
// Event flag bit definition
#define FLG_EVENT_FORCE_DEVICE 0x80000000 // (bit31) Force processing event
#define FLG_EVENT_INT_DEVICE 0x08000000 // (bit27) Interrupt processing event
#define FLG_EVENT_MSG_DEVICE 0x00000001 // (bit0 ) Message processing event
/* Synchronous flag for API to Task */
#define FLG_EVENT_START_USB_DEVICE 0x00010000 // (bit16) Event for process of USB operation's start
#define FLG_EVENT_STOP_USB_DEVICE 0x00020000 // (bit17) Event for process of USB operation's stop
#define FLG_EVENT_ATTACH_USB_DEVICE 0x00040000 // (bit18) Event for requesting the USB attach
#define FLG_EVENT_DETACH_USB_DEVICE 0x00080000 // (bit19) Event for requesting the USB detach
#define FLG_EVENT_EXECMD_DEVICE 0x00100000 // (bit20) Event for executing the command
#define FLG_EVENT_IDEHRST_DEVICE 0x00200000 // (bit21) IDE HRST event
#define FLG_EVENT_USB_XFER_DEVICE 0x00400000 // (bit22) Request for USB PIO transfer's start
#define FLG_EVENT_STRG_STS_DEVICE 0x00800000 // (bit23) Event for request of USER STRG command status's transfer
#define FLG_EVENT_DMA_START_DEVICE 0x01000000 // Request for data transfer's start
#define FLG_EVENT_DMA_ABORT_DEVICE 0x02000000 // DMA transfer abort
// Pattern of waiting the event flag
#define FLG_WAIT_PTN_DEVICE ( FLG_EVENT_FORCE_DEVICE | FLG_EVENT_INT_DEVICE | FLG_EVENT_MSG_DEVICE | FLG_EVENT_START_USB_DEVICE |\
FLG_EVENT_STOP_USB_DEVICE | FLG_EVENT_EXECMD_DEVICE | FLG_EVENT_ATTACH_USB_DEVICE | FLG_EVENT_DETACH_USB_DEVICE |\
FLG_EVENT_IDEHRST_DEVICE | FLG_EVENT_USB_XFER_DEVICE | FLG_EVENT_STRG_STS_DEVICE | FLG_EVENT_DMA_START_DEVICE |\
FLG_EVENT_DMA_ABORT_DEVICE )
//--------------------------------------------------------------------------
// Semaphore of synchronization for DEVICE Module 佁 Task
//--------------------------------------------------------------------------
#define SEM_ATTRIBUTE_DEVICE (OS_TA_TFIFO) // Semaphore's attribute
#define SEM_CNT_DEVICE (0) // Initial value
#define SEM_MAX_CNT_DEVICE (1) // Maximum number
//==========================================================================//
// //
// Define declaration //
// //
//==========================================================================//
//==========================================================================//
// //
// Structure declaration //
// //
//==========================================================================//
// User Strg Command
#define CMD_SIZE 0xFF // Number of maximum command code
typedef struct _USER_STRG_CMD {
ULONG length;
UCHAR code[CMD_SIZE];
} USER_STRG_CMD, *PUSER_STRG_CMD;
//
typedef struct _USER_XFER_INFO {
ULONG size; // Number of transfer
UCHAR* pBuffer; //
UCHAR mode; // Transfer mode
UCHAR dir; // Transfer direction
UCHAR dmaCh; // DMA ch
} USER_XFER_INFO, *PUSER_XFER_INFO;
//
#define MAX_LUN_SIZE 2 // Number of maximum LUN supported
// user command state
#define DEVICE_CMD_IDLE_STATE 0 // State of idle
#define DEVICE_CMD_RCV_STATE 1 // State of command reception
#define DEVICE_CMD_DATA_STATE 3 // State of data transfer
#define DEVICE_CMD_STS_STATE 4 // State of status
typedef struct _USER_CMD_INFO {
USER_XFER_INFO xferInfo;
USER_STRG_CMD cmd[MAX_LUN_SIZE];
UCHAR status;
UCHAR state;
BOOL bCpuXferCmp;
BOOL bUsbXferCmp;
} USER_CMD_INFO, *PUSER_CMD_INFO;
// Information of USB operation mode
typedef struct _USB_INFO {
UCHAR bManAttach; // Attach manual mode
UCHAR bManPwrCtrl; // Power saving control mode
UCHAR suspenLV; // Suspend level
UCHAR vbus; // VBUS state
UCHAR bEnable; // USB connect's enable/disable
USER_CMD_INFO userCmdInfo; // Used for UserCmd process
} USB_INFO, *PUSB_INFO;
// Information of PLAY operation mode
typedef struct _PLAY_XFER_INFO {
UCHAR mode; // Transfer mode
UCHAR dir; // Transfer direction
ULONG reqSize; // Required transfer number
ULONG totalXferSize; // Number actually transferred
ULONG size; // Transfer number
UCHAR* buffer; // Buffer which is gotten in PIO transfer
ULONG fifoRWSize; // Number written in FIFO in PIO transfer
UCHAR dmaCh; // DMA ch
} PLAY_XFER_INFO, *PPLAY_XFER_INFO;
// Information of PLAY operation mode
typedef struct _PLAY_INFO {
UCHAR execMode; // PLAY operation mode
UCHAR cmdType; // Command type cmdType
UCHAR cmdStatus; // Command execution's status
UCHAR lun; // Specified LUN number
UCHAR ideCmd[12]; // ATA command
PLAY_XFER_INFO xferInfo; // Transfer information
UCHAR bIdeCmdCmp; // IDE command end
UCHAR bCpuXferCmp; // CPU data transfer end
UCHAR ideXferMode; // IDE to DEVICE data transfer mode
} PLAY_INFO, *PPLAY_INFO;
// DEVICE information
typedef struct _DEVICE_MODULE_INFO {
UCHAR state; // DEVICE task's state
USB_INFO usbInfo; // USB information
UCHAR pwrState; // Electric power mode
PLAY_INFO playInfo; // PLAY mode information
DEVICE_TASK_PFN_CALLBACK_PROC pfnMsgProc; // Callback address to other module
} DEVICE_MODULE_INFO, *PDEVICE_MODULE_INFO;
//==========================================================================//
// //
// Variable declaration //
// //
//==========================================================================//
//==========================================================================//
// //
// Function declaration //
// //
//==========================================================================//
extern void DEVICETask( void );
#ifdef __cplusplus
}
#endif /* cplusplus */
#endif /* DEVICE_TASK_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -