From 65d60c4c23db0f46a3c90cfb885d50f887d7e2e4 Mon Sep 17 00:00:00 2001
From: stark1898y <1658608470@qq.com>
Date: Thu, 12 Dec 2024 19:38:57 +0800
Subject: [PATCH] =?UTF-8?q?char3=E4=B8=8B=E5=8F=91=EF=BC=8Cchar4=E9=80=9A?=
=?UTF-8?q?=E7=9F=A5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.cproject | 2 +-
.settings/org.eclipse.core.resources.prefs | 3 +
.vscode/settings.json | 5 +-
APP/peripheral.c | 131 +++++++---
APP/peripheral_main.c | 38 ++-
BSP/inc/bsp_flash.h | 45 ++++
BSP/inc/bsp_uart.h | 2 +-
BSP/inc/bsp_valve.h | 82 +++++++
BSP/src/bsp_flash.c | 50 ++++
BSP/src/bsp_uart.c | 9 +-
BSP/src/bsp_valve.c | 245 +++++++++++++++++++
common/letter-shell/extensions/log/log.h | 32 +--
common/letter-shell/extensions/log/readme.md | 4 +-
common/letter-shell/shell_port.h | 2 +-
14 files changed, 566 insertions(+), 84 deletions(-)
create mode 100644 BSP/inc/bsp_flash.h
create mode 100644 BSP/inc/bsp_valve.h
create mode 100644 BSP/src/bsp_flash.c
create mode 100644 BSP/src/bsp_valve.c
diff --git a/.cproject b/.cproject
index 48f384b..328c437 100644
--- a/.cproject
+++ b/.cproject
@@ -172,5 +172,5 @@
-
+
diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs
index d22808f..00dd478 100644
--- a/.settings/org.eclipse.core.resources.prefs
+++ b/.settings/org.eclipse.core.resources.prefs
@@ -1,4 +1,7 @@
eclipse.preferences.version=1
+encoding//BSP/inc/bsp_valve.h=UTF-8
+encoding//BSP/src/bsp_valve.c=UTF-8
+encoding//common/letter-shell/extensions/log/log.h=UTF-8
encoding//common/letter-shell/shell.c=UTF-8
encoding//common/letter-shell/shell_cfg.h=UTF-8
encoding//common/letter-shell/shell_port.c=UTF-8
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 62c1280..dc0807a 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -10,6 +10,9 @@
"devinfoservice.h": "c",
"ch59x_uart.h": "c",
"bsp_uart.h": "c",
- "shell_port.h": "c"
+ "shell_port.h": "c",
+ "atomic": "cpp",
+ "cstddef": "cpp",
+ "type_traits": "cpp"
}
}
diff --git a/APP/peripheral.c b/APP/peripheral.c
index 37acb08..72717a8 100644
--- a/APP/peripheral.c
+++ b/APP/peripheral.c
@@ -19,6 +19,18 @@
#include "gattprofile.h"
#include "peripheral.h"
+#include "bsp_valve.h"
+
+#include "log.h"
+
+#undef LOG_ENABLE
+#define LOG_ENABLE 1
+
+#undef LOG_TAG
+#define LOG_TAG "BSP_VALVE"
+
+
+
/*********************************************************************
* MACROS
*/
@@ -440,7 +452,7 @@ uint16_t Peripheral_ProcessEvent(uint8_t task_id, uint16_t events)
if(events & SBP_PHY_UPDATE_EVT)
{
// start phy update
- PRINT("PHY Update %x...\n", GAPRole_UpdatePHY(peripheralConnList.connHandle, 0,
+ logDebug("PHY Update %x...\n", GAPRole_UpdatePHY(peripheralConnList.connHandle, 0,
GAP_PHY_BIT_LE_2M, GAP_PHY_BIT_LE_2M, 0));
return (events ^ SBP_PHY_UPDATE_EVT);
@@ -472,7 +484,7 @@ static void Peripheral_ProcessGAPMsg(gapRoleEvent_t *pEvent)
{
case GAP_SCAN_REQUEST_EVENT:
{
- PRINT("Receive scan req from %x %x %x %x %x %x ..\n", pEvent->scanReqEvt.scannerAddr[0],
+ logDebug("Receive scan req from %x %x %x %x %x %x ..\n", pEvent->scanReqEvt.scannerAddr[0],
pEvent->scanReqEvt.scannerAddr[1], pEvent->scanReqEvt.scannerAddr[2], pEvent->scanReqEvt.scannerAddr[3],
pEvent->scanReqEvt.scannerAddr[4], pEvent->scanReqEvt.scannerAddr[5]);
break;
@@ -480,7 +492,7 @@ static void Peripheral_ProcessGAPMsg(gapRoleEvent_t *pEvent)
case GAP_PHY_UPDATE_EVENT:
{
- PRINT("Phy update Rx:%x Tx:%x ..\n", pEvent->linkPhyUpdate.connRxPHYS, pEvent->linkPhyUpdate.connTxPHYS);
+ logDebug("Phy update Rx:%x Tx:%x ..\n", pEvent->linkPhyUpdate.connRxPHYS, pEvent->linkPhyUpdate.connTxPHYS);
break;
}
@@ -516,7 +528,7 @@ static void Peripheral_ProcessTMOSMsg(tmos_event_hdr_t *pMsg)
if(pMsgEvent->method == ATT_MTU_UPDATED_EVENT)
{
peripheralMTU = pMsgEvent->msg.exchangeMTUReq.clientRxMTU;
- PRINT("mtu exchange: %d\n", pMsgEvent->msg.exchangeMTUReq.clientRxMTU);
+ logDebug("mtu exchange: %d\n", pMsgEvent->msg.exchangeMTUReq.clientRxMTU);
}
break;
}
@@ -543,7 +555,7 @@ static void Peripheral_LinkEstablished(gapRoleEvent_t *pEvent)
if(peripheralConnList.connHandle != GAP_CONNHANDLE_INIT)
{
GAPRole_TerminateLink(pEvent->linkCmpl.connectionHandle);
- PRINT("Connection max...\n");
+ logDebug("Connection max...\n");
}
else
{
@@ -561,7 +573,7 @@ static void Peripheral_LinkEstablished(gapRoleEvent_t *pEvent)
// Start read rssi
tmos_start_task(Peripheral_TaskID, SBP_READ_RSSI_EVT, SBP_READ_RSSI_EVT_PERIOD);
- PRINT("Conn %x - Int %x \n", event->connectionHandle, event->connInterval);
+ logDebug("Conn %x - Int %x \n", event->connectionHandle, event->connInterval);
}
}
@@ -595,7 +607,7 @@ static void Peripheral_LinkTerminated(gapRoleEvent_t *pEvent)
}
else
{
- PRINT("ERR..\n");
+ logDebug("ERR..\n");
}
}
@@ -611,7 +623,7 @@ static void Peripheral_LinkTerminated(gapRoleEvent_t *pEvent)
*/
static void peripheralRssiCB(uint16_t connHandle, int8_t rssi)
{
- PRINT("RSSI -%d dB Conn %x \n", -rssi, connHandle);
+ logDebug("RSSI -%d dB Conn %x \n", -rssi, connHandle);
}
/*********************************************************************
@@ -635,12 +647,12 @@ static void peripheralParamUpdateCB(uint16_t connHandle, uint16_t connInterval,
peripheralConnList.connSlaveLatency = connSlaveLatency;
peripheralConnList.connTimeout = connTimeout;
- PRINT("peripheralParamUpdateCB (connHandle)%x - (connInterval) %x- (connSlaveLatency) %x - (connTimeout) %x\n"
+ logDebug("peripheralParamUpdateCB (connHandle)%x - (connInterval) %x- (connSlaveLatency) %x - (connTimeout) %x\n"
, connHandle, connInterval, connSlaveLatency, connTimeout);
}
else
{
- PRINT("ERR..\n");
+ logDebug("ERR..\n");
}
}
@@ -658,19 +670,19 @@ static void peripheralStateNotificationCB(gapRole_States_t newState, gapRoleEven
switch(newState & GAPROLE_STATE_ADV_MASK)
{
case GAPROLE_STARTED:
- PRINT("Initialized..\n");
+ logDebug("Initialized..\n");
break;
case GAPROLE_ADVERTISING:
if(pEvent->gap.opcode == GAP_LINK_TERMINATED_EVENT)
{
Peripheral_LinkTerminated(pEvent);
- PRINT("Disconnected.. Reason:%x\n", pEvent->linkTerminate.reason);
- PRINT("Advertising..\n");
+ logDebug("Disconnected.. Reason:%x\n", pEvent->linkTerminate.reason);
+ logDebug("Advertising..\n");
}
else if(pEvent->gap.opcode == GAP_MAKE_DISCOVERABLE_DONE_EVENT)
{
- PRINT("Advertising..\n");
+ logDebug("Advertising..\n");
}
break;
@@ -678,46 +690,46 @@ static void peripheralStateNotificationCB(gapRole_States_t newState, gapRoleEven
if(pEvent->gap.opcode == GAP_LINK_ESTABLISHED_EVENT)
{
Peripheral_LinkEstablished(pEvent);
- PRINT("Connected..\n");
+ logDebug("Connected..\n");
}
break;
case GAPROLE_CONNECTED_ADV:
if(pEvent->gap.opcode == GAP_MAKE_DISCOVERABLE_DONE_EVENT)
{
- PRINT("Connected Advertising..\n");
+ logDebug("Connected Advertising..\n");
}
break;
case GAPROLE_WAITING:
if(pEvent->gap.opcode == GAP_END_DISCOVERABLE_DONE_EVENT)
{
- PRINT("Waiting for advertising..\n");
+ logDebug("Waiting for advertising..\n");
}
else if(pEvent->gap.opcode == GAP_LINK_TERMINATED_EVENT)
{
Peripheral_LinkTerminated(pEvent);
- PRINT("Disconnected.. Reason:%x\n", pEvent->linkTerminate.reason);
+ logDebug("Disconnected.. Reason:%x\n", pEvent->linkTerminate.reason);
}
else if(pEvent->gap.opcode == GAP_LINK_ESTABLISHED_EVENT)
{
if(pEvent->gap.hdr.status != SUCCESS)
{
- PRINT("Waiting for advertising..\n");
+ logDebug("Waiting for advertising..\n");
}
else
{
- PRINT("Error..\n");
+ logDebug("Error..\n");
}
}
else
{
- PRINT("Error..%x\n", pEvent->gap.opcode);
+ logDebug("Error..%x\n", pEvent->gap.opcode);
}
break;
case GAPROLE_ERROR:
- PRINT("Error..\n");
+ logDebug("Error..\n");
break;
default:
@@ -741,12 +753,21 @@ static void peripheralStateNotificationCB(gapRole_States_t newState, gapRoleEven
*/
static void performPeriodicTask(void)
{
- static uint8_t counter = 0;
- uint8_t notiData[SIMPLEPROFILE_CHAR4_LEN] = {0x11, 0x22, 0x33, 0x44, 0};
- notiData[4] = counter;
- // peripheralChar4Notify(notiData, SIMPLEPROFILE_CHAR4_LEN);
- peripheralChar4Notify(notiData, 5);
- counter++;
+ // static uint8_t counter = 0;
+ // uint8_t notiData[SIMPLEPROFILE_CHAR4_LEN] = {0x11, 0x22, 0x33, 0x44, 0};
+ // notiData[4] = counter;
+ // // peripheralChar4Notify(notiData, SIMPLEPROFILE_CHAR4_LEN);
+ // peripheralChar4Notify(notiData, 5);
+ // counter++;
+ TsRawFrameData RawData;
+ static uint8_t humi;
+ humi = 0;
+ BSP_VALVE_Generate_Data(&RawData, 30, 25, humi++);
+ if (humi > 99)
+ {
+ humi = 0;
+ }
+ peripheralChar4Notify(&RawData.buf[0], RawData.len);
}
/*********************************************************************
@@ -764,7 +785,7 @@ static void peripheralChar4Notify(uint8_t *pValue, uint16_t len)
attHandleValueNoti_t noti;
if(len > (peripheralMTU - 3))
{
- PRINT("Too large noti\n");
+ logDebug("Too large noti\n");
return;
}
noti.len = len;
@@ -779,6 +800,9 @@ static void peripheralChar4Notify(uint8_t *pValue, uint16_t len)
}
}
+
+uint8_t newValue[SIMPLEPROFILE_CHAR3_LEN];
+
/*********************************************************************
* @fn simpleProfileChangeCB
*
@@ -792,31 +816,66 @@ static void peripheralChar4Notify(uint8_t *pValue, uint16_t len)
*/
static void simpleProfileChangeCB(uint8_t paramID, uint8_t *pValue, uint16_t len)
{
+ TsRawFrameData RawData;
switch(paramID)
{
case SIMPLEPROFILE_CHAR1:
{
uint8_t newValue[SIMPLEPROFILE_CHAR1_LEN];
tmos_memcpy(newValue, pValue, len);
- PRINT("profile ChangeCB CHAR1.. Start\n");
+ logDebug("profile ChangeCB CHAR1.. Start\n");
for (uint8_t i = 0; i < len; i++)
{
- PRINT("%02x ", newValue[i]);
+ logDebug("%02x ", newValue[i]);
}
- PRINT("\n profile ChangeCB CHAR1.. End\n");
+ logDebug("\n profile ChangeCB CHAR1.. End\n");
break;
}
case SIMPLEPROFILE_CHAR3:
{
- uint8_t newValue[SIMPLEPROFILE_CHAR3_LEN];
+ tmos_memset(newValue, 0, sizeof(newValue));
tmos_memcpy(newValue, pValue, len);
- PRINT("profile ChangeCB CHAR3.. Start\n");
+ logDebug("profile ChangeCB CHAR3.. Start");
+ // logHexDumpAll(newValue, len);
for (uint8_t i = 0; i < len; i++)
{
- PRINT("%02x ", newValue[i]);
+ logDebug("%02x ", newValue[i]);
}
- PRINT("\n profile ChangeCB CHAR3.. End\n");
+ #if 1
+ TsFrameData *HostFrameData = BSP_VAVLE_GetFrameData(newValue, len);
+ if (HostFrameData != NULL)
+ {
+ logHexDumpAll(&HostFrameData->data[0], HostFrameData->len); // 数据段
+ // HR_ProcessData(HostFrameData);
+ switch (HostFrameData->cmd)
+ {
+ case kCmdCfg:
+ // uint8_t data_buf[64] = {0};
+ // tmos_memset(data_buf, 0, sizeof(data_buf));
+ // 处理数据帧
+ logDebug("kCmdCfg");
+ break;
+ case kCmdCloseVavle:
+ logDebug("kCmdCloseVavle");
+ BSP_VALVE_Generate_ValveResponse(&RawData, kCmdCloseVavle, 1);
+ peripheralChar4Notify((uint8_t*)&RawData.buf[0], RawData.len);
+ break;
+ case kCmdOpenVavle:
+ logDebug("kCmdOpenVavle");
+ BSP_VALVE_Generate_ValveResponse(&RawData, kCmdOpenVavle, 1);
+ peripheralChar4Notify((uint8_t*)&RawData.buf[0], RawData.len);
+ break;
+ default:
+ logError("无效的命令");
+// logHexDumpAll(data, len);
+ break;
+ }
+ }
+ tmos_msg_deallocate((uint8_t*)HostFrameData);
+ HostFrameData = NULL;
+ #endif
+ logDebug("profile ChangeCB CHAR3.. End");
break;
}
diff --git a/APP/peripheral_main.c b/APP/peripheral_main.c
index cbc6a19..b7da959 100644
--- a/APP/peripheral_main.c
+++ b/APP/peripheral_main.c
@@ -56,58 +56,58 @@ __attribute__((noinline)) void Main_Circulation()
{
// 12V_EN
BOOST_EN;
- PRINT("BOOST_EN\n");
+ logDebug("BOOST_EN\n");
// LED_R
LED_R_ON;
DelayMs(1000);
- PRINT("LED_R_ON\n");
+ logDebug("LED_R_ON\n");
LED_ALL_OFF_DEINIT;
DelayMs(1000);
- PRINT("LED_ALL_OFF_DEINIT\n");
+ logDebug("LED_ALL_OFF_DEINIT\n");
// BEEP
BEEP_ON;
DelayMs(1000);
- PRINT("BEEP_ON\n");
+ logDebug("BEEP_ON\n");
BEEP_OFF_DEINIT;
DelayMs(1000);
- PRINT("BEEP_OFF_DEINIT\n");
+ logDebug("BEEP_OFF_DEINIT\n");
// LED_G
LED_G_ON;
DelayMs(1000);
- PRINT("LED_G_ON\n");
+ logDebug("LED_G_ON\n");
LED_ALL_OFF_DEINIT;
DelayMs(1000);
- PRINT("LED_ALL_OFF_DEINIT\n");
+ logDebug("LED_ALL_OFF_DEINIT\n");
// LED_Y
LED_Y_ON;
DelayMs(1000);
- PRINT("LED_Y_ON\n");
+ logDebug("LED_Y_ON\n");
LED_ALL_OFF_DEINIT;
DelayMs(1000);
- PRINT("LED_ALL_OFF_DEINIT\n");
+ logDebug("LED_ALL_OFF_DEINIT\n");
- PRINT("Delay 6s\n");
+ logDebug("Delay 6s\n");
// EMV_CHARGE
EMV_CHARGE_EN;
- PRINT("EMV_CHARGE_EN\n");
+ logDebug("EMV_CHARGE_EN\n");
DelayMs(1000);
EMV_CHARGE_OFF_DEINIT;
- PRINT("EMV_CHARGE_OFF_DEINIT 500 ms\n");
+ logDebug("EMV_CHARGE_OFF_DEINIT 500 ms\n");
// EMV_CTRL
EMV_ON;
- PRINT("EMV_ON\n");
+ logDebug("EMV_ON\n");
DelayMs(100);
BOOST_OFF_DEINIT;
@@ -145,8 +145,8 @@ int main(void)
// UART1_DefInit();
// 改成1500000波特率了
- BSP_UART1_Init(1500000);
- // PRINT("Start @ChipID=%02X\n", R8_CHIP_ID);
+ BSP_UART1_Init(460800);
+ // logDebug("Start @ChipID=%02X\n", R8_CHIP_ID);
logDebug("Start @ChipID=%02X\n", R8_CHIP_ID);
#endif
@@ -161,14 +161,8 @@ int main(void)
BSP_KEY_Init();
BSP_ADC_Init();
-
- PRINT("%s\n", VER_LIB);
- // while (1)
- // {
- // DelayMs(1000);
- // }
-
CH59x_BLEInit();
+ logDebug("%s\n", VER_LIB);
HAL_Init();
GAPRole_PeripheralInit();
Peripheral_Init();
diff --git a/BSP/inc/bsp_flash.h b/BSP/inc/bsp_flash.h
new file mode 100644
index 0000000..f9d4078
--- /dev/null
+++ b/BSP/inc/bsp_flash.h
@@ -0,0 +1,45 @@
+/*
+ * @Author : stark1898y 1658608470@qq.com
+ * @Date : 2024-12-12 15:54:51
+ * @LastEditors : stark1898y 1658608470@qq.com
+ * @LastEditTime : 2024-12-12 16:34:01
+ * @FilePath : \BLE_TYQ_CH592F\BSP\inc\bsp_flash.h
+ * @Description :
+ *
+ * Copyright (c) 2024 by yzy, All Rights Reserved.
+ */
+#ifndef __BSP_FLASH_H__
+#define __BSP_FLASH_H__
+
+#include "CONFIG.h"
+
+/*CH584鍏锋湁data_flash鍜宑ode flash涓ら儴鍒嗐 codeflash涓448k dataflash涓32k
+CodeFlash璇绘搷浣滄槸鏈夌‖浠跺姞鎵扮殑锛屼篃灏辨槸鎿﹂櫎鍚庤涓嶆槸鍏‵F锛岃屾槸鍥涗釜鍥哄畾瀛楄妭鐨勫惊鐜紝DataFlash璇绘搷浣滄病鏈夌‖浠跺姞鎵
+CodeFlash鍜孌ataFlash閮藉彲浠ョ洿鎺ユ寚閽堣鏁版嵁(鎸囬拡璇荤粡杩囩‖浠跺姞鎵)銆
+0x00000000-0x0006FFFF 鐢ㄦ埛搴旂敤绋嬪簭瀛樺偍鍖 CodeFlash 448KB
+0x00070000-0x00077FFF 鐢ㄦ埛闈炴槗澶辨暟鎹瓨鍌ㄥ尯 DataFlash 32KB
+0x00078000-0x0007DFFF 绯荤粺寮曞绋嬪簭瀛樺偍鍖 BootLoader 24KB
+0x0007E000-0x0007FFFF 绯荤粺闈炴槗澶遍厤缃俊鎭瓨鍌ㄥ尯 InfoFlash 8KB
+*/
+
+/*BLE钃濈墮falsh鍐欏叆娉ㄦ剰鍦板潃鏄浉瀵逛簬dataflash鐨勶紝鑰宒ataflash鐨勮捣濮嬪湴鍧鏄0x3FFF锛屾墍浠ヤ紶鍏ョ殑鍙傛暟鏄0x3FFF+offset
+骞朵笖涓嶈瑕嗙洊鍘熸湁鐨勫弬鏁
+https://www.cnblogs.com/JayWellsBlog/p/18223898
+
+鎺ュ彛涓殑璇/鍐檅uff缂撳瓨鍦╮am涓殑鍦板潃锛屼竴瀹氳4瀛楄妭瀵归綈锛屽惁鍒欏彲鑳藉鑷磆ardfault澶嶄綅
+闂鎺掓煡
+https://www.cnblogs.com/iot-fan/p/16053937.html
+*/
+
+#define DATA_FALASH_START_ADDR (0X3FFF) // 浼犲叆鐨勬槸鐩稿鍦板潃锛岀敤瀵瑰嚱鏁板嵆鍙
+#define DATA_FLASH_PAGE_SIZE (256U)
+
+#define FLASH_INFO_ADDR (DATA_FALASH_START_ADDR)
+#define FLASH_INFO_WRITE_FLAG_ADDR (DATA_FALASH_START_ADDR)
+
+#define FLASH_INFO_WRITE_FLAG_VAL (0XAABBCCDD)
+#define FLASH_INFO_WRITE_FLAG_LEN (4U)
+
+void BSP_FLASH_Init(void);
+
+#endif // !__BSP_FLASH_H__
diff --git a/BSP/inc/bsp_uart.h b/BSP/inc/bsp_uart.h
index 4681888..34acb6d 100644
--- a/BSP/inc/bsp_uart.h
+++ b/BSP/inc/bsp_uart.h
@@ -5,7 +5,7 @@
#include "CONFIG.h"
#define UART1_RX_BUFFER_LENGTH 64U
-#define UART1_TX_BUFFER_LENGTH 128U
+#define UART1_TX_BUFFER_LENGTH 1024U
void BSP_UART1_Init(uint32_t baudrate);
diff --git a/BSP/inc/bsp_valve.h b/BSP/inc/bsp_valve.h
new file mode 100644
index 0000000..2b58587
--- /dev/null
+++ b/BSP/inc/bsp_valve.h
@@ -0,0 +1,82 @@
+/*
+ * @Author : stark1898y 1658608470@qq.com
+ * @Date : 2024-12-12 15:55:38
+ * @LastEditors : stark1898y 1658608470@qq.com
+ * @LastEditTime : 2024-12-12 19:08:06
+ * @FilePath : \BLE_TYQ_CH592F\BSP\inc\bsp_valve.h
+ * @Description :
+ *
+ * Copyright (c) 2024 by yzy, All Rights Reserved.
+ */
+#ifndef __BSP_VALVE_H__
+#define __BSP_VALVE_H__
+
+#include "CONFIG.h"
+
+#define FRAME_HEADER 0xAA
+#define FRAME_TAIL 0x55
+
+// 0xAA CMD/DATA/ DATA_LEN (DATA) checksum 0x55
+
+typedef enum
+{
+ kCmdCfg = 0X01,
+ kCmdCloseVavle,
+ kCmdOpenVavle,
+ kCmdData,
+} TeFrameCmd;
+
+// typedef enum
+// {
+
+// } TeCmdIndex;
+
+typedef struct __attribute__((packed))
+{
+ TeFrameCmd cmd; // CMD/DATA
+ uint8_t len; // DATA_LEN
+ // TsValveData data;
+ uint8_t data[];
+} TsFrameData;
+
+typedef struct __attribute__((packed))
+{
+ uint8_t len;
+ uint8_t buf[128];
+} TsRawFrameData;
+
+// 闃闂ㄧ被鍨
+typedef enum
+{
+ kTyq = 0X01,
+ kZbf,
+ kDcf,
+} TeVavleType;
+
+typedef struct __attribute__((packed))
+{
+ uint8_t type; // 闃闂ㄧ被鍨
+
+ uint8_t bat; // 1B 鐢垫睜鐢靛帇 30=3V,18=1.8V
+ int8_t temp; // 1B 闃闂ㄦ俯搴 鏈夌鍙锋暣鏁 25 鈩
+ uint8_t hum; // 1B 闃闂ㄦ箍搴 %RH
+
+ // uint8_t status; // 1B 闃闂ㄥ伐浣滅姸鎬 瓒呮瑺鍘嬨佽繃娴
+ // uint8_t connct_status; // 1B 闃闂ㄨ繛鎺ョ姸鎬 锛堢數纾侀榾BLE鎺у埗鐩掞級 0=鏈繛鎺 1=宸茶繛鎺
+ // uint8_t switch_status; // 1B 闃闂ㄥ紑鍏崇姸鎬 0=鏈煡 1=鍏抽棴 2=鍏抽棴杩囷紝鏈寜鎸夐敭鎭㈠ 3=鍏抽棴杩囷紝鎸変笅浜嗘仮澶嶉敭 4=鎵撳紑
+
+ // uint32_t in_pressure; // 4B 闃闂ㄥ叆鍙e帇鍔 Pa
+ // uint32_t out_pressure; // 4B 闃闂ㄥ嚭鍙e帇鍔 Pa
+ // uint32_t atm_pressure; // 4B 闃闂ㄥぇ姘斿帇鍔 Pa
+} TsValveData;
+
+uint8_t CheckSum(const uint8_t *data, size_t len);
+
+void BSP_VAVLE_Init(void);
+
+TsFrameData* BSP_VAVLE_GetFrameData(uint8_t *data, uint16_t len);
+
+void BSP_VALVE_Generate_Data(TsRawFrameData *pRawData, uint8_t bat, int8_t temp, uint8_t hum);
+void BSP_VALVE_Generate_ValveResponse(TsRawFrameData *pRawData, TeFrameCmd cmd, uint8_t status);
+
+#endif // ! __BSP_VALVE_H__
diff --git a/BSP/src/bsp_flash.c b/BSP/src/bsp_flash.c
new file mode 100644
index 0000000..479c539
--- /dev/null
+++ b/BSP/src/bsp_flash.c
@@ -0,0 +1,50 @@
+/*
+ * @Author : stark1898y 1658608470@qq.com
+ * @Date : 2024-12-12 15:54:57
+ * @LastEditors : stark1898y 1658608470@qq.com
+ * @LastEditTime : 2024-12-12 16:47:22
+ * @FilePath : \BLE_TYQ_CH592F\BSP\src\bsp_flash.c
+ * @Description :
+ *
+ * Copyright (c) 2024 by yzy, All Rights Reserved.
+ */
+#include "bsp_flash.h"
+#include "CONFIG.h"
+#include "string.h"
+#include "bsp_valve.h"
+
+#undef LOG_ENABLE
+#define LOG_ENABLE 1
+
+#include "log.h"
+
+
+void Flash_ErasePage_ReadCfgInfo(uint8_t *page_buf)
+{
+ EEPROM_READ(FLASH_INFO_ADDR, page_buf, DATA_FLASH_PAGE_SIZE);
+ EEPROM_ERASE(FLASH_INFO_ADDR, DATA_FLASH_PAGE_SIZE);
+}
+
+int Flash_Write_CfgInfo(uint8_t *page_buf)
+{
+ EEPROM_WRITE(FLASH_INFO_ADDR, page_buf, DATA_FLASH_PAGE_SIZE);
+
+ return 0;
+}
+
+void BSP_FLASH_Init(void)
+{
+ uint32_t flash_write_flag = 0;
+ EEPROM_READ(FLASH_INFO_WRITE_FLAG_ADDR, &flash_write_flag, FLASH_INFO_WRITE_FLAG_LEN);
+ // 鍒ゆ柇鏄惁闇瑕佸垵濮嬪寲
+ if (flash_write_flag != FLASH_INFO_WRITE_FLAG_VAL) // 鐢ㄤ互闃叉鍒锋帀鍐欏叆鐨勬暟鎹
+ {
+ flash_write_flag = FLASH_INFO_WRITE_FLAG_VAL;
+ // 鎿﹂櫎鏁版嵁
+ EEPROM_ERASE(FLASH_INFO_ADDR, DATA_FLASH_PAGE_SIZE); // 鎿﹂櫎寰呭啓鍖
+ EEPROM_WRITE(FLASH_INFO_WRITE_FLAG_ADDR, &flash_write_flag, FLASH_INFO_WRITE_FLAG_LEN);
+
+ logWarning("First Init flash_write_flag:%d", flash_write_flag);
+ }
+ logDebug("BSP_FLASH_Init");
+}
diff --git a/BSP/src/bsp_uart.c b/BSP/src/bsp_uart.c
index 466c44e..3181af1 100644
--- a/BSP/src/bsp_uart.c
+++ b/BSP/src/bsp_uart.c
@@ -67,7 +67,7 @@ void BSP_UART1_Init(uint32_t baudrate)
/* 配置串口1:先配置IO口模式,再配置串口 */
GPIOA_SetBits(bTXD1);
- GPIOB_ModeCfg(bRXD1, GPIO_ModeIN_PU); // RXD-配置上拉输入
+ // GPIOB_ModeCfg(bRXD1, GPIO_ModeIN_PU); // RXD-配置上拉输入
GPIOA_ModeCfg(bTXD1, GPIO_ModeOut_PP_5mA); // TXD-配置推挽输出,注意先让IO口输出高电平
// UART1_DefInit();
{
@@ -77,10 +77,11 @@ void BSP_UART1_Init(uint32_t baudrate)
R8_UART1_IER = RB_IER_TXD_EN;
R8_UART1_DIV = 1;
}
- UART1_ByteTrigCfg(UART_1BYTE_TRIG);
+ // UART1_ByteTrigCfg(UART_1BYTE_TRIG);
// 中断方式接收数据
- UART1_INTCfg(ENABLE, RB_IER_LINE_STAT | RB_IER_RECV_RDY);
- PFIC_EnableIRQ(UART1_IRQn);
+ // UART1_INTCfg(ENABLE, RB_IER_LINE_STAT | RB_IER_RECV_RDY);
+ // UART1_INTCfg(ENABLE, RB_IER_LINE_STAT | RB_IER_RECV_RDY);
+ // PFIC_EnableIRQ(UART1_IRQn);
UART1_FifoInit();
diff --git a/BSP/src/bsp_valve.c b/BSP/src/bsp_valve.c
new file mode 100644
index 0000000..4d44407
--- /dev/null
+++ b/BSP/src/bsp_valve.c
@@ -0,0 +1,245 @@
+/*
+ * @Author: mbw
+ * @Date: 2024-12-09 11:40:10
+ * @LastEditors: mbw && 1600520629@qq.com
+ * @LastEditTime: 2024-12-11 15:43:47
+ * @FilePath: \ble_-tyq_-bjq_-ch584-m\bsp\src\bsp_valve.c
+ * @Description:
+ *
+ * Copyright (c) 2024 by ${git_name_email}, All Rights Reserved.
+ */
+#include "bsp_valve.h"
+#include "bsp_flash.h"
+#include "bsp_uart.h"
+
+#include "bsp_beep_led_emv.h"
+// 0xAA CMD/DATA/ DATA_LEN (DATA) checksum 0x55
+
+
+#include "log.h"
+
+#undef LOG_ENABLE
+#define LOG_ENABLE 0
+
+#undef LOG_TAG
+#define LOG_TAG "BSP_VALVE"
+
+
+
+/**
+ * @description: 浠庡抚璧峰绗﹀紑濮嬪埌鏍¢獙鐮佷箣鍓嶆墍鏈夊瓧鑺傜殑鍜岀殑妯256锛屽嵆鍚勫瓧鑺備笉璁¤秴杩255鐨勬孩鍑哄肩殑浜岃繘鍒剁畻鏈拰銆
+ * @param {uint8_t} *data
+ * @param {uint16_t} len
+ * @return {*}
+ */
+uint8_t CheckSum(const uint8_t *data, size_t len)
+{
+ uint8_t sum = 0;
+
+ for (size_t i = 0; i < len; i++)
+ {
+ sum += data[i];
+ }
+
+ return sum;
+}
+
+#if 0
+/**
+ * @description: 浠庢帴鏀剁紦鍐插尯涓幏鍙栦竴甯ф湁鏁堟暟鎹
+ * @param {TsFrameData} *pFrameData 涓绘満甯
+ * @param {uint8_t} *p_src 鎺ユ敹缂撳啿鍖
+ * @param {uint16_t} src_len 鎺ユ敹缂撳啿鍖洪暱搴
+ * @return {*}
+ */
+TsFrameData *HR_GetFrameData(const uint8_t *p_src, const uint8_t src_len)
+{
+ uint8_t data_field_len = 0;
+ uint8_t check_sum = 0;
+
+ TsFrameData *get_buffer = NULL;
+
+ for (uint8_t i = 0; i < src_len; i++)
+ {
+ // 鎵惧抚澶
+ if (p_src[i] == FRAME_HEADER)
+ {
+ // 鎵炬暟鎹暱搴
+ data_field_len = p_src[i + 2];
+ // 鎵惧抚灏
+ if (p_src[i + 2 + data_field_len + 2] == FRAME_TAIL)
+ {
+ check_sum = CheckSum(&p_src[i], (3 + data_field_len));
+
+ if (p_src[i + 2 + data_field_len + 1] == check_sum)
+ {
+ get_buffer = (TsFrameData *)tmos_msg_allocate(sizeof(TsFrameData) + sizeof(uint8_t) * data_field_len);
+ if (get_buffer == NULL)
+ {
+ logError("tmos_msg_allocate fail");
+ return NULL;
+ }
+ get_buffer->cmd = p_src[i + 1];
+ get_buffer->len = data_field_len;
+
+ if (data_field_len > 0)
+ {
+ tmos_memcmp(get_buffer->data, &p_src[i + 4], data_field_len);
+ }
+ logDebug("HR_GetDataFrame Success!");
+
+ return get_buffer;
+ }
+ }
+ }
+ }
+ logError("HR_GetDataFrame Fail!");
+
+ return get_buffer;
+}
+#endif
+
+TsFrameData* BSP_VAVLE_GetFrameData(uint8_t *data, uint16_t len)
+{
+ int ret = 0;
+ uint16_t index = 0;
+
+ TsFrameData *get_buffer = NULL;
+ // 瑙f瀽鎺ユ敹鍒扮殑鏁版嵁甯э紝鍏堝鎵続A寮澶达紝鐒跺悗鍐嶆壘AA涓嬩竴涓瓧鑺傦紝鍏朵唬琛ㄤ簡鏁版嵁闀垮害锛岀劧鍚庢壘鍒颁唬琛ㄩ暱搴︾殑鍊肩殑闀垮害鐨勪笅涓浣嶏紝鍏朵负鏍¢獙鐮侊紝鏍¢獙鐮佸悗涓虹粨鏉熺爜0x55锛
+ // 濡傛灉鏁版嵁姝g‘锛屽垯鎻愬彇鏁版嵁锛屼笉姝g‘锛屽垯涓嶅鐞
+ if (len < 4)
+ { // 鑷冲皯闇瑕 4 涓瓧鑺傦細璧峰鐮併侀暱搴︺佹牎楠岀爜銆佺粨鏉熺爜
+ logError("鏁版嵁甯ч暱搴︿笉瓒");
+ logHexDumpAll(data, len);
+ // return 1;
+ }
+ while (index < len && data[index] != FRAME_HEADER) // 瀵绘壘璧峰鐮 0xAA
+ {
+ index++;
+ }
+ if (index >= len - 3) // 涓嶅绌洪棿瀹圭撼闀垮害銆佹牎楠岀爜鍜岀粨鏉熺爜
+ {
+ logError("鏁版嵁甯ц捣濮嬬爜閿欒");
+ logHexDumpAll(data, len);
+ // return 2;
+ }
+ uint16_t data_len = data[index + 2]; // 璇诲彇鏁版嵁闀垮害
+ if (index + 3 + data_len + 1 >= len) // 妫鏌ユ暟鎹暱搴︽槸鍚﹀悎鐞 鏁版嵁闀垮害 + 鏍¢獙鐮 + 缁撴潫鐮
+ {
+ logError("鏁版嵁甯ч暱搴﹂敊璇");
+ logHexDumpAll(data, len);
+ // return 3;
+ }
+
+ uint8_t check_sum = data[index + 3 + data_len]; // 璇诲彇鏍¢獙鐮
+ uint8_t calculated_sum = CheckSum(&data[index], data_len + 3); // 璁$畻鏍¢獙鐮
+ if (check_sum != calculated_sum)
+ {
+ logError("鏁版嵁甯ф牎楠岀爜閿欒 check_sum = %02X, calculated_sum = %02X", check_sum, calculated_sum);
+ logHexDumpAll(data, len);
+ // return 4;
+ }
+ if (data[index + 3 + data_len + 1] != FRAME_TAIL) // 妫鏌ョ粨鏉熺爜
+ {
+ logError("鏁版嵁甯х粨鏉熺爜閿欒");
+ logHexDumpAll(data, len);
+ // return 5;
+ }
+ logDebug("鏁版嵁甯ф牎楠岄氳繃");
+
+ get_buffer = (TsFrameData *)tmos_msg_allocate(sizeof(TsFrameData) + sizeof(uint8_t) * data_len);
+ if (get_buffer == NULL)
+ {
+ logError("tmos_msg_allocate fail");
+ return NULL;
+ }
+
+ get_buffer->cmd = data[index + 1];
+ get_buffer->len = data_len;
+// get_buffer->data = data;
+
+ if (data_len > 0)
+ {
+ tmos_memcpy(get_buffer->data, &data[index + 3], data_len);
+ return get_buffer;
+ }
+
+ // //鏈夋晥鏁版嵁闀垮害
+ // size_t data_len = (data_len + 5);
+ // //鍒拌繖涓姝ヨ鏄庢暟鎹病闂锛屽皢鎺ユ敹鍒扮殑鏁版嵁閫氳繃涓績浠诲姟鍙戦佸嚭鍘
+ // uint8_t *p_data;
+ // p_data = tmos_msg_allocate(data_len);
+ // if (p_data)
+ // {
+ // tmos_memcpy(p_data, data, data_len);
+ // tmos_msg_send(BtRxTaskId, p_data);
+ // tmos_start_task(BtRxTaskId, SYS_EVENT_MSG, 0);
+ // }
+}
+
+uint8_t _GenerateRawFrame(TsRawFrameData *pRawData, uint8_t cmd, const uint8_t *p_src, uint8_t src_len)
+{
+ // 0xAA CMD/DATA/ DATA_LEN (DATA) checksum 0x55
+ pRawData->len = src_len + 5;
+
+ tmos_memset(pRawData->buf, 0, sizeof(pRawData->buf));
+
+ pRawData->buf[0] = FRAME_HEADER;
+ pRawData->buf[1] = cmd;
+ pRawData->buf[2] = src_len;
+
+ tmos_memcpy(&pRawData->buf[3], p_src, src_len);
+
+ // 浠庡抚璧峰绗﹀紑濮嬪埌鏍¢獙鐮佷箣鍓嶆墍鏈夊瓧鑺傜殑鍜岀殑妯256
+ // 锛屽嵆鍚勫瓧鑺備笉璁¤秴杩255鐨勬孩鍑哄肩殑浜岃繘鍒剁畻鏈拰銆
+ pRawData->buf[pRawData->len - 2] = CheckSum(&pRawData->buf[0], pRawData->len - 2);
+ pRawData->buf[pRawData->len - 1] = FRAME_TAIL;
+
+ logHexDumpAll(&pRawData->buf[0], pRawData->len);
+
+ return 0;
+}
+
+void BSP_VALVE_Generate_Data(TsRawFrameData *pRawData, uint8_t bat, int8_t temp, uint8_t hum)
+{
+ TsValveData ValveData;
+
+ ValveData.type = kTyq; // 闃闂ㄧ被鍨
+ ValveData.bat = bat; // 鐢垫睜鐢靛帇 30=3V,18=1.8V
+ ValveData.temp = temp; // 闃闂ㄦ俯搴 鏈夌鍙锋暣鏁 25 鈩
+ ValveData.hum = hum; // 闃闂ㄦ箍搴 %RH
+
+ _GenerateRawFrame(pRawData, kCmdData, (uint8_t*)&ValveData, sizeof(ValveData));
+ logHexDumpAll(&pRawData->buf[0], pRawData->len);
+}
+
+void BSP_VALVE_Generate_ValveResponse(TsRawFrameData *pRawData, TeFrameCmd cmd, uint8_t status)
+{
+ uint8_t data = 0;
+ data = status;
+ _GenerateRawFrame(pRawData, cmd, &data, 1);
+ logHexDumpAll(&pRawData->buf[0], pRawData->len);
+}
+
+void BSP_CloseValve(void)
+{
+ // EMV_CHARGE
+ EMV_CHARGE_EN;
+ logDebug("EMV_CHARGE_EN");
+
+ DelayMs(1000);
+
+ EMV_CHARGE_OFF_DEINIT;
+ logDebug("EMV_CHARGE_OFF_DEINIT 500 ms");
+
+ // EMV_CTRL
+ EMV_ON;
+ logDebug("EMV_ON\n");
+ DelayMs(100);
+}
+
+void BSP_VAVLE_Init(void)
+{
+
+ logInfo("BSP_Valve_Init");
+}
diff --git a/common/letter-shell/extensions/log/log.h b/common/letter-shell/extensions/log/log.h
index 4c4075e..e41dfa1 100644
--- a/common/letter-shell/extensions/log/log.h
+++ b/common/letter-shell/extensions/log/log.h
@@ -4,9 +4,9 @@
* @brief log
* @version 1.0.0
* @date 2020-07-30
- *
+ *
* @copyright (c) 2020 Letter
- *
+ *
*/
#ifndef __LOG_H__
#define __LOG_H__
@@ -90,7 +90,7 @@ extern "C" {
/**
* @brief 鏃ュ織绾у埆瀹氫箟
- *
+ *
*/
typedef enum
{
@@ -98,7 +98,7 @@ typedef enum
LOG_ERROR = 1, /**< 閿欒 */
LOG_WRANING = 2, /**< 璀﹀憡 */
LOG_INFO = 3, /**< 娑堟伅 */
- LOG_DEBUG = 4, /**< 璋冭瘯 */
+ logDebugEBUG = 4, /**< 璋冭瘯 */
LOG_VERBOSE = 5, /**< 鍐椾綑 */
LOG_ALL = 6, /**< 鎵鏈夋棩蹇 */
} LogLevel;
@@ -106,14 +106,14 @@ typedef enum
/**
* @brief log瀵硅薄瀹氫箟
- *
+ *
*/
typedef struct log_def
{
void (*write)(char *, short); /**< 鍐檅uffer */
char active; /**< 鏄惁婵娲 */
LogLevel level; /**< 鏃ュ織绾у埆 */
-#if LOG_USING_LOCK == 1
+#if LOG_USING_LOCK == 1
int (*lock)(struct log_def *); /**< log 鍔犻攣 */
int (*unlock)(struct log_def *); /**< log 瑙i攣 */
#endif /** LOG_USING_LOCK == 1 */
@@ -124,7 +124,7 @@ typedef struct log_def
/**
* @brief log鎵撳嵃(鑷姩鎹㈣)
- *
+ *
* @param fmt 鏍煎紡
* @param ... 鍙傛暟
*/
@@ -134,7 +134,7 @@ typedef struct log_def
/**
* @brief 鏃ュ織鏍煎紡鍖栬緭鍑
- *
+ *
* @param text 娑堟伅鏂囨湰
* @param level 鏃ュ織绾у埆
* @param fmt 鏍煎紡
@@ -147,7 +147,7 @@ typedef struct log_def
/**
* @brief 閿欒log杈撳嚭
- *
+ *
* @param fmt 鏍煎紡
* @param ... 鍙傛暟
*/
@@ -156,7 +156,7 @@ typedef struct log_def
/**
* @brief 璀﹀憡log杈撳嚭
- *
+ *
* @param fmt 鏍煎紡
* @param ... 鍙傛暟
*/
@@ -165,7 +165,7 @@ typedef struct log_def
/**
* @brief 淇℃伅log杈撳嚭
- *
+ *
* @param fmt 鏍煎紡
* @param ... 鍙傛暟
*/
@@ -174,16 +174,16 @@ typedef struct log_def
/**
* @brief 璋冭瘯log杈撳嚭
- *
+ *
* @param fmt 鏍煎紡
* @param ... 鍙傛暟
*/
#define logDebug(fmt, ...) \
- logFormat(DEBUG_TEXT, LOG_DEBUG, fmt, ##__VA_ARGS__)
+ logFormat(DEBUG_TEXT, logDebugEBUG, fmt, ##__VA_ARGS__)
/**
* @brief 鍐椾綑log杈撳嚭
- *
+ *
* @param fmt 鏍煎紡
* @param ... 鍙傛暟
*/
@@ -192,7 +192,7 @@ typedef struct log_def
/**
* @brief 鏂█
- *
+ *
* @param expr 琛ㄨ揪寮
* @param action 鏂█澶辫触鎿嶄綔
*/
@@ -204,7 +204,7 @@ typedef struct log_def
/**
* @brief 16杩涘埗杈撳嚭鍒版墍鏈夌粓绔
- *
+ *
* @param base 鍐呭瓨鍩哄潃
* @param length 闀垮害
*/
diff --git a/common/letter-shell/extensions/log/readme.md b/common/letter-shell/extensions/log/readme.md
index 587a025..09fe8a6 100644
--- a/common/letter-shell/extensions/log/readme.md
+++ b/common/letter-shell/extensions/log/readme.md
@@ -51,7 +51,7 @@ log鏄竴涓敤浜庡祵鍏ュ紡绯荤粺鐨勬棩蹇楁墦鍗板伐鍏凤紝鍙互涓烘棩蹇楀畾涔
Log uartLog = {
.write = uartLogWrite,
.active = true,
- .level = LOG_DEBUG
+ .level = logDebugEBUG
};
```
@@ -191,7 +191,7 @@ log宸ュ叿鍙互缁撳悎letter shell鐨勫熬琛屾ā寮忥紝瀹炵幇log鍜宻hell鍏辩敤涓涓
Log uartLog = {
.write = uartLogWrite,
.active = true,
- .level = LOG_DEBUG
+ .level = logDebugEBUG
};
```
diff --git a/common/letter-shell/shell_port.h b/common/letter-shell/shell_port.h
index 6d67079..4b55018 100644
--- a/common/letter-shell/shell_port.h
+++ b/common/letter-shell/shell_port.h
@@ -14,7 +14,7 @@
#include "shell.h"
-#define SHELL_BUF_LENGTH 128
+#define SHELL_BUF_LENGTH 1024
extern Shell shell;