代码暂存 优化完善letter shell功能
This commit is contained in:
parent
d8c6878e8b
commit
623a53b7a1
|
@ -40,7 +40,7 @@
|
|||
#define SBP_PHY_UPDATE_DELAY 2400
|
||||
|
||||
// What is the advertising interval when device is discoverable (units of 625us, 80=50ms)
|
||||
#define DEFAULT_ADVERTISING_INTERVAL (160 * 20) //160 * 10
|
||||
#define DEFAULT_ADVERTISING_INTERVAL (160 * 15) //160 * 10
|
||||
|
||||
// Limited discoverable mode advertises for 30.72s, and then stops
|
||||
// General discoverable mode advertises indefinitely
|
||||
|
|
|
@ -58,7 +58,7 @@ void app_task_handler(TeAppEvtType app_evt_type)
|
|||
BSP_KEY_EnterLowpower();
|
||||
// DelayMs(10);
|
||||
BSP_RequestSleep();
|
||||
logDebug("gpio relase;BSP_RequestSleep");
|
||||
logDebug("gpio relase;BSP_RequestSleep ");
|
||||
|
||||
break;
|
||||
default:
|
||||
|
|
|
@ -1,2 +1,3 @@
|
|||
不开启睡眠正常
|
||||
开启睡眠不初始化任何外设的情况下letter shell卡死,只有初始化4G后正常
|
||||
系统进入睡眠模式后,需要长按键盘按键来激活letter shell
|
||||
激活后可正常使用letter shell
|
||||
30秒无操作后自动进入睡眠
|
||||
|
|
|
@ -8,6 +8,8 @@
|
|||
#define UART3_RX_PIN GPIO_Pin_20 //PB20 日志打印
|
||||
#define UART3_TX_PIN GPIO_Pin_21 // PB21
|
||||
|
||||
// 定义Shell活动超时时间(毫秒)
|
||||
#define SHELL_ACTIVITY_TIMEOUT 30000 // 30秒无活动后允许系统睡眠
|
||||
|
||||
void BSP_UART1_Init(void);
|
||||
unsigned int BSP_Uart1_Receive_Data(void *buf, unsigned int len);
|
||||
|
@ -19,19 +21,5 @@ unsigned int BSP_Uart3_Send_Data(const void *buf, unsigned int len);
|
|||
void BSP_Shell_Loop(void);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -19,6 +19,9 @@ tmosTaskID key_task_id = INVALID_TASK_ID;
|
|||
volatile uint8_t key_wakeup_flag = 0;
|
||||
volatile uint8_t key_timeout_flag = 0;
|
||||
|
||||
// 声明外部函数
|
||||
extern void BSP_UART3_HandleWakeupInterrupt(void);
|
||||
|
||||
static app_task_evt_handler_t p_handler = NULL;
|
||||
|
||||
static volatile uint8_t key_timeout_cnt = 0;
|
||||
|
@ -133,8 +136,6 @@ void BSP_KEY_EnterLowpower(void)
|
|||
|
||||
// 开启GPIOB中断
|
||||
PFIC_EnableIRQ(GPIO_B_IRQn);
|
||||
|
||||
BSP_RequestSleep();
|
||||
}
|
||||
|
||||
void BSP_KEY_ExitLowpower(void)
|
||||
|
@ -320,12 +321,15 @@ __INTERRUPT // 告诉编译器使用硬件压栈
|
|||
__HIGH_CODE // 放到RAM里
|
||||
void GPIOB_IRQHandler(void)
|
||||
{
|
||||
printf("GPIOB_IRQHandler \r\n");
|
||||
if (GPIOB_ReadITFlagBit(KEY_B_PIN))
|
||||
{
|
||||
// 阻止睡眠
|
||||
BSP_BlockSleep();
|
||||
// 关按键中断
|
||||
BSP_KEY_ExitLowpower();
|
||||
|
||||
logDebug("KEY IRQ");
|
||||
printf("KEY IRQ");
|
||||
|
||||
GPIOB_ClearITFlagBit(KEY_B_PIN);
|
||||
|
||||
|
@ -341,4 +345,11 @@ void GPIOB_IRQHandler(void)
|
|||
// BSP_KEY_ExitLowpower();
|
||||
// }
|
||||
// tmos_set_event(key_task_id,KEY_SCAN_EVT);
|
||||
}
|
||||
// else if (R16_PB_INT_IF & (1 << (20 % 16)))
|
||||
// {
|
||||
// printf("UART3 RX start Wake IRQ \r\n");
|
||||
// // 调用UART3唤醒处理函数
|
||||
// BSP_UART3_HandleWakeupInterrupt();
|
||||
// }
|
||||
}
|
||||
|
|
|
@ -3,6 +3,9 @@
|
|||
#include "lwrb.h"
|
||||
#include "CH58x_uart.h"
|
||||
#include "shell_port.h"
|
||||
#include "SLEEP.h"
|
||||
#include "CONFIG.h"
|
||||
#include "log.h"
|
||||
|
||||
#define UART1_RX_BUFFER_LENGTH 512U
|
||||
#define UART1_TX_BUFFER_LENGTH 512U
|
||||
|
@ -10,6 +13,8 @@
|
|||
#define UART3_RX_BUFFER_LENGTH 1024U
|
||||
#define UART3_TX_BUFFER_LENGTH 1024U
|
||||
|
||||
void BSP_Shell_SetActive(void);
|
||||
|
||||
|
||||
lwrb_t uart1_rx_t;
|
||||
lwrb_t uart1_tx_t;
|
||||
|
@ -116,8 +121,9 @@ void BSP_UART3_Init(void)
|
|||
GPIOB_ModeCfg(UART3_RX_PIN, GPIO_ModeIN_PU); // RXD-配置上拉输入
|
||||
GPIOB_ModeCfg(UART3_TX_PIN, GPIO_ModeOut_PP_5mA); // TXD-配置推挽输出,注意先让IO口输出高电平
|
||||
UART3_DefInit();
|
||||
UART3_BaudRateCfg(460800);
|
||||
UART3_BaudRateCfg(115200); //460800
|
||||
UART3_ByteTrigCfg(UART_1BYTE_TRIG);
|
||||
|
||||
// 中断方式接收数据
|
||||
UART3_INTCfg(ENABLE, RB_IER_LINE_STAT | RB_IER_RECV_RDY | RB_IER_THR_EMPTY);
|
||||
PFIC_EnableIRQ(UART3_IRQn);
|
||||
|
@ -126,6 +132,48 @@ void BSP_UART3_Init(void)
|
|||
userShellInit();
|
||||
}
|
||||
|
||||
|
||||
static tmosTaskID shell_timeout_task_id = INVALID_TASK_ID;
|
||||
#define SHELL_TIMEOUT_EVT 0x0001
|
||||
|
||||
/**
|
||||
* @brief 超时后系统睡眠
|
||||
*/
|
||||
static uint16_t BSP_Shell_TimeoutTask(uint8_t task_id, uint16_t events)
|
||||
{
|
||||
if (events & SHELL_TIMEOUT_EVT)
|
||||
{
|
||||
printf("Shell_Timeout UART3 enter low power mode\r\n");
|
||||
BSP_RequestSleep();
|
||||
return (events ^ SHELL_TIMEOUT_EVT);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 启动Shell活动超时定时器
|
||||
*/
|
||||
void BSP_Shell_StartTimeoutTimer(void)
|
||||
{
|
||||
if (shell_timeout_task_id == INVALID_TASK_ID)
|
||||
{
|
||||
shell_timeout_task_id = TMOS_ProcessEventRegister(BSP_Shell_TimeoutTask);
|
||||
}
|
||||
tmos_stop_task(shell_timeout_task_id, SHELL_TIMEOUT_EVT);
|
||||
tmos_start_task(shell_timeout_task_id, SHELL_TIMEOUT_EVT, MS1_TO_SYSTEM_TIME(SHELL_ACTIVITY_TIMEOUT));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 将Shell设置为活动状态,阻止系统睡眠
|
||||
*/
|
||||
void BSP_Shell_SetActive(void)
|
||||
{
|
||||
BSP_BlockSleep();
|
||||
BSP_Shell_StartTimeoutTimer();
|
||||
}
|
||||
|
||||
|
||||
/*********************************************************************
|
||||
* @fn UART1_IRQHandler
|
||||
*
|
||||
|
@ -199,10 +247,10 @@ void UART3_IRQHandler(void)
|
|||
}
|
||||
case UART_II_RECV_RDY:
|
||||
case UART_II_RECV_TOUT: //接收超时
|
||||
printf("UART_II_RECV_TOUT \r\n");
|
||||
BSP_Shell_SetActive();
|
||||
while(R8_UART3_RFC)
|
||||
{
|
||||
printf("shellHandler \r\n");
|
||||
logDebug("shellHandler \r\n");
|
||||
shellHandler(&shell, R8_UART3_RBR);
|
||||
}
|
||||
break;
|
||||
|
@ -226,3 +274,4 @@ void UART3_IRQHandler(void)
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -144,6 +144,39 @@ SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0)|SHELL_CMD_TYPE(SHELL_TYPE_CMD_FUNC),
|
|||
logSetLevel, logSetLevel, set log level\r\n logSetLevel [log] [level]);
|
||||
#endif /** SHELL_USING_COMPANION == 1 */
|
||||
|
||||
/**
|
||||
* @brief 开启所有日志功能
|
||||
*/
|
||||
void logOpen(void)
|
||||
{
|
||||
for (short i = 0; i < LOG_MAX_NUMBER; i++)
|
||||
{
|
||||
if (logList[i])
|
||||
{
|
||||
logList[i]->active = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0)|SHELL_CMD_TYPE(SHELL_TYPE_CMD_FUNC),
|
||||
logon, logOpen, set log Open);
|
||||
|
||||
/**
|
||||
* @brief 关闭所有日志功能
|
||||
*/
|
||||
void logClose(void)
|
||||
{
|
||||
for (short i = 0; i < LOG_MAX_NUMBER; i++)
|
||||
{
|
||||
if (logList[i])
|
||||
{
|
||||
logList[i]->active = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0)|SHELL_CMD_TYPE(SHELL_TYPE_CMD_FUNC),
|
||||
logoff, logClose, set log Close);
|
||||
|
||||
/**
|
||||
* @brief log写buffer
|
||||
|
|
Loading…
Reference in New Issue