pinebuds/services/tota/app_tota_cmd_code.h
2022-08-15 17:20:27 +08:00

204 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__