From 1847482a7bc975e8a171cd1df9257647ab6b66f5 Mon Sep 17 00:00:00 2001
From: Uros Majstorovic <majstor@majstor.org>
Date: Sat, 20 Jan 2018 06:26:28 +0100
Subject: foxed esp32 semaphore bug

---
 code/esp32/components/eos/fe310.c     |  5 +++--
 code/esp32/components/eos/transport.c |  4 ++--
 code/fe310/eos/eos.c                  |  2 +-
 code/test/client.c                    | 22 +++++++++++++++++++++-
 4 files changed, 27 insertions(+), 6 deletions(-)

(limited to 'code')

diff --git a/code/esp32/components/eos/fe310.c b/code/esp32/components/eos/fe310.c
index a3552f9..b13d653 100644
--- a/code/esp32/components/eos/fe310.c
+++ b/code/esp32/components/eos/fe310.c
@@ -161,8 +161,9 @@ void eos_fe310_init(void) {
     assert(ret==ESP_OK);
 
     eos_msgq_init(&send_q, send_q_array, EOS_FE310_SIZE_Q);
-    mutex = xSemaphoreCreateMutex();
-    xTaskCreate(&worker, "fe310_receiver", 4096, NULL, 5, NULL);
+    mutex = xSemaphoreCreateBinary();
+    xSemaphoreGive(mutex);
+    xTaskCreatePinnedToCore(&worker, "fe310_receiver", 4096, NULL, 5, NULL, 1);
 }
 
 int eos_fe310_send(unsigned char cmd, unsigned char *buffer, uint16_t len) {
diff --git a/code/esp32/components/eos/transport.c b/code/esp32/components/eos/transport.c
index 9a9309c..597be61 100755
--- a/code/esp32/components/eos/transport.c
+++ b/code/esp32/components/eos/transport.c
@@ -158,7 +158,7 @@ static esp_err_t esp32_wifi_event_handler(void *ctx, system_event_t *event) {
             ESP_LOGI(TAG, "* - Our IP address is: " IPSTR, IP2STR(&event->event_info.got_ip.ip_info.ip));
             ESP_LOGI(TAG, "********************************************");
             t_open();
-            xTaskCreate(&receiver, "receiver", 4096, NULL, 5, &receiver_task);
+            xTaskCreatePinnedToCore(&receiver, "receiver", 4096, NULL, 5, &receiver_task, 1);
             eos_fe310_send(EOS_FE310_CMD_CONNECT, NULL, 0);
             break;
 
@@ -175,7 +175,7 @@ void eos_net_init(void) {
 
     memset(&wifi_config, 0, sizeof(wifi_config));
     tcpip_adapter_init();
-    ESP_ERROR_CHECK( nvs_flash_init() );
+//    ESP_ERROR_CHECK( nvs_flash_init() );
     ESP_ERROR_CHECK( esp_event_loop_init(esp32_wifi_event_handler, NULL) );
     ESP_ERROR_CHECK( esp_wifi_init(&cfg) );
     ESP_ERROR_CHECK( esp_wifi_set_storage(WIFI_STORAGE_RAM) );
diff --git a/code/fe310/eos/eos.c b/code/fe310/eos/eos.c
index 8dbfdac..5ad40cc 100644
--- a/code/fe310/eos/eos.c
+++ b/code/fe310/eos/eos.c
@@ -13,5 +13,5 @@ void eos_init(void) {
 }
 
 void eos_start(void) {
-    eos_net_start(255);
+    eos_net_start(31);
 }
\ No newline at end of file
diff --git a/code/test/client.c b/code/test/client.c
index 3ec6eb7..b8a2ba5 100644
--- a/code/test/client.c
+++ b/code/test/client.c
@@ -2,6 +2,7 @@
 #include <string.h>
 #include <unistd.h>
 #include <stdlib.h>
+#include <sys/time.h>
 
 #include "core.h"
 #include "util.h"
@@ -16,6 +17,10 @@ ECPConnection conn;
 #define CTYPE_TEST  0
 #define MTYPE_MSG   8
 
+int counter = 0;
+uint64_t t_start = 0;
+uint64_t t_end = 0;
+
 ssize_t handle_open_c(ECPConnection *conn, ecp_seq_t sq, unsigned char t, unsigned char *p, ssize_t s, ECP2Buffer *b) {
     uint32_t seq = 0;
     
@@ -31,17 +36,32 @@ ssize_t handle_open_c(ECPConnection *conn, ecp_seq_t sq, unsigned char t, unsign
     strcpy((char *)buf, msg);
     ssize_t _rv = ecp_send(conn, MTYPE_MSG, buf, 1000);
 
+    struct timeval tv;
+    gettimeofday(&tv, NULL);
+    t_start = tv.tv_sec*(uint64_t)1000000+tv.tv_usec;
+
     return s;
 }
 
 ssize_t handle_msg_c(ECPConnection *conn, ecp_seq_t sq, unsigned char t, unsigned char *p, ssize_t s, ECP2Buffer *b) {
-    printf("MSG C:%s size:%ld\n", p, s);
+    counter++;
+    // printf("MSG C:%s size:%ld\n", p, s);
     char *msg = "PERA JE CAR!";
     unsigned char buf[1000];
 
     strcpy((char *)buf, msg);
     ssize_t _rv = ecp_send(conn, MTYPE_MSG, buf, 1000);
 
+    if (counter % 100 == 0) {
+        struct timeval tv;
+        uint64_t t_time;
+
+        gettimeofday(&tv, NULL);
+        t_end = tv.tv_sec*(uint64_t)1000000+tv.tv_usec;
+        t_time = t_end - t_start;
+        printf("T:%f\n", (float)t_time/1000000);
+        t_start = t_end;
+    }
     return s;
 }
 
-- 
cgit v1.2.3