API群用のヘッダです。
これも、よくあるヘッダです。
2010.04.03 更新
00001 /************************************************************************/ 00002 /* */ 00003 /* FILE : netapi.h */ 00004 /* DATE : 2010.01.20 */ 00005 /* DESCRIPTION : NetWork API Header */ 00006 /* CPU TYPE : NO ARCH */ 00007 /* CopyRight(C) by MCM Co.,Ltd. */ 00008 /************************************************************************/ 00009 #ifndef _NETAPI_H_ 00010 #define _NETAPI_H_ 00011 00012 /************************************************************************/ 00013 /* システムのエンディアン */ 00014 /************************************************************************/ 00015 #define _ENDIAN_LITTLE_ (1) 00016 #define _ENDIAN_BIG_ (2) 00017 #if 0 00018 #define SYSTEM_ENDIAN _ENDIAN_LITTLE_ 00019 #else 00020 #define SYSTEM_ENDIAN _ENDIAN_BIG_ 00021 #endif 00022 00023 /************************************************************************/ 00024 /* 定数 */ 00025 /************************************************************************/ 00026 #define MAX_SOCKET_NUMBER (8) /* サポートしているソケット数 */ 00027 #define WAIT_UNTIL_DONE (0x0001) /* 処理が終わるまで待つ */ 00028 #define IGNOR_KEEPALIVE (0x0100) /* KeepAliveを無効にしてしまう */ 00029 00030 typedef enum enumSOCKTYPE { 00031 SOCK_STREAM = 1, 00032 SOCK_DGRAM, 00033 SOCK_SEQPACKET, 00034 SOCK_RAW, 00035 SOCK_RDM, 00036 SOCK_PACKET, 00037 SOCK_NONBLOCK, 00038 SOCK_CLOEXEC 00039 } SOCKTYPE; 00040 00041 /************************************************************************/ 00042 /* エラー番号 */ 00043 /************************************************************************/ 00044 #define ERR_OK (0) /* 正常終了 */ 00045 #define ERR_UNKNOWN (-100) /* 未定義のエラー */ 00046 #define ERR_NOSOCKET (-101) /* 空きソケットなし */ 00047 #define ERR_TIMEOUT (-102) /* 処理時間オーバー */ 00048 #define ERR_TOCON (-103) /* 接続待ち時間オーバー */ 00049 #define ERR_NOTOPEN (-104) /* オープンされていないソケット */ 00050 #define ERR_PROTOCOL (-105) /* 違うプロトコル */ 00051 #define ERR_NOBUFF (-106) /* 送信バッファがいっぱい */ 00052 #define ERR_NOTCONN (-107) /* 接続されていない */ 00053 #define ERR_SENDTO (-108) /* 送信タイムアウト */ 00054 00055 /************************************************************************/ 00056 /* 領域 */ 00057 /************************************************************************/ 00058 typedef short NETAPI; 00059 typedef short SOCKET; 00060 00061 typedef struct { 00062 ushort inuse; 00063 #define SOCKET_EMPTY (0) 00064 #define SOCKET_INUSE (0x5aa5) /* Magic word */ 00065 ushort socktype; 00066 ulong dstip; 00067 ushort dstport; 00068 ushort recvlen; 00069 ushort recvdat; 00070 bool msb; /* 次は MSB から取り込む */ 00071 bool checkTxDone; 00072 } SOCKET_CTRL; 00073 00074 /************************************************************************/ 00075 /* プロトタイプ */ 00076 /************************************************************************/ 00077 void netapi_init(void); 00078 NETAPI closesocket(SOCKET sock); 00079 void get_chip_status(SOCKET sock, ushort *ir, ushort *st); 00080 SOCKET tcp_connect(ushort myport, ulong yourip, ushort yourport, ushort flag); 00081 SOCKET tcp_listen(ushort myport); 00082 NETAPI tcp_disconnect(SOCKET sock); 00083 long get_tcp_recvln(SOCKET sock); 00084 long tcp_recv(SOCKET sock, void *buf, long buflen, ushort flag); 00085 long tcp_send(SOCKET sock, const void *buf, long datalen, ushort flag); 00086 SOCKET udp_open(ushort myport); 00087 long udp_recv(SOCKET sock, void *buf, long len, ulong *yourip, ushort *yourport); 00088 long udp_send(SOCKET sock, void *buf, long len, ulong yourip, ushort yourport); 00089 00090 ushort swaps(ushort i); 00091 ulong swapl(ulong l); 00092 ushort htons(ushort s); 00093 ulong htonl(ulong l); 00094 ulong ntohs(ushort s); 00095 ulong ntohl(ulong l); 00096 00097 char * inet_ntoa(ulong addr); 00098 ulong inet_addr(uchar * addr); 00099 00100 char * mac_ntoa(char *str, uchar* addr); 00101 char * mac_addr(ubyte *dst, ubyte *addr); 00102 00103 void if_up(void); 00104 void if_down(void); 00105 00106 void set_my_ifconfig(my_if_config *cfg); 00107 void get_my_ifconfig(my_if_config *cfg); 00108 00109 00110 #endif /* nodef(_NETAPI_H_) */
以下は、cソース中で使っている変数タイプの指定などを行っているヘッダーです。
理由があって、 intは使っていません。
int って、何ビットで考えていますか? 16Bits? 32Bits?
他の MCU に移植する場合、結構、 intの為に動かなくなるんです。
ただの戻り値だけなら良いですが、レジスタやフィールドを扱う場合は注意が必要です。
00001 /************************************************************************/ 00002 /* */ 00003 /* FILE :TYPEDEF.H */ 00004 /* DESCRIPTION :TYPE DEFINE */ 00005 /* CPU TYPE :NO ARCH */ 00006 /* */ 00007 /* CopyRight(C) by MCM Co.,Ltd. */ 00008 /************************************************************************/ 00009 #ifndef _TYPEDEF_H_ 00010 #define _TYPEDEF_H_ 00011 00012 /************************************************************************/ 00013 /* */ 00014 /* データ型の宣言 */ 00015 /* */ 00016 /************************************************************************/ 00017 #ifndef __WIN32__ 00018 #define TRUE (1L) 00019 #define FALSE (0L) 00020 #define true (1L) 00021 #define false (0L) 00022 typedef unsigned char bool; 00023 #endif /* __WIN32__ */ 00024 #define NULL (0L) 00025 #define NULLP ((void *)0) 00026 typedef void CALLBACK; 00027 typedef void TASK; 00028 00029 typedef char byte; 00030 typedef unsigned char uchar; 00031 typedef unsigned char ubyte; 00032 typedef short word; 00033 typedef unsigned short ushort; 00034 typedef unsigned short uword; 00035 typedef long dword; 00036 typedef unsigned long ulong; 00037 typedef unsigned long udword; 00038 typedef void (*pFUNC)(); 00039 /* intは、CPU依存で16Bitだったり32Bitだったりするので使わない(コンパイルエラー) */ 00040 #define int "DO_NOT_USE_INT" 00041 #define NADR (-1L) 00042 00043 #endif /* ndef(_TYPEDEF_H_) */
最後に、大域的なものを扱う為のヘッダーです。
他にも、 printf や stdutil などがありますがネット上には出しません*1。
00001 /************************************************************************/ 00002 /* */ 00003 /* FILE : GLOBAL.H */ 00004 /* DESCRIPTION : COMMON INCLUDE */ 00005 /* CPU TYPE : NO ARCH */ 00006 /* */ 00007 /* CopyRight(C) by MCM Co.,Ltd. */ 00008 /************************************************************************/ 00009 #ifndef _GLOBAL_H_ 00010 #define _GLOBAL_H_ 00011 /************************************************************************/ 00012 /* */ 00013 /* */ 00014 /* */ 00015 /************************************************************************/ 00016 #define __HEAP_SIZE__ (0x300) 00017 00018 #include "printx.h" /* printf(), sprintf()を使う時は必ずインクルード */ 00019 00020 /************************************************************************/ 00021 /* */ 00022 /* */ 00023 /* */ 00024 /************************************************************************/ 00025 /* MAC ADDRESS用構造体 */ 00026 typedef union { 00027 uchar _byte[6]; 00028 ushort _word[3]; 00029 } hw_address_t; 00030 00031 /* IP ADDRESS用構造体 */ 00032 typedef union { 00033 uchar _byte[4]; 00034 ushort _word[2]; 00035 ulong _long; 00036 } ip_address_t; 00037 00038 00039 extern hw_address_t my_mac_adr; /* MAC Adress */ 00040 extern ip_address_t my_gw_adrs; /* GateWay Adress */ 00041 extern ip_address_t my_ip_mask; /* Net Mask */ 00042 extern ip_address_t my_ip_adrs; /* My IP Address */ 00043 extern ip_address_t my_ns_adrs; /* Name Serever Address */ 00044 00045 /************************************************************************/ 00046 /* */ 00047 /* 標準関数のプロトタイプ */ 00048 /* */ 00049 /************************************************************************/ 00050 00051 00052 /************************************************************************/ 00053 /* */ 00054 /* ヒープ… */ 00055 /* */ 00056 /************************************************************************/ 00057 void * get_heap(void); 00058 void free_heap(void); 00059 #endif /* nodef(_GLOBAL_H_) */
以上、ざっとですがソース類を出してみました。
WIZNet W5300/7