TanNM

Dependencies:   BSP_DISCO_F746NG

Files at this revision

API Documentation at this revision

Comitter:
tannm
Date:
Tue Mar 03 11:35:25 2020 +0000
Parent:
2:e72bc303ea90
Commit message:
TanNM

Changed in this revision

BSP_DISCO_F746NG.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-os.lib Show annotated file Show diff for this revision Revisions of this file
diff -r e72bc303ea90 -r d7624177cb9f BSP_DISCO_F746NG.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/BSP_DISCO_F746NG.lib	Tue Mar 03 11:35:25 2020 +0000
@@ -0,0 +1,1 @@
+https://mbed.org/teams/ST/code/BSP_DISCO_F746NG/#85dbcff443aa
diff -r e72bc303ea90 -r d7624177cb9f main.cpp
--- a/main.cpp	Mon Jun 26 09:28:54 2017 +0000
+++ b/main.cpp	Tue Mar 03 11:35:25 2020 +0000
@@ -1,54 +1,173 @@
-#if !FEATURE_LWIP
-    #error [NOT_SUPPORTED] LWIP not supported for this target
-#endif
+//#if !FEATURE_LWIP
+//    #error [NOT_SUPPORTED] LWIP not supported for this target
+//#endif
 
 #include "mbed.h"
 #include "EthernetInterface.h"
 #include "TCPServer.h"
 #include "TCPSocket.h"
 
-#define HTTP_STATUS_LINE "HTTP/1.0 200 OK"
-#define HTTP_HEADER_FIELDS "Content-Type: text/html; charset=utf-8"
-#define HTTP_MESSAGE_BODY ""                                     \
-"<html>" "\r\n"                                                  \
-"  <body style=\"display:flex;text-align:center\">" "\r\n"       \
-"    <div style=\"margin:auto\">" "\r\n"                         \
-"      <h1>Hello World</h1>" "\r\n"                              \
-"      <p>It works !</p>" "\r\n"                                 \
-"    </div>" "\r\n"                                              \
-"  </body>" "\r\n"                                               \
-"</html>"
+#include "stm32746g_discovery_audio.h"
+#include "stm32746g_discovery_sdram.h"
+
+typedef enum {
+    BUFFER_OFFSET_NONE = 0,
+    BUFFER_OFFSET_HALF = 1,
+    BUFFER_OFFSET_FULL = 2,
+} BUFFER_StateTypeDef;
+
+#define AUDIO_BLOCK_SIZE   ((uint32_t)4096)
+#define AUDIO_BUFFER_IN     SDRAM_DEVICE_ADDR
+#define AUDIO_BUFFER_OUT   (AUDIO_BUFFER_IN + (AUDIO_BLOCK_SIZE * 2))
+//#define NETWORK_BUFFER     (AUDIO_BUFFER_OUT + (AUDIO_BLOCK_SIZE * 2))
+
+char temp[AUDIO_BLOCK_SIZE];
+
+volatile uint32_t  audio_rec_buffer_state = BUFFER_OFFSET_NONE;
+Serial pc(USBTX, USBRX);
+Mutex mutex;
+ConditionVariable cond(mutex);
+bool done = false;
 
