esp8266

Dependencies:   mbed

Committer:
kikoaac
Date:
Mon Mar 28 04:29:04 2016 +0000
Revision:
0:28089dd1adda
Child:
1:49b2903daa5f
esp;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kikoaac 0:28089dd1adda 1 #include "mbed.h"
kikoaac 0:28089dd1adda 2
kikoaac 0:28089dd1adda 3 #include <string>
kikoaac 0:28089dd1adda 4
kikoaac 0:28089dd1adda 5 DigitalOut myled(LED1);
kikoaac 0:28089dd1adda 6 Serial esp(p9,p10);
kikoaac 0:28089dd1adda 7 Serial pc(USBTX,USBRX);
kikoaac 0:28089dd1adda 8 #define end "\r\n"
kikoaac 0:28089dd1adda 9
kikoaac 0:28089dd1adda 10 class esp8266
kikoaac 0:28089dd1adda 11 {
kikoaac 0:28089dd1adda 12 private:
kikoaac 0:28089dd1adda 13
kikoaac 0:28089dd1adda 14 DigitalOut myled;
kikoaac 0:28089dd1adda 15 Serial *Seri;
kikoaac 0:28089dd1adda 16 char* buffer;
kikoaac 0:28089dd1adda 17 int datalen;
kikoaac 0:28089dd1adda 18
kikoaac 0:28089dd1adda 19 void Reception()
kikoaac 0:28089dd1adda 20 {
kikoaac 0:28089dd1adda 21
kikoaac 0:28089dd1adda 22 char x[100];
kikoaac 0:28089dd1adda 23 Seri->scanf("%s",x);
kikoaac 0:28089dd1adda 24 myled=1;
kikoaac 0:28089dd1adda 25 Serial pc(USBTX,USBRX);
kikoaac 0:28089dd1adda 26 pc.baud(115200);
kikoaac 0:28089dd1adda 27 pc.printf("%s\r\n",x);
kikoaac 0:28089dd1adda 28 if(strstr(x,"+IPD,")==NULL)
kikoaac 0:28089dd1adda 29 {
kikoaac 0:28089dd1adda 30 /*
kikoaac 0:28089dd1adda 31 if(strcmp(x,"0,CONNECT")==0)break;
kikoaac 0:28089dd1adda 32 if(strcmp(x,"0,CLOSED")==0)break;
kikoaac 0:28089dd1adda 33 if(strcmp(x,">")==0)break;*/
kikoaac 0:28089dd1adda 34 }
kikoaac 0:28089dd1adda 35 else
kikoaac 0:28089dd1adda 36 {
kikoaac 0:28089dd1adda 37 strtok(x,",");
kikoaac 0:28089dd1adda 38 strtok(NULL,":");
kikoaac 0:28089dd1adda 39 char *data = strtok(NULL,",");
kikoaac 0:28089dd1adda 40 strtok(x,",");
kikoaac 0:28089dd1adda 41 char *data_num = strtok(NULL,",");
kikoaac 0:28089dd1adda 42 datalen = atoi(data_num);
kikoaac 0:28089dd1adda 43 buffer=data;
kikoaac 0:28089dd1adda 44 //data = strtok(x,"");
kikoaac 0:28089dd1adda 45 //buffer = data;
kikoaac 0:28089dd1adda 46 //pc.printf("%s , %s , %s\r\n",y,data_num,data);
kikoaac 0:28089dd1adda 47 }
kikoaac 0:28089dd1adda 48 myled=1;
kikoaac 0:28089dd1adda 49 }
kikoaac 0:28089dd1adda 50 bool check()
kikoaac 0:28089dd1adda 51 {
kikoaac 0:28089dd1adda 52
kikoaac 0:28089dd1adda 53 Serial pc(USBTX,USBRX);
kikoaac 0:28089dd1adda 54 pc.baud(115200);
kikoaac 0:28089dd1adda 55 Seri->printf(end);
kikoaac 0:28089dd1adda 56 bool f = false,ans;
kikoaac 0:28089dd1adda 57 int i=0;
kikoaac 0:28089dd1adda 58 while(1) {
kikoaac 0:28089dd1adda 59 char x = Seri->getc();
kikoaac 0:28089dd1adda 60 pc.putc(x);
kikoaac 0:28089dd1adda 61 if(x=='O')f=true;
kikoaac 0:28089dd1adda 62 else if(x=='K'&&f==true)
kikoaac 0:28089dd1adda 63 {
kikoaac 0:28089dd1adda 64 ans=true;
kikoaac 0:28089dd1adda 65 break;
kikoaac 0:28089dd1adda 66 }
kikoaac 0:28089dd1adda 67 else f=false;
kikoaac 0:28089dd1adda 68
kikoaac 0:28089dd1adda 69 if(x=='F')i=1;
kikoaac 0:28089dd1adda 70 else if(x=='A'&&i==1)i=2;
kikoaac 0:28089dd1adda 71 else if(x=='I'&&i==2)i=3;
kikoaac 0:28089dd1adda 72 else if(x=='L'&&i==3)
kikoaac 0:28089dd1adda 73 {
kikoaac 0:28089dd1adda 74 ans=false;
kikoaac 0:28089dd1adda 75 break;
kikoaac 0:28089dd1adda 76 }
kikoaac 0:28089dd1adda 77 else i=0;
kikoaac 0:28089dd1adda 78
kikoaac 0:28089dd1adda 79 }
kikoaac 0:28089dd1adda 80 wait(0.1);
kikoaac 0:28089dd1adda 81 return ans;
kikoaac 0:28089dd1adda 82 }
kikoaac 0:28089dd1adda 83 bool connected;
kikoaac 0:28089dd1adda 84 public:
kikoaac 0:28089dd1adda 85 char* get_data(char *datax,int num)
kikoaac 0:28089dd1adda 86 {
kikoaac 0:28089dd1adda 87 get:
kikoaac 0:28089dd1adda 88 char x[num+2];
kikoaac 0:28089dd1adda 89 Seri->scanf("%s",x);
kikoaac 0:28089dd1adda 90 myled=1;
kikoaac 0:28089dd1adda 91 Serial pc(USBTX,USBRX);
kikoaac 0:28089dd1adda 92 pc.baud(115200);
kikoaac 0:28089dd1adda 93 if(strstr(x,"+IPD,")==NULL)
kikoaac 0:28089dd1adda 94 {
kikoaac 0:28089dd1adda 95
kikoaac 0:28089dd1adda 96 return NULL;
kikoaac 0:28089dd1adda 97 /*
kikoaac 0:28089dd1adda 98 if(strcmp(x,"0,CONNECT")==0)break;
kikoaac 0:28089dd1adda 99 if(strcmp(x,"0,CLOSED")==0)break;
kikoaac 0:28089dd1adda 100 if(strcmp(x,">")==0)break;*/
kikoaac 0:28089dd1adda 101 }
kikoaac 0:28089dd1adda 102 else
kikoaac 0:28089dd1adda 103 {
kikoaac 0:28089dd1adda 104
kikoaac 0:28089dd1adda 105 strtok(x,",");
kikoaac 0:28089dd1adda 106 strtok(NULL,":");
kikoaac 0:28089dd1adda 107 datax = strtok(NULL,",");
kikoaac 0:28089dd1adda 108 strtok(x,",");
kikoaac 0:28089dd1adda 109 char *data_num = strtok(NULL,",");
kikoaac 0:28089dd1adda 110 char len = atoi(data_num);
kikoaac 0:28089dd1adda 111
kikoaac 0:28089dd1adda 112 if(strcmp(datax,"\r\n")==0)goto get;
kikoaac 0:28089dd1adda 113 else if(len > num)return NULL;
kikoaac 0:28089dd1adda 114 //for(int i=0;i<len;i++)
kikoaac 0:28089dd1adda 115 // *datax++=*data++;
kikoaac 0:28089dd1adda 116 //printf("%s\r\n",datax);
kikoaac 0:28089dd1adda 117 return datax;
kikoaac 0:28089dd1adda 118 //data = strtok(x,"");
kikoaac 0:28089dd1adda 119 //buffer = data;
kikoaac 0:28089dd1adda 120 //pc.printf("%s , %s , %s\r\n",y,data_num,data);
kikoaac 0:28089dd1adda 121 }
kikoaac 0:28089dd1adda 122 }
kikoaac 0:28089dd1adda 123 /*void uart_setting(int fre=115200,int bit=8,int stopbit=1,int parity=0,int flow_control=3)
kikoaac 0:28089dd1adda 124 {
kikoaac 0:28089dd1adda 125
kikoaac 0:28089dd1adda 126 Seri->printf("AT+UART_CUR=%d,%d,%d,%d,%d\r\n",fre,bit,stopbit,parity,flow_control);
kikoaac 0:28089dd1adda 127 Seri->baud(fre);
kikoaac 0:28089dd1adda 128 Seri->format(bit);
kikoaac 0:28089dd1adda 129 Seri->set_flow_control(Serial::RTSCTS,p9,p10);
kikoaac 0:28089dd1adda 130 //check();
kikoaac 0:28089dd1adda 131 wait(0.1);
kikoaac 0:28089dd1adda 132 }*/
kikoaac 0:28089dd1adda 133 bool sleep(int mode)
kikoaac 0:28089dd1adda 134 {
kikoaac 0:28089dd1adda 135 Seri->printf("AT+SLEEP=%d",mode);
kikoaac 0:28089dd1adda 136 return check();
kikoaac 0:28089dd1adda 137 }
kikoaac 0:28089dd1adda 138 bool deepsleep(int ms)
kikoaac 0:28089dd1adda 139 {
kikoaac 0:28089dd1adda 140 Seri->printf("AT+GSLP=%d",ms);
kikoaac 0:28089dd1adda 141 return check();
kikoaac 0:28089dd1adda 142 }
kikoaac 0:28089dd1adda 143 bool http_access(char* mode,char* url,int num=80)
kikoaac 0:28089dd1adda 144 {
kikoaac 0:28089dd1adda 145 if(connected==false)return false;
kikoaac 0:28089dd1adda 146 Seri->printf("AT+CIPSTART=\"%s\",\"%s\",%d",mode,url,num);
kikoaac 0:28089dd1adda 147 return check();
kikoaac 0:28089dd1adda 148 }
kikoaac 0:28089dd1adda 149 void prompt()
kikoaac 0:28089dd1adda 150 {
kikoaac 0:28089dd1adda 151 Seri->attach(this,&esp8266::Reception);
kikoaac 0:28089dd1adda 152 }
kikoaac 0:28089dd1adda 153 bool connect(const char* ssid,const char* password)
kikoaac 0:28089dd1adda 154 {
kikoaac 0:28089dd1adda 155 Seri->printf("AT+CWJAP=\"%s\",\"%s\"",ssid,password);
kikoaac 0:28089dd1adda 156 connected|=check();
kikoaac 0:28089dd1adda 157 if(connected==false)return false;
kikoaac 0:28089dd1adda 158 Seri->printf("AT+CIFSR");
kikoaac 0:28089dd1adda 159 check();
kikoaac 0:28089dd1adda 160 return true;
kikoaac 0:28089dd1adda 161 }
kikoaac 0:28089dd1adda 162 bool softAPfromIP()
kikoaac 0:28089dd1adda 163 {
kikoaac 0:28089dd1adda 164 Seri->printf("AT+CWLIF");
kikoaac 0:28089dd1adda 165 return check();
kikoaac 0:28089dd1adda 166 }
kikoaac 0:28089dd1adda 167 //Seri->printf("AT+CIPSTA_CUR=\"%s\",\"%s\",\"%s\"",IP,gateway,netmask);
kikoaac 0:28089dd1adda 168 bool EDDHCP(int mode,int en)
kikoaac 0:28089dd1adda 169 {
kikoaac 0:28089dd1adda 170 printf("AT+CWDHCP_CUR=%d,%d",mode,en);
kikoaac 0:28089dd1adda 171 return check();
kikoaac 0:28089dd1adda 172 }
kikoaac 0:28089dd1adda 173 bool softAP(const char* ssid,const char* password,int ch,int ecn)
kikoaac 0:28089dd1adda 174 {
kikoaac 0:28089dd1adda 175 if(connectmode==AP||connectmode==APST)
kikoaac 0:28089dd1adda 176 Seri->printf("AT+CWSAP=\"%s\",\"%s\",%d,%d",ssid,password,ch,ecn);
kikoaac 0:28089dd1adda 177 return check();
kikoaac 0:28089dd1adda 178 }
kikoaac 0:28089dd1adda 179 bool send(int num,char* data)
kikoaac 0:28089dd1adda 180 {
kikoaac 0:28089dd1adda 181 if(connected==false)return false;
kikoaac 0:28089dd1adda 182 Seri->printf("AT+CIPSEND=0,%d",num+2);
kikoaac 0:28089dd1adda 183 check();
kikoaac 0:28089dd1adda 184 wait(0.01);
kikoaac 0:28089dd1adda 185 Serial pc(USBTX,USBRX);
kikoaac 0:28089dd1adda 186 pc.baud(115200);
kikoaac 0:28089dd1adda 187 while(1)
kikoaac 0:28089dd1adda 188 {
kikoaac 0:28089dd1adda 189 char i = Seri->getc();
kikoaac 0:28089dd1adda 190 pc.putc(i);
kikoaac 0:28089dd1adda 191 if(i=='>')break;
kikoaac 0:28089dd1adda 192 }
kikoaac 0:28089dd1adda 193 Seri->printf("%s",data);
kikoaac 0:28089dd1adda 194 Seri->printf("\r\n");
kikoaac 0:28089dd1adda 195 return check();
kikoaac 0:28089dd1adda 196 }
kikoaac 0:28089dd1adda 197 bool accesspoint()
kikoaac 0:28089dd1adda 198 {
kikoaac 0:28089dd1adda 199 Seri->printf("AT+CWLAP\r\n");
kikoaac 0:28089dd1adda 200 return check();
kikoaac 0:28089dd1adda 201 }
kikoaac 0:28089dd1adda 202 bool find_accesspoint(char *wifi)
kikoaac 0:28089dd1adda 203 {
kikoaac 0:28089dd1adda 204 Seri->printf("AT+CWLAP=\"%s\"");
kikoaac 0:28089dd1adda 205 return check();
kikoaac 0:28089dd1adda 206 }
kikoaac 0:28089dd1adda 207 bool find_accesspoint()
kikoaac 0:28089dd1adda 208 {
kikoaac 0:28089dd1adda 209 Seri->printf("AT+CWLAP");
kikoaac 0:28089dd1adda 210 return check();
kikoaac 0:28089dd1adda 211 }
kikoaac 0:28089dd1adda 212 bool multipull(int i)
kikoaac 0:28089dd1adda 213 {
kikoaac 0:28089dd1adda 214 Seri->printf("AT+CIPMUX=%d",i);
kikoaac 0:28089dd1adda 215 return check();
kikoaac 0:28089dd1adda 216 }
kikoaac 0:28089dd1adda 217 void reset()
kikoaac 0:28089dd1adda 218 {
kikoaac 0:28089dd1adda 219 Serial pc(USBTX,USBRX);
kikoaac 0:28089dd1adda 220 pc.baud(115200);
kikoaac 0:28089dd1adda 221 Seri->printf("AT+RST\r\n");
kikoaac 0:28089dd1adda 222 int f=0;
kikoaac 0:28089dd1adda 223 while(1)
kikoaac 0:28089dd1adda 224 {
kikoaac 0:28089dd1adda 225 char a=Seri->getc();
kikoaac 0:28089dd1adda 226 pc.putc(a);
kikoaac 0:28089dd1adda 227 if(a=='r')f=1;
kikoaac 0:28089dd1adda 228 else if(a=='e'&&f==1)f=2;
kikoaac 0:28089dd1adda 229 else if(a=='a'&&f==2)f=3;
kikoaac 0:28089dd1adda 230 else if(a=='d'&&f==3)f=4;
kikoaac 0:28089dd1adda 231 else if(a=='y'&&f==4)break;
kikoaac 0:28089dd1adda 232 else f=0;
kikoaac 0:28089dd1adda 233
kikoaac 0:28089dd1adda 234 }
kikoaac 0:28089dd1adda 235 wait(0.1);
kikoaac 0:28089dd1adda 236 }/*
kikoaac 0:28089dd1adda 237 char *read()
kikoaac 0:28089dd1adda 238 {
kikoaac 0:28089dd1adda 239 return buffer;
kikoaac 0:28089dd1adda 240 }*/
kikoaac 0:28089dd1adda 241 void tcp_setting(int mode,int port)
kikoaac 0:28089dd1adda 242 {
kikoaac 0:28089dd1adda 243 Seri->printf("AT+CIPSERVER=%d,%d",mode,port);
kikoaac 0:28089dd1adda 244 check();
kikoaac 0:28089dd1adda 245 wait(0.1);
kikoaac 0:28089dd1adda 246 printf("\r\nwait connection\r\n");
kikoaac 0:28089dd1adda 247 while(1)
kikoaac 0:28089dd1adda 248 {
kikoaac 0:28089dd1adda 249 char x[10];
kikoaac 0:28089dd1adda 250 Seri->scanf("%s",x);
kikoaac 0:28089dd1adda 251 if(strcmp(x,"0,CONNECT")==0)break;
kikoaac 0:28089dd1adda 252 }
kikoaac 0:28089dd1adda 253 printf("\r\OK\r\n");
kikoaac 0:28089dd1adda 254 }
kikoaac 0:28089dd1adda 255 bool connection_mode(int mode)
kikoaac 0:28089dd1adda 256 {
kikoaac 0:28089dd1adda 257 connectmode=mode;
kikoaac 0:28089dd1adda 258 Seri->printf("AT+CWMODE=%d",mode);
kikoaac 0:28089dd1adda 259 return check();
kikoaac 0:28089dd1adda 260 }
kikoaac 0:28089dd1adda 261 bool disconnect()
kikoaac 0:28089dd1adda 262 {
kikoaac 0:28089dd1adda 263 Seri->printf("AT+CWQAP");
kikoaac 0:28089dd1adda 264 connected=false;
kikoaac 0:28089dd1adda 265 return check();
kikoaac 0:28089dd1adda 266 }
kikoaac 0:28089dd1adda 267 bool ATcommand(const char* cmd)
kikoaac 0:28089dd1adda 268 {
kikoaac 0:28089dd1adda 269 char a[20];
kikoaac 0:28089dd1adda 270 strcat(a,"AT+");
kikoaac 0:28089dd1adda 271 strcat(a,cmd);
kikoaac 0:28089dd1adda 272 Seri->printf(a);
kikoaac 0:28089dd1adda 273 return check();
kikoaac 0:28089dd1adda 274 }
kikoaac 0:28089dd1adda 275 const char AP=2;
kikoaac 0:28089dd1adda 276 const char ST=1;
kikoaac 0:28089dd1adda 277 const char APST=3;
kikoaac 0:28089dd1adda 278 char connectmode;
kikoaac 0:28089dd1adda 279 esp8266(Serial *ser) : myled(LED2)
kikoaac 0:28089dd1adda 280 {
kikoaac 0:28089dd1adda 281 myled=1;
kikoaac 0:28089dd1adda 282 connected=false;
kikoaac 0:28089dd1adda 283 //string ;
kikoaac 0:28089dd1adda 284 Seri = ser;
kikoaac 0:28089dd1adda 285 bool f = false;
kikoaac 0:28089dd1adda 286 int i=0;
kikoaac 0:28089dd1adda 287
kikoaac 0:28089dd1adda 288 Seri->printf("AT\r\n");
kikoaac 0:28089dd1adda 289 while(1) {
kikoaac 0:28089dd1adda 290 if(Seri->readable())
kikoaac 0:28089dd1adda 291 {
kikoaac 0:28089dd1adda 292 char x = Seri->getc();
kikoaac 0:28089dd1adda 293 pc.putc(x);
kikoaac 0:28089dd1adda 294 if(x=='O')f=true;
kikoaac 0:28089dd1adda 295 else if(x=='K'&&f==true)break;
kikoaac 0:28089dd1adda 296 else f=false;
kikoaac 0:28089dd1adda 297 }
kikoaac 0:28089dd1adda 298 }
kikoaac 0:28089dd1adda 299 //Seri->attach(this,&esp8266::Reception);
kikoaac 0:28089dd1adda 300 /*data = "AT";
kikoaac 0:28089dd1adda 301 //data +=end;
kikoaac 0:28089dd1adda 302 Seri->printf(data);
kikoaac 0:28089dd1adda 303 Seri->printf(end);*/
kikoaac 0:28089dd1adda 304 wait(0.5);
kikoaac 0:28089dd1adda 305 }
kikoaac 0:28089dd1adda 306
kikoaac 0:28089dd1adda 307 };
kikoaac 0:28089dd1adda 308 /*void end()
kikoaac 0:28089dd1adda 309 {
kikoaac 0:28089dd1adda 310 esp.printf("\r\n");
kikoaac 0:28089dd1adda 311 }*/
kikoaac 0:28089dd1adda 312 void send_AT()
kikoaac 0:28089dd1adda 313 {
kikoaac 0:28089dd1adda 314 esp.printf("AT");
kikoaac 0:28089dd1adda 315 }
kikoaac 0:28089dd1adda 316 int main() {
kikoaac 0:28089dd1adda 317 string a;
kikoaac 0:28089dd1adda 318 myled = 1;
kikoaac 0:28089dd1adda 319 pc.baud(115200);
kikoaac 0:28089dd1adda 320 esp.baud(115200);
kikoaac 0:28089dd1adda 321 printf("Start\r\n");
kikoaac 0:28089dd1adda 322 wait(0.1);
kikoaac 0:28089dd1adda 323 esp8266 ESP(&esp);
kikoaac 0:28089dd1adda 324 //send_AT();
kikoaac 0:28089dd1adda 325 //end();
kikoaac 0:28089dd1adda 326 //ESP.reset();
kikoaac 0:28089dd1adda 327 ESP.connection_mode(3);
kikoaac 0:28089dd1adda 328 ESP.multipull(1);
kikoaac 0:28089dd1adda 329 ESP.accesspoint();
kikoaac 0:28089dd1adda 330
kikoaac 0:28089dd1adda 331 ESP.connect("biz","roborobo");
kikoaac 0:28089dd1adda 332 //ESP.http_access("TCP","imaoca.webcrow.jp",80);
kikoaac 0:28089dd1adda 333 ESP.tcp_setting(1,8888);
kikoaac 0:28089dd1adda 334 char senddata[10];/*
kikoaac 0:28089dd1adda 335 pc.printf("\r\n tcp send data\r\n");
kikoaac 0:28089dd1adda 336 for(int i=0;i<10;i++)
kikoaac 0:28089dd1adda 337 {
kikoaac 0:28089dd1adda 338 senddata[i]=pc.getc();
kikoaac 0:28089dd1adda 339 pc.putc(senddata[i]);
kikoaac 0:28089dd1adda 340 }*/
kikoaac 0:28089dd1adda 341 //ESP.send(10,senddata);
kikoaac 0:28089dd1adda 342 //ESP.prompt();
kikoaac 0:28089dd1adda 343 ESP.softAP("ESP8266","",10,0);
kikoaac 0:28089dd1adda 344 char *data,num=30;
kikoaac 0:28089dd1adda 345 DigitalOut LED(LED4);
kikoaac 0:28089dd1adda 346 while(1)
kikoaac 0:28089dd1adda 347 {
kikoaac 0:28089dd1adda 348 // data = ESP.get_data(data,num);
kikoaac 0:28089dd1adda 349 // if(data!=NULL)
kikoaac 0:28089dd1adda 350 // printf("GET->%s\r\n",data);
kikoaac 0:28089dd1adda 351 myled=1;
kikoaac 0:28089dd1adda 352 wait(0.01);
kikoaac 0:28089dd1adda 353 myled=0;
kikoaac 0:28089dd1adda 354 data=ESP.get_data(data,num);
kikoaac 0:28089dd1adda 355 printf("%s\r\n",data);
kikoaac 0:28089dd1adda 356 if (strstr(data,"ON")!=NULL)
kikoaac 0:28089dd1adda 357 LED=1;
kikoaac 0:28089dd1adda 358 if (strstr(data,"OFF")!=NULL)
kikoaac 0:28089dd1adda 359 LED=0;
kikoaac 0:28089dd1adda 360 //pc.putc( esp.getc());
kikoaac 0:28089dd1adda 361 }
kikoaac 0:28089dd1adda 362 /*while(1) {
kikoaac 0:28089dd1adda 363 char x = esp.getc();
kikoaac 0:28089dd1adda 364 pc.putc(x);
kikoaac 0:28089dd1adda 365 if(x=='O')f=true;
kikoaac 0:28089dd1adda 366 else if(x=='K'&&f==true)break;
kikoaac 0:28089dd1adda 367 else f=false;
kikoaac 0:28089dd1adda 368 }*/
kikoaac 0:28089dd1adda 369 myled=0;
kikoaac 0:28089dd1adda 370 }