FTP download - chyba v pslednim byte.

Odpovědět
schamann
Příspěvky: 9
Registrován: 18 lis 2017, 22:54
Reputation: 0

FTP download - chyba v pslednim byte.

Příspěvek od schamann » 16 črc 2018, 15:11

Mam dotaz na FTP:
stahuju pomoci FTP soubor ze serveru na SD kartu.
maly soubory 3kB vpohode, u vetsich souboru cca 95kB mam problem s poslednim byte v souboru bud je FF ale to tam byt nema. Uz jsem fakt zoufaly a stravil jsem nad tim nekolik dni.

Nejhorsi je, ze z deseti pokusu to jednou stahnu v poradku a 9x spatne... ja to nchapu.

V priloze je nahled k porovnani nalevo co jsem stahnul, napravo zdroj.

tak kdyby mekoho napadlo v cem by mnohl byt problem?
HW:
Arduino MEGA
Modem SIM808
SDkarta

kod:

Kód: Vybrat vše


ommand2(F("AT+FTPGET=1"), F("+FTPGET: 1,1"), F("ERROR"), 30000) == 1) {
    int data_size, aux;
    sd.vwd()->rewind();
    sd.chdir();
    String sNazevSouboru = "upload/" + EEPromReadString(315, 15);
    char cNazevSouboru[24];
    sNazevSouboru.toCharArray(cNazevSouboru, 24);
    if (file.open(cNazevSouboru, O_RDWR | O_CREAT | O_AT_END)) {
      Serial.println(F("Zacinam nahravat novy fw..."));
      do {
        if (SendATcommand2(F("AT+FTPGET=2,50"), F("+FTPGET: 2,"), F("+FTPGET: 1,"), 10000) == 1) {
          digitalWrite(33, !digitalRead(33));
          data_size = 0;

          while (Serial1.available() == 0);
          aux = Serial1.read();
          //zjistim velikost prichozich dat do data_size
          do {
            data_size *= 10;
            data_size += (aux - 0x30);
            while (Serial1.available() == 0);
            aux = Serial1.read();
          } while (aux != 0x0D); //az bude Enter pokracuju

          if (data_size > 0) {  //Jsou vubec nejaka data?
            while (Serial1.available() < data_size); //cekam az bude k dispozici ke stazeni v bufferu ocekavana velikost
            Serial1.read(); //cekam az prijde Enter 0D0A (0D prislo pri cekani na delku dat) ted se zbavuji 0A
            char cByte;

            for (int y = 0; y < data_size; y++) { // ctu obsah bufferu
              cByte = Serial1.read();

              file.print(cByte); //ukladam do souboru
              //Serial.println(cByte, HEX);
            }
            do {
              cByte = Serial1.read();
            } while (Serial1.available());
          } else {
            Serial.println(F("Stazeno..."));
          }
        } else {
          Serial.println("Error from FTP");
        }
      } while (data_size > 0);

      file.close();

    } else {
      Serial.print(F("chyba pri otevreni pro zapis: "));
    }
  } else {
    Serial.println(F("Problem: FTPGET"));
  }
}
										
Přílohy
jako ye nekecam
jako ye nekecam

schamann
Příspěvky: 9
Registrován: 18 lis 2017, 22:54
Reputation: 0

Re: FTP download - chyba v pslednim byte.

Příspěvek od schamann » 16 črc 2018, 16:44

tak maly progres:

Kód: Vybrat vše

for (int y = 0; y < data_size; y++) { // ctu obsah bufferu
	cByte = Serial1.read();	
	if (data_size < 50) {
		delay(100);
	}
	file.print(cByte); //ukladam do souboru								
}														}
Kdzy na posledni dil nacitani pridam delay(100), takto projde vzdy...
Tak ted by me zajimalo cim to muze byt, kdyz v tu dobu uz v tom bufferu data musi byt vsechna.
to sem blazen,...

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 13 hostů