blob: fa72774f6f6fea52b91a18af9d12b0ba10a75cb5 [file] [log] [blame]
/******************************************************************************
* @file app_config.h
*
* @brief for TLSR chips
*
* @author public@telink-semi.com;
* @date Sep. 30, 2010
*
* @attention
*
* Copyright (C) 2019-2020 Telink Semiconductor (Shanghai) Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*****************************************************************************/
#pragma once
/* Enable C linkage for C++ Compilers: */
#if defined(__cplusplus)
extern "C" {
#endif
#include "application/audio/audio_common.h"
#include "application/usbstd/usbkeycode.h"
#define APP_TEST_SECT_ADDR 0x73000
#define APP_CUSTOM_ADDR 0x78000
#define APP_WOBLE_ADV_TYPE_ADDR 0x780F8
#define APP_PERIODIC_WAKE_UP_TIMER 0x780F9
#define APP_EN_PERIODIC_WAKE_UP 0x780FB
#define APP_EN_SLAVE_RPA 0x780FC
#define APP_EN_BLE_ADV 0x780FD
#define APP_EN_GOOGLE_WAKEUPPACK 0x780FE
#define APP_EN_CACHEKEY 0x780FF
#define APP_AUTHENTICATION_ADDR 0x78100
#define APP_ENCRYPTION_ADDR 0x78200
#define APP_ECDSA_PUBKEY_ADDR 0x78300
#define APP_NEC_IR_CODE_TABLE 0x79000
#define APP_DATA_UPDATE_OVER_OTA_ADDR 0x7a000
#define APP_DATA_UPDATE_ADDR_OFFSET APP_DATA_UPDATE_OVER_OTA_ADDR - APP_CUSTOM_ADDR
#define IR_DATA_SECT_0_EXT_ADDR 0x38000
#define IR_DATA_SECT_1_EXT_ADDR 0x39000
#define IR_DATA_SECT_2_EXT_ADDR 0x3a000
#define IR_DATA_SECT_3_EXT_ADDR 0x3b000
#define IR_DATA_SECT_0_ADDR 0x3c000
#define IR_DATA_SECT_1_ADDR 0x3d000
#define IR_DATA_SECT_2_ADDR 0x3e000
#define IR_DATA_SECT_3_ADDR 0x3f000
#define IR_SECTOR_ADD_OFFSET IR_DATA_SECT_0_ADDR-IR_DATA_SECT_0_EXT_ADDR
#define MAC_DATA_SECT_ADDR 0x7b000
#define WAKEUP_KEYINDEX_DATA_SECT_ADDR 0x7c000
#define IR_KEY_EVENT_NOTIFY_SECT_ADDR 0x7d000
#define CCC_DATA_AREA 0x7e000
#define IR_DATA_SECT_MAX_NUM 12 //Each sector can be written 3 times ,4*3
#define IR_DATA_SECT_NUM 4
#define IR_DATA_NEED_ERASE_NUM 6
/////////////////// FEATURE SELECT /////////////////////////////////
#define BLE_REMOTE_PM_ENABLE 1
#define PM_DEEPSLEEP_RETENTION_ENABLE 1
#define BLE_REMOTE_SECURITY_ENABLE 1
#define BLE_REMOTE_OTA_ENABLE 1
#define REMOTE_IR_ENABLE 1
#define BATT_CHECK_ENABLE 1 //must enable
#define BLE_AUDIO_ENABLE 1
#define APP_IR_OVER_BLE 1
#define APP_DATA_UPDATE_OVER_BLE 1
#define BLT_APP_LED_ENABLE 1
#define BLT_TEST_SOFT_TIMER_ENABLE 1
#define FIND_ME_ENABLE 1
#define DEVICE_INFO 0
#define UNUSED_GPIO_PULLDOWN_ENABLE 0
//flash firmware_check
#define FIRMWARE_CHECK_ENABLE 0
//firmware check
#define FIRMWARES_SIGNATURE_ENABLE 0
#define AUDIO_TRANS_USE_2M_PHY_ENABLE 0
#define REMOTE_G10 1
#define REMOTE_G20 2
#define MP_TEST_MODE 1
/////////////////// TEST MODE & DUT ////////////////////////////////
#if (MP_TEST_MODE)
#define MODE_TEST 0xFF
#define MODE_USER 0x00
#define DUT_INPUT_PORT GPIO_PB2
#define PB2_INPUT_ENABLE 1
#endif
/////////////////// DEEP SAVE FLG //////////////////////////////////
#define USED_DEEP_ANA_REG DEEP_ANA_REG0 //u8,can save 8 bit info when deep
#define LOW_BATT_FLG BIT(0) //if 1: low battery
#define CONN_DEEP_FLG BIT(1) //if 1: conn deep, 0: adv deep
#define IR_MODE_DEEP_FLG BIT(2) //if 1: IR mode, 0: BLE mode
#define LOW_BATT_SUSPEND_FLG BIT(3) //if 1 : low battery, < 1.8v
#define OTA_FLG BIT(4) //if 1: OTA SUCCESS
#define POWER_ON_FLG BIT(5)
#if (BATT_CHECK_ENABLE)
#if 0//(__PROJECT_8278_BLE_REMOTE__)
//use VBAT(8278) , then adc measure this VBAT voltage
#define ADC_INPUT_PCHN VBAT //corresponding ADC_InputPchTypeDef in adc.h
#else
//telink device: you must choose one gpio with adc function to output high level(voltage will equal to vbat), then use adc to measure high level voltage
//use PB7(8258) output high level, then adc measure this high level voltage
#define GPIO_VBAT_DETECT GPIO_PB7
#define PB7_FUNC AS_GPIO
#define PB7_INPUT_ENABLE 0
#define ADC_INPUT_PCHN B7P //corresponding ADC_InputPchTypeDef in adc.h
#endif
#endif
//#define IR_KEY_SEQUENCE_ADDR 0x71000
//////////////////// LED CONFIG (RCU board)///////////////////////////
#if (BLT_APP_LED_ENABLE)
#define LED_ON_LEVAL 1 //gpio output high voltage to turn on led
#define GPIO_LED GPIO_PD6
#define PD6_FUNC AS_GPIO
#define GPIO_LED2 GPIO_PD5
#define PD5_FUNC AS_GPIO
#define PD5_OUTPUT_ENABLE 1
#define PD5_INPUT_ENABLE 0
#endif
#if (BLT_TEST_SOFT_TIMER_ENABLE)
#define BLT_SOFTWARE_TIMER_ENABLE 1
#endif
////////////////////////// AUDIO CONFIG (RCU board) /////////////////////////////
#if (BLE_AUDIO_ENABLE)
#define BLE_DMIC_ENABLE 0 //0: Amic 1: Dmic
#define IIR_FILTER_ENABLE 0
#if BLE_DMIC_ENABLE
#define GPIO_DMIC_BIAS GPIO_PC4
#define GPIO_DMIC_DI GPIO_PA0
#define GPIO_DMIC_CK GPIO_PA1
#else
#define GPIO_AMIC_BIAS GPIO_PC4// need check ,v1.0 PC4, V1.1 PC0
#define GPIO_AMIC_C1 GPIO_PC1
#endif
/* RCU Audio MODE:
* TL_AUDIO_RCU_ADPCM_GATT_TLEINK
* TL_AUDIO_RCU_ADPCM_GATT_GOOGLE
* TL_AUDIO_RCU_ADPCM_HID
* TL_AUDIO_RCU_SBC_HID //need config 32k retention
* TL_AUDIO_RCU_ADPCM_HID_DONGLE_TO_STB
* TL_AUDIO_RCU_SBC_HID_DONGLE_TO_STB //need config 32k retention
* TL_AUDIO_RCU_MSBC_HID //need config 32k retention
*/
#define TL_AUDIO_MODE TL_AUDIO_RCU_ADPCM_GATT_GOOGLE
#endif
//PB3 IRout 100K pulldown when IR not working, when IR begin, disable this 100K pulldown
#define PULL_WAKEUP_SRC_PB3 PM_PIN_PULLDOWN_100K
//////////////////////////// KEYSCAN/MIC GPIO //////////////////////////////////
#define MATRIX_ROW_PULL PM_PIN_PULLUP_1M//PM_PIN_PULLDOWN_100K//PM_PIN_PULLUP_1M
#define MATRIX_COL_PULL PM_PIN_PULLDOWN_100K//PM_PIN_PULLUP_10K//PM_PIN_PULLDOWN_100K
#define KB_LINE_HIGH_VALID 1 //dirve pin output 0 when keyscan, scanpin read 0 is valid
#define DEEPBACK_FAST_KEYSCAN_ENABLE 0 //proc fast scan when deepsleep back trigged by key press, in case key loss
#define LONG_PRESS_KEY_POWER_OPTIMIZE 1 //lower power when pressing key without release
//stuck key
#define STUCK_KEY_PROCESS_ENABLE 1
#define STUCK_KEY_ENTERDEEP_TIME 30 //in s
//repeat key
#define KB_REPEAT_KEY_ENABLE 0
#define KB_REPEAT_KEY_INTERVAL_MS 200
#define KB_REPEAT_KEY_NUM 1
#define KB_MAP_REPEAT {VK_1, }
#define CR_VOL_UP 0x80
#define CR_VOL_DN 0x81
#define CR_PERIOD 0x37
#define CR_MEDIA_KEY_INDEX CR_NOTIFICATION
//device layout
#define CR_NOTIFICATION 0xdd
#define CR_LIVETV 0xde
#define CR_TELETEXT 0xdf
#define CR_USERPROFILE 0xe0
#define CR_ALLAPPS 0xe1
#define CR_FASTREWIND 0xe2
#define CR_RECORD 0xe3
#define CR_PLAYPAUSE 0xe4
#define CR_FASTFORWARD 0xe5
//G20
#define CR_INFO 0xe6
#define CR_SUBTITLE 0xe7
#define CR_RED 0xe8
#define CR_GREEN 0xe9
#define CR_YELLOW 0xea
#define CR_BLUE 0xeb
//G10
#define CR_YOUTUBE 0xec
#define CR_NETFLIX 0xed
#define CR_DISNEY 0xee
#define CR_HBOMAX 0xef
#define CR_UP 0xf0
#define CR_DN 0xf1
#define CR_LEFT 0xf2
#define CR_RIGHT 0xf3
#define CR_CENTER 0xf4
#define CR_HOME 0xf5
#define CR_BACK 0xf6
#define CR_POWER 0xf7
#define CR_VOL_MUTE 0xf8
#define CR_CHN_UP 0xf9
#define CR_CHN_DN 0xfa
#define CR_GUIDE 0xfb
#define CR_BOOKMARK 0xfc
#define CR_ASSIST 0xfd
#define CR_INPUT 0xfe
#define CR_DASHBOARD 0xff
//special key
#define VOICE 0xc0
#define KEY_MODE_SWITCH 0xc1
#define PHY_TEST 0xc2
#define VOICE_PTT 0xc3
#define VOICE_HTT 0xc4
#define VOICE_ON_REQ 0xc5
#define AES_TEST 0xc6
#define IR_VK_0 0x0A
#define IR_VK_1 0x01
#define IR_VK_2 0x02
#define IR_VK_3 0x03
#define IR_VK_4 0x04
#define IR_VK_5 0x05
#define IR_VK_6 0x06
#define IR_VK_7 0x07
#define IR_VK_8 0x08
#define IR_VK_9 0x09
#define IR_UP 0x15
#define IR_DN 0x16
#define IR_LEFT 0x17
#define IR_RIGHT 0x18
#define IR_CENTER 0x19
#define IR_POWER 0x21
#define IR_HOME 0x47
#define IR_BACK 0x48
#define IR_VOL_UP 0x23
#define IR_VOL_DN 0x24
#define IR_CHN_UP 0x33
#define IR_CHN_DN 0x34
#define IR_ASSIST 0x46
#define IR_YOUTUBE 0x64
#define IR_NETFLIX 0x63
#define IR_DISNEY 0x67
#define IR_HBOMAX 0x68
#define IR_GUIDE 0x32
#define IR_BOOKMARK 0x74
#define IR_INPUT 0x60
#define IR_MUTE 0x25
#define IR_DASHBOARD 0x0F
#define T_VK_CH_UP 0xd0
#define T_VK_CH_DN 0xd1
//G20
#define IR_INFO 0x29
#define IR_SUBTITLE 0x58
#define IR_RED 0x4b
#define IR_GREEN 0x4a
#define IR_YELLOW 0x49
#define IR_BLUE 0x4c
//device lyaout
#define IR_PERIOD 0X2a
#define IR_NOTIFICATION 0x10
#define IR_LIVETV 0x61
#define IR_TELETEXT 0x75
#define IR_USERPROFILE 0x59
#define IR_ALLAPPS 0x57
#define IR_FASTREWIND 0x51
#define IR_RECORD 0x54
#define IR_PLAYPAUSE 0x52
#define IR_FASTFORWARD 0x53
#define KB_SCAN_PINS {GPIO_PA1, GPIO_PA2, GPIO_PA3, GPIO_PA4, GPIO_PA5, GPIO_PA6,GPIO_PB5,GPIO_PB6}
//drive pin as gpio
#define PD2_FUNC AS_GPIO
#define PD3_FUNC AS_GPIO
#define PD4_FUNC AS_GPIO
#define PD7_FUNC AS_GPIO
#define PA0_FUNC AS_GPIO
#define PD1_FUNC AS_GPIO
//drive pin need 100K pulldown
#define PULL_WAKEUP_SRC_PD2 MATRIX_ROW_PULL
#define PULL_WAKEUP_SRC_PD3 MATRIX_ROW_PULL
#define PULL_WAKEUP_SRC_PD4 MATRIX_ROW_PULL
#define PULL_WAKEUP_SRC_PD7 MATRIX_ROW_PULL
#define PULL_WAKEUP_SRC_PA0 MATRIX_ROW_PULL
#define PULL_WAKEUP_SRC_PD1 MATRIX_ROW_PULL
//drive pin open input to read gpio wakeup level
#define PD2_INPUT_ENABLE 1
#define PD3_INPUT_ENABLE 1
#define PD4_INPUT_ENABLE 1
#define PD7_INPUT_ENABLE 1
#define PA0_INPUT_ENABLE 1
#define PD1_INPUT_ENABLE 1
//scan pin as gpio
#define PA1_FUNC AS_GPIO
#define PA2_FUNC AS_GPIO
#define PA3_FUNC AS_GPIO
#define PA4_FUNC AS_GPIO
#define PA5_FUNC AS_GPIO
#define PA6_FUNC AS_GPIO
#define PB5_FUNC AS_GPIO
#define PB6_FUNC AS_GPIO
//scan pin need 10K pullup
#define PULL_WAKEUP_SRC_PA1 MATRIX_COL_PULL
#define PULL_WAKEUP_SRC_PA2 MATRIX_COL_PULL
#define PULL_WAKEUP_SRC_PA3 MATRIX_COL_PULL
#define PULL_WAKEUP_SRC_PA4 MATRIX_COL_PULL
#define PULL_WAKEUP_SRC_PA5 MATRIX_COL_PULL
#define PULL_WAKEUP_SRC_PA6 MATRIX_COL_PULL
#define PULL_WAKEUP_SRC_PB5 MATRIX_COL_PULL
#define PULL_WAKEUP_SRC_PB6 MATRIX_COL_PULL
//scan pin open input to read gpio level
#define PA1_INPUT_ENABLE 1
#define PA2_INPUT_ENABLE 1
#define PA3_INPUT_ENABLE 1
#define PA4_INPUT_ENABLE 1
#define PA5_INPUT_ENABLE 1
#define PA6_INPUT_ENABLE 1
#define PB5_INPUT_ENABLE 1
#define PB6_INPUT_ENABLE 1
//#define KB_MAP_NUM KB_MAP_NORMAL
//#define KB_MAP_FN KB_MAP_NORMAL
/////////////////// Clock /////////////////////////////////
#if (TL_AUDIO_MODE & (TL_AUDIO_MASK_SBC_MODE | TL_AUDIO_MASK_MSBC_MODE))
#define CLOCK_SYS_CLOCK_HZ 32000000
#else
#define CLOCK_SYS_CLOCK_HZ 16000000
#endif
enum{
CLOCK_SYS_CLOCK_1S = CLOCK_SYS_CLOCK_HZ,
CLOCK_SYS_CLOCK_1MS = (CLOCK_SYS_CLOCK_1S / 1000),
CLOCK_SYS_CLOCK_1US = (CLOCK_SYS_CLOCK_1S / 1000000),
};
#define CLOCK_32K_CLOCK_HZ (32000)
enum{
CLOCK_32K_CLOCK_1MS = (CLOCK_32K_CLOCK_HZ / 1000),
CLOCK_32K_CLOCK_1S = CLOCK_32K_CLOCK_HZ,
CLOCK_32K_CLOCK_1MIN = (CLOCK_32K_CLOCK_1S * 60),
CLOCK_32K_CLOCK_1HOUR = (CLOCK_32K_CLOCK_1MIN * 60),
};
/////////////////// watchdog //////////////////////////////
#define MODULE_WATCHDOG_ENABLE 0
#define WATCHDOG_INIT_TIMEOUT 500 //ms
#if (MP_TEST_MODE)
#define BLE_PHYTEST_MODE PHYTEST_MODE_THROUGH_2_WIRE_UART
#else
#define BLE_PHYTEST_MODE PHYTEST_MODE_DISABLE
#endif
#define UART_PRINT_ENABLE 0 //uart_tx as uart print func
#define UART_PRINT_DEBUG_ENABLE 1 //GPIO simulate uart print func
#if (UART_PRINT_DEBUG_ENABLE)
//the baud rate should not bigger than 1M(system timer clock is constant 16M)
#define PRINT_BAUD_RATE 1000000
#define DEBUG_INFO_TX_PIN GPIO_PB1
#define PULL_WAKEUP_SRC_PB1 PM_PIN_PULLUP_10K
#define PB1_OUTPUT_ENABLE 1
#define PB1_DATA_OUT 1 //must
#include "application/print/u_printf.h"
#endif
#include "app_att.h"
#include "../common/default_config.h"
/* Disable C linkage for C++ Compilers: */
#if defined(__cplusplus)
}
#endif