205 lines
6.5 KiB
C
205 lines
6.5 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.
|
||
|
*
|
||
|
****************************************************************************/
|
||
|
#ifndef __APP_TOTA_CMD_CODE_H__
|
||
|
#define __APP_TOTA_CMD_CODE_H__
|
||
|
|
||
|
#include "hal_trace.h"
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
#define LOG_TAG "[TOTA_CONTROL] "
|
||
|
|
||
|
#define TOTA_CONTROL_DEBUG
|
||
|
|
||
|
#ifdef TOTA_CONTROL_DEBUG
|
||
|
#define TOTA_LOG_DBG(num,str,...) TRACE(num,LOG_TAG""str, ##__VA_ARGS__) // DEBUG OUTPUT
|
||
|
#define TOTA_LOG_MSG(num,str,...) TRACE(num,LOG_TAG""str, ##__VA_ARGS__) // MESSAGE OUTPUT
|
||
|
#define TOTA_LOG_ERR(num,str,...) TRACE(num,LOG_TAG"err:"""str, ##__VA_ARGS__) // ERROR OUTPUT
|
||
|
|
||
|
#define TOTA_LOG_FUNC_LINE() TRACE(2,LOG_TAG"%s:%d\n", __FUNCTION__, __LINE__)
|
||
|
#define TOTA_LOG_FUNC_IN() TRACE(1,LOG_TAG"%s ++++\n", __FUNCTION__)
|
||
|
#define TOTA_LOG_FUNC_OUT() TRACE(1,LOG_TAG"%s ----\n", __FUNCTION__)
|
||
|
|
||
|
#define TOTA_LOG_DUMP DUMP8
|
||
|
#else
|
||
|
#define TOTA_LOG_DBG(str,...)
|
||
|
#define TOTA_LOG_MSG(num,str,...) TRACE(num,LOG_TAG""str, ##__VA_ARGS__)
|
||
|
#define TOTA_LOG_ERR(num,str,...) TRACE(num,LOG_TAG"err:"""str, ##__VA_ARGS__)
|
||
|
|
||
|
#define TOTA_LOG_FUNC_LINE()
|
||
|
#define TOTA_LOG_FUNC_IN()
|
||
|
#define TOTA_LOG_FUNC_OUT()
|
||
|
|
||
|
#define TOTA_LOG_DUMP
|
||
|
#endif
|
||
|
|
||
|
extern uint32_t __tota_handler_table_start[];
|
||
|
extern uint32_t __tota_handler_table_end[];
|
||
|
|
||
|
#define INVALID_TOTA_ENTRY_INDEX 0xFFFF
|
||
|
#define TOTA_CMD_CODE_SIZE sizeof(uint16_t)
|
||
|
|
||
|
/**
|
||
|
* @brief Type of the tota transmission path.
|
||
|
*
|
||
|
*/
|
||
|
typedef enum
|
||
|
{
|
||
|
APP_TOTA_VIA_SPP = 0,
|
||
|
APP_TOTA_VIA_NOTIFICATION,
|
||
|
APP_TOTA_VIA_INDICATION,
|
||
|
APP_TOTA_GEN_VIA_SPP,
|
||
|
APP_TOTA_TRANSMISSION_PATH_COUNT,
|
||
|
|
||
|
APP_TOTA_PATH_IDLE = 0xff
|
||
|
} APP_TOTA_TRANSMISSION_PATH_E;
|
||
|
|
||
|
/**
|
||
|
* @brief The command code
|
||
|
*
|
||
|
*/
|
||
|
typedef enum
|
||
|
{
|
||
|
/* basic cmd */
|
||
|
OP_TOTA_STRING = 0x1000,
|
||
|
OP_TOTA_CONN_INITIATE = 0x1001,
|
||
|
OP_TOTA_CONN_RESPONSE = 0x1002,
|
||
|
OP_TOTA_CONN_CONFIRM = 0x1003,
|
||
|
|
||
|
/* response cmd */
|
||
|
OP_TOTA_RESPONSE_TO_CMD = 0x6000, /**< the payload is: OP_TOTA_RESPONSE_TO_CMD + paramLen + BLE_TOTA_CMD_RSP_T */
|
||
|
OP_TOTA_SPP_DATA_ACK = 0x6001,
|
||
|
|
||
|
/* test cmd: test ok */
|
||
|
OP_TOTA_TEST_CMD = 0x6100,
|
||
|
OP_TOTA_ECHO_TEST_CMD = 0x6101,
|
||
|
OP_TOTA_DEMO_CMD = 0x6102,
|
||
|
|
||
|
/* flash cmd: test ok */
|
||
|
OP_TOTA_WRITE_FLASH_CMD = 0x6200,
|
||
|
OP_TOTA_ERASE_FLASH_CMD = 0x6201,
|
||
|
|
||
|
/* general info cmd: test ok */
|
||
|
OP_TOTA_GENERAL_INFO_CMD = 0x6300,
|
||
|
OP_TOTA_MERIDIAN_EFFECT_CMD = 0x6301,
|
||
|
OP_TOTA_EQ_SELECT_CMD = 0x6302,
|
||
|
OP_TOTA_VOLUME_PLUS_CMD = 0x6303,
|
||
|
OP_TOTA_VOLUME_DEC_CMD = 0x6304,
|
||
|
OP_TOTA_VOLUME_SET_CMD = 0x6305,
|
||
|
OP_TOTA_VOLUME_GET_CMD = 0x6306,
|
||
|
OP_TOTA_EQ_SET_CMD = 0x6307,
|
||
|
OP_TOTA_EQ_GET_CMD = 0x6308,
|
||
|
|
||
|
/* audio dump and mic cmd */
|
||
|
OP_TOTA_AUDIO_DUMP_START = 0x6400,
|
||
|
OP_TOTA_AUDIO_DUMP_STOP = 0x6401,
|
||
|
OP_TOTA_AUDIO_DUMP_CONTROL = 0x6402,
|
||
|
OP_TOTA_MIC_TEST_ON = 0x6403,
|
||
|
OP_TOTA_MIC_TEST_OFF = 0x6404,
|
||
|
OP_TOTA_MIC_SWITCH = 0x6405,
|
||
|
|
||
|
/* custom cmd */
|
||
|
// TODO:
|
||
|
OP_TOTA_FACTORY_RESET = 0x8000,
|
||
|
OP_TOTA_CLEAR_PAIRING_INFO = 0x8001,
|
||
|
OP_TOTA_SHUTDOWM = 0x8002,
|
||
|
OP_TOTA_REBOOT = 0x8003,
|
||
|
|
||
|
// TODO:?
|
||
|
OP_TOTA_RAW_DATA_SET_CMD = 0x9100,
|
||
|
|
||
|
/* commond count */
|
||
|
OP_TOTA_COMMAND_COUNT,
|
||
|
/* to mark that it's a data packet */
|
||
|
OP_TOTA_STREAM_DATA = 0xFFFF,
|
||
|
} APP_TOTA_CMD_CODE_E;
|
||
|
|
||
|
/**
|
||
|
* @brief The tota command handling return status
|
||
|
*
|
||
|
*/
|
||
|
typedef enum
|
||
|
{
|
||
|
TOTA_NO_ERROR = 0,
|
||
|
TOTA_INVALID_CMD = 1,
|
||
|
TOTA_INVALID_DATA_PACKET = 2,
|
||
|
TOTA_PARAM_LEN_OUT_OF_RANGE = 3,
|
||
|
TOTA_PARAMETER_LENGTH_TOO_SHORT = 4,
|
||
|
TOTA_PARAM_LEN_TOO_SHORT = 5,
|
||
|
TOTA_CMD_HANDLING_FAILED = 6,
|
||
|
TOTA_WAITING_RSP_TIMEOUT = 7,
|
||
|
TOTA_DATA_XFER_ALREADY_STARTED = 8,
|
||
|
TOTA_DATA_XFER_NOT_STARTED_YET = 9,
|
||
|
TOTA_DATA_SEGMENT_CRC_CHECK_FAILED = 10,
|
||
|
TOTA_WHOLE_DATA_CRC_CHECK_FAILED = 11,
|
||
|
TOTA_DATA_XFER_LEN_NOT_MATCHED = 12,
|
||
|
TOTA_WRITE_FLASH_CRC_CHECK_FAILED = 13,
|
||
|
TOTA_MIC_SWITCH_FAILED,
|
||
|
// TO ADD: new return status
|
||
|
} APP_TOTA_CMD_RET_STATUS_E;
|
||
|
|
||
|
/**
|
||
|
* @brief Format of the tota command handler function, called when the command is received
|
||
|
*
|
||
|
* @param cmdCode Custom command code
|
||
|
* @param ptrParam Pointer of the received parameter
|
||
|
* @param paramLen Length of the recevied parameter
|
||
|
*
|
||
|
*/
|
||
|
typedef void (*app_tota_cmd_handler_t)(APP_TOTA_CMD_CODE_E cmdCode, uint8_t* ptrParam, uint32_t paramLen);
|
||
|
|
||
|
/**
|
||
|
* @brief Format of the tota command response handler function,
|
||
|
* called when the response to formerly sent command is received
|
||
|
*
|
||
|
* @param retStatus Handling return status of the command
|
||
|
* @param ptrParam Pointer of the received parameter
|
||
|
* @param paramLen Length of the recevied parameter
|
||
|
*
|
||
|
*/
|
||
|
typedef void (*app_tota_cmd_response_handler_t)(APP_TOTA_CMD_RET_STATUS_E retStatus, uint8_t* ptrParam, uint32_t paramLen);
|
||
|
|
||
|
/**
|
||
|
* @brief Smart voice command definition data structure
|
||
|
*
|
||
|
*/
|
||
|
typedef struct
|
||
|
{
|
||
|
uint32_t cmdCode;
|
||
|
app_tota_cmd_handler_t cmdHandler; /**< command handler function */
|
||
|
uint16_t isNeedResponse; /**< true if needs the response from the peer device */
|
||
|
uint16_t timeoutWaitingRspInMs; /**< time-out of waiting for response in milli-seconds */
|
||
|
app_tota_cmd_response_handler_t cmdRspHandler; /**< command response handler function */
|
||
|
} APP_TOTA_CMD_INSTANCE_T;
|
||
|
|
||
|
|
||
|
#define TOTA_COMMAND_TO_ADD(cmdCode, cmdHandler, isNeedResponse, timeoutWaitingRspInMs, cmdRspHandler) \
|
||
|
static const APP_TOTA_CMD_INSTANCE_T cmdCode##_entry __attribute__((used, section(".tota_handler_table"))) = \
|
||
|
{(cmdCode), (cmdHandler), (isNeedResponse), (timeoutWaitingRspInMs), (cmdRspHandler)};
|
||
|
|
||
|
#define TOTA_COMMAND_PTR_FROM_ENTRY_INDEX(index) \
|
||
|
((APP_TOTA_CMD_INSTANCE_T *)((uint32_t)__tota_handler_table_start + (index)*sizeof(APP_TOTA_CMD_INSTANCE_T)))
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
|
||
|
#endif // #ifndef __APP_TOTA_CMD_CODE_H__
|
||
|
|