mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2025-08-20 01:58:32 -04:00
made a copy
This commit is contained in:
parent
bb7dc7c37f
commit
e20f132f48
2632 changed files with 751681 additions and 0 deletions
247
20080212/Demo/WizNET_DEMO_TERN_186/include/SOCKET.H
Normal file
247
20080212/Demo/WizNET_DEMO_TERN_186/include/SOCKET.H
Normal file
|
@ -0,0 +1,247 @@
|
|||
/*
|
||||
********************************************************************************
|
||||
* TERN, Inc.
|
||||
* (c) Copyright 2005, http://www.tern.com
|
||||
*
|
||||
* - Derived based on development version provided by Wiznet.
|
||||
*
|
||||
* Filename : socket.h
|
||||
* Programmer(s):
|
||||
* Created : 2002/06/20
|
||||
* Modified :
|
||||
* 2002/09/27 : - Renaming
|
||||
* INT_STATUS --> INT_REG
|
||||
* STATUS(i) --> INT_STATUS(i)
|
||||
* C_STATUS(i) --> SOCK_STATUS(i)
|
||||
* 2003/11/06 : Ported for use with TERN controller. Note all byte access is at even addresses
|
||||
* 2005/10/8 : Modified constants for easier initialization.
|
||||
*
|
||||
* Description : Header file of W3100A for TERN embedded controller
|
||||
********************************************************************************
|
||||
*/
|
||||
#ifndef __SOCKET_H__
|
||||
#define __SOCKET_H__
|
||||
|
||||
#include "types.h"
|
||||
#include "i2chip_hw.h"
|
||||
#include <dos.h>
|
||||
|
||||
/*******************************************************************/
|
||||
#define MAX_SOCK_NUM 4 // Concurrent maxmium number of socket
|
||||
|
||||
#define I2CHIP_C0_CR 0x00
|
||||
#define I2CHIP_C1_CR 0x01
|
||||
#define I2CHIP_C2_CR 0x02
|
||||
#define I2CHIP_C3_CR 0x03
|
||||
#define I2CHIP_C0_ISR 0x04
|
||||
#define I2CHIP_C1_ISR 0x05
|
||||
#define I2CHIP_C2_ISR 0x06
|
||||
#define I2CHIP_C3_ISR 0x07
|
||||
#define I2CHIP_IR 0x08
|
||||
#define I2CHIP_IMR 0x09
|
||||
|
||||
#define I2CHIP_IDM_OR 0x0C
|
||||
#define I2CHIP_IDM_AR0 0x0D
|
||||
#define I2CHIP_IDM_AR1 0x0E
|
||||
#define I2CHIP_IDM_DR 0x0F
|
||||
#define I2CHIP_C0_RW_PR 0x10
|
||||
#define I2CHIP_C0_RR_PR 0x14
|
||||
#define I2CHIP_C0_TA_PR 0x18
|
||||
#define I2CHIP_C1_RW_PR 0x1C
|
||||
#define I2CHIP_C1_RR_PR 0x20
|
||||
#define I2CHIP_C1_TA_PR 0x24
|
||||
#define I2CHIP_C2_RW_PR 0x28
|
||||
#define I2CHIP_C2_RR_PR 0x2C
|
||||
#define I2CHIP_C2_TA_PR 0x30
|
||||
#define I2CHIP_C3_RW_PR 0x34
|
||||
#define I2CHIP_C3_RR_PR 0x38
|
||||
#define I2CHIP_C3_TA_PR 0x3C
|
||||
#define I2CHIP_C0_TW_PR 0x40
|
||||
#define I2CHIP_C0_TR_PR 0x44
|
||||
#define I2CHIP_C1_TW_PR 0x4C
|
||||
#define I2CHIP_C1_TR_PR 0x50
|
||||
#define I2CHIP_C2_TW_PR 0x58
|
||||
#define I2CHIP_C2_TR_PR 0x5C
|
||||
#define I2CHIP_C3_TW_PR 0x64
|
||||
#define I2CHIP_C3_TR_PR 0x68
|
||||
#define I2CHIP_GAR 0x80
|
||||
#define I2CHIP_SMR 0x84
|
||||
#define I2CHIP_SHAR 0x88
|
||||
#define I2CHIP_SIPR 0x8E
|
||||
#define I2CHIP_IRTR 0x92
|
||||
#define I2CHIP_RCR 0x94
|
||||
#define I2CHIP_RMSR 0x95
|
||||
#define I2CHIP_TMSR 0x96
|
||||
#define I2CHIP_C0_SSR 0xA0
|
||||
#define I2CHIP_C0_SOPR 0xA1
|
||||
#define I2CHIP_C0_DIR 0xA8
|
||||
#define I2CHIP_CO_DPR 0xAC
|
||||
#define I2CHIP_C0_SPR 0xAE
|
||||
#define I2CHIP_C0_IPR 0xB0
|
||||
#define I2CHIP_C0_TOSR 0xB1
|
||||
#define I2CHIP_C0_MSSR 0xB2
|
||||
|
||||
#define I2CHIP_C1_SSR 0xB8
|
||||
#define I2CHIP_C1_SOPR 0xB9
|
||||
#define I2CHIP_C1_DIR 0xC0
|
||||
#define I2CHIP_C1_DPR 0xC4
|
||||
#define I2CHIP_C1_SPR 0xC6
|
||||
#define I2CHIP_C1_IPR 0xC8
|
||||
#define I2CHIP_C1_TOSR 0xC9
|
||||
#define I2CHIP_C1_MSSR 0xCA
|
||||
|
||||
#define I2CHIP_C2_SSR 0xD0
|
||||
#define I2CHIP_C2_SOPR 0xD1
|
||||
#define I2CHIP_C2_DIR 0xD8
|
||||
#define I2CHIP_C2_DPR 0xDC
|
||||
#define I2CHIP_C2_SPR 0xDE
|
||||
#define I2CHIP_C2_IPR 0xE0
|
||||
#define I2CHIP_C2_TOSR 0xE1
|
||||
#define I2CHIP_C2_MSSR 0xE2
|
||||
|
||||
#define I2CHIP_C3_SSR 0xE8
|
||||
#define I2CHIP_C3_SOPR 0xE9
|
||||
#define I2CHIP_C3_DIR 0xF0
|
||||
#define I2CHIP_C3_DPR 0xF4
|
||||
#define I2CHIP_C3_SPR 0xF6
|
||||
#define I2CHIP_C3_IPR 0xF8
|
||||
#define I2CHIP_C3_TOSR 0xF9
|
||||
#define I2CHIP_C3_MSSR 0xFA
|
||||
|
||||
#define MAX_SEGMENT_SIZE 1460 // Maximum TCP transmission packet size
|
||||
#define MAX_BUF_SIZE1 0
|
||||
|
||||
|
||||
/* SOCKET OPTION(Settting OPT_PROTOCOL REG.) */
|
||||
#define SOCKOPT_BROADCAST 0x80 // Transmission, Reception of broadcasting data
|
||||
#define SOCKOPT_NDTIMEOUT 0x40 // Setting timeout
|
||||
#define SOCKOPT_NDACK 0x20 // Setting No Delayed Ack(TCP)
|
||||
#define SOCKOPT_SWS 0x10 // Setting Silly Window Syndrome(TCP)
|
||||
|
||||
/* OPTION(Setting OPT_PROTOCOL REG.) for MAC LAYER RAW MODE */
|
||||
#define MACLOPT_RXERR 0x80 // Setting reception of error packet
|
||||
#define MACLOPT_BROADCAST 0x40 // Setting reception of broadcast packet
|
||||
#define MACLOPT_PROMISC 0x20 // Setting reception of promiscuous packet
|
||||
|
||||
/* Distinguish TCP / UDP / IP RAW / MAC RAW (Setting OPT_PROTOCOL REG.) */
|
||||
#define SOCK_CLOSEDM 0x00 // unused socket
|
||||
#define SOCK_STREAM 0x01 // TCP
|
||||
#define SOCK_DGRAM 0x02 // UDP
|
||||
#define SOCK_IPL_RAW 0x03 // IP LAYER RAW SOCK
|
||||
#define SOCK_MACL_RAW 0x04 // MAC LAYER RAW SOCK
|
||||
|
||||
/* Setting IP PROTOCOL */
|
||||
#define IPPROTO_IP 0 // dummy for IP
|
||||
#define IPPROTO_ICMP 1 // control message protocol
|
||||
#define IPPROTO_IGMP 2 // internet group management protocol
|
||||
#define IPPROTO_GGP 3 // gateway^2 (deprecated)
|
||||
#define IPPROTO_TCP 6 // tcp
|
||||
#define IPPROTO_PUP 12 // pup
|
||||
#define IPPROTO_UDP 17 // user datagram protocol
|
||||
#define IPPROTO_IDP 22 // xns idp
|
||||
#define IPPROTO_ND 77 // UNOFFICIAL net disk proto
|
||||
#define IPPROTO_RAW 255 // raw IP packet
|
||||
|
||||
/* Select parameter to use */
|
||||
#define SEL_CONTROL 0 //Confirm socket status
|
||||
#define SEL_SEND 1 // Confirm Tx free buffer size
|
||||
#define SEL_RECV 2 // Confirm Rx data size
|
||||
|
||||
/* Command variables */
|
||||
#define CSYS_INIT 0x01 // To set up network information(mac address, gateway address,
|
||||
// subnet mask, source ip)
|
||||
#define CSOCK_INIT 0x02 // To initialize socket
|
||||
#define CCONNECT 0x04 // To establish connection as tcp client mode
|
||||
#define CLISTEN 0x08 // To wait for connection request as tcp server mode
|
||||
#define CCLOSE 0x10 // To terminate connection
|
||||
#define CSEND 0x20 // To send data
|
||||
#define CRECV 0x40 // To receive data
|
||||
#define CSW_RESET 0x80 // To do software reset
|
||||
|
||||
#define CSET_MEMORY_TEST 0x80 // To set the memory test bit
|
||||
#define CRESET_MEMORY_TEST 0x00 // To clear the memory test bit
|
||||
|
||||
/* Status Variables */
|
||||
#define SSYS_INIT_OK 0x01 // Completion of CSYS_INIT command
|
||||
#define SSOCK_INIT_OK 0x02 // Completion of CSOCK_INIT command
|
||||
#define SESTABLISHED 0x04 // Completion of connection setup
|
||||
#define SCLOSED 0x08 // Completion of CCLOSED command
|
||||
#define SSEND_OK 0x20 // Completion of sending data
|
||||
#define SRECV_OK 0x40 // Completion of receiving data
|
||||
|
||||
/* Socket Status Vabiables */
|
||||
#define SOCK_CLOSED 0x00 // Status of connection closed
|
||||
#define SOCK_ARP 0x01 // Status of ARP
|
||||
#define SOCK_LISTEN 0x02 // Status of waiting for TCP connection setup
|
||||
#define SOCK_SYNSENT 0x03 // Status of setting up TCP connection
|
||||
#define SOCK_SYNSENT_ACK 0x04 // Status of setting up TCP connection
|
||||
#define SOCK_SYNRECV 0x05 // Status of setting up TCP connection
|
||||
#define SOCK_ESTABLISHED 0x06 // Status of TCP connection established
|
||||
#define SOCK_CLOSE_WAIT 0x07 // Status of closing TCP connection
|
||||
#define SOCK_LAST_ACK 0x08 // Status of closing TCP connection
|
||||
#define SOCK_FIN_WAIT1 0x09 // Status of closing TCP connection
|
||||
#define SOCK_FIN_WAIT2 0x0A // Status of closing TCP connection
|
||||
#define SOCK_CLOSING 0x0B // Status of closing TCP connection
|
||||
#define SOCK_TIME_WAIT 0x0C // Status of closing TCP connection
|
||||
#define SOCK_RESET 0x0D // Status of closing TCP connection
|
||||
#define SOCK_INIT 0x0E // Status of socket initialization
|
||||
#define SOCK_UDP 0x0F // Status of UDP
|
||||
#define SOCK_RAW 0x10 // Status of IP RAW
|
||||
|
||||
/* TERN Behavior Parameters */
|
||||
#define TERN_TDMA_THRES 10000 // Use DMA for transmits if data > thres bytes.
|
||||
#define TERN_RDMA_THRES 10000 // Use DMA for receives if data > thres bytes.
|
||||
// High thres value effectively disables DMA
|
||||
|
||||
void far interrupt in4_isr_i2chip(void);
|
||||
|
||||
//void ISR_ESTABLISHED(SOCKET s);
|
||||
//void ISR_CLOSED(SOCKET s);
|
||||
//void ISR_RX(SOCKET s);
|
||||
|
||||
void initW3100A(void);
|
||||
void sysinit(u_char sbufsize, u_char rbufsize);
|
||||
void setsubmask(u_char * addr);
|
||||
void setgateway(u_char * addr);
|
||||
void setMACAddr(u_char * addr);
|
||||
void setIP(u_char * addr);
|
||||
|
||||
char socket(SOCKET s, u_char protocol, u_int port, u_char flag);
|
||||
|
||||
void setIPprotocol(SOCKET s, u_char ipprotocol);
|
||||
|
||||
void setINTMask(u_char mask);
|
||||
void settimeout(u_char * val);
|
||||
void setTOS(SOCKET s, u_char tos);
|
||||
|
||||
void GetDestAddr(SOCKET s, u_char* addr);
|
||||
|
||||
//void setbroadcast(SOCKET s);
|
||||
|
||||
char connect(SOCKET s, u_char far * addr, u_int port);
|
||||
char NBconnect(SOCKET s, u_char far * addr, u_int port);
|
||||
|
||||
//char listen(SOCKET s, u_char far * addr, u_int far * port);
|
||||
char NBlisten(SOCKET s);
|
||||
|
||||
void initseqnum(SOCKET s);
|
||||
|
||||
int send(SOCKET s, u_char far * buf, u_int len);
|
||||
int send_in(SOCKET s, u_char far * buf, u_int len);
|
||||
int recv(SOCKET s, u_char far * buf, u_int len);
|
||||
|
||||
u_int sendto(SOCKET , u_char far * buf, u_int, u_char * addr, u_int);
|
||||
u_int sendto_in(SOCKET , u_char far *, u_int);
|
||||
u_int recvfrom(SOCKET , u_char far * buf, u_int, u_char * addr, u_int *);
|
||||
|
||||
u_int read_data(SOCKET s, u_int src_offset, u_char far * dst, u_int len);
|
||||
u_int write_data(SOCKET s, u_char far * src, u_int dst_offset, u_int len);
|
||||
|
||||
void close(SOCKET s);
|
||||
char reset_sock(SOCKET s);
|
||||
|
||||
u_int select(SOCKET s, u_char func);
|
||||
void recv_clear(SOCKET s);
|
||||
u_char tx_empty(SOCKET s);
|
||||
|
||||
#endif // __SOCKET_H__
|
64
20080212/Demo/WizNET_DEMO_TERN_186/include/TYPES.H
Normal file
64
20080212/Demo/WizNET_DEMO_TERN_186/include/TYPES.H
Normal file
|
@ -0,0 +1,64 @@
|
|||
/*
|
||||
********************************************************************************
|
||||
* Wiznet.
|
||||
* 5F Simmtech Bldg., 228-3, Nonhyun-dong, Kangnam-gu,
|
||||
* Seoul, Korea
|
||||
*
|
||||
* (c) Copyright 2002, Wiznet, Seoul, Korea
|
||||
*
|
||||
* Filename : types.h
|
||||
* Programmer(s):
|
||||
* Created : 2002/01/
|
||||
* Modified :
|
||||
* Description : Define of data type.
|
||||
********************************************************************************
|
||||
*/
|
||||
|
||||
#ifndef _TYPES_H_
|
||||
#define _TYPES_H_
|
||||
|
||||
#ifndef NULL
|
||||
# define NULL ((void *) 0)
|
||||
#endif
|
||||
|
||||
typedef enum { false, true } bool;
|
||||
|
||||
#ifndef _SIZE_T
|
||||
#define _SIZE_T
|
||||
typedef unsigned int size_t;
|
||||
#endif
|
||||
|
||||
typedef unsigned char BYTE; // 8-bit value
|
||||
typedef unsigned char UCHAR; // 8-bit value
|
||||
typedef int INT; // 16-bit value
|
||||
typedef unsigned int UINT; // 16-bit value
|
||||
typedef unsigned short USHORT; // 16-bit value
|
||||
typedef unsigned short WORD; // 16-bit value
|
||||
typedef unsigned long ULONG; // 32-bit value
|
||||
typedef unsigned long DWORD; // 32-bit value
|
||||
|
||||
// bsd
|
||||
typedef unsigned char u_char; // 8-bit value
|
||||
typedef unsigned short u_short; // 16-bit value
|
||||
typedef unsigned int u_int; // 16-bit value
|
||||
typedef unsigned long u_long; // 32-bit value
|
||||
|
||||
typedef UCHAR SOCKET;
|
||||
|
||||
|
||||
/* Type for treating 4 byte variables with byte by byte */
|
||||
typedef union un_l2cval
|
||||
{
|
||||
u_long lVal;
|
||||
u_char cVal[4];
|
||||
};
|
||||
|
||||
/* Type for treating 2 byte variables with byte by byte */
|
||||
typedef union un_i2cval
|
||||
{
|
||||
u_int iVal;
|
||||
u_char cVal[2];
|
||||
};
|
||||
|
||||
#endif // _TYPES_H_
|
||||
|
264
20080212/Demo/WizNET_DEMO_TERN_186/include/ae.H
Normal file
264
20080212/Demo/WizNET_DEMO_TERN_186/include/ae.H
Normal file
|
@ -0,0 +1,264 @@
|
|||
#ifndef _AE_H_
|
||||
#define _AE_H_
|
||||
|
||||
/*********************************************************************
|
||||
ae.h headers for AM188ES 6-20-99 7-16-98
|
||||
*********************************************************************/
|
||||
/* Data structure for Serial operation */
|
||||
|
||||
typedef struct {
|
||||
unsigned char ready; /* TRUE when ready */
|
||||
unsigned char baud;
|
||||
unsigned int mode;
|
||||
unsigned char iflag; /* interrupt status */
|
||||
unsigned char* in_buf; /* Input buffer */
|
||||
unsigned int in_tail; /* Input buffer TAIL ptr */
|
||||
unsigned int in_head; /* Input buffer HEAD ptr */
|
||||
unsigned int in_size; /* Input buffer size */
|
||||
unsigned int in_crcnt; /* Input <CR> count */
|
||||
unsigned char in_mt; /* Input buffer FLAG */
|
||||
unsigned char in_full; /* input buffer full */
|
||||
unsigned char* out_buf; /* Output buffer */
|
||||
unsigned int out_tail; /* Output buffer TAIL ptr */
|
||||
unsigned int out_head; /* Output buffer HEAD ptr */
|
||||
unsigned int out_size; /* Output buffer size */
|
||||
unsigned char out_full; /* Output buffer FLAG */
|
||||
unsigned char out_mt; /* Output buffer MT */
|
||||
unsigned char tmso; // transmit macro service operation
|
||||
unsigned char rts;
|
||||
unsigned char dtr;
|
||||
unsigned char en485;
|
||||
unsigned char err;
|
||||
unsigned char node;
|
||||
unsigned char cr; /* scc CR register */
|
||||
unsigned char slave;
|
||||
unsigned int in_segm; /* input buffer segment */
|
||||
unsigned int in_offs; /* input buffer offset */
|
||||
unsigned int out_segm; /* output buffer segment */
|
||||
unsigned int out_offs; /* output buffer offset */
|
||||
unsigned char byte_delay; /* V25 macro service byte delay */
|
||||
} COM;
|
||||
|
||||
|
||||
typedef struct{
|
||||
unsigned char sec1;
|
||||
unsigned char sec10;
|
||||
unsigned char min1;
|
||||
unsigned char min10;
|
||||
unsigned char hour1;
|
||||
unsigned char hour10;
|
||||
unsigned char day1;
|
||||
unsigned char day10;
|
||||
unsigned char mon1;
|
||||
unsigned char mon10;
|
||||
unsigned char year1;
|
||||
unsigned char year10;
|
||||
unsigned char wk;
|
||||
} TIM;
|
||||
|
||||
void ae_init(void);
|
||||
void ae_reset(void);
|
||||
void led(int i); //P12 used for led
|
||||
void delay_ms(int m);
|
||||
void delay0(unsigned int t);
|
||||
void HLPRsetvect(
|
||||
unsigned int wVec, /* Interrupt vector number */
|
||||
void far *ih /* Interrupt handler to install */
|
||||
);
|
||||
|
||||
void clka_en(int i);
|
||||
void clkb_en(int i);
|
||||
void pwr_save_en(int i);
|
||||
void hitwd(void);
|
||||
|
||||
//
|
||||
// reset ee to remain enabled for reads
|
||||
// where s = segment register value pointing to ee starting addr.
|
||||
// for example = 0x8000
|
||||
//
|
||||
void amd_ee_read_reset(unsigned int s);
|
||||
|
||||
//
|
||||
// sec=0x00-0x07 for AM29F010, 16K/sector
|
||||
// sec=0 0x00000-0x03fff
|
||||
// sec=1 0x04000-0x07fff
|
||||
// sec=2 0x08000-0x0bfff
|
||||
// sec=3 0x0c000-0x0ffff
|
||||
// sec=4 0x10000-0x13fff
|
||||
// sec=5 0x14000-0x17fff
|
||||
// sec=6 0x18000-0x1bfff
|
||||
// sec=7 0x1c000-0x1ffff
|
||||
//
|
||||
// sec=0x10-0x17 for AM29F040
|
||||
// sec=10 0x00000-0x0ffff
|
||||
// sec=11 0x10000-0x1ffff
|
||||
// sec=12 0x20000-0x2ffff
|
||||
// sec=13 0x30000-0x3ffff
|
||||
// sec=14 0x40000-0x4ffff
|
||||
// sec=15 0x50000-0x5ffff
|
||||
// sec=16 0x60000-0x6ffff
|
||||
// sec=17 0x70000-0x7ffff
|
||||
// segm=segment register value pointing to ee address 0
|
||||
// returns: if pass, return(0);
|
||||
// if fail, return(1);
|
||||
//
|
||||
int amd_ee_sec_erase(unsigned int segm, unsigned char sec );
|
||||
|
||||
//
|
||||
// write one byte dat to AM29F040, at address of s:o
|
||||
// Approximately 70 us for 0 wait, 80us for 1 wait.
|
||||
// where s=segment register, it is fixed to 0x8000
|
||||
// o=offset register
|
||||
// returns: if pass, return(0);
|
||||
// if fail, return(1);
|
||||
//
|
||||
// Be aware of that a data bit "0" can not be programmed back to a "1" !!!
|
||||
// Attempting to do so will hang up the system !!!
|
||||
// you can program the "1"s to "0"s.
|
||||
// Only erase operation can convert "0"s to "1"s
|
||||
//
|
||||
//
|
||||
|
||||
int amd_ee_byte_pro_512(unsigned int s, unsigned int o, unsigned char dat);
|
||||
|
||||
//
|
||||
// write one byte dat to AM29F010, at address of s:o, 80us per byte approx.
|
||||
// where s=segment register, you may use s=0x8000-0xe000
|
||||
// o=offset register
|
||||
// returns: if pass, return(0);
|
||||
// if fail, return(1);
|
||||
//
|
||||
// Be aware of that a data bit "0" can not be programmed back to a "1" !!!
|
||||
// Attempting to do so will hang up the system !!!
|
||||
// you can program the "1"s to "0"s.
|
||||
// Only erase operation can convert "0"s to "1"s
|
||||
//
|
||||
|
||||
int amd_ee_byte_pro_128(unsigned int s, unsigned int o, unsigned char dat);
|
||||
|
||||
//
|
||||
// unsigned char rtc_rds(char* time_string);
|
||||
// put a time string into time_string, based on the reading of RTC.
|
||||
// At least 15 bytes of buffer must be available for the time_string
|
||||
// returns 0, if RTC OK, or returns 1, if problem
|
||||
//
|
||||
unsigned char rtc_rds(char* time_string);
|
||||
int rtc_rd(TIM *r);
|
||||
void rtc_init(unsigned char*);
|
||||
unsigned char r_rd(void);
|
||||
int r_out(unsigned char v);
|
||||
|
||||
|
||||
void t2_init(unsigned int tm,unsigned int ta,void interrupt far(*t2_isr)());
|
||||
void t1_init(unsigned int tm,unsigned int ta,unsigned int tb,void interrupt far(*t1_isr)());
|
||||
void t0_init(unsigned int tm,unsigned int ta,unsigned int tb,void interrupt far(*t0_isr)());
|
||||
unsigned int t2_rd(void);
|
||||
unsigned int t1_rd(void);
|
||||
unsigned int t0_rd(void);
|
||||
|
||||
// Analog to Digital conversion using TLC2543 on the A-Engine-88/86
|
||||
// Input:
|
||||
// unsigned char c = input channel
|
||||
// c = 0, input ch = AD0
|
||||
// c = 1, input ch = AD1
|
||||
// c = 2, input ch = AD2
|
||||
// c = 3, input ch = AD3
|
||||
// c = 4, input ch = AD4
|
||||
// c = 5, input ch = AD5
|
||||
// c = 6, input ch = AD6
|
||||
// c = 7, input ch = AD7
|
||||
// c = 8, input ch = AD8
|
||||
// c = 9, input ch = AD9
|
||||
// c = a, input ch = AD10
|
||||
// In order to operate ADC, P11 must be input.
|
||||
// P11 is shared by RTC, EE. It must be high while power on/reset
|
||||
// For AE88, using PPI for ADC, I20,I21,I22 must be output
|
||||
// For AE86, using PAL for ADC, T0=CLK, T1=DIN, T2=ADCS
|
||||
// Enter the ae_ad12(unsigned char c); EE is stopped first.
|
||||
// Enter the ae86_ad12(unsigned char c); EE is stopped first.
|
||||
//
|
||||
// Output: 12 bit AD data of the previous channel !
|
||||
// Unipolar:
|
||||
// (Vref+ - Vref-)=0x7ff
|
||||
// Vref- = 0x000
|
||||
// Vref+ = 0xfff
|
||||
//
|
||||
//
|
||||
int ae_ad12(unsigned char c);
|
||||
|
||||
// outportb(0x120,1); // T0=0, CLK
|
||||
// outportb(0x128,1); // T1=0, DIN
|
||||
// outportb(0x130,1); // T2=0, ADCS
|
||||
int ae86_ad12(unsigned char c);
|
||||
|
||||
void nmi_init(void interrupt far (* nmi_isr)());
|
||||
void int0_init(unsigned char i, void interrupt far (*int0_isr)());
|
||||
void int1_init(unsigned char i, void interrupt far (*int1_isr)());
|
||||
void int2_init(unsigned char i, void interrupt far (*int2_isr)());
|
||||
void int3_init(unsigned char i, void interrupt far (*int3_isr)());
|
||||
void int4_init(unsigned char i, void interrupt far (*int4_isr)());
|
||||
void int5_init(unsigned char i, void interrupt far (*int5_isr)());
|
||||
void int6_init(unsigned char i, void interrupt far (*int6_isr)());
|
||||
|
||||
|
||||
//
|
||||
// void pio_init(char bit, char mode)
|
||||
// where bit=0-31
|
||||
// mode=0, Normal operation
|
||||
// mode=1, Input with pullup/down
|
||||
// mode=2, Output
|
||||
// mode=3, input without pull
|
||||
//
|
||||
void pio_init(char bit, char mode);
|
||||
|
||||
|
||||
//
|
||||
// void pio_wr(char bit, char dat)
|
||||
// where bit=0-31
|
||||
// dat=0/1
|
||||
//
|
||||
void pio_wr(char bit, char dat);
|
||||
|
||||
//
|
||||
// unsigned int pio_rd(char port)
|
||||
// return P15-P0, if port=0
|
||||
// return P31-P16, if port=1
|
||||
//
|
||||
unsigned int pio_rd(char port);
|
||||
|
||||
// setup I/O wait states for I/O instructions
|
||||
// where wait = 0-7
|
||||
// wait=0, wait states = 0, I/O enable for 100 ns
|
||||
// wait=1, wait states = 1, I/O enable for 100+25 ns
|
||||
// wait=2, wait states = 2, I/O enable for 100+50 ns
|
||||
// wait=3, wait states = 3, I/O enable for 100+75 ns
|
||||
// wait=4, wait states = 5, I/O enable for 100+125 ns
|
||||
// wait=5, wait states = 7, I/O enable for 100+175 ns
|
||||
// wait=6, wait states = 9, I/O enable for 100+225 ns
|
||||
// wait=7, wait states = 15, I/O enable for 100+375 ns
|
||||
void io_wait(char wait);
|
||||
|
||||
unsigned int crc16(unsigned char *wptr, unsigned int count);
|
||||
|
||||
/******************************************************
|
||||
void ae_da(int dat1, int dat2)
|
||||
output dat to U11 DAC of AE88
|
||||
Requires P12=CLK, P26=DI, P29=LD/CS as output pins !
|
||||
where dat1 for channel A, dat2 for channel B; dat1/2 = 0-4095
|
||||
*******************************************************/
|
||||
void ae_da(int dat1, int dat2);
|
||||
|
||||
/******************************************************
|
||||
void ae86_da(int dat1, int dat2)
|
||||
output dat to U15 DAC of AE86
|
||||
Requires T0=CLK=0x120, T1=DI=0x128, T3=LD/CS=0x138
|
||||
where dat1 for channel A, dat2 for channel B; dat1/2 = 0-4095
|
||||
Output 0-2.5V at VA=J4.16, VB=J4.18
|
||||
*******************************************************/
|
||||
void ae86_da(int dat1, int dat2);
|
||||
void interrupt reset_io_trap();
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
309
20080212/Demo/WizNET_DEMO_TERN_186/include/i2chip_hw.h
Normal file
309
20080212/Demo/WizNET_DEMO_TERN_186/include/i2chip_hw.h
Normal file
|
@ -0,0 +1,309 @@
|
|||
/*
|
||||
********************************************************************************
|
||||
* TERN, Inc.
|
||||
* (c) Copyright 2005, http://www.tern.com
|
||||
*
|
||||
* - Created to support i2chip module on a variety of TERN hardware platforms.
|
||||
********************************************************************************
|
||||
*/
|
||||
|
||||
#ifndef _I2CHIP_HW_H_
|
||||
#define _I2CHIP_HW_H_
|
||||
|
||||
#include "types.h"
|
||||
|
||||
#ifdef TERN_SC // SensorCore controller, has mapping identical to the RL
|
||||
#define TERN_RL
|
||||
#endif
|
||||
|
||||
#ifdef TERN_RL // R-Engine-L controller, with mapping at MCS0.
|
||||
#define I2CHIP_MCS_DIRECT
|
||||
#define I2CHIP_INT4
|
||||
#define TERN_RE
|
||||
#endif // TERN_RL
|
||||
|
||||
#ifdef TERN_5E
|
||||
#define TERN_586
|
||||
#endif
|
||||
|
||||
#ifdef TERN_RD
|
||||
#define TERN_RE
|
||||
#endif // TERN_RD
|
||||
|
||||
#ifdef TERN_RE
|
||||
#define TERN_186
|
||||
#endif
|
||||
|
||||
#ifdef TERN_P51
|
||||
void p51_window(unsigned int page);
|
||||
#define I2CHIP_WINDOW
|
||||
#define I2CHIP_P51
|
||||
#ifdef TERN_186
|
||||
#define I2CHIP_INT4
|
||||
#define TERN_16_BIT
|
||||
#endif // TERN_186
|
||||
#ifdef TERN_586
|
||||
#define I2CHIP_INT0
|
||||
#define I2CHIP_WINDOW_IO
|
||||
#endif // TERN_586
|
||||
#endif // TERN_P51
|
||||
|
||||
#ifdef TERN_CEYE
|
||||
#define TERN_EE // C-Eye configured with onboard i2chip, same as EE
|
||||
#endif
|
||||
|
||||
#ifdef TERN_EE
|
||||
#define TERN_186
|
||||
#define I2CHIP_MCS_DIRECT
|
||||
#define I2CHIP_INT4
|
||||
#define TERN_16_BIT
|
||||
#endif // TERN_EE
|
||||
|
||||
#ifdef TERN_MMC
|
||||
#define I2CHIP_WINDOW
|
||||
#define I2CHIP_MMC
|
||||
#ifdef TERN_RD
|
||||
#define I2CHIP_INT3
|
||||
#else
|
||||
#ifdef TERN_186
|
||||
#define I2CHIP_INT4
|
||||
#endif // TERN_186
|
||||
#endif // TERN_RD
|
||||
#ifdef TERN_586
|
||||
#define I2CHIP_INT0
|
||||
#define I2CHIP_WINDOW_IO
|
||||
#endif // TERN_586
|
||||
#endif // TERN_MMC
|
||||
|
||||
#ifdef TERN_586
|
||||
#include "586.h"
|
||||
void interrupt far int0_isr(void);
|
||||
void interrupt far spu_m_isr(void);
|
||||
void interrupt far spu_1_isr(void);
|
||||
void interrupt far spu_2_isr(void);
|
||||
#define MMCR 0xdf00
|
||||
#endif // TERN_586
|
||||
|
||||
#ifdef TERN_186
|
||||
#ifndef TERN_RE
|
||||
#include "ae.h"
|
||||
#else
|
||||
#include "re.h"
|
||||
#define I2CHIP_SHIFTED_ADDRESS
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef I2CHIP_MCS_DIRECT
|
||||
#ifndef I2CHIP_WINDOW
|
||||
#ifndef I2CHIP_WINDOW_IO
|
||||
#error You must define the TERN address mapping used to drive the I2CHIP module!
|
||||
#endif // I2CHIP_WINDOW_IO
|
||||
#endif // I2CHIP_MMC_WINDOW
|
||||
#endif // I2CHIP_MCS_DIRECT
|
||||
|
||||
#ifndef I2CHIP_INT0
|
||||
#ifndef I2CHIP_INT3
|
||||
#ifndef I2CHIP_INT4
|
||||
#ifndef I2CHIP_POLL
|
||||
#error You must specify an interrupt/polling mechanism for the I2CHIP module!
|
||||
#endif // I2CHIP_POLL
|
||||
#endif // I2CHIP_INT3
|
||||
#endif // I2CHIP_INT4
|
||||
#endif // I2CHIP_INT0
|
||||
|
||||
#ifdef I2CHIP_POLL
|
||||
#define I2CHIP_POLL_ISR(a) { delay_ms(20); disable(); a(); enable(); }
|
||||
#define INT_INIT(isr)
|
||||
#define INT_EOI
|
||||
#endif // I2CHIP_POLL
|
||||
|
||||
#ifdef I2CHIP_INT4
|
||||
#define INT_INIT(isr) int4_init(1, isr)
|
||||
#define INT_EOI outport(0xff22,0x0010)
|
||||
#define I2CHIP_POLL_ISR(a)
|
||||
#endif
|
||||
|
||||
#ifdef I2CHIP_INT3
|
||||
#define INT_INIT(isr) int3_init(1, isr)
|
||||
#define INT_EOI outport(0xff22,0x000f)
|
||||
#define I2CHIP_POLL_ISR(a)
|
||||
#endif
|
||||
|
||||
#ifdef I2CHIP_INT0
|
||||
#define INT_INIT(isr) int0_init(1, isr)
|
||||
#define INT_EOI outportb(_MPICOCW2_IO,0x61); // 586 only EOI
|
||||
#define I2CHIP_POLL_ISR(a)
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef I2CHIP_SHIFTED_ADDRESS
|
||||
#define SA_OFFSET(a) ((a) << 1)
|
||||
#else
|
||||
#define SA_OFFSET(a) a
|
||||
#endif // I2CHIP_SHIFTED_ADDRESS ... *if*
|
||||
|
||||
|
||||
// -------------------- WINDOW-RELATED DEFINES ----------------------
|
||||
#ifdef I2CHIP_WINDOW
|
||||
void i2chip_set_page(u_int addr);
|
||||
#define I2CHIP_SET_PAGE(p) i2chip_set_page(p)
|
||||
|
||||
u_char far* i2chip_mkptr(u_int addr);
|
||||
void i2chip_push_window(u_int addr);
|
||||
void i2chip_pop_window(void);
|
||||
u_int i2chip_get_window(void);
|
||||
void i2chip_set_window(u_int window_addr);
|
||||
|
||||
// Set to command window.
|
||||
// Note that if you're using other MMC chips within your application, you will
|
||||
// need to call this function regularly, if you've changed the MMC chip/page
|
||||
// selection via mmc_window(). The driver code otherwise assume that you never
|
||||
// change away from chip 7, page 0.
|
||||
#define WINDOW_RESTORE_BASE i2chip_mkptr(0)
|
||||
|
||||
// ----------------------- I2CHIP_WINDOW_IO ----------------------------
|
||||
#ifdef I2CHIP_WINDOW_IO
|
||||
|
||||
#ifdef TERN_5E
|
||||
#define I2CHIP_BASE_SEG 0x2000 // Address offset for W3100A
|
||||
#else
|
||||
#define I2CHIP_BASE_SEG 0x1800 // Address offset for W3100A
|
||||
#endif
|
||||
|
||||
#define COMMAND_BASE_SEG 0x0000
|
||||
#define SEND_DATA_BUF 0x4000 // Internal Tx buffer address of W3100A
|
||||
#define RECV_DATA_BUF 0x6000 // Internal Rx buffer address of W3100A
|
||||
#define WINDOW_BASE_SEGM COMMAND_BASE_SEG
|
||||
|
||||
#define MK_FP_WINDOW(a, b) i2chip_mkptr(a+SA_OFFSET(b))
|
||||
#define MK_FP_SA MK_FP_WINDOW
|
||||
|
||||
u_char io_read_value(u_char far* addr);
|
||||
void io_write_value(u_char far* addr, u_char value);
|
||||
#define READ_VALUE(a) io_read_value(a)
|
||||
#define WRITE_VALUE(a, v) io_write_value(a, v)
|
||||
|
||||
#define WINDOW_PTR_INC(a) \
|
||||
if ((FP_OFF(a) & 0xff) == 0xff) \
|
||||
a = MK_FP_WINDOW(i2chip_get_window() + 0x100, 0); \
|
||||
else \
|
||||
a++;
|
||||
|
||||
#endif // I2CHIP_WINDOW_IO
|
||||
|
||||
// -------------------- !NOT! I2CHIP_WINDOW_IO ----------------------------
|
||||
#ifndef I2CHIP_WINDOW_IO
|
||||
|
||||
#define READ_VALUE(a) *(a)
|
||||
#define WRITE_VALUE(a, v) *(a) = v
|
||||
|
||||
#define WINDOW_BASE_SEGM 0x8000
|
||||
#define MK_FP_WINDOW(a, b) i2chip_mkptr(a+SA_OFFSET(b))
|
||||
#define MK_FP_SA MK_FP_WINDOW
|
||||
|
||||
#ifdef I2CHIP_SHIFTED_ADDRESS
|
||||
#define COMMAND_BASE_SEG 0x0000
|
||||
#define SEND_DATA_BUF 0x8000
|
||||
#define RECV_DATA_BUF 0xC000
|
||||
#define WINDOW_PTR_INC(a) \
|
||||
if ((FP_OFF(a) & 0xff) == 0xfe) \
|
||||
a = MK_FP_WINDOW(i2chip_get_window() + 0x100, 0); \
|
||||
else \
|
||||
a+=2;
|
||||
#else
|
||||
#define COMMAND_BASE_SEG 0x0000
|
||||
#define SEND_DATA_BUF 0x4000
|
||||
#define RECV_DATA_BUF 0x6000
|
||||
#define WINDOW_PTR_INC(a) \
|
||||
if ((FP_OFF(a) & 0xff) == 0xff) \
|
||||
a = MK_FP_WINDOW(i2chip_get_window() + 0x100, 0); \
|
||||
else \
|
||||
a++;
|
||||
#endif // I2CHIP_SHIFTED_ADDRESS
|
||||
#endif // NOT I2CHIP_WINDOW_IO
|
||||
|
||||
#endif // I2CHIP_WINDOW
|
||||
|
||||
// -------------------- I2CHIP_DIRECT ----------------------------
|
||||
#ifdef I2CHIP_MCS_DIRECT
|
||||
|
||||
#define READ_VALUE(a) *(a)
|
||||
#define WRITE_VALUE(a, v) *(a) = v
|
||||
|
||||
#define I2CHIP_BASE_SEG 0x8000
|
||||
#define MK_FP_SA(a, b) MK_FP(a, SA_OFFSET(b))
|
||||
#define WINDOW_PTR_INC(a) a+=SA_OFFSET(1);
|
||||
#define WINDOW_RESTORE_BASE
|
||||
#define MK_FP_WINDOW MK_FP_SA
|
||||
#define WINDOW_BASE_SEG I2CHIP_BASE_SEG
|
||||
#define COMMAND_BASE_SEG I2CHIP_BASE_SEG
|
||||
|
||||
#ifdef I2CHIP_SHIFTED_ADDRESS
|
||||
#define SEND_DATA_BUF 0x8800 // Internal Tx buffer address of W3100A
|
||||
#define RECV_DATA_BUF 0x8C00 // Internal Rx buffer address of W3100A
|
||||
#else
|
||||
#define SEND_DATA_BUF 0x8400 // Internal Tx buffer address of W3100A
|
||||
#define RECV_DATA_BUF 0x8600 // Internal Rx buffer address of W3100A
|
||||
#endif // I2CHIP_SHIFTED_ADDRESS
|
||||
|
||||
#endif // I2CHIP_MCS_DIRECT
|
||||
|
||||
/* Internal register set of W3100A */
|
||||
#define COMMAND(i) ((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG, i)))
|
||||
#define INT_STATUS(i) ((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG, I2CHIP_C0_ISR + i)))
|
||||
#define INT_REG ((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG, I2CHIP_IR)))
|
||||
#define INTMASK ((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG, I2CHIP_IMR)))
|
||||
#define RESETSOCK ((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG, 0x0A)))
|
||||
|
||||
#define RX_PTR_BASE I2CHIP_C0_RW_PR
|
||||
#define RX_PTR_SIZE (I2CHIP_C1_RW_PR - I2CHIP_C0_RW_PR)
|
||||
|
||||
#define RX_WR_PTR(i) ((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG, RX_PTR_BASE + RX_PTR_SIZE * i)))
|
||||
#define RX_RD_PTR(i) ((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG, RX_PTR_BASE + RX_PTR_SIZE * i + 0x04)))
|
||||
#define RX_ACK_PTR(i) ((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG, TX_PTR_BASE + TX_PTR_SIZE * i + 0x08)))
|
||||
|
||||
#define TX_PTR_BASE I2CHIP_C0_TW_PR
|
||||
#define TX_PTR_SIZE (I2CHIP_C1_TW_PR - I2CHIP_C0_TW_PR)
|
||||
|
||||
#define TX_WR_PTR(i) ((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG, TX_PTR_BASE + TX_PTR_SIZE * i)))
|
||||
#define TX_RD_PTR(i) ((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG, TX_PTR_BASE + TX_PTR_SIZE * i + 0x04)))
|
||||
#define TX_ACK_PTR(i) ((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG, RX_PTR_BASE + RX_PTR_SIZE * i + 0x08)))
|
||||
|
||||
/* Shadow Register Pointer Define */
|
||||
/* For windowing purposes, these are definitely outside the first 256-byte Window...
|
||||
therefore, use the MK_FP_WINDOW macros instead. */
|
||||
#define SHADOW_RXWR_PTR(i) ((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG, 0x1E0 + 3*i)))
|
||||
#define SHADOW_RXRD_PTR(i) ((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG, 0x1E1 + 3*i)))
|
||||
#define SHADOW_TXACK_PTR(i) ((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG, 0x1E2 + 3*i)))
|
||||
#define SHADOW_TXWR_PTR(i) ((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG, 0x1F0 + 3*i)))
|
||||
#define SHADOW_TXRD_PTR(i) ((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG, 0x1F1 + 3*i)))
|
||||
|
||||
#define SOCK_BASE I2CHIP_C0_SSR
|
||||
#define SOCK_SIZE (I2CHIP_C1_SSR - I2CHIP_C0_SSR)
|
||||
|
||||
#define SOCK_STATUS(i) ((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG, SOCK_BASE + SOCK_SIZE * i)))
|
||||
#define OPT_PROTOCOL(i) ((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG, SOCK_BASE + SOCK_SIZE * i + 0x01)))
|
||||
#define DST_HA_PTR(i) ((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG, SOCK_BASE + SOCK_SIZE * i + 0x02)))
|
||||
#define DST_IP_PTR(i) ((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG, SOCK_BASE + SOCK_SIZE * i + 0x08)))
|
||||
#define DST_PORT_PTR(i) ((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG, SOCK_BASE + SOCK_SIZE * i + 0x0C)))
|
||||
#define SRC_PORT_PTR(i) ((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG, SOCK_BASE + SOCK_SIZE * i + 0x0E)))
|
||||
#define IP_PROTOCOL(i) ((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG, SOCK_BASE + SOCK_SIZE * i + 0x10)))
|
||||
#define TOS(i) ((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG,SOCK_BASE + SOCK_SIZE * i + 0x11)))
|
||||
#define MSS(i) ((u_int far *)(MK_FP_WINDOW(COMMAND_BASE_SEG, SOCK_BASE + SOCK_SIZE * i + 0x12)))
|
||||
#define P_WINDOW(i) ((u_int far *)(MK_FP_WINDOW(COMMAND_BASE_SEG,SOCK_BASE + SOCK_SIZE * i + 0x14)))
|
||||
#define WINDOW(i) ((u_int far*)(MK_FP_WINDOW(COMMAND_BASE_SEG, SOCK_BASE + SOCK_SIZE * i + 0x16)))
|
||||
|
||||
#define GATEWAY_PTR ((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG,I2CHIP_GAR)))
|
||||
#define SUBNET_MASK_PTR ((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG,I2CHIP_SMR)))
|
||||
|
||||
#define SRC_HA_PTR ((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG,I2CHIP_SHAR)))
|
||||
#define SRC_IP_PTR ((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG,I2CHIP_SIPR)))
|
||||
#define TIMEOUT_PTR ((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG,I2CHIP_IRTR)))
|
||||
|
||||
#define RX_DMEM_SIZE ((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG,I2CHIP_RMSR)))
|
||||
#define TX_DMEM_SIZE ((u_char far *)(MK_FP_WINDOW(COMMAND_BASE_SEG,I2CHIP_TMSR)))
|
||||
|
||||
void i2chip_init(void);
|
||||
|
||||
#endif // _irchip_hw_h
|
|
@ -0,0 +1,12 @@
|
|||
#ifndef _SYSTEM_COMMON_H_
|
||||
#define _SYSTEM_COMMON_H_
|
||||
|
||||
typedef unsigned char UCHAR8;
|
||||
typedef unsigned int UINT16;
|
||||
|
||||
#define RETURN_OK 0 // Non-zero return values are always
|
||||
// error values.
|
||||
#define RETURN_ILLEGAL 1 // Some sort of illegal argument.
|
||||
#define RETURN_MEM 2 // Out of memory space.
|
||||
|
||||
#endif // _SYSTEM_COMMON_H_
|
Loading…
Add table
Add a link
Reference in a new issue