示例#1
0
void ESP8266WebServer::send_P(int code, PGM_P content_type, PGM_P content, size_t contentLength) {
    String header;
    char type[64];
    memccpy_P((void*)type, (PGM_VOID_P)content_type, 0, sizeof(type));
    _prepareHeader(header, code, (const char* )type, contentLength);
    sendContent(header);
    sendContent_P(content, contentLength);
}
//////////////////////////////////////////////////////////////////////////////////////////////////
// Read data from ROM and send to web client
//////////////////////////////////////////////////////////////////////////////////////////////////
void ESP8266WebServerEx::sendWebData(const char* data, size_t dsize, TDataProcessingHandler handler) {
  #define SEND_DATA_BUFFER_SIZE 1024
  char *buf = (char*)malloc(SEND_DATA_BUFFER_SIZE*4+1);
  long n;
  size_t len = dsize;
  uint32 *p;
  uint32 *q;

  if ( !buf ) return;
  
  p = (uint32*)data;

  if ( ((unsigned long)dsize)&0x3 ) n = (dsize/4)+1;
  else n = (dsize/4);

  while (n>=SEND_DATA_BUFFER_SIZE) {
    q = (uint32*)buf;
    for (int i=0; i<SEND_DATA_BUFFER_SIZE; i++) {
      delay(0);
      *q = *p;
      p++;
      q++;
    }
    n -= SEND_DATA_BUFFER_SIZE;
    if ( handler ) (*handler)(buf,SEND_DATA_BUFFER_SIZE*4);
    sendContent_P(buf,SEND_DATA_BUFFER_SIZE*4);
    len -= SEND_DATA_BUFFER_SIZE*4;
  }
  
  if ( n ) {
    q = (uint32*)buf;
    while ( n-- ) {
      delay(0);
      *q = *p;
      p++;
      q++;
    }
    if ( handler ) (*handler)(buf,len);
    sendContent_P(buf,len);

  }
  free(buf);
}
示例#3
0
void ESP8266WebServer::send_P(int code, PGM_P content_type, PGM_P content) {
    size_t contentLength = 0;

    if (content != NULL) {
        contentLength = strlen_P(content);
    }

    String header;
    char type[64];
    memccpy_P((void*)type, (PGM_VOID_P)content_type, 0, sizeof(type));
    _prepareHeader(header, code, (const char* )type, contentLength);
    _currentClient.write(header.c_str(), header.length());
    sendContent_P(content);
}
示例#4
0
void ESP8266WebServer::sendContent_P(PGM_P content) {
  sendContent_P(content, strlen_P(content));
}