-#define HTTP_RESPONSE HTTP_STATUS_LINE "\r\n"   \
-                      HTTP_HEADER_FIELDS "\r\n" \
-                      "\r\n"                    \
-                      HTTP_MESSAGE_BODY "\r\n"
+void tcp_thread(TCPSocket * send_socket)
+{
+    while (true) {
+        mutex.lock();
+        do {
+            // Wait for a condition to change (network_buffer full)
+//            pc.printf("Waiting for condition on mutex ...\n");
+            cond.wait();
+        } while (!done);
+//        pc.printf("sending data over ethernet ...\n");
+        int ret = send_socket->send((void *)(temp), AUDIO_BLOCK_SIZE);
+        pc.printf("ret = %d\n", ret);
+        done = false;
+        mutex.unlock();
+    }
+    
+    pc.printf("Worker: Exiting\r\n");
+    mutex.unlock();
+}
+
+TCPServer srv;
+TCPSocket clt_sock;
+SocketAddress clt_addr;
+EthernetInterface eth;
 
 int main()
 {
-    printf("Basic HTTP server example\n");
-    
-    EthernetInterface eth;
+    pc.baud(115200);
+    Timer t;
+    // ======================================= setup network ==============================
+    eth.set_network("192.168.10.10", "255.255.255.0", "192.168.10.1");
     eth.connect();
     
-    printf("The target IP address is '%s'\n", eth.get_ip_address());
-    
-    TCPServer srv;
-    TCPSocket clt_sock;
-    SocketAddress clt_addr;
-    
+    pc.printf("The target IP address is '%s'\n", eth.get_ip_address());
+        
     /* Open the server on ethernet stack */
     srv.open(&eth);
     
     /* Bind the HTTP port (TCP 80) to the server */
-    srv.bind(eth.get_ip_address(), 80);
+    srv.bind(eth.get_ip_address(), 8000);
     
     /* Can handle 5 simultaneous connections */
     srv.listen(5);
     
+    // ======================== audio part ============================
+    pc.printf("\n\nAUDIO LOOPBACK EXAMPLE START:\n");
+
+//    BSP_AUDIO_IN_OUT_Init(INPUT_DEVICE_DIGITAL_MICROPHONE_2, OUTPUT_DEVICE_HEADPHONE, DEFAULT_AUDIO_IN_FREQ, DEFAULT_AUDIO_IN_BIT_RESOLUTION, DEFAULT_AUDIO_IN_CHANNEL_NBR);
+    BSP_AUDIO_IN_OUT_Init(INPUT_DEVICE_DIGITAL_MICROPHONE_2, OUTPUT_DEVICE_HEADPHONE, DEFAULT_AUDIO_IN_FREQ, DEFAULT_AUDIO_IN_BIT_RESOLUTION, 1);
+
+    /* Initialize SDRAM buffers */
+    BSP_SDRAM_Init();
+    memset((void *)AUDIO_BUFFER_IN, 0, AUDIO_BLOCK_SIZE * 2);
+    memset((void *)AUDIO_BUFFER_OUT, 0, AUDIO_BLOCK_SIZE * 2);
+//    memset((void *)NETWORK_BUFFER, 0, AUDIO_BLOCK_SIZE * 2);
+    pc.printf("SDRAM init done\n");
+
+    audio_rec_buffer_state = BUFFER_OFFSET_NONE;
+
+    /* Start Recording */
+    if (BSP_AUDIO_IN_Record((uint16_t *)AUDIO_BUFFER_IN, AUDIO_BLOCK_SIZE) != AUDIO_OK) {
+        pc.printf("BSP_AUDIO_IN_Record error\n");
+    }
+
+    /* Start Playback */
+    BSP_AUDIO_OUT_SetAudioFrameSlot(CODEC_AUDIOFRAME_SLOT_02);
+    if (BSP_AUDIO_OUT_Play((uint16_t *)AUDIO_BUFFER_OUT, AUDIO_BLOCK_SIZE * 2) != AUDIO_OK) {
+        pc.printf("BSP_AUDIO_OUT_Play error\n");
+    }
+    
+    int ret;
+    
     while (true) {
         srv.accept(&clt_sock, &clt_addr);
-        printf("accept %s:%d\n", clt_addr.get_ip_address(), clt_addr.get_port());
-        clt_sock.send(HTTP_RESPONSE, strlen(HTTP_RESPONSE));
+        pc.printf("accept %s:%d\n", clt_addr.get_ip_address(), clt_addr.get_port());
+
+//        Thread thread;
+//        thread.start(callback(tcp_thread, &clt_sock));
+
+        int sleep_ms = 20;
+
+        while (1) {
+            /* Wait end of half block recording */
+            t.start();            
+            while (audio_rec_buffer_state != BUFFER_OFFSET_HALF) {
+                wait_ms(sleep_ms);
+            }
+            t.stop();
+            printf("t = %f\n", t.read());
+            t.reset();
+
+            audio_rec_buffer_state = BUFFER_OFFSET_NONE;
+
+            /* Copy recorded 1st half block */
+            memcpy((void *)(AUDIO_BUFFER_OUT), (void *)(AUDIO_BUFFER_IN), AUDIO_BLOCK_SIZE);
+            
+//            mutex.lock();
+//            memcpy((void *)temp, (void *)(AUDIO_BUFFER_IN), AUDIO_BLOCK_SIZE);
+//            done = true;
+//            cond.notify_all();
+//            mutex.unlock();
+
+            memcpy((void *)temp, (void *)(AUDIO_BUFFER_IN), AUDIO_BLOCK_SIZE);
+            int ret = clt_sock.send((void *)(temp), AUDIO_BLOCK_SIZE);
+            pc.printf("ret = %d\n", ret);
+    
+            /* Wait end of one block recording */
+            while (audio_rec_buffer_state != BUFFER_OFFSET_FULL) {
+                wait_ms(sleep_ms);
+            }
+            audio_rec_buffer_state = BUFFER_OFFSET_NONE;
+    
+            /* Copy recorded 2nd half block */
+            memcpy((void *)(AUDIO_BUFFER_OUT + (AUDIO_BLOCK_SIZE)), (void *)(AUDIO_BUFFER_IN + (AUDIO_BLOCK_SIZE)), AUDIO_BLOCK_SIZE);
+
+            memcpy((void *)temp, (void *)(AUDIO_BUFFER_IN + AUDIO_BLOCK_SIZE), AUDIO_BLOCK_SIZE);
+            ret = clt_sock.send((void *)(temp), AUDIO_BLOCK_SIZE);
+            pc.printf("ret = %d\n", ret);
+
+//            mutex.lock();
+//            memcpy((void *)temp, (void *)(AUDIO_BUFFER_IN + AUDIO_BLOCK_SIZE), AUDIO_BLOCK_SIZE);
+//            done = true;
+//            cond.notify_all();
+//            mutex.unlock();
+        }
     }
 }
+
+void BSP_AUDIO_IN_TransferComplete_CallBack(void)
+{
+    audio_rec_buffer_state = BUFFER_OFFSET_FULL;
+}
+
+void BSP_AUDIO_IN_HalfTransfer_CallBack(void)
+{
+    audio_rec_buffer_state = BUFFER_OFFSET_HALF;
+}
+
+void BSP_AUDIO_IN_Error_CallBack(void)
+{
+    printf("BSP_AUDIO_IN_Error_CallBack\n");
+}
diff -r e72bc303ea90 -r d7624177cb9f mbed-os.lib
--- a/mbed-os.lib	Mon Jun 26 09:28:54 2017 +0000
+++ b/mbed-os.lib	Tue Mar 03 11:35:25 2020 +0000
@@ -1,1 +1,1 @@
-https://github.com/ARMmbed/mbed-os/#c9e63f14085f5751ff5ead79a7c0382d50a813a2
+https://github.com/ARMmbed/mbed-os/#e642a7d8b3609a7c903e042cd772f00a5d299088