pinebuds/services/tota/app_tota_audio_dump.cpp

168 lines
5.3 KiB
C++

/***************************************************************************
*
* Copyright 2015-2019 BES.
* All rights reserved. All unpublished rights reserved.
*
* No part of this work may be used or reproduced in any form or by any
* means, or stored in a database or retrieval system, without prior written
* permission of BES.
*
* Use of this work is governed by a license granted by BES.
* This work contains confidential and proprietary information of
* BES. which is protected by copyright, trade secret,
* trademark and other intellectual property rights.
*
****************************************************************************/
#include "app_tota_audio_dump.h"
#include "app_spp_tota.h"
#include "app_tota.h"
#include "app_tota_cmd_code.h"
#include "app_tota_cmd_handler.h"
#include "cmsis_os.h"
#include "tota_stream_data_transfer.h"
// #define _TOTA_AUDIO_DUMP_DEBUG
static void _tota_audio_dump_connected(void);
static void _tota_audio_dump_disconnected(void);
static void _tota_audio_dump_tx_done(void);
static void _tota_audio_dump_receive_handle(uint8_t *buf, uint32_t len);
/**/
static void _audio_dump_control(APP_TOTA_CMD_CODE_E funcCode, uint8_t *ptrParam,
uint32_t paramLen);
#ifdef _TOTA_AUDIO_DUMP_DEBUG
/* only for test */
static void test_init();
#endif
/**/
static tota_callback_func_t s_func = {
_tota_audio_dump_connected, _tota_audio_dump_disconnected,
_tota_audio_dump_tx_done, _tota_audio_dump_receive_handle};
static APP_TOTA_MODULE_E s_module = APP_TOTA_AUDIO_DUMP;
void app_tota_audio_dump_init() {
TOTA_LOG_DBG(1, "[%s] ...", __func__);
tota_callback_module_register(s_module, s_func);
}
static void _tota_audio_dump_connected(void) {
TOTA_LOG_DBG(1, "[%s] ...", __func__);
#ifdef _TOTA_AUDIO_DUMP_DEBUG
test_init();
#endif
}
static void _tota_audio_dump_disconnected(void) {
TOTA_LOG_DBG(1, "[%s] ...", __func__);
}
static void _tota_audio_dump_tx_done(void) { ; }
static void _tota_audio_dump_receive_handle(uint8_t *buf, uint32_t len) { ; }
/*-----------------------------------------------------------------------------*/
void app_tota_audio_dump_start() {
TOTA_LOG_DBG(1, "[%s] ...", __func__);
app_tota_stream_data_start(s_module);
app_tota_audio_dump_flush();
}
void app_tota_audio_dump_stop() {
TOTA_LOG_DBG(1, "[%s] ...", __func__);
app_tota_stream_data_end();
}
void app_tota_audio_dump_flush() {
TOTA_LOG_DBG(1, "[%s] ...", __func__);
app_tota_stream_data_flush();
}
bool app_tota_audio_dump_send(uint8_t *pdata, uint32_t dataLen) {
return app_tota_send_stream_data(pdata, dataLen);
}
/*-----------------------------------------------------------------------------*/
static void _audio_dump_control(APP_TOTA_CMD_CODE_E funcCode, uint8_t *ptrParam,
uint32_t paramLen) {
switch (funcCode) {
case OP_TOTA_AUDIO_DUMP_START:
TOTA_LOG_DBG(0, "tota_audio_dump start");
app_tota_audio_dump_start();
break;
case OP_TOTA_AUDIO_DUMP_STOP:
TOTA_LOG_DBG(0, "tota_audio_dump stop");
app_tota_audio_dump_stop();
break;
case OP_TOTA_AUDIO_DUMP_CONTROL:
TOTA_LOG_DBG(0, "tota_audio_dump contorl");
// TODO: Can get or set info
app_tota_send_response_to_command(funcCode, TOTA_NO_ERROR,
(uint8_t *)".pcm", sizeof(".pcm"),
app_tota_get_datapath());
break;
default:
break;
}
}
#ifdef _TOTA_AUDIO_DUMP_DEBUG
/*-----------------------------------------------------------------------------*/
/*----------------------------------TEST---------------------------------------*/
/*-----------------------------------------------------------------------------*/
#define TOTA_TEST_STACK_SIZE (1024 * 2)
static void tota_audio_dump_test_thread(void const *argument);
osThreadId tota_audio_dump_test_thread_tid;
osThreadDef(tota_audio_dump_test_thread, osPriorityNormal, 1,
TOTA_TEST_STACK_SIZE, "TOTA_TEST_THREAD"); // osPriorityHigh
static uint16_t audio_cnt = 0;
uint16_t audioBuf[512];
static void tota_audio_dump_test_thread(void const *argument) {
app_tota_audio_dump_flush();
while (true) {
osDelay(1000);
for (uint16_t i = 0; i < sizeof(audioBuf) / sizeof(uint16_t); i++) {
audioBuf[i] = audio_cnt++;
// audioBuf[i] = 0x5555;
}
app_tota_audio_dump_send((uint8_t *)audioBuf, sizeof(audioBuf));
}
}
static void test_init() {
tota_audio_dump_test_thread_tid =
osThreadCreate(osThread(tota_audio_dump_test_thread), NULL);
}
#endif
/*-----------------------------------------------------------------------------*/
/*------------------------------ADD USR
* FUNCTION-------------------------------*/
/*-----------------------------------------------------------------------------*/
/*-----------------------------------------------------------------------------*/
/*------------------------------ADD USR
* COMMAND--------------------------------*/
/*-----------------------------------------------------------------------------*/
TOTA_COMMAND_TO_ADD(OP_TOTA_AUDIO_DUMP_START, _audio_dump_control, false, 0,
NULL);
TOTA_COMMAND_TO_ADD(OP_TOTA_AUDIO_DUMP_STOP, _audio_dump_control, false, 0,
NULL);
TOTA_COMMAND_TO_ADD(OP_TOTA_AUDIO_DUMP_CONTROL, _audio_dump_control, false, 0,
NULL);