BLE_TYQ_CH584M/APP/peripheral_main.c

353 lines
9.5 KiB
C

#include "CONFIG.h"
#include "HAL.h"
#include "gattprofile.h"
#include "peripheral.h"
#include "bsp_adc.h"
#include "bsp_key.h"
#include "bsp_beep_led_emv.h"
#include "log.h"
#include "bsp_uart.h"
#include "bsp_i2c.h"
#include "bsp_iwdg.h"
#include "bsp_flash.h"
#include "bsp_valve.h"
#include "bsp_bat.h"
#undef LOG_ENABLE
#define LOG_ENABLE 1
#undef LOG_TAG
#define LOG_TAG "main"
__attribute__((aligned(4))) uint32_t MEM_BUF[BLE_MEMHEAP_SIZE / 4];
static uint8_t key_press_cnt = 0;
// __HIGH_CODE
void app_task_handler(TeAppEvtType app_evt_type)
{
// FEED_IWDG();
gValveData.bat = BSP_ReadVbat();
DelayMs(5);
// BSP_RequestBoost();
BSP_BlockSleep();
BSP_RequestBoost();
logDebug("BSP_RequestBoost");
// DelayMs(5);
#if 1
switch (app_evt_type)
{
case kKeyShort:
{
logDebug("button short press");
// DelayMs(30);
// LDect_Init();
// logDebug("LDect_Init");
key_press_cnt++;
logDebug("key_press_cnt = %d", key_press_cnt);
#if 1
// tmos_set_event(vavle_task_id, VAVLE_DECT_SWITCH_START_EVT);
if (key_press_cnt == 1)
{
logDebug("LED显示状态");
// tmos_set_event(led_task_id, LED_SHOW_START_EVT);
// BSP_BlockSleep();
// BSP_RequestBoost();
// DelayMs(5);
// ShowLed();
// 电压过低就关阀
// if (gValveData.bat <= LOW_VABAT_ALARM_VALUE)
if (bat_mv <= LOW_VABAT_CLOSE_MV)
// if (gValveData.bat <= LOW_VABAT_ALARM_VALUE)
{
LED_ALL_OFF_DEINIT;
LED_Y_ON;
// DelayMs(50);
// LED_ALL_OFF_DEINIT;
// BEEP_ON;
logDebug("LED_Y_ON");
}
else if (gValveData.switch_status == kUnknown || gValveData.switch_status == kClosed)
{
LED_ALL_OFF_DEINIT;
LED_R_ON;
// DelayMs(50);
// LED_ALL_OFF_DEINIT;
logDebug("LED_R_ON");
}
else if (gValveData.switch_status == kOpened)
{
LED_ALL_OFF_DEINIT;
LED_G_ON;
// DelayMs(50);
// LED_ALL_OFF_DEINIT;
logDebug("LED_G_ON");
}
// tmos_stop_task(led_task_id, LED_SHOW_ONCE_EVT);
// tmos_start_task(led_task_id, LED_SHOW_ONCE_EVT, 1000);
}
else if (key_press_cnt == 2)
{
if (gValveData.switch_status == kClosed)
{
logDebug("kClosed-->kOpened");
// tmos_set_event(led_task_id, LED_SHOW_START_EVT);
gValveData.switch_status = kOpened;
BSP_BlockSleep();
// BSP_RequestBoost();
// DelayMs(5);
// ShowLed();
if (gValveData.switch_status == kUnknown || gValveData.switch_status == kClosed)
{
LED_ALL_OFF_DEINIT;
LED_R_ON;
// DelayMs(50);
// LED_ALL_OFF_DEINIT;
logDebug("LED_R_ON");
}
else if (gValveData.switch_status == kOpened)
{
LED_ALL_OFF_DEINIT;
LED_G_ON;
// DelayMs(50);
// LED_ALL_OFF_DEINIT;
logDebug("LED_G_ON");
}
// tmos_stop_task(led_task_id, LED_SHOW_ONCE_EVT);
// tmos_start_task(led_task_id, LED_SHOW_ONCE_EVT, 1000);
}
else if (gValveData.switch_status != kClosed)
{
logDebug("kOpened-->kClosed");
gValveData.switch_status = kClosed;
tmos_set_event(vavle_task_id, VAVLE_CLOSE_START_EVT);
// tmos_set_event(led_task_id, LED_SHOW_START_EVT);
BSP_BlockSleep();
// BSP_RequestBoost();
// DelayMs(5);
// ShowLed();
if (gValveData.switch_status == kUnknown || gValveData.switch_status == kClosed)
{
LED_ALL_OFF_DEINIT;
LED_R_ON;
// DelayMs(50);
// LED_ALL_OFF_DEINIT;
logDebug("LED_R_ON");
}
else if (gValveData.switch_status == kOpened)
{
LED_ALL_OFF_DEINIT;
LED_G_ON;
// DelayMs(50);
// LED_ALL_OFF_DEINIT;
logDebug("LED_G_ON");
}
// tmos_stop_task(led_task_id, LED_SHOW_ONCE_EVT);
// tmos_start_task(led_task_id, LED_SHOW_ONCE_EVT, 1000);
}
}
else if(key_press_cnt >= 2)
{
key_press_cnt = 1;
}
#endif
break;
}
case kKeyLong:
// DelayMs(4000);
logDebug("button long press");
break;
case kKeyRelease:
// BSP_KEY_EnterLowpower();
// DelayMs(10);
key_press_cnt = 0;
// BSP_RequestSleep();
// tmos_set_event(led_task_id, LED_SHOW_END_EVT);
LED_ALL_OFF_DEINIT;
BEEP_OFF_DEINIT;
// // LDect_Deinit();
BSP_NoNeedBoost();
BSP_RequestSleep();
logDebug("gpio relase;BSP_RequestSleep");
break;
default:
break;
}
#endif
}
/*********************************************************************
* @fn Main_Circulation
*
* @brief 主循环
*
* @return none
*/
__HIGH_CODE
__attribute__((noinline)) void Main_Circulation()
{
while (1)
{
TMOS_SystemProcess();
KEY_ProcessLoop();
BSP_UART1_TxLoop();
// FEED_IWDG();
}
}
// https://www.cnblogs.com/gscw/p/18530905
// 在连接间隔和广播间隔到来时,会进入该回调,可以在回调函数加上其他执行逻辑代码,如喂狗等。
void BLE_AdvertiseEventCB(uint32_t timeUs)
{
FEED_IWDG();
logDebug("BLE_AdvertiseEventCB");
}
void BLE_ConnectEventCB(uint32_t timeUs)
{
FEED_IWDG();
logDebug("BLE_ConnectEventCB");
}
/*********************************************************************
* @fn main
*
* @brief 主函数
*
* @return none
*/
int main(void)
{
#if (defined(DCDC_ENABLE)) && (DCDC_ENABLE == TRUE)
PWR_DCDCCfg(ENABLE);
#endif
// 32Mhz/10ppm/10pF
// HSECFG_Capacitance(HSECap_18p);
// USE 32Mhz/10ppm/12pF
HSECFG_Capacitance(HSECap_20p);
SetSysClock(CLK_SOURCE_HSE_PLL_62_4MHz);
#if (defined(HAL_SLEEP)) && (HAL_SLEEP == TRUE)
GPIOA_ModeCfg(GPIO_Pin_All, GPIO_ModeIN_PD);
GPIOB_ModeCfg(GPIO_Pin_All, GPIO_ModeIN_PD);
#endif
#ifdef DEBUG
// 改成 4000000 波特率了
BSP_UART1_Init(4000000);
#endif
CH58x_BLEInit();
HAL_Init();
GAPRole_PeripheralInit();
Peripheral_Init();
for (uint8_t i = 0; i < 10; i++)
{
if (TMOS_GetSystemClock() > 0)
{
logDebug("i = %d ms", i * 100);
logDebug("TMOS_GetSystemClock = %d", TMOS_GetSystemClock());
break;
}
DelayMs(100);
}
ShowRestartReason();
// log打印编译时间和编译日期
logDebug("Compile Time: %s %s", __DATE__, __TIME__);
logDebug("GetSysClock = %d Hz", GetSysClock());
logDebug("Start @ChipID=%02X\n", R8_CHIP_ID);
logError("中文测试 %2.2f", 123.456);
logDebug("%s\n", VER_LIB);
uint8_t MacAddr[6];
GetMACAddress(MacAddr);
// 手机APP显示是倒序的[5-0],不是[0-5]
logDebug("MacAddr: %02X:%02X:%02X:%02X:%02X:%02X", MacAddr[5], MacAddr[4]
, MacAddr[3], MacAddr[2], MacAddr[1], MacAddr[0]);
// DC:32:62:2B:D1:35
logDebug("ID: %02X%02X%02X%02X%02X%02X", MacAddr[5], MacAddr[4]
, MacAddr[3], MacAddr[2], MacAddr[1], MacAddr[0]);
// DelayMs(1000);
BSP_FLASH_Init();
BSP_KEY_Init(app_task_handler);
GXHTC3C_Init();
BSP_ADC_Init();
BSP_VAVLE_Init();
// 如果电压低就都不亮灯、蜂鸣器
if (bat_mv <= LOW_VABAT_CLOSE_MV)
{
tmos_set_event(vavle_task_id, VAVLE_CLOSE_START_EVT);
}
else
{
BSP_BlockSleep();
BSP_RequestBoost();
DelayMs(1);
ShowLed();
// BEEP_ON;
DelayMs(500);
LED_ALL_OFF_DEINIT;
BEEP_OFF_DEINIT;
BSP_NoNeedBoost();
BSP_RequestSleep();
}
LED_ALL_OFF_DEINIT;
BEEP_OFF_DEINIT;
BSP_BEEP_LED_EMV_Init();
IWDG_Init(IWDG_TIMEOUT_MS);
// BSP_TMR0_Init();
// logDebug("BSP_Get_Tick1 %d", BSP_Get_Tick());
// DelayMs(1000);
// logDebug("BSP_Get_Tick2 %d", BSP_Get_Tick());
// 在连接间隔和广播间隔到来时,会进入回调中喂狗
// LL_AdvertiseEventRegister(BLE_AdvertiseEventCB);
// LL_ConnectEventRegister(BLE_ConnectEventCB);
Main_Circulation();
}
/******************************** endfile @ main ******************************/