Skip to content

Commit

Permalink
Merge pull request #1 from esp8266/esp8266
Browse files Browse the repository at this point in the history
merge
  • Loading branch information
Makuna committed Jul 19, 2015
2 parents 1154545 + 23aa7a0 commit c4667ff
Show file tree
Hide file tree
Showing 15 changed files with 78 additions and 50 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -218,6 +218,7 @@ Libraries that don't rely on low-level access to AVR registers should work well.
- [PubSubClient](https://github.com/Imroy/pubsubclient) MQTT library by @Imroy.
- [RTC](https://github.com/Makuna/Rtc) - Arduino Library for Ds1307 & Ds3231 compatible with esp8266.
- [Souliss, Smart Home](https://github.com/souliss/souliss) - Framework for Smart Home based on Arduino, Android and openHAB.
- [ST7735](https://github.com/nzmichaelh/Adafruit-ST7735-Library) - Adafruit's ST7735 library modified to be compatible with esp8266. Just make sure to modify the pins in the examples as they are still AVR specific.

#### Upload via serial port ####
Pick the correct serial port.
Expand Down
4 changes: 2 additions & 2 deletions build/build.xml
Original file line number Diff line number Diff line change
Expand Up @@ -972,8 +972,8 @@
<mkdir dir="${staging_folder}/work/${staging_hardware_folder}/esp8266com/esp8266/tools" />

<antcall target="untar">
<param name="archive_file" value="${staging_folder}/dist/win32-xtensa-lx106-elf-gb404fb9.tgz" />
<param name="archive_url" value="http://download.igrr.me/win32-xtensa-lx106-elf-gb404fb9.tgz" />
<param name="archive_file" value="${staging_folder}/dist/win32-xtensa-lx106-elf-gb404fb9-2.tgz" />
<param name="archive_url" value="http://download.igrr.me/win32-xtensa-lx106-elf-gb404fb9-2.tgz" />
<param name="final_folder" value="${staging_folder}/work/${staging_hardware_folder}/esp8266com/esp8266/tools/xtensa-lx106-elf" />
<param name="dest_folder" value="${staging_folder}/work/${staging_hardware_folder}/esp8266com/esp8266/tools/" />
</antcall>
Expand Down
8 changes: 4 additions & 4 deletions build/build_board_manager_package.sh
Original file line number Diff line number Diff line change
Expand Up @@ -130,10 +130,10 @@ cat << EOF > package_esp8266com_index.json
"systems": [
{
"host":"i686-mingw32",
"url":"http://arduino.esp8266.com/win32-xtensa-lx106-elf-gb404fb9.tar.gz",
"archiveFileName":"win32-xtensa-lx106-elf-gb404fb9.tar.gz",
"checksum":"SHA-256:1561ec85cc58cab35cc48bfdb0d0087809f89c043112a2c36b54251a13bf781f",
"size":"153807368"
"url":"http://arduino.esp8266.com/win32-xtensa-lx106-elf-gb404fb9-2.tar.gz",
"archiveFileName":"win32-xtensa-lx106-elf-gb404fb9-2.tar.gz",
"checksum":"SHA-256:10476b9c11a7a90f40883413ddfb409f505b20692e316c4e597c4c175b4be09c",
"size":"153527527"
},
{
"host":"x86_64-apple-darwin",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
698d08d6086a36f3e3f4c0932986b45a2b0d0fc8
1 change: 0 additions & 1 deletion build/windows/dist/win32-xtensa-lx106-elf-gb404fb9.tgz.sha

This file was deleted.

1 change: 1 addition & 0 deletions hardware/esp8266com/esp8266/cores/esp8266/Arduino.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ extern "C" {
#include "twi.h"

void yield(void);
void optimistic_yield(void);

#define HIGH 0x1
#define LOW 0x0
Expand Down
16 changes: 10 additions & 6 deletions hardware/esp8266com/esp8266/cores/esp8266/HardwareSerial.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -552,13 +552,17 @@ bool HardwareSerial::isRxEnabled(void) {
}

int HardwareSerial::available(void) {
if(_uart == 0)
return 0;
if(_uart->rxEnabled) {
return static_cast<int>(_rx_buffer->getSize());
} else {
return 0;
int result = 0;

if (_uart != NULL && _uart->rxEnabled) {
result = static_cast<int>(_rx_buffer->getSize());
}

if (!result) {
optimistic_yield();
}

return result;
}

int HardwareSerial::peek(void) {
Expand Down
18 changes: 13 additions & 5 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

#define OPTIMISTIC_YIELD_TIME_US 16000

struct rst_info resetInfo;

int atexit(void (*func)()) {
Expand Down Expand Up @@ -62,18 +64,16 @@ extern void (*__init_array_end)(void);
cont_t g_cont __attribute__ ((aligned (16)));
static os_event_t g_loop_queue[LOOP_QUEUE_SIZE];

static uint32_t g_micros_at_task_start;
static uint32_t g_micros_at_last_task_yield;

extern "C" uint32_t esp_micros_at_task_start() {
return g_micros_at_task_start;
}

extern "C" void abort() {
while(1) {
}
}

extern "C" void esp_yield() {
g_micros_at_last_task_yield = system_get_time();
cont_yield(&g_cont);
}

Expand All @@ -87,6 +87,14 @@ extern "C" void __yield() {
}
extern "C" void yield(void) __attribute__ ((weak, alias("__yield")));

extern "C" void optimistic_yield(void) {
if (!ETS_INTR_WITHINISR() &&
(system_get_time() - g_micros_at_last_task_yield) > OPTIMISTIC_YIELD_TIME_US)
{
__yield();
}
}

static void loop_wrapper() {
static bool setup_done = false;
if(!setup_done) {
Expand All @@ -99,7 +107,7 @@ static void loop_wrapper() {
}

static void loop_task(os_event_t *events) {
g_micros_at_task_start = system_get_time();
g_micros_at_last_task_yield = system_get_time();
cont_run(&g_cont, &loop_wrapper);
if(cont_check(&g_cont) != 0) {
ets_printf("\r\nheap collided with sketch stack\r\n");
Expand Down
19 changes: 10 additions & 9 deletions hardware/esp8266com/esp8266/cores/esp8266/core_esp8266_si2c.c
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
/*
/*
si2c.c - Software I2C library for esp8266
Copyright (c) 2015 Hristo Gochkov. All rights reserved.
This file is part of the esp8266 core for Arduino environment.
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
Expand All @@ -26,20 +26,20 @@ unsigned char twi_dcount = 18;
static unsigned char twi_sda, twi_scl;

#define SDA_LOW() (GPES = (1 << twi_sda)) //Enable SDA (becomes output and since GPO is 0 for the pin, it will pull the line low)
#define SDA_HIGH() (GPEC = (1 << twi_sda)) //Disable SDA (becomes input and since it has pullup it will go high)
#define SDA_HIGH() (GPEC = (1 << twi_sda)) //Disable SDA (becomes input and since it has pullup it will go high)
#define SDA_READ() ((GPI & (1 << twi_sda)) != 0)
#define SCL_LOW() (GPES = (1 << twi_scl))
#define SCL_HIGH() (GPEC = (1 << twi_scl))
#define SCL_LOW() (GPES = (1 << twi_scl))
#define SCL_HIGH() (GPEC = (1 << twi_scl))
#define SCL_READ() ((GPI & (1 << twi_scl)) != 0)

#ifndef FCPU80
#define FCPU80 80000000L
#endif

#if F_CPU == FCPU80
#define TWI_CLOCK_STRETCH 200
#define TWI_CLOCK_STRETCH 800
#else
#define TWI_CLOCK_STRETCH 400
#define TWI_CLOCK_STRETCH 1600
#endif

void twi_setClock(unsigned int freq){
Expand Down Expand Up @@ -99,7 +99,7 @@ static bool twi_write_stop(void){
twi_delay(twi_dcount);
SDA_HIGH();
twi_delay(twi_dcount);

return true;
}

Expand Down Expand Up @@ -166,7 +166,8 @@ unsigned char twi_readFrom(unsigned char address, unsigned char* buf, unsigned i
unsigned int i;
if(!twi_write_start()) return 4;//line busy
if(!twi_write_byte(((address << 1) | 1) & 0xFF)) return 2;//received NACK on transmit of address
for(i=0; i<len; i++) buf[i] = twi_read_byte(false);
for(i=0; i<(len-1); i++) buf[i] = twi_read_byte(false);
buf[len-1] = twi_read_byte(true);
if(sendStop) twi_write_stop();
i = 0;
while(SDA_READ() == 0 && (i++) < 10){
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
const char* ssid = "**********";
const char* password = "**********";

WiFiServer server(21);
WiFiServer server(23);
WiFiClient serverClients[MAX_SRV_CLIENTS];

void setup() {
Expand All @@ -45,7 +45,7 @@ void setup() {

Serial1.print("Ready! Use 'telnet ");
Serial1.print(WiFi.localIP());
Serial1.println(" 21' to connect");
Serial1.println(" 23' to connect");
}

void loop() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -177,20 +177,17 @@ size_t WiFiClient::write(const uint8_t *buf, size_t size)
return _client->write(reinterpret_cast<const char*>(buf), size);
}

extern "C" uint32_t esp_micros_at_task_start();

int WiFiClient::available()
{
static uint32_t lastPollTime = 0;
if (!_client)
return 0;
int result = 0;

if (lastPollTime > esp_micros_at_task_start())
yield();

lastPollTime = micros();
if (_client) {
result = _client->getSize();
}

int result = _client->getSize();
if (!result) {
optimistic_yield();
}
return result;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,17 +84,13 @@ bool WiFiServer::getNoDelay(){
return tcp_nagle_disabled(_pcb);
}

extern "C" uint32_t esp_micros_at_task_start();

bool WiFiServer::hasClient(){
if (_unclaimed) return true;
return false;
}

WiFiClient WiFiServer::available(byte* status)
{
static uint32_t lastPollTime = 0;

if (_unclaimed)
{
WiFiClient result(_unclaimed);
Expand All @@ -103,9 +99,7 @@ WiFiClient WiFiServer::available(byte* status)
return result;
}

if (lastPollTime > esp_micros_at_task_start())
yield();
lastPollTime = micros();
optimistic_yield();

return WiFiClient();
}
Expand Down
14 changes: 11 additions & 3 deletions hardware/esp8266com/esp8266/libraries/ESP8266WiFi/src/WiFiUdp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -116,9 +116,17 @@ uint8_t WiFiUDP::beginMulticast(IPAddress interfaceAddr, IPAddress multicast, ui
/* return number of bytes available in the current packet,
will return zero if parsePacket hasn't been called yet */
int WiFiUDP::available() {
if (!_ctx)
return 0;
return static_cast<int>(_ctx->getSize());
int result = 0;

if (_ctx) {
result = static_cast<int>(_ctx->getSize());
}

if (!result) {
optimistic_yield();
}

return result;
}

/* Release any resources being used by this WiFiUDP instance */
Expand Down
8 changes: 7 additions & 1 deletion hardware/esp8266com/esp8266/libraries/Wire/Wire.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,13 @@ size_t TwoWire::write(const uint8_t *data, size_t quantity){
}

int TwoWire::available(void){
return rxBufferLength - rxBufferIndex;
int result = rxBufferLength - rxBufferIndex;

if (!result) {
optimistic_yield();
}

return result;
}

int TwoWire::read(void){
Expand Down
8 changes: 8 additions & 0 deletions hardware/esp8266com/esp8266/tools/sdk/include/ets_sys.h
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,14 @@ typedef void (*int_handler_t)(void*);
#define ETS_INTR_DISABLE(inum) \
ets_isr_mask((1<<inum))

inline bool ETS_INTR_WITHINISR()
{
uint32_t ps;
__asm__ __volatile__("rsr %0,ps":"=a" (ps));
// PS.EXCM and PS.UM bit checks
return ((ps & ((1 << 4) | (1 << 5))) > 0);
}

inline uint32_t ETS_INTR_ENABLED(void)
{
uint32_t enabled;
Expand Down

0 comments on commit c4667ff

Please sign in to comment.