This is Webservice SDK for mbed. LPCXpresso1769/LPC1768/FRDM-K64F/LPC4088

Fork of libMiMic by Ryo Iizuka

Committer:
furutani
Date:
Fri Feb 24 04:43:41 2017 +0000
Revision:
115:fa79286d8ea4
Parent:
57:bc4330dfa62f
Delete missing include line.; Add parameter "timeout" to TCPSocket::connect(), precv().; Fix to send ARP request to default gateway when connecting to IP address of different segment.;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nyatla 0:142ee8b12fef 1 /*********************************************************************************
nyatla 0:142ee8b12fef 2 * PROJECT: MiMic
nyatla 0:142ee8b12fef 3 * --------------------------------------------------------------------------------
nyatla 0:142ee8b12fef 4 *
nyatla 0:142ee8b12fef 5 * This file is part of MiMic
nyatla 0:142ee8b12fef 6 * Copyright (C)2011 Ryo Iizuka
nyatla 0:142ee8b12fef 7 *
nyatla 0:142ee8b12fef 8 * MiMic is free software: you can redistribute it and/or modify
nyatla 0:142ee8b12fef 9 * it under the terms of the GNU Lesser General Public License as published
nyatla 0:142ee8b12fef 10 * by the Free Software Foundation, either version 3 of the License, or
nyatla 0:142ee8b12fef 11 * (at your option) any later version.
nyatla 0:142ee8b12fef 12 *
nyatla 0:142ee8b12fef 13 * This program is distributed in the hope that it will be useful,
nyatla 0:142ee8b12fef 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
nyatla 0:142ee8b12fef 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
nyatla 0:142ee8b12fef 16 * GNU General Public License for more details.
nyatla 0:142ee8b12fef 17 *
nyatla 0:142ee8b12fef 18 * You should have received a copy of the GNU Lesser General Public License
nyatla 0:142ee8b12fef 19 * along with this program. If not, see <http://www.gnu.org/licenses/>.
nyatla 0:142ee8b12fef 20 *
nyatla 0:142ee8b12fef 21 * For further information please contact.
nyatla 0:142ee8b12fef 22 * http://nyatla.jp/
nyatla 0:142ee8b12fef 23 * <airmail(at)ebony.plala.or.jp> or <nyatla(at)nyatla.jp>
nyatla 0:142ee8b12fef 24 *
nyatla 0:142ee8b12fef 25 *********************************************************************************/
nyatla 0:142ee8b12fef 26 #include "NyLPC_cRingBuffer.h"
nyatla 0:142ee8b12fef 27
nyatla 0:142ee8b12fef 28
nyatla 0:142ee8b12fef 29 #if NyLPC_ARCH==NyLPC_ARCH_FREERTOS
nyatla 0:142ee8b12fef 30 #elif NyLPC_ARCH==NyLPC_ARCH_WIN32
nyatla 0:142ee8b12fef 31 void NyLPC_cRingBuffer_dump(NyLPC_TcRingBuffer_t* i_inst)
nyatla 0:142ee8b12fef 32 {
nyatla 0:142ee8b12fef 33 NyLPC_TUInt8* s=((NyLPC_TUInt8*)(i_inst+1));//バッファ開始位置
nyatla 0:142ee8b12fef 34 int i;
nyatla 0:142ee8b12fef 35 if(i_inst->ro<=i_inst->wo){
nyatla 0:142ee8b12fef 36 for(i=0;i<i_inst->ro;i++){
nyatla 0:142ee8b12fef 37 printf("-- ");
nyatla 0:142ee8b12fef 38 }
nyatla 0:142ee8b12fef 39 for(i=i_inst->ro;i<i_inst->wo;i++){
nyatla 0:142ee8b12fef 40 printf("%02X ",*(s+i));
nyatla 0:142ee8b12fef 41 }
nyatla 0:142ee8b12fef 42 for(i=i_inst->wo;i<i_inst->bl;i++){
nyatla 0:142ee8b12fef 43 printf("-- ");
nyatla 0:142ee8b12fef 44 }
nyatla 0:142ee8b12fef 45 }else{
nyatla 0:142ee8b12fef 46 for(i=0;i<i_inst->wo;i++){
nyatla 0:142ee8b12fef 47 printf("%02X ",*(s+i));
nyatla 0:142ee8b12fef 48 }
nyatla 0:142ee8b12fef 49 for(i=i_inst->wo;i<i_inst->ro;i++){
nyatla 0:142ee8b12fef 50 printf("-- ");
nyatla 0:142ee8b12fef 51 }
nyatla 0:142ee8b12fef 52 for(i=i_inst->ro;i<i_inst->bl;i++){
nyatla 0:142ee8b12fef 53 printf("%02X ",*(s+i));
nyatla 0:142ee8b12fef 54 }
nyatla 0:142ee8b12fef 55 }
nyatla 0:142ee8b12fef 56 printf("\n");
nyatla 0:142ee8b12fef 57 }
nyatla 0:142ee8b12fef 58 #else
nyatla 0:142ee8b12fef 59 #endif
nyatla 0:142ee8b12fef 60
nyatla 0:142ee8b12fef 61 void NyLPC_cRingBuffer_reset(NyLPC_TcRingBuffer_t* i_inst)
nyatla 0:142ee8b12fef 62 {
nyatla 0:142ee8b12fef 63 i_inst->ro=i_inst->wo=0;
nyatla 0:142ee8b12fef 64 }
nyatla 0:142ee8b12fef 65
nyatla 0:142ee8b12fef 66 NyLPC_TInt16 NyLPC_cRingBuffer_getReadableSize(NyLPC_TcRingBuffer_t* i_inst)
nyatla 0:142ee8b12fef 67 {
nyatla 0:142ee8b12fef 68 volatile NyLPC_TUInt16 wo=(i_inst)->wo;
nyatla 0:142ee8b12fef 69 volatile NyLPC_TUInt16 ro=(i_inst)->ro;
nyatla 0:142ee8b12fef 70 if(wo>=ro)
nyatla 0:142ee8b12fef 71 {
nyatla 0:142ee8b12fef 72 return wo-ro;
nyatla 0:142ee8b12fef 73 }else{
nyatla 0:142ee8b12fef 74 return (i_inst)->bl-ro;
nyatla 0:142ee8b12fef 75 }
nyatla 0:142ee8b12fef 76 }
nyatla 0:142ee8b12fef 77
nyatla 0:142ee8b12fef 78 NyLPC_TInt16 NyLPC_cRingBuffer_getWritableSize(const NyLPC_TcRingBuffer_t* i_inst)
nyatla 0:142ee8b12fef 79 {
nyatla 0:142ee8b12fef 80 volatile NyLPC_TUInt16 wo=(i_inst)->wo;
nyatla 0:142ee8b12fef 81 volatile NyLPC_TUInt16 ro=(i_inst)->ro;
nyatla 0:142ee8b12fef 82 if(wo>=ro){
nyatla 0:142ee8b12fef 83 //書込み可能サイズの計算
nyatla 0:142ee8b12fef 84 return i_inst->bl-(wo-ro)-1;
nyatla 0:142ee8b12fef 85 }else{
nyatla 0:142ee8b12fef 86 return ro-wo-1;
nyatla 0:142ee8b12fef 87 }
nyatla 0:142ee8b12fef 88
nyatla 0:142ee8b12fef 89 }
nyatla 0:142ee8b12fef 90
nyatla 0:142ee8b12fef 91 void NyLPC_cRingBuffer_initialize(NyLPC_TcRingBuffer_t* i_inst,void* i_buf,NyLPC_TUInt16 sizeof_buf)
nyatla 0:142ee8b12fef 92 {
nyatla 0:142ee8b12fef 93 //バッファの開始位置と終了位置の計算
nyatla 0:142ee8b12fef 94 i_inst->bl=sizeof_buf;
nyatla 0:142ee8b12fef 95 i_inst->ro=0;
nyatla 0:142ee8b12fef 96 i_inst->wo=0;
nyatla 0:142ee8b12fef 97 i_inst->buf=i_buf;
nyatla 0:142ee8b12fef 98 }
nyatla 0:142ee8b12fef 99
nyatla 0:142ee8b12fef 100 int NyLPC_cRingBuffer_write(NyLPC_TcRingBuffer_t* i_inst,NyLPC_TUInt8* i_data,const int i_len)
nyatla 0:142ee8b12fef 101 {
nyatla 0:142ee8b12fef 102 NyLPC_TUInt8* s=(NyLPC_TUInt8*)i_inst->buf;
nyatla 0:142ee8b12fef 103 NyLPC_TUInt8* p;
nyatla 0:142ee8b12fef 104 NyLPC_TUInt16 wo=i_inst->wo;
nyatla 0:142ee8b12fef 105 NyLPC_TUInt16 ro=i_inst->ro;
nyatla 0:142ee8b12fef 106 NyLPC_TUInt16 wsize;//書込み可能サイズ
nyatla 0:142ee8b12fef 107 int l,i;
nyatla 0:142ee8b12fef 108 NyLPC_TUInt16 rw;
nyatla 0:142ee8b12fef 109
nyatla 0:142ee8b12fef 110 if(wo>=ro){
nyatla 0:142ee8b12fef 111 //書込み可能サイズの計算
nyatla 0:142ee8b12fef 112 wsize=i_inst->bl-(wo-ro)-1;
nyatla 0:142ee8b12fef 113 if(wsize<1){
nyatla 0:142ee8b12fef 114 return 0;
nyatla 0:142ee8b12fef 115 }
nyatla 0:142ee8b12fef 116 //書込みサイズの調整
nyatla 0:142ee8b12fef 117 if(wsize>i_len){
nyatla 0:142ee8b12fef 118 wsize=i_len;
nyatla 0:142ee8b12fef 119 }
nyatla 0:142ee8b12fef 120 //右側の書込みサイズの計算
nyatla 0:142ee8b12fef 121 rw=i_inst->bl-wo;
nyatla 57:bc4330dfa62f 122 l=(wsize<rw)?wsize:rw;
nyatla 0:142ee8b12fef 123 //書込みポインタを設定
nyatla 0:142ee8b12fef 124 p=(s+wo);
nyatla 0:142ee8b12fef 125 for(i=l-1;i>=0;i--){
nyatla 0:142ee8b12fef 126 *(p++)=*(i_data++);
nyatla 0:142ee8b12fef 127 }
nyatla 0:142ee8b12fef 128 //書込み位置の調整
nyatla 0:142ee8b12fef 129 wo=(wo+l)%i_inst->bl;
nyatla 0:142ee8b12fef 130 l=wsize-l;//lに左側の書込みサイズストア
nyatla 0:142ee8b12fef 131 }else{
nyatla 0:142ee8b12fef 132 wsize=ro-wo-1;
nyatla 0:142ee8b12fef 133 if(wsize>i_len){
nyatla 0:142ee8b12fef 134 wsize=i_len;
nyatla 0:142ee8b12fef 135 }
nyatla 0:142ee8b12fef 136 l=wsize;
nyatla 0:142ee8b12fef 137 }
nyatla 0:142ee8b12fef 138 if(l>0){
nyatla 0:142ee8b12fef 139 //左側の書込み
nyatla 0:142ee8b12fef 140 p=(s+wo);
nyatla 0:142ee8b12fef 141 for(i=l-1;i>=0;i--){
nyatla 0:142ee8b12fef 142 *(p++)=*(i_data++);
nyatla 0:142ee8b12fef 143 }
nyatla 0:142ee8b12fef 144 wo+=l;
nyatla 0:142ee8b12fef 145 }
nyatla 0:142ee8b12fef 146 i_inst->wo=wo;
nyatla 0:142ee8b12fef 147 return wsize;
nyatla 0:142ee8b12fef 148 }
nyatla 0:142ee8b12fef 149 //読出しポインタを得る。
nyatla 0:142ee8b12fef 150 NyLPC_TUInt8* NyLPC_cRingBuffer_pread(NyLPC_TcRingBuffer_t* i_inst,NyLPC_TUInt16 *len)
nyatla 0:142ee8b12fef 151 {
nyatla 0:142ee8b12fef 152 NyLPC_TUInt16 ro=i_inst->ro;
nyatla 0:142ee8b12fef 153 *len=NyLPC_cRingBuffer_getReadableSize(i_inst);
nyatla 0:142ee8b12fef 154 return ((NyLPC_TUInt8*)(i_inst->buf))+ro;
nyatla 0:142ee8b12fef 155 }
nyatla 0:142ee8b12fef 156
nyatla 0:142ee8b12fef 157 //前方シークする。
nyatla 0:142ee8b12fef 158 void NyLPC_cRingBuffer_preadSeek(NyLPC_TcRingBuffer_t* i_inst,NyLPC_TUInt16 i_seek)
nyatla 0:142ee8b12fef 159 {
nyatla 0:142ee8b12fef 160 NyLPC_Assert(NyLPC_cRingBuffer_getReadableSize(i_inst)>=i_seek);
nyatla 0:142ee8b12fef 161 i_inst->ro=(i_inst->ro+i_seek)%i_inst->bl;
nyatla 0:142ee8b12fef 162 }
nyatla 0:142ee8b12fef 163
nyatla 0:142ee8b12fef 164 #define TEST
nyatla 0:142ee8b12fef 165 #ifndef TEST
nyatla 0:142ee8b12fef 166 void main(void)
nyatla 0:142ee8b12fef 167 {
nyatla 0:142ee8b12fef 168 NyLPC_TUInt16 l;
nyatla 0:142ee8b12fef 169 NyLPC_TUInt8* b;
nyatla 0:142ee8b12fef 170 int c;
nyatla 0:142ee8b12fef 171 char buf[sizeof(NyLPC_TcRingBuffer_t)+5];
nyatla 0:142ee8b12fef 172 NyLPC_TcRingBuffer_t* s;
nyatla 0:142ee8b12fef 173 s=NyLPC_cRingBuffer_initialize(buf,sizeof(buf));
nyatla 0:142ee8b12fef 174 for(;;){
nyatla 0:142ee8b12fef 175 b=NyLPC_cRingBuffer_getReadPtr(s,&l);
nyatla 0:142ee8b12fef 176 printf("readable:%d\n",l);
nyatla 0:142ee8b12fef 177 c=NyLPC_cRingBuffer_write(s,"0123456789",3);
nyatla 0:142ee8b12fef 178 NyLPC_cRingBuffer_dump(s);
nyatla 0:142ee8b12fef 179 b=NyLPC_cRingBuffer_getReadPtr(s,&l);
nyatla 0:142ee8b12fef 180 printf("readable:%d\n",l);
nyatla 57:bc4330dfa62f 181 NyLPC_cRingBuffer_seekReadPtr(s,(l>1)?l-1:1);
nyatla 57:bc4330dfa62f 182 printf("read:%d\n",(l>1)?l-1:1);
nyatla 0:142ee8b12fef 183 NyLPC_cRingBuffer_dump(s);
nyatla 0:142ee8b12fef 184 }
nyatla 0:142ee8b12fef 185
nyatla 0:142ee8b12fef 186 }
nyatla 0:142ee8b12fef 187 #endif