Arrow / Mbed OS DAPLink Reset
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers RTL.h Source File

RTL.h

Go to the documentation of this file.
00001 /**
00002  * @file    RTL.h
00003  * @brief   
00004  *
00005  * DAPLink Interface Firmware
00006  * Copyright (c) 2009-2016, ARM Limited, All Rights Reserved
00007  * SPDX-License-Identifier: Apache-2.0
00008  *
00009  * Licensed under the Apache License, Version 2.0 (the "License"); you may
00010  * not use this file except in compliance with the License.
00011  * You may obtain a copy of the License at
00012  *
00013  * http://www.apache.org/licenses/LICENSE-2.0
00014  *
00015  * Unless required by applicable law or agreed to in writing, software
00016  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
00017  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00018  * See the License for the specific language governing permissions and
00019  * limitations under the License.
00020  */
00021 
00022 #ifndef __RTL_H__
00023 #define __RTL_H__
00024 
00025 /* RL-ARM version number. */
00026 #define __RL_ARM_VER    471
00027 
00028 #define __task          __declspec(noreturn)
00029 #define __used          __attribute__((used))
00030 
00031 #ifndef NULL
00032  #ifdef __cplusplus
00033   #define NULL          0
00034  #else
00035   #define NULL          ((void *) 0)
00036  #endif
00037 #endif
00038 
00039 #ifndef EOF
00040  #define EOF            (-1)
00041 #endif
00042 
00043 #ifndef __size_t
00044  #define __size_t       1
00045  typedef unsigned int   size_t;
00046 #endif
00047 
00048 typedef signed char     S8;
00049 typedef unsigned char   U8;
00050 typedef short           S16;
00051 typedef unsigned short  U16;
00052 typedef int             S32;
00053 typedef unsigned int    U32;
00054 typedef long long       S64;
00055 typedef unsigned long long U64;
00056 typedef unsigned char   BIT;
00057 typedef unsigned int    BOOL;
00058 
00059 #ifndef __TRUE
00060  #define __TRUE         1
00061 #endif
00062 #ifndef __FALSE
00063  #define __FALSE        0
00064 #endif
00065 
00066 #ifdef __BIG_ENDIAN
00067  #define U32_LE(v)      (U32)(__rev(v))
00068  #define U16_LE(v)      (U16)(__rev(v) >> 16)
00069  #define U32_BE(v)      (U32)(v)
00070  #define U16_BE(v)      (U16)(v)
00071 #else
00072  #define U32_BE(v)      (U32)(__rev(v))
00073  #define U16_BE(v)      (U16)(__rev(v) >> 16)
00074  #define U32_LE(v)      (U32)(v)
00075  #define U16_LE(v)      (U16)(v)
00076 #endif
00077 #define ntohs(v)        U16_BE(v)
00078 #define ntohl(v)        U32_BE(v)
00079 #define htons(v)        ntohs(v)
00080 #define htonl(v)        ntohl(v)
00081 
00082 /*----------------------------------------------------------------------------
00083  *                             RTX Kernel API
00084  *---------------------------------------------------------------------------*/
00085 
00086 #ifdef __cplusplus
00087 extern "C"  {
00088 #endif
00089 
00090 /* Definition of Semaphore type */
00091 typedef U32 OS_SEM[2];
00092 
00093 /* Definition of Mailbox type */
00094 #define os_mbx_declare(name,cnt)    U32 name [4 + cnt]
00095 typedef U32 OS_MBX[];
00096 
00097 /* Definition of Mutex type */
00098 typedef U32 OS_MUT[3];
00099 
00100 /* Task Identification number. */
00101 typedef U32 OS_TID;
00102 
00103 /* Function return of system calls returning an object identification */
00104 typedef void *OS_ID;
00105 
00106 /* Function return of system calls indicating an event or completion state */
00107 typedef U32 OS_RESULT;
00108 
00109 /* Return codes */
00110 #define OS_R_TMO        0x01
00111 #define OS_R_EVT        0x02
00112 #define OS_R_SEM        0x03
00113 #define OS_R_MBX        0x04
00114 #define OS_R_MUT        0x05
00115 
00116 #define OS_R_OK         0x00
00117 #define OS_R_NOK        0xff
00118 
00119 #define OS_TCB_SIZE     48
00120 #define OS_TMR_SIZE     8
00121 
00122 /* Error Codes */
00123 #define OS_ERR_STK_OVF  1
00124 #define OS_ERR_FIFO_OVF 2
00125 #define OS_ERR_MBX_OVF  3
00126 
00127 #if !(__TARGET_ARCH_6S_M || __TARGET_ARCH_7_M || __TARGET_ARCH_7E_M)
00128 
00129 /*----------------------------------------------------------------------------
00130  *      Functions ARM
00131  *---------------------------------------------------------------------------*/
00132 
00133 /* Task Management */
00134 #define os_sys_init(tsk)              os_sys_init0(tsk,0,NULL)
00135 #define os_sys_init_prio(tsk,prio)    os_sys_init0(tsk,prio,NULL)
00136 #define os_sys_init_user(tsk,prio,stk,size)                                   \
00137                                       os_sys_init0(tsk,prio|(size<<8),stk)
00138 #define os_tsk_create(tsk,prio)       os_tsk_create0(tsk,prio,NULL,NULL)
00139 #define os_tsk_create_user(tsk,prio,stk,size)                                 \
00140                                       os_tsk_create0(tsk,prio|(size<<8),stk,NULL)
00141 #define os_tsk_create_ex(tsk,prio,argv) os_tsk_create_ex0(tsk,prio,NULL,argv)
00142 #define os_tsk_create_user_ex(tsk,prio,stk,size,argv)                         \
00143                                       os_tsk_create_ex0(tsk,prio|(size<<8),stk,argv)
00144 #define os_tsk_delete_self()          os_tsk_delete(0)
00145 #define os_tsk_prio_self(prio)        os_tsk_prio(0,prio)
00146 #define isr_tsk_get()                 os_tsk_self()
00147 
00148 extern void      os_sys_init0 (void (*task)(void), U32 prio_stksz, void *stk);
00149 extern OS_TID    os_tsk_create0 (void (*task)(void), U32 prio_stksz,
00150                                  void *stk, void *argv);
00151 extern OS_TID    os_tsk_create_ex0 (void (*task)(void *), U32 prio_stksz,
00152                                     void *stk, void *argv);
00153 extern OS_TID    os_tsk_self (void);
00154 extern void      os_tsk_pass (void);
00155 extern OS_RESULT os_tsk_prio (OS_TID task_id, U8 new_prio);
00156 extern OS_RESULT os_tsk_delete (OS_TID task_id);
00157 
00158 /* Event flag Management */
00159 #define os_evt_wait_or(wflags,tmo)      os_evt_wait(wflags,tmo,__FALSE)
00160 #define os_evt_wait_and(wflags,tmo)     os_evt_wait(wflags,tmo,__TRUE)
00161 
00162 extern OS_RESULT os_evt_wait (U16 wait_flags, U16 timeout, BOOL and_wait);
00163 extern void      os_evt_set (U16 event_flags, OS_TID task_id);
00164 extern void      os_evt_clr (U16 clear_flags, OS_TID task_id);
00165 extern void      isr_evt_set (U16 event_flags, OS_TID task_id);
00166 extern U16       os_evt_get (void);
00167 
00168 /* Semaphore Management */
00169 extern void      os_sem_init (OS_ID semaphore, U16 token_count);
00170 extern OS_RESULT os_sem_send (OS_ID semaphore);
00171 extern OS_RESULT os_sem_wait (OS_ID semaphore, U16 timeout);
00172 extern void      isr_sem_send (OS_ID semaphore);
00173 
00174 /* Mailbox Management */
00175 #define isr_mbx_check(mbx)              os_mbx_check(mbx)
00176 
00177 extern void      os_mbx_init (OS_ID mailbox, U16 mbx_size);
00178 extern OS_RESULT os_mbx_send (OS_ID mailbox, void *message_ptr, U16 timeout);
00179 extern OS_RESULT os_mbx_wait (OS_ID mailbox, void  **message, U16 timeout);
00180 extern OS_RESULT os_mbx_check (OS_ID mailbox);
00181 extern void      isr_mbx_send (OS_ID mailbox, void *message_ptr);
00182 extern OS_RESULT isr_mbx_receive (OS_ID mailbox, void **message);
00183 
00184 /* Mutex Management */
00185 extern void      os_mut_init (OS_ID mutex);
00186 extern OS_RESULT os_mut_release (OS_ID mutex);
00187 extern OS_RESULT os_mut_wait (OS_ID mutex, U16 timeout);
00188 
00189 /* Time Management */
00190 extern U32       os_time_get (void);
00191 extern void      os_dly_wait (U16 delay_time);
00192 extern void      os_itv_set (U16 interval_time);
00193 extern void      os_itv_wait (void);
00194 
00195 /* User Timer Management */
00196 extern OS_ID     os_tmr_create (U16 tcnt, U16 info);
00197 extern OS_ID     os_tmr_kill (OS_ID timer);
00198 
00199 /* System Functions */
00200 extern U32       os_suspend (void);
00201 extern void      os_resume (U32 sleep_time);
00202 extern void      tsk_lock (void) __swi (5);
00203 extern void      tsk_unlock (void);
00204 
00205 /* Fixed Memory Block Management Functions */
00206 extern int       _init_box (void *box_mem, U32 box_size, U32 blk_size);
00207 extern void     *_alloc_box (void *box_mem) __swi (1);
00208 extern void     *_calloc_box (void *box_mem);
00209 extern int       _free_box (void *box_mem, void *box) __swi (2);
00210 
00211 #else
00212 
00213 /*----------------------------------------------------------------------------
00214  *      Functions Cortex-M
00215  *---------------------------------------------------------------------------*/
00216 
00217 #define __SVC_0         __svc_indirect(0)
00218 
00219 /* Task Management */
00220 extern void      os_set_env    (void);
00221 extern void      rt_sys_init   (void (*task)(void), U8 priority, void *stk);
00222 extern void      rt_tsk_pass   (void);
00223 extern OS_TID    rt_tsk_self   (void);
00224 extern OS_RESULT rt_tsk_prio   (OS_TID task_id, U8 new_prio);
00225 extern OS_TID    rt_tsk_create (void (*task)(void), U8 priority, void *stk, void *argv);
00226 extern OS_RESULT rt_tsk_delete (OS_TID task_id);
00227 
00228 #define os_sys_init(tsk)              os_set_env();                           \
00229                                       _os_sys_init((U32)rt_sys_init,tsk,0,NULL)
00230 #define os_sys_init_user(tsk,prio,stk,size)                                   \
00231                                       os_set_env();                           \
00232                                       _os_sys_init((U32)rt_sys_init,tsk,prio|(size<<8),stk)
00233 #define os_sys_init_prio(tsk,prio)    os_set_env();                           \
00234                                       _os_sys_init((U32)rt_sys_init,tsk,prio,NULL)
00235 #define os_tsk_create(tsk,prio)       _os_tsk_create((U32)rt_tsk_create,tsk,prio,NULL,NULL)
00236 #define os_tsk_create_user(tsk,prio,stk,size)                                 \
00237                                       _os_tsk_create((U32)rt_tsk_create,tsk,prio|(size<<8),stk,NULL)
00238 #define os_tsk_create_ex(tsk,prio,argv) _os_tsk_create_ex((U32)rt_tsk_create,tsk,prio,NULL,argv)
00239 #define os_tsk_create_user_ex(tsk,prio,stk,size,argv)                         \
00240                                       _os_tsk_create_ex((U32)rt_tsk_create,tsk,prio|(size<<8),stk,argv)
00241 #define os_tsk_self()                 _os_tsk_self((U32)rt_tsk_self)
00242 #define os_tsk_pass()                 _os_tsk_pass((U32)rt_tsk_pass)
00243 #define os_tsk_prio(task_id,new_prio) _os_tsk_prio((U32)rt_tsk_prio,task_id,new_prio)
00244 #define os_tsk_prio_self(prio)        _os_tsk_prio((U32)rt_tsk_prio,0,prio)
00245 #define os_tsk_delete(task_id)        _os_tsk_delete((U32)rt_tsk_delete,task_id)
00246 #define os_tsk_delete_self()          _os_tsk_delete((U32)rt_tsk_delete, 0)
00247 #define isr_tsk_get()                 rt_tsk_self()
00248 
00249 extern void      _os_sys_init(U32 p, void (*task)(void), U32 prio_stksz,
00250                                      void *stk)                        __SVC_0;
00251 extern OS_TID    _os_tsk_create (U32 p, void (*task)(void), U32 prio_stksz,
00252                                         void *stk, void *argv)         __SVC_0;
00253 extern OS_TID    _os_tsk_create_ex (U32 p, void (*task)(void *), U32 prio_stksz,
00254                                            void *stk, void *argv)      __SVC_0;
00255 extern OS_TID    _os_tsk_self (U32 p)                                  __SVC_0;
00256 extern void      _os_tsk_pass (U32 p)                                  __SVC_0;
00257 extern OS_RESULT _os_tsk_prio (U32 p, OS_TID task_id, U8 new_prio)     __SVC_0;
00258 extern OS_RESULT _os_tsk_delete (U32 p, OS_TID task_id)                __SVC_0;
00259 
00260 /* Event flag Management */
00261 extern OS_RESULT rt_evt_wait (U16 wait_flags,  U16 timeout, BOOL and_wait);
00262 extern void      rt_evt_set  (U16 event_flags, OS_TID task_id);
00263 extern void      rt_evt_clr  (U16 clear_flags, OS_TID task_id);
00264 extern U16       rt_evt_get  (void);
00265 
00266 #define os_evt_wait_or(wflags,tmo)    _os_evt_wait((U32)rt_evt_wait,wflags,tmo,__FALSE)
00267 #define os_evt_wait_and(wflags,tmo)   _os_evt_wait((U32)rt_evt_wait,wflags,tmo,__TRUE)
00268 #define os_evt_set(evt_flags,task_id) _os_evt_set((U32)rt_evt_set,evt_flags,task_id)
00269 #define os_evt_clr(clr_flags,task_id) _os_evt_clr((U32)rt_evt_clr,clr_flags,task_id)
00270 #define os_evt_get()                  _os_evt_get((U32)rt_evt_get)
00271 
00272 extern OS_RESULT _os_evt_wait(U32 p, U16 wait_flags, U16 timeout,
00273                                      BOOL and_wait)                    __SVC_0;
00274 extern void      _os_evt_set (U32 p, U16 event_flags, OS_TID task_id)  __SVC_0;
00275 extern void      _os_evt_clr (U32 p, U16 clear_flags, OS_TID task_id)  __SVC_0;
00276 extern U16       _os_evt_get (U32 p)                                   __SVC_0;
00277 extern void      isr_evt_set (U16 event_flags, OS_TID task_id);
00278 
00279 /* Semaphore Management */
00280 extern void      rt_sem_init (OS_ID semaphore, U16 token_count);
00281 extern OS_RESULT rt_sem_send (OS_ID semaphore);
00282 extern OS_RESULT rt_sem_wait (OS_ID semaphore, U16 timeout);
00283 
00284 #define os_sem_init(sem,t_count)     _os_sem_init((U32)rt_sem_init,sem,t_count)
00285 #define os_sem_send(sem)             _os_sem_send((U32)rt_sem_send,sem)
00286 #define os_sem_wait(sem,tmo)         _os_sem_wait((U32)rt_sem_wait,sem,tmo)
00287 
00288 extern void      _os_sem_init (U32 p, OS_ID semaphore,
00289                                       U16 token_count)                 __SVC_0;
00290 extern OS_RESULT _os_sem_send (U32 p, OS_ID semaphore)                 __SVC_0;
00291 extern OS_RESULT _os_sem_wait (U32 p, OS_ID semaphore, U16 timeout)    __SVC_0;
00292 extern void      isr_sem_send (OS_ID semaphore);
00293 
00294 /* Mailbox Management */
00295 extern void      rt_mbx_init  (OS_ID mailbox, U16 mbx_size);
00296 extern OS_RESULT rt_mbx_send  (OS_ID mailbox, void *p_msg,    U16 timeout);
00297 extern OS_RESULT rt_mbx_wait  (OS_ID mailbox, void **message, U16 timeout);
00298 extern OS_RESULT rt_mbx_check (OS_ID mailbox);
00299 
00300 #define os_mbx_init(mbx,mbx_size)     _os_mbx_init((U32)rt_mbx_init,mbx,mbx_size)
00301 #define os_mbx_send(mbx,p_msg,tmo)    _os_mbx_send((U32)rt_mbx_send,mbx,p_msg,tmo)
00302 #define os_mbx_wait(mbx,message,tmo)  _os_mbx_wait((U32)rt_mbx_wait,mbx,message,tmo)
00303 #define os_mbx_check(mbx)             _os_mbx_check((U32)rt_mbx_check,mbx)
00304 #define isr_mbx_check(mbx)            rt_mbx_check(mbx)
00305 
00306 extern void      _os_mbx_init (U32 p, OS_ID mailbox, U16 mbx_size)     __SVC_0;
00307 extern OS_RESULT _os_mbx_send (U32 p, OS_ID mailbox, void *message_ptr,
00308                                       U16 timeout)                     __SVC_0;
00309 extern OS_RESULT _os_mbx_wait (U32 p, OS_ID mailbox, void  **message,
00310                                       U16 timeout)                     __SVC_0;
00311 extern OS_RESULT _os_mbx_check (U32 p, OS_ID mailbox)                  __SVC_0;
00312 extern void      isr_mbx_send (OS_ID mailbox, void *message_ptr);
00313 extern OS_RESULT isr_mbx_receive (OS_ID mailbox, void **message);
00314 
00315 /* Mutex Management */
00316 extern void      rt_mut_init    (OS_ID mutex);
00317 extern OS_RESULT rt_mut_release (OS_ID mutex);
00318 extern OS_RESULT rt_mut_wait    (OS_ID mutex, U16 timeout);
00319 
00320 #define os_mut_init(mutex)         _os_mut_init((U32)rt_mut_init,mutex)
00321 #define os_mut_release(mutex)      _os_mut_release((U32)rt_mut_release,mutex)
00322 #define os_mut_wait(mutex,timeout) _os_mut_wait((U32)rt_mut_wait,mutex,timeout)
00323 
00324 extern void      _os_mut_init (U32 p, OS_ID mutex)                     __SVC_0;
00325 extern OS_RESULT _os_mut_release (U32 p, OS_ID mutex)                  __SVC_0;
00326 extern OS_RESULT _os_mut_wait (U32 p, OS_ID mutex, U16 timeout)        __SVC_0;
00327 
00328 /* Time Management */
00329 extern U32       rt_time_get (void);
00330 extern void      rt_dly_wait (U16 delay_time);
00331 extern void      rt_itv_set  (U16 interval_time);
00332 extern void      rt_itv_wait (void);
00333 
00334 #define os_time_get()              _os_time_get((U32)rt_time_get)
00335 #define os_dly_wait(delay_time)    _os_dly_wait((U32)rt_dly_wait,delay_time)
00336 #define os_itv_set(interval_time)  _os_itv_set((U32)rt_itv_set,interval_time)
00337 #define os_itv_wait()              _os_itv_wait((U32)rt_itv_wait)
00338 
00339 extern U32       _os_time_get (U32 p)                                  __SVC_0;
00340 extern void      _os_dly_wait (U32 p, U16 delay_time)                  __SVC_0;
00341 extern void      _os_itv_set (U32 p, U16 interval_time)                __SVC_0;
00342 extern void      _os_itv_wait (U32 p)                                  __SVC_0;
00343 
00344 /* User Timer Management */
00345 extern OS_ID     rt_tmr_create (U16 tcnt, U16 info);
00346 extern OS_ID     rt_tmr_kill   (OS_ID timer);
00347 
00348 #define os_tmr_create(tcnt,info)   _os_tmr_create((U32)rt_tmr_create,tcnt,info)
00349 #define os_tmr_kill(timer)         _os_tmr_kill((U32)rt_tmr_kill,timer)
00350 
00351 extern OS_ID     _os_tmr_create (U32 p, U16 tcnt, U16 info)            __SVC_0;
00352 extern OS_ID     _os_tmr_kill (U32 p, OS_ID timer)                     __SVC_0;
00353 
00354 /* System Functions */
00355 extern U32       rt_suspend    (void);
00356 extern void      rt_resume     (U32 sleep_time);
00357 extern void      rt_tsk_lock   (void);
00358 extern void      rt_tsk_unlock (void);
00359 
00360 #define os_suspend()               _os_suspend((U32)rt_suspend)
00361 #define os_resume(sleep_time)      _os_resume((U32)rt_resume,sleep_time)
00362 #define tsk_lock()                 _os_tsk_lock((U32)rt_tsk_lock)
00363 #define tsk_unlock()               _os_tsk_unlock((U32)rt_tsk_unlock)
00364 
00365 extern U32       _os_suspend (U32 p)                                   __SVC_0;
00366 extern void      _os_resume (U32 p, U32 sleep_time)                    __SVC_0;
00367 extern void      _os_tsk_lock (U32 p)                                  __SVC_0;
00368 extern void      _os_tsk_unlock (U32 p)                                __SVC_0;
00369 
00370 /* Fixed Memory Block Management Functions */
00371 extern int       _init_box (void *box_mem, U32 box_size, U32 blk_size);
00372 extern void     *_alloc_box (void *box_mem);
00373 extern void     *_calloc_box (void *box_mem);
00374 extern int       _free_box (void *box_mem, void *box);
00375 
00376 #endif
00377 
00378 #define BOX_ALIGN_8     0x80000000
00379 #define _declare_box(pool,size,cnt)   U32 pool[(((size)+3)/4)*(cnt) + 3]
00380 #define _declare_box8(pool,size,cnt)  U64 pool[(((size)+7)/8)*(cnt) + 2]
00381 #define _init_box8(pool,size,bsize)   _init_box (pool,size,bsize | BOX_ALIGN_8)
00382 
00383 /* For compatibility with older configurations.*/
00384 #define os_stk_overflow         os_error
00385 
00386 /*----------------------------------------------------------------------------
00387  *                        Flash File System API
00388  *---------------------------------------------------------------------------*/
00389 
00390 typedef struct {                        /* RL Time format (FFS, TCPnet)      */
00391   U8  hr;                               /* Hours    [0..23]                  */
00392   U8  min;                              /* Minutes  [0..59]                  */
00393   U8  sec;                              /* Seconds  [0..59]                  */
00394   U8  day;                              /* Day      [1..31]                  */
00395   U8  mon;                              /* Month    [1..12]                  */
00396   U16 year;                             /* Year     [1980..2107]             */
00397 } RL_TIME;
00398 
00399 typedef struct {                        /* Search info record                */
00400   S8  name[256];                        /* Name                              */
00401   U32 size;                             /* File size in bytes                */
00402   U16 fileID;                           /* System Identification             */
00403   U8  attrib;                           /* Attributes                        */
00404   RL_TIME time;                         /* Create/Modify Time                */
00405 } FINFO;
00406 
00407 extern int finit (const char *drive);
00408 extern int funinit (const char *drive);
00409 extern int fdelete (const char *filename);
00410 extern int frename (const char *oldname, const char *newname);
00411 extern int ffind (const char *pattern, FINFO *info);
00412 extern U64 ffree (const char *drive);
00413 extern int fformat (const char *drive);
00414 extern int fanalyse (const char *drive);
00415 extern int fcheck (const char *drive);
00416 extern int fdefrag (const char *drive);
00417 extern int fattrib (const char *par, const char *path);
00418 extern int fvol    (const char *drive, char *buf);
00419 
00420 /* The following macros provide for common functions */
00421 #define unlink(fn)      fdelete(fn);
00422 
00423 /*----------------------------------------------------------------------------
00424  *                             TCPnet API
00425  *---------------------------------------------------------------------------*/
00426 
00427 /* UDP Options */
00428 #define UDP_OPT_SEND_CS    0x01   /* Calculate Checksum for UDP send frames  */
00429 #define UDP_OPT_CHK_CS     0x02   /* Verify Checksum for received UDP frames */
00430 
00431 /* TCP Socket Types */
00432 #define TCP_TYPE_SERVER    0x01   /* Socket Type Server (open for listening) */
00433 #define TCP_TYPE_CLIENT    0x02   /* Socket Type Client (initiate connect)   */
00434 #define TCP_TYPE_DELAY_ACK 0x04   /* Socket Type Delayed Acknowledge         */
00435 #define TCP_TYPE_FLOW_CTRL 0x08   /* Socket Type Flow Control                */
00436 #define TCP_TYPE_KEEP_ALIVE 0x10  /* Socket Type Keep Alive                  */
00437 #define TCP_TYPE_CLIENT_SERVER (TCP_TYPE_SERVER | TCP_TYPE_CLIENT)
00438 
00439 /* TCP Callback Events */
00440 #define TCP_EVT_CONREQ     0      /* Connect request received event          */
00441 #define TCP_EVT_CONNECT    1      /* Connection established event            */
00442 #define TCP_EVT_CLOSE      2      /* Connection was properly closed          */
00443 #define TCP_EVT_ABORT      3      /* Connection is for some reason aborted   */
00444 #define TCP_EVT_ACK        4      /* Previously send data acknowledged       */
00445 #define TCP_EVT_DATA       5      /* Data received event                     */
00446 
00447 /* TCP States */
00448 #define TCP_STATE_FREE     0      /* Entry is free and unused                */
00449 #define TCP_STATE_CLOSED   1      /* Entry allocated, socket still closed    */
00450 #define TCP_STATE_LISTEN   2      /* Socket waiting for incoming connection  */
00451 #define TCP_STATE_SYN_REC  3      /* SYN frame received                      */
00452 #define TCP_STATE_SYN_SENT 4      /* SYN packet sent to establish a connect. */
00453 #define TCP_STATE_FINW1    5      /* Tcp_close started FIN packet was sent   */
00454 #define TCP_STATE_FINW2    6      /* Our FIN ack-ed, waiting for remote FIN  */
00455 #define TCP_STATE_CLOSING  7      /* Received FIN independently of our FIN   */
00456 #define TCP_STATE_LAST_ACK 8      /* Waiting for last ACK for our FIN        */
00457 #define TCP_STATE_TWAIT    9      /* Timed waiting for 2MSL                  */
00458 #define TCP_STATE_CONNECT  10     /* TCP Connection established              */
00459 
00460 /* BSD Socket Address Family */
00461 #define AF_UNSPEC          0      /* Unspecified                             */
00462 #define AF_INET            1      /* Internet Address Family (UDP, TCP)      */
00463 #define AF_NETBIOS         2      /* NetBios-style addresses                 */
00464 
00465 /* BSD Protocol families, same as address families */
00466 #define PF_UNSPEC          AF_UNSPEC
00467 #define PF_INET            AF_INET
00468 #define PF_NETBIOS         AF_NETBIOS
00469 
00470 /* BSD Socket Type */
00471 #define SOCK_STREAM        1      /* Stream Socket (Connection oriented)     */
00472 #define SOCK_DGRAM         2      /* Datagram Socket (Connectionless)        */
00473 
00474 /* BSD Socket Protocol */
00475 #define IPPROTO_TCP        1      /* TCP Protocol                            */
00476 #define IPPROTO_UDP        2      /* UDP Protocol                            */
00477 
00478 /* BSD Internet Addresses */
00479 #define INADDR_ANY     0x00000000 /* All IP addresses accepted               */
00480 #define INADDR_NONE    0xffffffff /* No IP address accepted                  */
00481 
00482 /* BSD Socket Return values */
00483 #define SCK_SUCCESS         0     /* Success                                 */
00484 #define SCK_ERROR         (-1)    /* General Error                           */
00485 #define SCK_EINVALID      (-2)    /* Invalid socket descriptor               */
00486 #define SCK_EINVALIDPARA  (-3)    /* Invalid parameter                       */
00487 #define SCK_EWOULDBLOCK   (-4)    /* It would have blocked.                  */
00488 #define SCK_EMEMNOTAVAIL  (-5)    /* Not enough memory in memory pool        */
00489 #define SCK_ECLOSED       (-6)    /* Connection is closed or aborted         */
00490 #define SCK_ELOCKED       (-7)    /* Socket is locked in RTX environment     */
00491 #define SCK_ETIMEOUT      (-8)    /* Socket, Host Resolver timeout           */
00492 #define SCK_EINPROGRESS   (-9)    /* Host Name resolving in progress         */
00493 #define SCK_ENONAME       (-10)   /* Host Name not existing                  */
00494 
00495 /* BSD Socket flags parameter */
00496 #define MSG_DONTWAIT       0x01   /* Enables non-blocking operation          */
00497 #define MSG_PEEK           0x02   /* Peeks at the incoming data              */
00498 
00499 /* BSD Socket ioctl commands */
00500 #define FIONBIO            1      /* Set mode (blocking/non-blocking)        */
00501 #define FIO_DELAY_ACK      2      /* Set DELAY_ACK mode for stream socket    */
00502 #define FIO_KEEP_ALIVE     3      /* Set KEEP_ALIVE mode for stream socket   */
00503 #define FIO_FLOW_CTRL      4      /* Set FLOW_CTRL mode for stream socket    */
00504 
00505 /* ICMP (ping) Callback Events */
00506 #define ICMP_EVT_SUCCESS   0      /* Pinged Host responded                   */
00507 #define ICMP_EVT_TIMEOUT   1      /* Timeout, no ping response received      */
00508 
00509 /* DNS Client Callback Events */
00510 #define DNS_EVT_SUCCESS    0      /* Host name successfully resolved         */
00511 #define DNS_EVT_NONAME     1      /* DNS Error, no such name                 */
00512 #define DNS_EVT_TIMEOUT    2      /* Timeout resolving host                  */
00513 #define DNS_EVT_ERROR      3      /* Erroneous response packet               */
00514 
00515 /* DNS 'get_host_by_name()' result codes */
00516 #define DNS_RES_OK         0      /* Resolver successfully started           */
00517 #define DNS_ERROR_BUSY     1      /* Resolver busy, can't process request    */
00518 #define DNS_ERROR_LABEL    2      /* Label in Hostname not valid             */
00519 #define DNS_ERROR_NAME     3      /* Entire Hostname not valid               */
00520 #define DNS_ERROR_NOSRV    4      /* Prim. DNS server not specified (0.0.0.0)*/
00521 #define DNS_ERROR_PARAM    5      /* Invalid parameter                       */
00522 
00523 /* SMTP Client Callback Events */
00524 #define SMTP_EVT_SUCCESS   0      /* Email successfully sent                 */
00525 #define SMTP_EVT_TIMEOUT   1      /* Timeout sending email                   */
00526 #define SMTP_EVT_ERROR     2      /* Error when sending email                */
00527 
00528 /* FTP Client Commands */
00529 #define FTPC_CMD_PUT       0      /* Puts a file on FTP server               */
00530 #define FTPC_CMD_GET       1      /* Retrieves a file from FTP server        */
00531 #define FTPC_CMD_APPEND    2      /* Append file on FTP server (with create) */
00532 #define FTPC_CMD_DELETE    3      /* Deletes a file on FTP server            */
00533 #define FTPC_CMD_LIST      4      /* Lists files stored on FTP server        */
00534 #define FTPC_CMD_RENAME    5      /* Renames a file on FTP server            */
00535 #define FTPC_CMD_MKDIR     6      /* Makes a directory on FTP server         */
00536 #define FTPC_CMD_RMDIR     7      /* Removes an empty directory on FTP server*/
00537 
00538 /* FTP Client Callback Events */
00539 #define FTPC_EVT_SUCCESS   0      /* File operation successful               */
00540 #define FTPC_EVT_TIMEOUT   1      /* Timeout on file operation               */
00541 #define FTPC_EVT_LOGINFAIL 2      /* Login error, username/passw invalid     */
00542 #define FTPC_EVT_NOACCESS  3      /* File access not allowed                 */
00543 #define FTPC_EVT_NOTFOUND  4      /* File not found                          */
00544 #define FTPC_EVT_NOPATH    5      /* Working directory path not found        */
00545 #define FTPC_EVT_ERRLOCAL  6      /* Local file open error                   */
00546 #define FTPC_EVT_ERROR     7      /* Generic FTP client error                */
00547 
00548 /* TFTP Client Callback Events */
00549 #define TFTPC_EVT_SUCCESS  0      /* File operation successful               */
00550 #define TFTPC_EVT_TIMEOUT  1      /* Timeout on file operation               */
00551 #define TFTPC_EVT_NOACCESS 2      /* File access not allowed                 */
00552 #define TFTPC_EVT_NOTFOUND 3      /* File not found                          */
00553 #define TFTPC_EVT_DISKFULL 4      /* Disk full (local or remote)             */
00554 #define TFTPC_EVT_ERROR    5      /* Generic TFTP client error               */
00555 
00556 /* ARP Cache Entry types */
00557 #define ARP_FIXED_IP       0      /* Fixed IP adrs is refreshed after tout   */
00558 #define ARP_TEMP_IP        1      /* Temp adrs is removed after timeout      */
00559 
00560 /* BSD Socket typedef's */
00561 typedef struct sockaddr {         /* << Generic Socket Address structure >>  */
00562   U16  sa_family;                 /* Address family                          */
00563   char sa_data[14];               /* Direct address (up to 14 bytes)         */
00564 } SOCKADDR;
00565 
00566 #pragma push
00567 #pragma anon_unions
00568 
00569 typedef struct in_addr {          /* << Generic IPv4 Address structure >>    */
00570   union {
00571     struct {
00572       U8 s_b1,s_b2,s_b3,s_b4;     /* IP address, byte access                 */
00573     };
00574     struct {
00575       U16 s_w1,s_w2;              /* IP address, short int access            */
00576     };
00577     U32 s_addr;                   /* IP address in network byte order        */
00578   };
00579 } IN_ADDR;
00580 #pragma pop
00581 
00582 typedef struct sockaddr_in {      /* << IPv4 Socket Address structure >>     */
00583   S16 sin_family;                 /* Socket domain                           */
00584   U16 sin_port;                   /* Port                                    */
00585   IN_ADDR sin_addr;               /* IP address                              */
00586   S8  sin_zero[8];                /* reserved                                */
00587 } SOCKADDR_IN;
00588 
00589 typedef struct hostent {          /* << BSD Host Entry structure >>          */
00590   char *h_name;                   /* Official name of host                   */
00591   char **h_aliases;               /* Pointer to an array of alias names      */
00592   S16  h_addrtype;                /* Address Type: AF_INET, AF_NETBIOS       */
00593   S16  h_length;                  /* Length of address in bytes              */
00594   char **h_addr_list;             /* Pointer to an array of IPv4 addresses   */
00595 } HOSTENT;
00596 
00597 extern void init_TcpNet (void);
00598 extern BOOL main_TcpNet (void);
00599 extern void timer_tick (void);
00600 extern U8   udp_get_socket (U8 tos, U8 opt,
00601                             U16 (*listener)(U8 socket, U8 *remip, U16 port, U8 *buf, U16 len));
00602 extern BOOL udp_release_socket (U8 socket);
00603 extern BOOL udp_open (U8 socket, U16 locport);
00604 extern BOOL udp_close (U8 socket);
00605 extern BOOL udp_mcast_ttl (U8 socket, U8 ttl);
00606 extern U8  *udp_get_buf (U16 size);
00607 extern BOOL udp_send (U8 socket, U8 *remip, U16 remport, U8 *buf, U16 dlen);
00608 extern U8   tcp_get_socket (U8 type, U8 tos, U16 tout,
00609                             U16 (*listener)(U8 socket, U8 event, U8 *buf, U16 len));
00610 extern BOOL tcp_release_socket (U8 socket);
00611 extern BOOL tcp_listen (U8 socket, U16 locport);
00612 extern BOOL tcp_connect (U8 socket, U8 *remip, U16 remport, U16 locport);
00613 extern U8  *tcp_get_buf (U16 size);
00614 extern U16  tcp_max_dsize (U8 socket);
00615 extern BOOL tcp_check_send (U8 socket);
00616 extern U8   tcp_get_state (U8 socket);
00617 extern BOOL tcp_send (U8 socket, U8 *buf, U16 dlen);
00618 extern BOOL tcp_close (U8 socket);
00619 extern BOOL tcp_abort (U8 socket);
00620 extern void tcp_reset_window (U8 socket);
00621 extern BOOL arp_cache_ip (U8 *ipadr, U8 type);
00622 extern BOOL arp_cache_mac (U8 *hwadr);
00623 extern void ppp_listen (const char *user, const char *passw);
00624 extern void ppp_connect (const char *dialnum, const char *user, const char *passw);
00625 extern void ppp_close (void);
00626 extern BOOL ppp_is_up (void);
00627 extern void slip_listen (void);
00628 extern void slip_connect (const char *dialnum);
00629 extern void slip_close (void);
00630 extern BOOL slip_is_up (void);
00631 extern U8   get_host_by_name (U8 *hostn, void (*cbfunc)(U8 event, U8 *host_ip));
00632 extern BOOL smtp_connect (U8 *ipadr, U16 port, void (*cbfunc)(U8 event));
00633 extern void dhcp_disable (void);
00634 extern BOOL igmp_join (U8 *group_ip);
00635 extern BOOL igmp_leave (U8 *group_ip);
00636 extern BOOL snmp_trap (U8 *manager_ip, U8 gen_trap, U8 spec_trap, U16 *obj_list);
00637 extern BOOL snmp_set_community (const char *community);
00638 extern BOOL icmp_ping (U8 *remip, void (*cbfunc)(U8 event));
00639 extern BOOL ftpc_connect (U8 *ipadr, U16 port, U8 command, void (*cbfunc)(U8 event));
00640 extern BOOL tftpc_put (U8 *ipadr, U16 port,
00641                        const char *src, const char *dst, void (*cbfunc)(U8 event));
00642 extern BOOL tftpc_get (U8 *ipadr, U16 port,
00643                        const char *src, const char *dst, void (*cbfunc)(U8 event));
00644 extern BOOL sntp_get_time (U8 *ipadr, void (*cbfunc)(U32 utc_time));
00645 
00646 /* BSD Socket API */
00647 extern int  socket (int family, int type, int protocol);
00648 extern int  bind (int sock, const SOCKADDR *addr, int addrlen);
00649 extern int  listen (int sock, int backlog);
00650 extern int  accept (int sock, SOCKADDR *addr, int *addrlen);
00651 extern int  connect (int sock, SOCKADDR *addr, int addrlen);
00652 extern int  send (int sock, const char *buf, int len, int flags);
00653 extern int  sendto (int sock, const char *buf, int len, int flags, SOCKADDR *to, int tolen);
00654 extern int  recv (int sock, char *buf, int len, int flags);
00655 extern int  recvfrom (int sock, char *buf, int len, int flags, SOCKADDR *from, int *fromlen);
00656 extern int  closesocket (int sock);
00657 extern int  getpeername (int sock, SOCKADDR *name, int *namelen);
00658 extern int  getsockname (int sock, SOCKADDR *name, int *namelen);
00659 extern int  ioctlsocket (int sock, long cmd, unsigned long *argp);
00660 extern HOSTENT *gethostbyname (const char *name, int *err);
00661 
00662 #ifdef __cplusplus
00663 }
00664 #endif
00665 
00666 /*----------------------------------------------------------------------------
00667  * end of file
00668  *---------------------------------------------------------------------------*/
00669 
00670 #endif
00671