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;