Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
RTL.h
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
Generated on Tue Jul 12 2022 15:37:23 by
1.7.2