MCU

コンテンツ

WIZNet W5300 その六 netapi.h typedef.h


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

*1 作り直した部分も多いのですが、著作の問題があるかな?という事です
最終更新のRSS
Last-modified: 2010-04-03 (土) 13:31:49 2881日前
HTML convert time: 0.040 sec.