NyLPC_Assert(NyLPC_TcUipService_isInitService());\r
\r
NyLPC_cFifoBuffer_initialize(&(i_inst->rxbuf),i_rbuf,i_rbuf_len);\r
- // NyLPC_AbortIfNot(NyLPC_cMutex_initialize(&(i_inst->_smutex)));\r
- i_inst->_smutex=NyLPC_cIPv4_getSockMutex(&(srv->_tcpv4));\r
+ // NyLPC_AbortIfNot(NyLPC_cMutex_initialize(&(i_inst->_smutex)));//個別Mutex\r
+ i_inst->_smutex=NyLPC_cIPv4_getSockMutex(&(srv->_tcpv4));//共有Mutex\r
i_inst->tcpstateflags=UIP_CLOSED;\r
i_inst->txbuf.rp=i_inst->txbuf.wp=0;\r
for(i=0;i<NyLPC_TcTcpSocket_NUMBER_OF_TXQ;i++){\r
return;\r
}\r
\r
-/**\r
- * この関数は、NyLPC_cTcpListenerが呼び出すシステムAPIです。\r
- * uipコアタスクが実行します。\r
- * ソケットを、SYNパケットで初期化して、UIP_SYN_RECV状態にします。\r
- * @return\r
- * 遷移に成功すると、TRUEを返します。\r
- */\r
+\r
NyLPC_TBool NyLPC_cTcpSocket_setSynPayload(NyLPC_TcTcpSocket_t* i_inst,const NyLPC_TcIPv4Payload_t* i_ipp)\r
{\r
NyLPC_TUInt16 tmp16;\r
- //ソケットが無効であること。\r
+// NyLPC_Assert(NyLPC_cMutex_isLocked(i_inst->_smutex));\r
lockResource(i_inst);\r
+ //ソケットが無効であること。\r
if(i_inst->tcpstateflags==UIP_CLOSED)\r
{\r
//localipとdefault_mmsは別枠で設定\r
}\r
\r
/**\r
- * 定期的に実行する関数。最低でも1s単位で実行してください。\r
* uipサービスタスクが実行する関数です。\r
+ * 定期的に実行する関数。最低でも1s単位で実行してください。\r
*/\r
void NyLPC_cTcpSocket_periodic(\r
NyLPC_TcTcpSocket_t* i_inst)\r
NyLPC_cStopwatch_finalize(&sw);\r
return;\r
}\r
-\r
+/**\r
+ * uipサービスタスクが実行する関数です。\r
+ * サービスの開始を通知します。\r
+ */\r
+void NyLPC_cTcpSocket_startService(NyLPC_TcTcpSocket_t* i_inst,const NyLPC_TcIPv4Config_t* i_config)\r
+{\r
+ NyLPC_Assert(i_inst->tcpstateflags==UIP_CLOSED);//閉じてなければおかしい。\r
+ i_inst->uip_connr.lipaddr=&(i_config->ip_addr);\r
+ i_inst->uip_connr.default_mss=i_config->default_mss;\r
+ //NyLPC_cTcpSocket_setSynPayload関数でも実行するけど、IFのリセット時なのでここでもやる。\r
+ NyLPC_cFifoBuffer_clear(&(i_inst->rxbuf));\r
+ return;\r
+}\r
+/**\r
+ * uipサービスタスクが実行する関数です。\r
+ * サービスの停止を通知します。\r
+ */\r
+void NyLPC_cTcpSocket_stopService(NyLPC_TcTcpSocket_t* i_inst)\r
+{\r
+ lockResource(i_inst);\r
+ if(i_inst->tcpstateflags==UIP_CLOSED)\r
+ {\r
+ unlockResource(i_inst);\r
+ }else{\r
+ i_inst->tcpstateflags=UIP_CLOSED;\r
+ resetTxQWithUnlock(i_inst);\r
+ sendRst(i_inst);\r
+ }\r
+ return;\r
+}\r
\r
/**\r
* この関数は、rxパケットを処理して、ソケットの状態を更新します。\r
return NyLPC_TBool_FALSE;\r
}\r
\r
-void NyLPC_cTcpSocket_updateConfigulation(NyLPC_TcTcpSocket_t* i_inst,const NyLPC_TcIPv4Config_t* i_config)\r
-{\r
- i_inst->uip_connr.lipaddr=&(i_config->ip_addr);\r
- i_inst->uip_connr.default_mss=i_config->default_mss;\r
- return;\r
-}\r
+\r
\r
\r
\r