
TanNM
Dependencies: BSP_DISCO_F746NG
Revision 3:d7624177cb9f, committed 2020-03-03
- Comitter:
- tannm
- Date:
- Tue Mar 03 11:35:25 2020 +0000
- Parent:
- 2:e72bc303ea90
- Commit message:
- TanNM
Changed in this revision
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(ð); /* 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