Skip to content

add 2 compiler options from last SDK, __attribute__ format to Print::printf, link to arduinoWebSockets #325

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 18 commits into from
May 29, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,7 @@ Libraries that don't rely on low-level access to AVR registers should work well.
- [NeoPixelBus](https://github.com/Makuna/NeoPixelBus) - Arduino NeoPixel library compatible with esp8266.
- [RTC](https://github.com/Makuna/Rtc) - Arduino Library for Ds1307 & Ds3231 compatible with esp8266.
- [Blynk](https://github.com/blynkkk/blynk-library) - easy IoT framework for Makers (check out the [Kickstarter page](http://tiny.cc/blynk-kick)).
- [arduinoWebSockets](https://github.com/Links2004/arduinoWebSockets) - WebSocket Server and Client compatible with esp8266 (RFC6455)

#### Upload via serial port ####
Pick the correct serial port.
Expand Down
3 changes: 2 additions & 1 deletion hardware/esp8266com/esp8266/cores/esp8266/Arduino.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@ extern "C" {

#include "stdlib_noniso.h"
#include "binary.h"
#include "pgmspace.h"
#include "esp8266_peri.h"
#include "twi.h"

Expand Down Expand Up @@ -205,6 +204,8 @@ void loop(void);

#ifdef __cplusplus

#include "pgmspace.h"

#include "WCharacter.h"
#include "WString.h"

Expand Down
37 changes: 37 additions & 0 deletions hardware/esp8266com/esp8266/cores/esp8266/Esp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@

extern "C" {
#include "user_interface.h"

extern struct rst_info resetInfo;
}

//extern "C" void ets_wdt_init(uint32_t val);
Expand Down Expand Up @@ -279,3 +281,38 @@ uint32_t EspClass::getFlashChipSizeByChipId(void) {
return 0;
}
}

String EspClass::getResetInfo(void) {
if(resetInfo.reason != 0) {
char buff[150];
sprintf(&buff[0], "Fatal exception:%d flag:%d epc1:0x%08x epc2:0x%08x epc3:0x%08x excvaddr:0x%08x depc:0x%08x", resetInfo.exccause, resetInfo.reason, resetInfo.epc1, resetInfo.epc2, resetInfo.epc3, resetInfo.excvaddr, resetInfo.depc);
return String(buff);
}
return String("flag: 0");
}

struct rst_info * EspClass::getResetInfoPtr(void) {
return &resetInfo;
}

bool EspClass::eraseESPconfig(void) {
bool ret = true;
size_t cfgAddr = (ESP.getFlashChipSize() - 0x4000);
size_t cfgSize = (8*1024);

noInterrupts();
while(cfgSize) {

if(spi_flash_erase_sector((cfgAddr / SPI_FLASH_SEC_SIZE)) != SPI_FLASH_RESULT_OK) {
ret = false;
}

cfgSize -= SPI_FLASH_SEC_SIZE;
cfgAddr += SPI_FLASH_SEC_SIZE;
}
interrupts();

return ret;
}


5 changes: 5 additions & 0 deletions hardware/esp8266com/esp8266/cores/esp8266/Esp.h
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,11 @@ class EspClass {
FlashMode_t getFlashChipMode(void);
uint32_t getFlashChipSizeByChipId(void);

String getResetInfo(void);
struct rst_info * getResetInfoPtr(void);

bool eraseESPconfig(void);

inline uint32_t getCycleCount(void);
};

Expand Down
2 changes: 1 addition & 1 deletion hardware/esp8266com/esp8266/cores/esp8266/Print.h
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ class Print {
return write((const uint8_t *) buffer, size);
}

size_t printf(const char * format, ...);
size_t printf(const char * format, ...) __attribute__ ((format (printf, 2, 3)));
size_t print(const __FlashStringHelper *);
size_t print(const String &);
size_t print(const char[]);
Expand Down
11 changes: 11 additions & 0 deletions hardware/esp8266com/esp8266/cores/esp8266/core_esp8266_main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ extern "C" {
#define LOOP_TASK_PRIORITY 0
#define LOOP_QUEUE_SIZE 1

struct rst_info resetInfo;

int atexit(void (*func)()) {
return 0;
}
Expand Down Expand Up @@ -124,6 +126,15 @@ void user_rf_pre_init() {

extern "C" {
void user_init(void) {
uart_div_modify(0, UART_CLK_FREQ / (74480));

system_rtc_mem_read(0, &resetInfo, sizeof(struct rst_info));
if(resetInfo.reason == WDT_RST_FLAG || resetInfo.reason == EXCEPTION_RST_FLAG) {
os_printf("Last Reset:\n - flag=%d\n - Fatal exception (%d):\n - epc1=0x%08x,epc2=0x%08x,epc3=0x%08x,excvaddr=0x%08x,depc=0x%08x\n", resetInfo.reason, resetInfo.exccause, resetInfo.epc1, resetInfo.epc2, resetInfo.epc3, resetInfo.excvaddr, resetInfo.depc);
}
struct rst_info info = { 0 };
system_rtc_mem_write(0, &info, sizeof(struct rst_info));

uart_div_modify(0, UART_CLK_FREQ / (115200));

init();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
#include "wiring_private.h"
#include "pins_arduino.h"
#include "c_types.h"
#include "ets_sys.h"

void (*timer1_user_cb)(void);

Expand Down
4 changes: 2 additions & 2 deletions hardware/esp8266com/esp8266/cores/esp8266/debug.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,10 @@
#include "debug.h"

void ICACHE_RAM_ATTR hexdump(uint8_t *mem, uint32_t len, uint8_t cols) {
os_printf("\n[HEXDUMP] Address: 0x%08X len: 0x%X (%d)", mem, len, len);
os_printf("\n[HEXDUMP] Address: 0x%08X len: 0x%X (%d)", (size_t)mem, len, len);
for(uint32_t i = 0; i < len; i++) {
if(i % cols == 0) {
os_printf("\n[0x%08X] 0x%08X: ", mem, i);
os_printf("\n[0x%08X] 0x%08X: ", (size_t)mem, i);
yield();
}
os_printf("%02X ", *mem);
Expand Down
58 changes: 29 additions & 29 deletions hardware/esp8266com/esp8266/cores/esp8266/pgmspace.cpp
Original file line number Diff line number Diff line change
@@ -1,32 +1,32 @@
/*
pgmspace.cpp - string functions that support PROGMEM
Copyright (c) 2015 Michael C. Miller. All right reserved.
pgmspace.cpp - string functions that support PROGMEM
Copyright (c) 2015 Michael C. Miller. All right reserved.

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/

#include <ctype.h>
#include "pgmspace.h"

size_t ICACHE_FLASH_ATTR strnlen_P(const char* s, size_t size) {
size_t strnlen_P(const char* s, size_t size) {
const char* cp;
for (cp = s; size != 0 && pgm_read_byte(cp) != '\0'; cp++, size--);
return (size_t)(cp - s);
return (size_t) (cp - s);
}

void* ICACHE_FLASH_ATTR memcpy_P(void* dest, const void* src, size_t count) {
void* memcpy_P(void* dest, const void* src, size_t count) {
const uint8_t* read = reinterpret_cast<const uint8_t*>(src);
uint8_t* write = reinterpret_cast<uint8_t*>(dest);

Expand All @@ -39,7 +39,7 @@ void* ICACHE_FLASH_ATTR memcpy_P(void* dest, const void* src, size_t count) {
return dest;
}

char* ICACHE_FLASH_ATTR strncpy_P(char* dest, const char* src, size_t size) {
char* strncpy_P(char* dest, const char* src, size_t size) {
const char* read = src;
char* write = dest;
char ch = '.';
Expand All @@ -48,19 +48,19 @@ char* ICACHE_FLASH_ATTR strncpy_P(char* dest, const char* src, size_t size) {
ch = pgm_read_byte(read++);
*write++ = ch;
size--;
}
}

return dest;
}

char* ICACHE_FLASH_ATTR strncat_P(char* dest, const char* src, size_t size) {
char* strncat_P(char* dest, const char* src, size_t size) {
char* write = dest;

while (*write != '\0')
{
write++;
}

const char* read = src;
char ch = '.';

Expand All @@ -80,7 +80,7 @@ char* ICACHE_FLASH_ATTR strncat_P(char* dest, const char* src, size_t size) {
return dest;
}

int ICACHE_FLASH_ATTR strncmp_P(const char* str1, const char* str2P, size_t size) {
int strncmp_P(const char* str1, const char* str2P, size_t size) {
int result = 0;

while (size > 0)
Expand All @@ -99,7 +99,7 @@ int ICACHE_FLASH_ATTR strncmp_P(const char* str1, const char* str2P, size_t size
return result;
}

int ICACHE_FLASH_ATTR strncasecmp_P(const char* str1, const char* str2P, size_t size) {
int strncasecmp_P(const char* str1, const char* str2P, size_t size) {
int result = 0;

while (size > 0)
Expand All @@ -118,7 +118,7 @@ int ICACHE_FLASH_ATTR strncasecmp_P(const char* str1, const char* str2P, size_t
return result;
}

int ICACHE_FLASH_ATTR printf_P(const char* formatP, ...) {
int printf_P(const char* formatP, ...) {
int ret;
va_list arglist;
va_start(arglist, formatP);
Expand All @@ -129,13 +129,13 @@ int ICACHE_FLASH_ATTR printf_P(const char* formatP, ...) {

ret = os_printf(format, arglist);

delete [] format;
delete[] format;

va_end(arglist);
return ret;
}

int ICACHE_FLASH_ATTR snprintf_P(char* str, size_t strSize, const char* formatP, ...) {
int snprintf_P(char* str, size_t strSize, const char* formatP, ...) {
int ret;
va_list arglist;
va_start(arglist, formatP);
Expand All @@ -146,7 +146,7 @@ int ICACHE_FLASH_ATTR snprintf_P(char* str, size_t strSize, const char* formatP,
return ret;
}

int ICACHE_FLASH_ATTR vsnprintf_P(char* str, size_t strSize, const char* formatP, va_list ap) {
int vsnprintf_P(char* str, size_t strSize, const char* formatP, va_list ap) {
int ret;

size_t fmtLen = strlen_P(formatP);
Expand All @@ -155,7 +155,7 @@ int ICACHE_FLASH_ATTR vsnprintf_P(char* str, size_t strSize, const char* formatP

ret = ets_vsnprintf(str, strSize, format, ap);

delete [] format;
delete[] format;

return ret;
}
}
18 changes: 9 additions & 9 deletions hardware/esp8266com/esp8266/cores/esp8266/pgmspace.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,26 +32,26 @@ typedef uint32_t prog_uint32_t;

#define SIZE_IRRELEVANT 0x7fffffff

extern void* memcpy_P(void* dest, const void* src, size_t count);
void* memcpy_P(void* dest, const void* src, size_t count);

extern char* strncpy_P(char* dest, const char* src, size_t size);
char* strncpy_P(char* dest, const char* src, size_t size);
#define strcpy_P(dest, src) strncpy_P((dest), (src), SIZE_IRRELEVANT)

extern char* strncat_P(char* dest, const char* src, size_t size);
char* strncat_P(char* dest, const char* src, size_t size);
#define strcat_P(dest, src) strncat_P((dest), (src), SIZE_IRRELEVANT)

extern int strncmp_P(const char* str1, const char* str2P, size_t size);
int strncmp_P(const char* str1, const char* str2P, size_t size);
#define strcmp_P(str1, str2P) strncmp_P((str1), (str2P), SIZE_IRRELEVANT)

extern int strncasecmp_P(const char* str1, const char* str2P, size_t size);
int strncasecmp_P(const char* str1, const char* str2P, size_t size);
#define strcasecmp_P(str1, str2P) strncasecmp_P((str1), (str2P), SIZE_IRRELEVANT)

extern size_t strnlen_P(const char *s, size_t size);
size_t strnlen_P(const char *s, size_t size);
#define strlen_P(strP) strnlen_P((strP), SIZE_IRRELEVANT)

extern int printf_P(const char *formatP, ...);
extern int snprintf_P(char *str, size_t strSize, const char *formatP, ...);
extern int vsnprintf_P(char *str, size_t strSize, const char *formatP, va_list ap);
int printf_P(const char *formatP, ...) __attribute__ ((format (printf, 1, 2)));
int snprintf_P(char *str, size_t strSize, const char *formatP, ...) __attribute__ ((format (printf, 3, 4)));
int vsnprintf_P(char *str, size_t strSize, const char *formatP, va_list ap) __attribute__ ((format (printf, 3, 0)));

// flash memory must be read using 32 bit aligned addresses else a processor
// exception will be triggered
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -203,12 +203,32 @@ uint8_t* ESP8266WiFiClass::macAddress(uint8_t* mac)
return mac;
}

String ESP8266WiFiClass::macAddress(void)
{
uint8_t mac[6];
char macStr[18] = {0};
wifi_get_macaddr(STATION_IF, mac);

sprintf(macStr, "%02X:%02X:%02X:%02X:%02X:%02X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
return String(macStr);
}

uint8_t* ESP8266WiFiClass::softAPmacAddress(uint8_t* mac)
{
wifi_get_macaddr(SOFTAP_IF, mac);
return mac;
}

String ESP8266WiFiClass::softAPmacAddress(void)
{
uint8_t mac[6];
char macStr[18] = {0};
wifi_get_macaddr(SOFTAP_IF, mac);

sprintf(macStr, "%02X:%02X:%02X:%02X:%02X:%02X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
return String(macStr);
}

IPAddress ESP8266WiFiClass::localIP()
{
struct ip_info ip;
Expand Down Expand Up @@ -251,10 +271,25 @@ uint8_t* ESP8266WiFiClass::BSSID(void)
return reinterpret_cast<uint8_t*>(conf.bssid);
}

String ESP8266WiFiClass::BSSIDstr(void)
{
static struct station_config conf;
char mac[18] = {0};
wifi_station_get_config(&conf);
sprintf(mac,"%02X:%02X:%02X:%02X:%02X:%02X", conf.bssid[0], conf.bssid[1], conf.bssid[2], conf.bssid[3], conf.bssid[4], conf.bssid[5]);
return String(mac);
}


int32_t ESP8266WiFiClass::channel(void) {
return wifi_get_channel();
}


int32_t ESP8266WiFiClass::RSSI(void) {
return wifi_station_get_rssi();
}

extern "C"
{
typedef STAILQ_HEAD(, bss_info) bss_info_head_t;
Expand Down Expand Up @@ -353,6 +388,17 @@ uint8_t * ESP8266WiFiClass::BSSID(uint8_t i)
return it->bssid;
}

String ESP8266WiFiClass::BSSIDstr(uint8_t i)
{
char mac[18] = {0};
struct bss_info* it = reinterpret_cast<struct bss_info*>(_getScanInfoByIndex(i));
if (!it)
return String("");

sprintf(mac,"%02X:%02X:%02X:%02X:%02X:%02X", it->bssid[0], it->bssid[1], it->bssid[2], it->bssid[3], it->bssid[4], it->bssid[5]);
return String(mac);
}

int32_t ESP8266WiFiClass::channel(uint8_t i)
{
struct bss_info* it = reinterpret_cast<struct bss_info*>(_getScanInfoByIndex(i));
Expand Down
Loading