NyLPC_TUInt8* wp;\r
NyLPC_ArgAssert(NyLPC_cFifoBuffer_getSpace(i_inst)>=i_data_len);\r
\r
- wp=(i_inst->buf)+i_inst->len;\r
+ wp=((NyLPC_TUInt8*)(i_inst->buf))+i_inst->len;\r
memcpy(wp,i_data,i_data_len);\r
i_inst->len+=i_data_len;\r
}\r
NyLPC_TUInt8* wp;\r
NyLPC_TUInt8* rp;\r
NyLPC_ArgAssert(NyLPC_cFifoBuffer_getLength(i_inst)>=i_len);\r
- wp=i_inst->buf;\r
+ wp=(NyLPC_TUInt8*)i_inst->buf;\r
rp=wp+i_len;\r
i_inst->len-=i_len;\r
memmove(wp,rp,i_inst->len);\r
NyLPC_TBool NyLPC_cPtrStream_writeInt(NyLPC_TcPtrStream_t* i_inst,NyLPC_TInt32 i_val,NyLPC_TUInt32 i_wait_msec,NyLPC_TUInt32 i_base)\r
{\r
NyLPC_TChar v[12];\r
- itoa(i_val,v,i_base);\r
+ NyLPC_itoa(i_val,v,i_base);\r
if(NyLPC_cPtrStream_write(i_inst,v,strlen(v),i_wait_msec)){\r
return NyLPC_TBool_TRUE;\r
}\r
* <airmail(at)ebony.plala.or.jp> or <nyatla(at)nyatla.jp>\r
*\r
*********************************************************************************/\r
-#ifndef NyLPC_cBlockingStream_protected_h\r
-#define NyLPC_cBlockingStream_protected_h\r
+#ifndef NyLPC_cPtrStream_protected_h\r
+#define NyLPC_cPtrStream_protected_h\r
#include "NyLPC_cPtrStream.h"\r
\r
#ifdef __cplusplus\r
\r
\r
\r
-extern struct NyLPC_TcBlockingStream_TInterface NyLPC_TcBlockingStream_Interface;\r
-\r
-\r
NyLPC_TInt32 NyLPC_cPtrStream_pread_func(NyLPC_TcPtrStream_t* i_inst,const void** o_buf_ptr,NyLPC_TUInt32 i_wait_msec);\r
NyLPC_TBool NyLPC_cPtrStream_write_func(NyLPC_TcPtrStream_t* i_inst,const void* i_data,NyLPC_TInt16 i_length,NyLPC_TUInt32 i_wait_msec);\r
void NyLPC_cPtrStream_pseek_func(NyLPC_TcPtrStream_t* i_inst,NyLPC_TUInt16 i_seek);\r
*********************************************************************************/\r
#include "NyLPC_cPtrTbl.h"\r
\r
-void NyLPC_cPtrTbl_initialize(NyLPC_TcPtrTbl_t* i_inst,void* i_buf,NyLPC_TUInt16 i_size)\r
+void NyLPC_cPtrTbl_initialize(NyLPC_TcPtrTbl_t* i_inst,void** i_buf,NyLPC_TUInt16 i_size)\r
{\r
i_inst->size=i_size;\r
i_inst->len=0;\r
return;\r
}\r
\r
-NyLPC_TUInt16 NyLPC_cPtrTbl_add(NyLPC_TcPtrTbl_t* i_inst,void* i_val)\r
+NyLPC_TInt16 NyLPC_cPtrTbl_add(NyLPC_TcPtrTbl_t* i_inst,void* i_val)\r
{\r
int i;\r
void** p=i_inst->buf;\r
return;\r
}\r
\r
-NyLPC_TUInt16 NyLPC_cPtrTbl_getIndex(NyLPC_TcPtrTbl_t* i_inst,void* i_val)\r
+NyLPC_TInt16 NyLPC_cPtrTbl_getIndex(NyLPC_TcPtrTbl_t* i_inst,void* i_val)\r
{\r
int i;\r
void** p=i_inst->buf;\r
* 現在の要素数を返します。\r
* この数は、テーブルに存在する有効なポインタの数です。\r
*/\r
-NyLPC_TUInt16 NyLPC_cPtrTbl_getLength(NyLPC_TcPtrTbl_t* i_inst)\r
+NyLPC_TInt16 NyLPC_cPtrTbl_getLength(NyLPC_TcPtrTbl_t* i_inst)\r
{\r
return i_inst->len;\r
}\r
* @param i_size\r
* テーブルのサイズを指定します。\r
*/\r
-void NyLPC_cPtrTbl_initialize(NyLPC_TcPtrTbl_t* i_inst,void* i_buf,NyLPC_TUInt16 i_size);\r
+void NyLPC_cPtrTbl_initialize(NyLPC_TcPtrTbl_t* i_inst,void** i_buf,NyLPC_TUInt16 i_size);\r
\r
void* NyLPC_cPtrTbl_get(NyLPC_TcPtrTbl_t* i_inst,NyLPC_TUInt16 i_index);\r
\r
* 追加した要素のインデクス番号を返します。\r
* 失敗した場合、-1を返します。\r
*/\r
-NyLPC_TUInt16 NyLPC_cPtrTbl_add(NyLPC_TcPtrTbl_t* i_inst,void* i_val);\r
+NyLPC_TInt16 NyLPC_cPtrTbl_add(NyLPC_TcPtrTbl_t* i_inst,void* i_val);\r
\r
void NyLPC_cPtrTbl_remove(NyLPC_TcPtrTbl_t* i_inst,NyLPC_TUInt16 i_index);\r
\r
/**\r
* 現在の長さを返します。
*/\r
-NyLPC_TUInt16 NyLPC_cPtrTbl_getLength(NyLPC_TcPtrTbl_t* i_inst);\r
+NyLPC_TInt16 NyLPC_cPtrTbl_getLength(NyLPC_TcPtrTbl_t* i_inst);\r
\r
/**\r
* 空き領域の有無を返します。
/**\r
* ポインタに一致するインデクスを返します。
*/\r
-NyLPC_TUInt16 NyLPC_cPtrTbl_getIndex(NyLPC_TcPtrTbl_t* i_inst,void* i_val);\r
+NyLPC_TInt16 NyLPC_cPtrTbl_getIndex(NyLPC_TcPtrTbl_t* i_inst,void* i_val);\r
\r
#ifdef __cplusplus\r
}\r
printf("\n");\r
}\r
#else\r
-#error Bad NyLPC_ARCH!\r
#endif\r
\r
void NyLPC_cRingBuffer_reset(NyLPC_TcRingBuffer_t* i_inst)\r
\r
int NyLPC_cRingBuffer_write(NyLPC_TcRingBuffer_t* i_inst,NyLPC_TUInt8* i_data,const int i_len)\r
{\r
- NyLPC_TUInt8* s=i_inst->buf;\r
+ NyLPC_TUInt8* s=(NyLPC_TUInt8*)i_inst->buf;\r
NyLPC_TUInt8* p;\r
NyLPC_TUInt16 wo=i_inst->wo;\r
NyLPC_TUInt16 ro=i_inst->ro;\r
{\r
NyLPC_TUInt16 ro=i_inst->ro;\r
*len=NyLPC_cRingBuffer_getReadableSize(i_inst);\r
- return i_inst->buf+ro;\r
+ return ((NyLPC_TUInt8*)(i_inst->buf))+ro;\r
}\r
\r
//前方シークする。\r
*/\r
void NyLPC_cRingBuffer_dump(NyLPC_TcRingBuffer_t* i_inst);\r
#else\r
-#error Bad NyLPC_ARCH!\r
#endif\r
\r
\r
NyLPC_ArgAssert(i_length>0);\r
NyLPC_ArgAssert(i_packetsize>0);\r
i_inst->_super._interface=&NyLPC_TcRomPtrStream_Interface;\r
- i_inst->_rom=i_rom_addr;\r
+ i_inst->_rom=(NyLPC_TChar*)i_rom_addr;\r
i_inst->_rom_size=i_length;\r
i_inst->_packet_size=i_packetsize;\r
return NyLPC_TBool_TRUE;\r
i_struct->ptr=i_ptr;\r
i_struct->len=i_len;\r
}\r
+\r
+\r
+void NyLPC_itoa(int i_n,char* o_out,int i_digit)\r
+{\r
+ int i, sign;\r
+ if ((sign = i_n) < 0){\r
+ i_n = -i_n;\r
+ }\r
+ i = 0;\r
+ do{\r
+ o_out[i++] = i_n % 10 + '0';\r
+ }while ((i_n /= 10) > 0);\r
+ if (sign < 0){\r
+ o_out[i++] = '-';\r
+ }\r
+ o_out[i] = '\0';\r
+ NyLPC_reverse(o_out);\r
+}\r
+\r
+void NyLPC_reverse(char* s)\r
+{\r
+ char *j;\r
+ char c;\r
+ j = s + strlen(s) - 1;\r
+ while(s < j){\r
+ c = *s;\r
+ *s++ = *j;\r
+ *j-- = c;\r
+ }\r
+}\r
#define IEthernetDevice_h\r
#include "../../uip/NyLPC_uip.h"\r
#include "NyLPC_stdlib.h"\r
+//#include "../../uip/NyLPC_uip_ethernet.h"\r
\r
\r
#ifdef __cplusplus\r
NyLPC_cHttpBodyWriter_write(i_inst,wk,ol);\r
ol=0;\r
}\r
- itoa((va_arg(args,int)),wk,10);\r
+ NyLPC_itoa((va_arg(args,int)),wk,10);\r
//強制コミット\r
NyLPC_cHttpBodyWriter_write(i_inst,wk,strlen(wk));\r
rp++;\r
NyLPC_cHttpBodyWriter_write(i_inst,wk,ol);\r
ol=0;\r
}\r
- itoa((va_arg(args,int)),wk,16);\r
+ NyLPC_itoa((va_arg(args,int)),wk,16);\r
//強制コミット\r
NyLPC_cHttpBodyWriter_write(i_inst,wk,strlen(wk));\r
rp++;\r
if(!NyLPC_iHttpPtrStream_write(i_inst->_ref_stream,"HTTP/1.1 ",9)){\r
NyLPC_OnErrorGoto(Error);\r
}\r
- itoa(i_status,v,10);\r
+ NyLPC_itoa(i_status,v,10);\r
if(!NyLPC_iHttpPtrStream_write(i_inst->_ref_stream,v,-1)){\r
NyLPC_OnErrorGoto(Error);\r
}\r
if(!NyLPC_iHttpPtrStream_write(i_inst->_ref_stream,"Content-Length: ",-1)){\r
NyLPC_OnErrorGoto(Error);\r
}\r
- itoa(i_inst->_content_length,v,10);\r
+ NyLPC_itoa(i_inst->_content_length,v,10);\r
if(!writeln(i_inst->_ref_stream,v,-1)){\r
NyLPC_OnErrorGoto(Error);\r
}\r
\r
\r
/*********************************************************************************\r
- *\r
+ * standard function\r
*********************************************************************************/\r
+void NyLPC_itoa(int i_n,char* o_out,int i_digit);\r
+void NyLPC_reverse(char* s);\r
\r
+/*********************************************************************************\r
+ *\r
+ *********************************************************************************/\r
\r
#include "../NyLPC_cRingBuffer.h"\r
#include "../NyLPC_cPtrTbl.h"\r
/**\r
* 全ての割込みとタスクスイッチを停止します。\r
*/\r
-#define NyLPC_cIsr_enterCritical() portENTER_CRITICAL()\r
+inline void NyLPC_cIsr_enterCritical();\r
/**\r
* 全ての割込みとタスクスイッチを再開します。\r
*/\r
-#define NyLPC_cIsr_exitCritical() portEXIT_CRITICAL()\r
-/*\r
-void NyLPC_cIsr_setIRqHandler(int i_num,void* function)\r
-{\r
+inline void NyLPC_cIsr_exitCritical();\r
\r
-}*/\r
\r
#ifdef __cplusplus\r
}\r
/**\r
* このクラスは、経過時間を計算する関数を提供します。
*/\r
+#if NyLPC_ARCH==NyLPC_ARCH_FREERTOS\r
+\r
struct NyLPC_TcStopwatch\r
{\r
NyLPC_TUInt32 _tick;\r
NyLPC_TUInt32 _ex_timeout;\r
};\r
+#else\r
+#error Bad NyLPC_ARCH!\r
+#endif\r
+\r
/**\r
* 現在のtickCountを返します。\r
*/\r
NyLPC_TcIPv4_t* i_inst)\r
{\r
//内部テーブルの初期化\r
- cListenerTbl_initialize(&(i_inst->_listener_tbl),i_inst->_listener_array_buf);\r
- cSocketTbl_initialize(&(i_inst->_socket_tbl),i_inst->_socket_array_buf);\r
+ cListenerTbl_initialize(&(i_inst->_listener_tbl),(void**)(i_inst->_listener_array_buf));\r
+ cSocketTbl_initialize(&(i_inst->_socket_tbl),(void**)(i_inst->_socket_array_buf));\r
//instanceの初期化\r
i_inst->_ref_config=NULL;\r
return;\r
NyLPC_TcIPv4_t* i_inst,\r
NyLPC_TcTcpSocket_t* i_sock)\r
{\r
- NyLPC_TUInt16 i;\r
+ NyLPC_TInt16 i;\r
NyLPC_Assert(!NyLPC_cUipService_isRun());\r
i=NyLPC_cPtrTbl_getIndex(&(i_inst->_socket_tbl),i_sock);\r
if(i>=0){\r
NyLPC_TcIPv4_t* i_inst,\r
NyLPC_TcTcpListener_t* i_listener)\r
{\r
- NyLPC_TUInt16 i;\r
+ NyLPC_TInt16 i;\r
NyLPC_Assert(!NyLPC_cUipService_isRun());\r
i=NyLPC_cPtrTbl_getIndex(&(i_inst->_listener_tbl),i_listener);\r
if(i>=0){\r
extern "C" {\r
#endif /* __cplusplus */\r
\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
/**\r
* クラス型を定義します。\r
* NyLPC_cIPv4クラスは、NyLPC_cUipServiceクラスの一部として働きます。\r
{\r
struct NyLPC_TArpHeader* arph=(struct NyLPC_TArpHeader*)(((NyLPC_TUInt8*)i_struct)+sizeof(struct NyLPC_TEthernetIIHeader));\r
\r
- NyLPC_Assert(arph->opcode = NyLPC_HTONS(2));\r
i_struct->type = NyLPC_HTONS(UIP_ETHTYPE_ARP);\r
switch(arph->opcode){\r
case NyLPC_HTONS(ARP_REPLY):\r