暂存+1
This commit is contained in:
parent
c086350b69
commit
4480a85138
|
@ -16,6 +16,4 @@ encoding//StdPeriphDriver/inc/CH58x_gpio.h=GBK
|
|||
encoding//StdPeriphDriver/inc/CH58x_sys.h=GBK
|
||||
encoding//StdPeriphDriver/inc/CH58x_uart.h=GBK
|
||||
encoding//StdPeriphDriver/inc/ISP585.h=GBK
|
||||
encoding//bsp/inc/bsp_master.h=GBK
|
||||
encoding//bsp/inc/bsp_uart.h=UTF-8
|
||||
encoding//bsp/src/bsp_master.c=GBK
|
||||
|
|
|
@ -20,6 +20,8 @@
|
|||
"files.associations": {
|
||||
"*.dbclient-js": "javascript",
|
||||
"config.h": "c",
|
||||
"ch58xble_lib.h": "c"
|
||||
"ch58xble_lib.h": "c",
|
||||
"bsp_uart.h": "c",
|
||||
"bsp_iwdg.h": "c"
|
||||
}
|
||||
}
|
|
@ -116,6 +116,7 @@ extern centralConnItem_t centralConnList[CENTRAL_MAX_CONNECTION];
|
|||
|
||||
int BSP_Master_Send(centralConnItem_t *centralConnList, uint8_t id, uint8_t *Data, uint8_t Len);
|
||||
void Master_Connect(void);
|
||||
void Master_DisConnect(void);
|
||||
/*********************************************************************
|
||||
*********************************************************************/
|
||||
|
||||
|
|
|
@ -12,6 +12,13 @@
|
|||
#undef LOG_ENABLE
|
||||
#define LOG_ENABLE 1
|
||||
|
||||
#define MASTER_START_EVT (0X01 << 0)
|
||||
#define MASTER_CONNECT_EVT (0X01 << 1)
|
||||
#define MASTER_DISCONN_EVT (0X01 << 2)
|
||||
#define MASTER_DETECT_EVT (0X01 << 3)
|
||||
uint8_t MasterCtrTaskId;
|
||||
|
||||
|
||||
/*********************************************************************
|
||||
* MACROS
|
||||
*/
|
||||
|
@ -23,20 +30,19 @@
|
|||
* CONSTANTS
|
||||
*/
|
||||
// Maximum number of scan responses
|
||||
#define DEFAULT_MAX_SCAN_RES 30
|
||||
#define DEFAULT_MAX_SCAN_RES 1
|
||||
|
||||
// Scan duration in 0.625ms
|
||||
#define DEFAULT_SCAN_DURATION 2400 // 2400*0.625 = 1500ms
|
||||
#define DEFAULT_SCAN_DURATION 1600 * 3 // 2400*0.625 = 1500ms
|
||||
|
||||
// Connection min interval in 1.25ms
|
||||
#define DEFAULT_MIN_CONNECTION_INTERVAL 80
|
||||
#define DEFAULT_MIN_CONNECTION_INTERVAL (80 * 9)
|
||||
|
||||
// Connection max interval in 1.25ms
|
||||
#define DEFAULT_MAX_CONNECTION_INTERVAL 80 * 5
|
||||
#define DEFAULT_MAX_CONNECTION_INTERVAL 80 * 10
|
||||
|
||||
// Connection supervision timeout in 10ms
|
||||
/*修改为最大值*/
|
||||
#define DEFAULT_CONNECTION_TIMEOUT 100 // 32s
|
||||
#define DEFAULT_CONNECTION_TIMEOUT (100 * 5)
|
||||
|
||||
// Discovey mode (limited, general, all)
|
||||
#define DEFAULT_DISCOVERY_MODE DEVDISC_MODE_ALL
|
||||
|
@ -54,19 +60,19 @@
|
|||
#define DEFAULT_LINK_WHITE_LIST FALSE
|
||||
|
||||
// Default read RSSI period in 0.625ms
|
||||
#define DEFAULT_RSSI_PERIOD 2400
|
||||
#define DEFAULT_RSSI_PERIOD 4800
|
||||
|
||||
// Minimum connection interval (units of 1.25ms)
|
||||
#define DEFAULT_UPDATE_MIN_CONN_INTERVAL 20
|
||||
#define DEFAULT_UPDATE_MIN_CONN_INTERVAL DEFAULT_MIN_CONNECTION_INTERVAL
|
||||
|
||||
// Maximum connection interval (units of 1.25ms)
|
||||
#define DEFAULT_UPDATE_MAX_CONN_INTERVAL 100
|
||||
#define DEFAULT_UPDATE_MAX_CONN_INTERVAL DEFAULT_MAX_CONNECTION_INTERVAL
|
||||
|
||||
// Slave latency to use parameter update
|
||||
#define DEFAULT_UPDATE_SLAVE_LATENCY 5
|
||||
#define DEFAULT_UPDATE_SLAVE_LATENCY 3
|
||||
|
||||
// Supervision timeout value (units of 10ms)
|
||||
#define DEFAULT_UPDATE_CONN_TIMEOUT 600
|
||||
#define DEFAULT_UPDATE_CONN_TIMEOUT 100 * 5
|
||||
|
||||
// Default passcode
|
||||
#define DEFAULT_PASSCODE 0
|
||||
|
@ -84,10 +90,10 @@
|
|||
#define DEFAULT_IO_CAPABILITIES GAPBOND_IO_CAP_NO_INPUT_NO_OUTPUT
|
||||
|
||||
// Default service discovery timer delay in 0.625ms
|
||||
#define DEFAULT_SVC_DISCOVERY_DELAY 800
|
||||
#define DEFAULT_SVC_DISCOVERY_DELAY 10
|
||||
|
||||
// Default parameter update delay in 0.625ms
|
||||
#define DEFAULT_PARAM_UPDATE_DELAY 3200
|
||||
#define DEFAULT_PARAM_UPDATE_DELAY 1600
|
||||
|
||||
// Default read or write timer delay in 0.625ms
|
||||
#define DEFAULT_READ_OR_WRITE_DELAY 1600
|
||||
|
@ -96,7 +102,7 @@
|
|||
#define DEFAULT_WRITE_CCCD_DELAY 1600
|
||||
|
||||
// Establish link timeout in 0.625ms
|
||||
#define ESTABLISH_LINK_TIMEOUT 3200
|
||||
#define ESTABLISH_LINK_TIMEOUT 1600 * 3
|
||||
|
||||
// Application states
|
||||
enum
|
||||
|
@ -147,10 +153,7 @@ static gapDevRec_t centralDevList[DEFAULT_MAX_SCAN_RES];
|
|||
|
||||
// Peer device address
|
||||
peerAddrDefItem_t PeerAddrDef[CENTRAL_MAX_CONNECTION] = {
|
||||
// {0xcf, 0xb4, 0x8f, 0x10, 0x53, 0x5c},
|
||||
// {0xe1, 0X51, 0x89, 0x88, 0x19, 0x70},
|
||||
// {0xb6, 0xb4, 0x8f, 0x10, 0x53, 0x5c},
|
||||
// {0x03, 0x02, 0x03, 0xE4, 0xC2, 0x84},
|
||||
};
|
||||
|
||||
// Connection item list
|
||||
|
@ -181,6 +184,7 @@ static void centralInitConnItem(uint8_t task_id, centralConnItem_t *centralConnL
|
|||
static uint8_t centralAddrCmp(peerAddrDefItem_t *PeerAddrDef, uint8_t *addr);
|
||||
|
||||
int BSP_Master_Receive_Data(uint8_t task_id, uint8_t *data, uint16_t len);
|
||||
uint16_t Master_ProcessEvent(uint8_t task_id, uint16_t events);
|
||||
/*********************************************************************
|
||||
* PROFILE CALLBACKS
|
||||
*/
|
||||
|
@ -244,10 +248,15 @@ void Central_Init()
|
|||
centralInitConnItem(centralTaskId, centralConnList);
|
||||
// Initialize GATT Client
|
||||
GATT_InitClient();
|
||||
|
||||
// Register to receive incoming ATT Indications/Notifications
|
||||
GATT_RegisterForInd(centralTaskId);
|
||||
// Setup a delayed profile startup
|
||||
tmos_set_event(centralTaskId, START_DEVICE_EVT);
|
||||
|
||||
//用户自定义
|
||||
MasterCtrTaskId = TMOS_ProcessEventRegister(Master_ProcessEvent);
|
||||
tmos_set_event(MasterCtrTaskId, MASTER_START_EVT);
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
|
@ -348,14 +357,19 @@ uint16_t Central_ProcessEvent(uint8_t task_id, uint16_t events)
|
|||
*/
|
||||
static uint16_t connect0_ProcessEvent(uint8_t task_id, uint16_t events)
|
||||
{
|
||||
logDebug("connect0_ProcessEvent 0x%02x", events);
|
||||
if (events & START_SVC_DISCOVERY_EVT)
|
||||
{
|
||||
logDebug("START_SVC_DISCOVERY_EVT");
|
||||
centralConnList[CONNECT0_ITEM].procedureInProgress = FALSE;
|
||||
// start service discovery
|
||||
centralConnIistStartDiscovery_0();
|
||||
// centralConnIistStartDiscovery_0();;
|
||||
|
||||
return (events ^ START_SVC_DISCOVERY_EVT);
|
||||
}
|
||||
if (events & START_READ_OR_WRITE_EVT)
|
||||
{
|
||||
logDebug("START_READ_OR_WRITE_EVT");
|
||||
if (centralConnList[CONNECT0_ITEM].procedureInProgress == FALSE)
|
||||
{
|
||||
if (centralDoWrite)
|
||||
|
@ -421,14 +435,14 @@ static uint16_t connect0_ProcessEvent(uint8_t task_id, uint16_t events)
|
|||
logDebug("CH3_WRITE_EVT\r\n");
|
||||
if (centralConnList[CONNECT0_ITEM].procedureInProgress == FALSE)
|
||||
{
|
||||
logDebug("centralConnList CH3_WRITE_EVT\n");
|
||||
// logDebug("centralConnList CH3_WRITE_EVT\n");
|
||||
static uint8_t sendcnt = 0;
|
||||
attWriteReq_t req;
|
||||
|
||||
req.cmd = FALSE;
|
||||
req.sig = FALSE;
|
||||
req.handle = centralConnList[CONNECT0_ITEM].charHd3;
|
||||
logDebug("handle:%x\r\n", req.handle);
|
||||
// logDebug("handle:%x\r\n", req.handle);
|
||||
req.len = 3;
|
||||
req.pValue = GATT_bm_alloc(centralConnList[CONNECT0_ITEM].connHandle, ATT_WRITE_REQ, req.len, NULL, 0);
|
||||
if (req.pValue != NULL)
|
||||
|
@ -459,10 +473,10 @@ static uint16_t connect0_ProcessEvent(uint8_t task_id, uint16_t events)
|
|||
{
|
||||
// Do a write
|
||||
attWriteReq_t req;
|
||||
logDebug("CH4_NOTI_EVT handle:%x\r\n", req.handle);
|
||||
logDebug("CH4_NOTI_EVT handle:%x\r\n", req.handle + 1);
|
||||
req.cmd = FALSE;
|
||||
req.sig = FALSE;
|
||||
req.handle = centralConnList[CONNECT0_ITEM].charHd4;
|
||||
req.handle = centralConnList[CONNECT0_ITEM].charHd4 + 1;
|
||||
req.len = 2;
|
||||
req.pValue = GATT_bm_alloc(centralConnList[CONNECT0_ITEM].connHandle, ATT_WRITE_REQ, req.len, NULL, 0); // 内存申请
|
||||
if (req.pValue != NULL)
|
||||
|
@ -599,9 +613,7 @@ static void centralProcessGATTMsg(gattMsgEvent_t *pMsg)
|
|||
logDebug("MTU: %x\r\n", pMsg->msg.mtuEvt.MTU);
|
||||
}
|
||||
|
||||
if ((pMsg->method == ATT_READ_RSP) ||
|
||||
((pMsg->method == ATT_ERROR_RSP) &&
|
||||
(pMsg->msg.errorRsp.reqOpcode == ATT_READ_REQ)))
|
||||
if ((pMsg->method == ATT_READ_RSP) || ((pMsg->method == ATT_ERROR_RSP) && (pMsg->msg.errorRsp.reqOpcode == ATT_READ_REQ)))
|
||||
{
|
||||
if (pMsg->method == ATT_ERROR_RSP)
|
||||
{
|
||||
|
@ -613,13 +625,11 @@ static void centralProcessGATTMsg(gattMsgEvent_t *pMsg)
|
|||
{
|
||||
// After a successful read, display the read value
|
||||
logDebug("Read rsp: ");
|
||||
logHexDumpAll(pMsg->msg.readRsp.pValue, pMsg->msg.readRsp.len);
|
||||
// logHexDumpAll(pMsg->msg.readRsp.pValue, pMsg->msg.readRsp.len);
|
||||
}
|
||||
centralConnList[connItem].procedureInProgress = FALSE;
|
||||
}
|
||||
else if ((pMsg->method == ATT_WRITE_RSP) ||
|
||||
((pMsg->method == ATT_ERROR_RSP) &&
|
||||
(pMsg->msg.errorRsp.reqOpcode == ATT_WRITE_REQ)))
|
||||
else if ((pMsg->method == ATT_WRITE_RSP) || ((pMsg->method == ATT_ERROR_RSP) && (pMsg->msg.errorRsp.reqOpcode == ATT_WRITE_REQ)))
|
||||
{
|
||||
if (pMsg->method == ATT_ERROR_RSP == ATT_ERROR_RSP)
|
||||
{
|
||||
|
@ -638,7 +648,6 @@ static void centralProcessGATTMsg(gattMsgEvent_t *pMsg)
|
|||
else if (pMsg->method == ATT_HANDLE_VALUE_NOTI)
|
||||
{
|
||||
logDebug("Noti: ");
|
||||
logHexDumpAll(pMsg->msg.handleValueNoti.pValue, pMsg->msg.handleValueNoti.len);
|
||||
if (connItem == CONNECT0_ITEM)
|
||||
{
|
||||
BSP_Master_Receive_Data(CONNECT0_ITEM, pMsg->msg.handleValueNoti.pValue, pMsg->msg.handleValueNoti.len);
|
||||
|
@ -647,6 +656,7 @@ static void centralProcessGATTMsg(gattMsgEvent_t *pMsg)
|
|||
else if (centralConnList[connItem].discState != BLE_DISC_STATE_IDLE)
|
||||
{
|
||||
centralGATTDiscoveryEvent(connItem, pMsg);
|
||||
centralConnList[connItem].discState = BLE_DISC_STATE_IDLE;
|
||||
}
|
||||
GATT_bm_free(&pMsg->msg, pMsg->method);
|
||||
}
|
||||
|
@ -678,6 +688,9 @@ static void centralRssiCB(uint16_t connHandle, int8_t rssi)
|
|||
*/
|
||||
static void centralHciMTUChangeCB(uint16_t connHandle, uint16_t maxTxOctets, uint16_t maxRxOctets)
|
||||
{
|
||||
logDebug("MTU changed: %d, %d\r\n", maxTxOctets, maxRxOctets);
|
||||
// centralConnList[CONNECT0_ITEM].procedureInProgress = FALSE;
|
||||
// tmos_start_task(centralConnList[CONNECT0_ITEM].taskID, CH4_NOTI_EVT, 1600);
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
|
@ -695,13 +708,11 @@ static void centralEventCB(gapRoleEvent_t *pEvent)
|
|||
{
|
||||
case GAP_DEVICE_INIT_DONE_EVENT:
|
||||
{
|
||||
logDebug("Discovering...\r\n");
|
||||
GAPRole_CentralStartDiscovery(DEFAULT_DISCOVERY_MODE,
|
||||
DEFAULT_DISCOVERY_ACTIVE_SCAN,
|
||||
DEFAULT_DISCOVERY_WHITE_LIST);
|
||||
GAPRole_CentralCancelDiscovery();
|
||||
logDebug("停止扫瞄,发起直连\r\n");
|
||||
tmos_start_task(MasterCtrTaskId, MASTER_CONNECT_EVT, 800);
|
||||
}
|
||||
break;
|
||||
|
||||
case GAP_DEVICE_INFO_EVENT:
|
||||
{
|
||||
// Add device to list
|
||||
|
@ -710,49 +721,8 @@ static void centralEventCB(gapRoleEvent_t *pEvent)
|
|||
break;
|
||||
case GAP_DEVICE_DISCOVERY_EVENT:
|
||||
{
|
||||
uint8_t i;
|
||||
#if 1
|
||||
// See if peer device has been discovered
|
||||
for (i = 0; i < centralScanRes; i++)
|
||||
{
|
||||
// if (centralAddrCmp(PeerAddrDef, centralDevList[i].addr))
|
||||
// break;
|
||||
// if (tmos_memcmp(valve_list.valve_data[0].valve_mac, centralDevList[i].addr, B_ADDR_LEN))
|
||||
break;
|
||||
}
|
||||
// Peer device not found
|
||||
if (i == centralScanRes)
|
||||
{
|
||||
logDebug("Device not found...\r\n");
|
||||
centralScanRes = 0;
|
||||
GAPRole_CentralStartDiscovery(DEFAULT_DISCOVERY_MODE,
|
||||
DEFAULT_DISCOVERY_ACTIVE_SCAN,
|
||||
DEFAULT_DISCOVERY_WHITE_LIST);
|
||||
logDebug("Discovering...\r\n");
|
||||
}
|
||||
|
||||
// Peer device found
|
||||
else
|
||||
{
|
||||
logDebug("Device found...\r\n");
|
||||
#if 0
|
||||
GAPRole_CentralEstablishLink(DEFAULT_LINK_HIGH_DUTY_CYCLE,
|
||||
DEFAULT_LINK_WHITE_LIST,
|
||||
centralDevList[i].addrType,
|
||||
centralDevList[i].addr);
|
||||
#endif
|
||||
|
||||
GAPRole_CentralEstablishLink(DEFAULT_LINK_HIGH_DUTY_CYCLE,
|
||||
DEFAULT_LINK_WHITE_LIST,
|
||||
ADDRTYPE_PUBLIC,
|
||||
valve_list.valve_data[0].valve_mac);
|
||||
logInfo("valve_list.valve_data[0].valve_mac:");
|
||||
logHexDumpAll(valve_list.valve_data[0].valve_mac, B_ADDR_LEN);
|
||||
// Start establish link timeout event
|
||||
tmos_start_task(centralTaskId, ESTABLISH_LINK_TIMEOUT_EVT, ESTABLISH_LINK_TIMEOUT);
|
||||
logDebug("Connecting...\r\n");
|
||||
}
|
||||
#endif
|
||||
Master_Connect();
|
||||
logDebug("Connecting...\r\n");
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -784,8 +754,13 @@ static void centralEventCB(gapRoleEvent_t *pEvent)
|
|||
if (connItem == CONNECT0_ITEM)
|
||||
{
|
||||
centralConnList[connItem].procedureInProgress = TRUE;
|
||||
|
||||
// Initiate service discovery
|
||||
// update MTU
|
||||
// attExchangeMTUReq_t req =
|
||||
// {
|
||||
// .clientRxMTU = BLE_BUFF_MAX_LEN - 4,
|
||||
// };
|
||||
// GATT_ExchangeMTU(pEvent->linkCmpl.connectionHandle, &req, centralTaskId);
|
||||
// Initiate service discovery
|
||||
tmos_start_task(centralConnList[connItem].taskID, START_SVC_DISCOVERY_EVT, DEFAULT_SVC_DISCOVERY_DELAY);
|
||||
|
||||
// Initiate connect parameter update
|
||||
|
@ -793,19 +768,7 @@ static void centralEventCB(gapRoleEvent_t *pEvent)
|
|||
|
||||
// Start RSSI polling
|
||||
tmos_start_task(centralConnList[connItem].taskID, START_READ_RSSI_EVT, DEFAULT_RSSI_PERIOD);
|
||||
|
||||
}
|
||||
|
||||
// 连接1
|
||||
else if (connItem == CONNECT1_ITEM)
|
||||
{
|
||||
}
|
||||
|
||||
// 连接2
|
||||
// else if(connItem == CONNECT2_ITEM)
|
||||
// {
|
||||
// }
|
||||
|
||||
logDebug("Connected...\r\n");
|
||||
|
||||
// See if need discover again
|
||||
|
@ -818,9 +781,6 @@ static void centralEventCB(gapRoleEvent_t *pEvent)
|
|||
{
|
||||
logDebug("Discovering...\r\n");
|
||||
centralScanRes = 0;
|
||||
GAPRole_CentralStartDiscovery(DEFAULT_DISCOVERY_MODE,
|
||||
DEFAULT_DISCOVERY_ACTIVE_SCAN,
|
||||
DEFAULT_DISCOVERY_WHITE_LIST);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -829,13 +789,9 @@ static void centralEventCB(gapRoleEvent_t *pEvent)
|
|||
logDebug("Connect Failed...Reason:%X\r\n", pEvent->gap.hdr.status);
|
||||
logDebug("Discovering...\r\n");
|
||||
centralScanRes = 0;
|
||||
GAPRole_CentralStartDiscovery(DEFAULT_DISCOVERY_MODE,
|
||||
DEFAULT_DISCOVERY_ACTIVE_SCAN,
|
||||
DEFAULT_DISCOVERY_WHITE_LIST);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case GAP_LINK_TERMINATED_EVENT:
|
||||
{
|
||||
uint8_t connItem;
|
||||
|
@ -855,22 +811,15 @@ static void centralEventCB(gapRoleEvent_t *pEvent)
|
|||
centralConnList[connItem].charHdl = 0;
|
||||
centralConnList[connItem].procedureInProgress = FALSE;
|
||||
centralScanRes = 0;
|
||||
|
||||
tmos_stop_task(centralConnList[connItem].taskID, START_READ_RSSI_EVT);
|
||||
|
||||
logDebug("Discovering...\r\n");
|
||||
GAPRole_CentralStartDiscovery(DEFAULT_DISCOVERY_MODE,
|
||||
DEFAULT_DISCOVERY_ACTIVE_SCAN,
|
||||
DEFAULT_DISCOVERY_WHITE_LIST);
|
||||
}
|
||||
break;
|
||||
|
||||
case GAP_LINK_PARAM_UPDATE_EVENT:
|
||||
{
|
||||
logDebug("Update %x - Int %x \r\n", pEvent->linkUpdate.connectionHandle, pEvent->linkUpdate.connInterval);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -960,12 +909,10 @@ static void centralConnIistStartDiscovery_0(void)
|
|||
centralConnList[CONNECT0_ITEM].svcStartHdl = centralConnList[CONNECT0_ITEM].svcEndHdl = centralConnList[CONNECT0_ITEM].charHdl = 0;
|
||||
|
||||
centralConnList[CONNECT0_ITEM].discState = BLE_DISC_STATE_SVC;
|
||||
|
||||
// Discovery simple BLE service
|
||||
GATT_DiscPrimaryServiceByUUID(centralConnList[CONNECT0_ITEM].connHandle,
|
||||
uuid,
|
||||
ATT_BT_UUID_SIZE,
|
||||
centralTaskId);
|
||||
centralTaskId);
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
|
@ -981,6 +928,13 @@ static void centralGATTDiscoveryEvent(uint8_t connItem, gattMsgEvent_t *pMsg)
|
|||
// 连接0的枚举
|
||||
if (connItem == CONNECT0_ITEM)
|
||||
{
|
||||
logDebug("发现句柄配置\r\n");
|
||||
centralConnList[connItem].charHdl = 0X23;
|
||||
centralConnList[connItem].charHd2 = 0X26;
|
||||
centralConnList[connItem].charHd3 = 0x29;
|
||||
centralConnList[connItem].charHd4 = 0x2C;
|
||||
centralConnList[connItem].procedureInProgress = FALSE;
|
||||
#if 0
|
||||
if (centralConnList[connItem].discState == BLE_DISC_STATE_SVC)
|
||||
{
|
||||
// Service found, store handles
|
||||
|
@ -1020,17 +974,20 @@ static void centralGATTDiscoveryEvent(uint8_t connItem, gattMsgEvent_t *pMsg)
|
|||
(pMsg->method == ATT_ERROR_RSP))
|
||||
{
|
||||
// Discover characteristic
|
||||
centralConnList[connItem].discState = BLE_DISC_STATE_CHAR;
|
||||
uint8_t ret = GATT_DiscAllChars(centralConnList[connItem].connHandle, 0x01, 0xFFFF, centralTaskId);
|
||||
logDebug("GATT_DiscAllChars:%02x\r\n", ret);
|
||||
// centralConnList[connItem].discState = BLE_DISC_STATE_CHAR;
|
||||
// uint8_t ret = GATT_DiscAllChars(centralConnList[connItem].connHandle, 0x01, 0xFFFF, centralTaskId);
|
||||
// logDebug("GATT_DiscAllChars:%02x\r\n", ret);
|
||||
}
|
||||
}
|
||||
else if (centralConnList[connItem].discState == BLE_DISC_STATE_CHAR)
|
||||
{
|
||||
|
||||
// Characteristic found, store handle
|
||||
if (pMsg->method == ATT_READ_BY_TYPE_RSP &&
|
||||
pMsg->msg.readByTypeRsp.numPairs > 0)
|
||||
{
|
||||
#if 0
|
||||
|
||||
for (unsigned char i = 0; i < pMsg->msg.readByTypeRsp.numPairs; i++)
|
||||
{
|
||||
// characteristic properties
|
||||
|
@ -1087,7 +1044,6 @@ static void centralGATTDiscoveryEvent(uint8_t connItem, gattMsgEvent_t *pMsg)
|
|||
{
|
||||
if (char_properties & (GATT_PROP_NOTIFY))
|
||||
{
|
||||
centralConnList[connItem].discState = BLE_DISC_STATE_IDLE;
|
||||
centralConnList[connItem].charHd4 = char_value_handle + 1;
|
||||
centralConnList[connItem].procedureInProgress = FALSE;
|
||||
logDebug("char4 Write handle\t:%04x\r\n", char_value_handle);
|
||||
|
@ -1095,18 +1051,22 @@ static void centralGATTDiscoveryEvent(uint8_t connItem, gattMsgEvent_t *pMsg)
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// 连接1的枚举
|
||||
// else if (connItem == CONNECT1_ITEM)
|
||||
// {
|
||||
|
||||
// }
|
||||
// 连接2的枚举
|
||||
// else if(connItem == CONNECT2_ITEM)
|
||||
// {
|
||||
// }
|
||||
#endif
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
// 连接1的枚举
|
||||
// else if (connItem == CONNECT1_ITEM)
|
||||
// {
|
||||
|
||||
// }
|
||||
// 连接2的枚举
|
||||
// else if(connItem == CONNECT2_ITEM)
|
||||
// {
|
||||
// }
|
||||
}
|
||||
/*********************************************************************
|
||||
* @fn centralAddDeviceInfo
|
||||
|
@ -1182,8 +1142,10 @@ int BSP_Master_Send(centralConnItem_t *centralConnList, uint8_t id, uint8_t *Dat
|
|||
|
||||
if (centralConnList[id].state == BLE_STATE_CONNECTED) // 检查连接状态是否为连接状态
|
||||
{
|
||||
logDebug("BLE_STATE_CONNECTED");
|
||||
if (centralConnList[id].procedureInProgress == FALSE)
|
||||
{
|
||||
logDebug("FALSE");
|
||||
req.cmd = FALSE;
|
||||
req.sig = FALSE;
|
||||
req.handle = centralConnList[id].charHd3;
|
||||
|
@ -1196,29 +1158,31 @@ int BSP_Master_Send(centralConnItem_t *centralConnList, uint8_t id, uint8_t *Dat
|
|||
if (res == SUCCESS)
|
||||
{
|
||||
logDebug("\n Master Write ok");
|
||||
centralConnList[id].procedureInProgress = FALSE;
|
||||
ret = 0;
|
||||
centralConnList[id].procedureInProgress = TRUE;
|
||||
ret = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
logDebug("\n Master Write faild= %x", res);
|
||||
logError("\n Master Write faild= %x", res);
|
||||
GATT_bm_free((gattMsg_t *)&req, ATT_WRITE_REQ);
|
||||
ret = 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
logDebug("\n alloc Faild");
|
||||
logError("\n alloc Faild");
|
||||
ret = 2;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
logError("procedureInProgress");
|
||||
ret = 3;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
logError("no BLE_STATE_CONNECTED");
|
||||
ret = 4;
|
||||
}
|
||||
return ret;
|
||||
|
@ -1274,33 +1238,29 @@ int BSP_Master_Receive_Data(uint8_t task_id, uint8_t *data, uint16_t len)
|
|||
|
||||
return -5;
|
||||
}
|
||||
logDebug("BT 数据帧校验通过");
|
||||
// logDebug("BT 数据帧校验通过");
|
||||
|
||||
// //有效数据长度
|
||||
size_t data_len = (datalength + 5);
|
||||
ret = data_len;
|
||||
ret = data_len;
|
||||
if (data[index + 1] == kCmdCloseVavle) // 0x02 代表了其是控制阀门响应
|
||||
{
|
||||
logDebug("BT 控制阀门响应包");
|
||||
if (data[index + datalength + 2] == 1)//响应数据位
|
||||
// logDebug("BT 控制阀门响应包");
|
||||
if (data[index + datalength + 2] == 1) // 响应数据位
|
||||
{
|
||||
logInfo("BT 控制阀门成功");
|
||||
logInfo("关闭阀门成功");
|
||||
}
|
||||
else
|
||||
{
|
||||
logError("BT 控制阀门失败");
|
||||
}
|
||||
logHexDumpAll(&data[index], len);
|
||||
}
|
||||
else if (data[index + 1] == kValveCmdRep) // 这个是代表了其是心跳数据包
|
||||
{
|
||||
logDebug("BT 心跳数据包");
|
||||
logHexDumpAll(&data[index], len);
|
||||
valve_list.valve_num = task_id + 1;
|
||||
valve_list.valve_data[task_id].valve_id = data[index + 4];
|
||||
// tmos_memcpy(valve_list.valve_data[task_id].valve_mac, &data[index + 5], 6); //将数据提取到结构体中
|
||||
logDebug("BT 心跳数据包:");
|
||||
logHexDumpAll(data, data_len);
|
||||
}
|
||||
//到这一步说明数据没问题,将接收到的数据通过中心任务发送出去
|
||||
// 到这一步说明数据没问题,将接收到的数据通过中心任务发送出去
|
||||
uint8_t *p_data;
|
||||
p_data = tmos_msg_allocate(data_len);
|
||||
if (p_data)
|
||||
|
@ -1309,27 +1269,91 @@ int BSP_Master_Receive_Data(uint8_t task_id, uint8_t *data, uint16_t len)
|
|||
tmos_msg_send(BtRxTaskId, p_data);
|
||||
tmos_start_task(BtRxTaskId, SYS_EVENT_MSG, 0);
|
||||
}
|
||||
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
void Master_Connect(void)
|
||||
{
|
||||
uint8_t cnt = Flash_Get_Valve_Num();
|
||||
uint8_t def_mac[6] = {0xFF};
|
||||
uint8_t cnt = Flash_Get_Valve_Num();
|
||||
logDebug("cnt:%d\r\n", cnt);
|
||||
if (cnt == 0)
|
||||
{
|
||||
GAPRole_CentralEstablishLink(DEFAULT_LINK_HIGH_DUTY_CYCLE,
|
||||
DEFAULT_LINK_WHITE_LIST,
|
||||
ADDRTYPE_PUBLIC,
|
||||
def_mac);
|
||||
tmos_start_task(centralTaskId, ESTABLISH_LINK_TIMEOUT_EVT, ESTABLISH_LINK_TIMEOUT);
|
||||
return;
|
||||
}
|
||||
for (uint8_t i = 0; i < cnt; i++)
|
||||
{
|
||||
if (valve_list.valve_data[cnt].valve_id != 0)
|
||||
if (valve_list.valve_data[i].valve_id != 0)
|
||||
{
|
||||
logDebug("valve_id:%d\r\n", valve_list.valve_data[cnt].valve_id);
|
||||
logHexDumpAll(valve_list.valve_data[cnt].valve_mac, 6);
|
||||
logDebug("valve_id:%d\r\n", valve_list.valve_data[i].valve_id);
|
||||
logHexDumpAll(valve_list.valve_data[i].valve_mac, 6);
|
||||
GAPRole_CentralEstablishLink(DEFAULT_LINK_HIGH_DUTY_CYCLE,
|
||||
DEFAULT_LINK_WHITE_LIST,
|
||||
ADDRTYPE_PUBLIC,
|
||||
valve_list.valve_data[cnt].valve_mac);
|
||||
DEFAULT_LINK_WHITE_LIST,
|
||||
ADDRTYPE_PUBLIC,
|
||||
valve_list.valve_data[i].valve_mac);
|
||||
tmos_start_task(centralTaskId, ESTABLISH_LINK_TIMEOUT_EVT, ESTABLISH_LINK_TIMEOUT);
|
||||
logDebug("Connecting...\r\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Master_DisConnect(void)
|
||||
{
|
||||
GAPRole_TerminateLink(INVALID_CONNHANDLE);
|
||||
logDebug("主动断开连接\r\n");
|
||||
}
|
||||
|
||||
uint16_t Master_ProcessEvent(uint8_t task_id, uint16_t events)
|
||||
{
|
||||
int8_t ret = 0;
|
||||
uint8_t *pMsg;
|
||||
uint8_t master_buf[64] = {0};
|
||||
if (events & MASTER_START_EVT)
|
||||
{
|
||||
if (centralConnList[0].state != BLE_STATE_CONNECTED)
|
||||
{
|
||||
if (Flash_Get_Valve_Num())
|
||||
{
|
||||
tmos_start_task(task_id, MASTER_CONNECT_EVT, 2400);
|
||||
}
|
||||
}
|
||||
return (events ^ MASTER_START_EVT);
|
||||
}
|
||||
else if(events & MASTER_DETECT_EVT)
|
||||
{
|
||||
if (centralConnList[0].state != BLE_STATE_CONNECTED)
|
||||
{
|
||||
|
||||
tmos_start_task(task_id, MASTER_CONNECT_EVT, 2400);
|
||||
}
|
||||
else
|
||||
{
|
||||
tmos_start_task(task_id, MASTER_DETECT_EVT, 2400);
|
||||
}
|
||||
|
||||
return (events ^ MASTER_DETECT_EVT);
|
||||
}
|
||||
|
||||
else if (events & MASTER_CONNECT_EVT)
|
||||
{
|
||||
if (centralConnList[0].state != BLE_STATE_CONNECTED)
|
||||
{
|
||||
Master_Connect();
|
||||
tmos_start_task(task_id, MASTER_DETECT_EVT, 2400);
|
||||
}
|
||||
return (events ^ MASTER_CONNECT_EVT);
|
||||
}
|
||||
else if (events & MASTER_DISCONN_EVT)
|
||||
{
|
||||
Master_DisConnect();
|
||||
return (events ^ MASTER_DISCONN_EVT);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* @Author: mbw
|
||||
* @Date: 2024-12-03 11:13:13
|
||||
* @LastEditors: mbw && 1600520629@qq.com
|
||||
* @LastEditTime: 2024-12-13 18:31:17
|
||||
* @LastEditTime: 2024-12-15 17:16:45
|
||||
* @FilePath: \ble_-tyq_-bjq_-ch584-m\APP\multiCentral_main.c
|
||||
* @Description:
|
||||
*
|
||||
|
@ -25,13 +25,13 @@
|
|||
#include "HAL.h"
|
||||
#include "multiCentral.h"
|
||||
#include "bsp_uart.h"
|
||||
#include "log.h"
|
||||
#include "bsp_iwdg.h"
|
||||
#include "bsp_flash.h"
|
||||
#include "bsp_valve.h"
|
||||
|
||||
#undef LOG_ENABLE
|
||||
#define LOG_ENABLE 1
|
||||
|
||||
#include "log.h"
|
||||
/*********************************************************************
|
||||
* GLOBAL TYPEDEFS
|
||||
*/
|
||||
|
@ -80,10 +80,6 @@ int main(void)
|
|||
GPIOA_ModeCfg(GPIO_Pin_All, GPIO_ModeIN_PU);
|
||||
GPIOB_ModeCfg(GPIO_Pin_All, GPIO_ModeIN_PU);
|
||||
#endif
|
||||
CH58x_BLEInit();
|
||||
HAL_Init();
|
||||
GAPRole_CentralInit();
|
||||
Central_Init();
|
||||
#if DEBUG == Debug_UART0
|
||||
GPIOA_SetBits(GPIO_Pin_14);
|
||||
GPIOPinRemap(ENABLE, RB_PIN_UART0);
|
||||
|
@ -99,9 +95,16 @@ int main(void)
|
|||
BSP_UART3_Init();
|
||||
logDebug("test log debug\n");
|
||||
#endif
|
||||
|
||||
CH58x_BLEInit();
|
||||
HAL_Init();
|
||||
GAPRole_CentralInit();
|
||||
Central_Init();
|
||||
|
||||
BSP_FLASH_Init();
|
||||
BSP_Valve_Init();
|
||||
BSP_UART1_Init(); // BT UART
|
||||
// IWDG_Init(1000);
|
||||
Main_Circulation();
|
||||
}
|
||||
|
||||
|
|
|
@ -14,6 +14,12 @@
|
|||
/* ͷ<>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> */
|
||||
#include "HAL.h"
|
||||
|
||||
|
||||
#undef LOG_ENABLE
|
||||
#define LOG_ENABLE 1
|
||||
#include "log.h"
|
||||
|
||||
|
||||
tmosTaskID halTaskID;
|
||||
uint32_t g_LLE_IRQLibHandlerLocation;
|
||||
/*******************************************************************************
|
||||
|
@ -133,7 +139,7 @@ void CH58x_BLEInit(void)
|
|||
for(i = 0; i < 6; i++)
|
||||
{
|
||||
cfg.MacAddr[i] = MacAddr[i];
|
||||
PRINT("%02x ", cfg.MacAddr[i]);
|
||||
logDebug("%02x ", cfg.MacAddr[i]);
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,36 @@
|
|||
/***
|
||||
* @Author: mbw
|
||||
* @Date: 2024-12-15 16:29:58
|
||||
* @LastEditors: mbw && 1600520629@qq.com
|
||||
* @LastEditTime: 2024-12-15 16:40:26
|
||||
* @FilePath: \ble_-tyq_-bjq_-ch584-m\bsp\inc\bsp_iwdg.h
|
||||
* @Description:
|
||||
* @
|
||||
* @Copyright (c) 2024 by ${git_name_email}, All Rights Reserved.
|
||||
*/
|
||||
#ifndef __BSP_IWDG_H__
|
||||
#define __BSP_IWDG_H__
|
||||
|
||||
#include "CONFIG.h"
|
||||
|
||||
#define RB_RLR 0x0FFF // RW, watch-dog counter reload (write protect)
|
||||
#define RB_PR 0x7000 // PR, prescale (write protect)
|
||||
#define RB_PVU 0x8000 // RO, register update flag (write protect)
|
||||
#define RB_COUNT 0xFF0000 // RO, watch-dog down counter
|
||||
#define RB_STOP_EN 0x20000000 // RW, watch-dog stop enable (write protect)
|
||||
#define RB_WR_PROTECT 0x40000000 // RO, write protect
|
||||
#define RB_IWDG_EN 0x80000000 // RO, watch-dog enable
|
||||
|
||||
void IWDG_Init(uint16_t ms);
|
||||
|
||||
// 需要定时调用喂狗
|
||||
// 在看门狗键寄存器 (R32_IWDG_KR) 中,软件要以一定的间隔写入 0xAAAA,重装载计数值,这就是喂狗的操作。
|
||||
// 否则,当计数器为 0 时,看门狗会产生复位。
|
||||
#define FEED_IWDG() \
|
||||
{ \
|
||||
R32_IWDG_KR = 0xAAAA; \
|
||||
}
|
||||
|
||||
void ShowRestartReason(void);
|
||||
|
||||
#endif // !__BSP_IWDG_H__
|
|
@ -1,19 +0,0 @@
|
|||
#ifndef __BSP_MASTER_H__
|
||||
#define __BSP_MASTER_H__
|
||||
|
||||
#include "CH58x_common.h"
|
||||
#include "CH58xBLE_LIB.h"
|
||||
|
||||
// 0xAA CMD/DATA/ DATA_LEN (DATA) checksum 0x55
|
||||
|
||||
typedef struct __attribute__((packed))
|
||||
{
|
||||
uint8_t header;
|
||||
uint8_t cmd; // CMD/DATA
|
||||
uint8_t len; // DATA_LEN
|
||||
uint8_t *pData;
|
||||
uint8_t checksum;
|
||||
uint8_t tail;
|
||||
} TsFrameData;
|
||||
|
||||
#endif // ! __BSP_MASTER_H__
|
|
@ -2,7 +2,7 @@
|
|||
* @Author: mbw
|
||||
* @Date: 2024-12-06 16:52:29
|
||||
* @LastEditors: mbw && 1600520629@qq.com
|
||||
* @LastEditTime: 2024-12-09 11:15:13
|
||||
* @LastEditTime: 2024-12-14 14:51:37
|
||||
* @FilePath: \ble_-tyq_-bjq_-ch584-m\bsp\inc\bsp_uart.h
|
||||
* @Description:
|
||||
* @
|
||||
|
@ -25,7 +25,6 @@
|
|||
#define BT_UART_TX_PIN GPIO_Pin_9 //PA9
|
||||
#define BT_UART_RX_PIN GPIO_Pin_8 //PA8
|
||||
|
||||
|
||||
typedef struct __attribute__((packed))
|
||||
{
|
||||
uint8_t cmd;
|
||||
|
|
|
@ -61,19 +61,13 @@ struct __attribute__((packed)) valve_data
|
|||
{
|
||||
uint8_t valve_id;
|
||||
uint8_t valve_mac[6];
|
||||
TeVavleType 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 阀门入口压力 Pa
|
||||
// uint32_t out_pressure; // 4B 阀门出口压力 Pa
|
||||
// uint32_t atm_pressure; // 4B 阀门大气压力 Pa
|
||||
uint8_t valve_connct_status;
|
||||
uint8_t valve_switch_status;
|
||||
uint8_t valve_temp;
|
||||
uint32_t valve_in_pressure;
|
||||
uint32_t valve_out_pressure;
|
||||
uint32_t valve_atm_pressure;
|
||||
uint8_t valve_type;
|
||||
};
|
||||
|
||||
typedef struct valve_data_list
|
||||
|
@ -91,8 +85,6 @@ int BSP_Bt_Remove_Valve(uint8_t *data, uint8_t len);
|
|||
int BSP_Bt_Replace_Valve(uint8_t *data, uint8_t len);
|
||||
void BSP_Bt_Valve_Updata(void);
|
||||
|
||||
int BSP_Bt_Valve_Ctr_Resp(uint8_t id, uint8_t *mac_addr, WireLessState status);
|
||||
|
||||
int BSP_Bt_Valve_Resp(uint8_t cmd, uint8_t id, uint8_t *mac_addr, uint8_t state);
|
||||
|
||||
#endif // ! __BSP_VALVE_H__
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* @Author: mbw
|
||||
* @Date: 2024-12-06 14:49:21
|
||||
* @LastEditors: mbw && 1600520629@qq.com
|
||||
* @LastEditTime: 2024-12-13 13:57:30
|
||||
* @LastEditTime: 2024-12-15 15:05:39
|
||||
* @FilePath: \ble_-tyq_-bjq_-ch584-m\bsp\src\bsp_flash.c
|
||||
* @Description: 主要用于对一些MAC地址等关键信息进行保存和读取操作
|
||||
*
|
||||
|
@ -13,6 +13,9 @@
|
|||
#include "string.h"
|
||||
#include "bsp_valve.h"
|
||||
|
||||
#undef LOG_ENABLE
|
||||
#define LOG_ENABLE 1
|
||||
# include "log.h"
|
||||
|
||||
void Flash_ErasePage_ReadConfigInfo(uint8_t *page_buf)
|
||||
{
|
||||
|
@ -49,16 +52,14 @@ int Flash_Get_Mac_Addr(uint8_t *mac_addr, uint8_t number)
|
|||
{
|
||||
__attribute__((aligned(4)))
|
||||
uint8_t data[FLASH_MAC_INFO_LEN + 2]; // 读写buf需要4字节对齐
|
||||
// char mac[16] = {0};
|
||||
EEPROM_READ((FLASH_MAC_INFO_START_ADDR + number * FLASH_MAC_INFO_LEN), data, FLASH_MAC_INFO_LEN);
|
||||
if (data == NULL)
|
||||
if (tmos_isbufset(data, 0xFF, FLASH_MAC_INFO_LEN))
|
||||
{
|
||||
// PRINTF("Flash_Get_Mac_Addr failed");
|
||||
logDebug("MAC地址为空,请先配网");
|
||||
tmos_memset(mac_addr, 0xFF, FLASH_MAC_INFO_LEN);
|
||||
return -1;
|
||||
}
|
||||
// sprintf(mac, "%02x:%02x:%02x:%02x:%02x:%02x",
|
||||
// data[5], data[4], data[3], data[2], data[1], data[0]);
|
||||
// PRINTF("mac_addr:%s", mac);
|
||||
|
||||
tmos_memcpy(mac_addr, data, FLASH_MAC_INFO_LEN);
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -0,0 +1,130 @@
|
|||
/*
|
||||
* @Author : stark1898y 1658608470@qq.com
|
||||
* @Date : 2024-12-15 16:13:41
|
||||
* @LastEditors: mbw && 1600520629@qq.com
|
||||
* @LastEditTime: 2024-12-16 10:50:56
|
||||
* @FilePath: \ble_-tyq_-bjq_-ch584-m\bsp\src\bsp_iwdg.c
|
||||
* @Description :
|
||||
*
|
||||
* Copyright (c) 2024 by yzy, All Rights Reserved.
|
||||
*/
|
||||
#include "bsp_iwdg.h"
|
||||
|
||||
#include "bsp_uart.h"
|
||||
#include "log.h"
|
||||
|
||||
// https://www.cnblogs.com/debugdabiaoge/p/17580033.html
|
||||
// https://www.cnblogs.com/risc5-ble/p/17853714.html
|
||||
|
||||
#undef LOG_ENABLE
|
||||
#define LOG_ENABLE 1
|
||||
|
||||
#undef LOG_TAG
|
||||
#define LOG_TAG "idwg"
|
||||
|
||||
uint8_t IWDGTaskId;
|
||||
|
||||
#define IWIG_FEED_EVENT (0x01 << 0)
|
||||
uint16_t IWDG_ProcessEvent(uint8_t task_id, uint16_t events)
|
||||
{
|
||||
if (events & IWIG_FEED_EVENT)
|
||||
{
|
||||
FEED_IWDG();
|
||||
tmos_start_task(task_id, IWIG_FEED_EVENT, 20000);
|
||||
return (events ^ IWIG_FEED_EVENT);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
// 32k rc
|
||||
// div 0:4 | 1:8 | 2:16 | 3:32 |
|
||||
// 4:64 | 5:128 | 6:256 | 7:512(32K分频512,时钟62.5Hz) |
|
||||
// reload max 4095
|
||||
|
||||
// 独立看门狗(IWDG)由专用的内部低速时钟(LSI)驱动,能够在低功耗模式下正常工作。
|
||||
void IWDG_Init(uint16_t ms)
|
||||
{
|
||||
uint16_t div = 512;
|
||||
float tick_ms = 1000 / (32000 / 512);
|
||||
|
||||
uint16_t reload = (ms / tick_ms) + 1;
|
||||
|
||||
// // 解除IWDG保护
|
||||
// R32_IWDG_KR = 0x5555;
|
||||
|
||||
// R32_IWDG_CFG = (RB_PR & (div << 12)) | (RB_STOP_EN) | (reload & RB_RLR);
|
||||
// // 开启IWDG保护
|
||||
// R32_IWDG_KR = 0xCCCC;
|
||||
|
||||
// logDebug("R32_IWDG_CFG = %X", R32_IWDG_CFG);
|
||||
|
||||
R32_IWDG_KR = 0x5555; // 解除IWDG保护
|
||||
R32_IWDG_CFG |= (7 << 12); // 32K分频512,时钟62.5Hz
|
||||
R32_IWDG_CFG &= 0xFFFFF000;
|
||||
R32_IWDG_CFG |= 0x10; // 看门狗时间约256ms(0x10/(32K/512))
|
||||
R32_IWDG_KR = 0xCCCC;
|
||||
PRINT("R32_IWDG_CFG = %x\r\n", R32_IWDG_CFG);
|
||||
|
||||
IWDGTaskId = TMOS_ProcessEventRegister(IWDG_ProcessEvent);
|
||||
tmos_set_event(IWDGTaskId, IWIG_FEED_EVENT);
|
||||
}
|
||||
|
||||
// #define RB_RESET_FLAG 0x07 // RO: recent reset flag
|
||||
// #define RST_FLAG_SW 0x00
|
||||
// #define RST_FLAG_RPOR 0x01
|
||||
// #define RST_FLAG_WTR 0x02
|
||||
// #define RST_FLAG_MR 0x03
|
||||
// //#define RST_FLAG_GPWSM 0x04 // RO, power on reset flag during sleep/shutdown: 0=no power on reset during sleep/shutdown, 1=power on reset occurred during sleep/shutdown
|
||||
// #define RST_FLAG_GPWSM 0x05
|
||||
// // RB_RESET_FLAG: recent reset flag
|
||||
// // 000 - SR, software reset, by RB_SOFTWARE_RESET=1 @RB_WDOG_RST_EN=0
|
||||
// // 001 - RPOR, real power on reset
|
||||
// // 010 - WTR, watch-dog timer-out reset
|
||||
// // 011 - MR, external manual reset by RST pin input low
|
||||
// // 101 - GRWSM, global reset by waking under shutdown mode
|
||||
// 1?? - LRW, power on reset occurred during sleep
|
||||
|
||||
// 打印复位状态寄存器,显示复位原因
|
||||
// 最近一次复位状态:
|
||||
// 000:软件复位 SR(RB_WDOG_RST_EN=0时软件复位可产生此状态,否则可复位但不产生此状态);
|
||||
// 001:上电复位 RPOR;
|
||||
// 010:看门狗超时复位 WTR;
|
||||
// 011:外部手动复位 MR;
|
||||
// 101:从下电模式唤醒时的复位 GRWSM;
|
||||
// 100/110/111:唤醒复位 LRW,且此前的上一次复位分别是 SR/WTR/MR。
|
||||
void ShowRestartReason(void)
|
||||
{
|
||||
uint8_t reason = R8_RESET_STATUS & 0x07;
|
||||
logDebug("R8_RESET_STATUS = %02x", reason);
|
||||
switch (reason)
|
||||
{
|
||||
case RST_FLAG_SW:
|
||||
logDebug("RST_FLAG_SW");
|
||||
break;
|
||||
case RST_FLAG_RPOR:
|
||||
logDebug("RST_FLAG_RPOR");
|
||||
break;
|
||||
case RST_FLAG_WTR:
|
||||
logDebug("RST_FLAG_WTR");
|
||||
break;
|
||||
case RST_FLAG_MR:
|
||||
logDebug("RST_FLAG_MR");
|
||||
break;
|
||||
|
||||
case RST_FLAG_GPWSM:
|
||||
logDebug("RST_FLAG_GPWSM");
|
||||
break;
|
||||
|
||||
case 0x04:
|
||||
logDebug("LRW, last SR");
|
||||
break;
|
||||
case 0x06:
|
||||
logDebug("LRW, last WTR");
|
||||
break;
|
||||
case 0x07:
|
||||
logDebug("LRW, last MR");
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
|
@ -1,23 +0,0 @@
|
|||
/*
|
||||
* @Author: mbw
|
||||
* @Date: 2024-12-11 13:52:38
|
||||
* @LastEditors: mbw && 1600520629@qq.com
|
||||
* @LastEditTime: 2024-12-12 09:11:54
|
||||
* @FilePath: \ble_-tyq_-bjq_-ch584-m\bsp\src\bsp_Master.c
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) 2024 by ${git_name_email}, All Rights Reserved.
|
||||
*/
|
||||
#include "bsp_master.h"
|
||||
#include "bsp_uart.h"
|
||||
#include "log.h"
|
||||
#include "multiCentral.h"
|
||||
#include "bsp_valve.h"
|
||||
|
||||
#undef LOG_ENABLE
|
||||
#define LOG_ENABLE 1
|
||||
|
||||
void BSP_Bt_Init(void)
|
||||
{
|
||||
}
|
||||
|
|
@ -1,28 +1,40 @@
|
|||
/*
|
||||
* @Author: mbw
|
||||
* @Date: 2024-12-07 15:13:24
|
||||
* @LastEditors: mbw && 1600520629@qq.com
|
||||
* @LastEditTime: 2024-12-16 14:54:45
|
||||
* @FilePath: \ble_-tyq_-bjq_-ch584-m\bsp\src\bsp_tim.c
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) 2024 by ${git_name_email}, All Rights Reserved.
|
||||
*/
|
||||
#include "bsp_tim.h"
|
||||
#include "HAL.h"
|
||||
|
||||
|
||||
// tick_1ms_cnt在SysTick_Handler()中1ms +1
|
||||
// tick_1ms_cnt<EFBFBD><EFBFBD>SysTick_Handler()<29><>1ms +1
|
||||
volatile uint32_t tick_1ms_cnt = 0;
|
||||
|
||||
/**
|
||||
* @description: 以SysTick(1ms)为基础
|
||||
* @description: <EFBFBD><EFBFBD>SysTick<EFBFBD><EFBFBD>1ms<EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @return {uint32_t}
|
||||
*/
|
||||
uint32_t BSP_Get_Tick(void)
|
||||
{
|
||||
/* Platform implementation */
|
||||
return tick_1ms_cnt;
|
||||
// return tick_1ms_cnt;
|
||||
return (TMOS_GetSystemClock() / 1.6);
|
||||
}
|
||||
|
||||
|
||||
// SysTick中断函数
|
||||
// SysTick<EFBFBD>жϺ<EFBFBD><EFBFBD><EFBFBD>
|
||||
__INTERRUPT
|
||||
__HIGH_CODE
|
||||
void SysTick_Handler()
|
||||
{
|
||||
static uint8_t cnt_ms = 0;
|
||||
|
||||
SysTick->SR = 0; // 清除中断标志
|
||||
SysTick->SR = 0; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϱ<EFBFBD>־
|
||||
tick_1ms_cnt++;
|
||||
|
||||
cnt_ms++;
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* @Author: mbw
|
||||
* @Date: 2024-12-06 16:52:30
|
||||
* @LastEditors: mbw && 1600520629@qq.com
|
||||
* @LastEditTime: 2024-12-13 18:26:38
|
||||
* @LastEditTime: 2024-12-16 14:56:26
|
||||
* @FilePath: \ble_-tyq_-bjq_-ch584-m\bsp\src\bsp_uart.c
|
||||
* @Description:
|
||||
*
|
||||
|
@ -42,7 +42,6 @@ uint8_t uart3_rx_buf[UART3_RX_BUFFER_LENGTH] = {0};
|
|||
uint8_t BtRxTaskId;
|
||||
|
||||
BTFrameData bt_frame = {0};
|
||||
|
||||
/**
|
||||
* @description: 从帧起始符开始到校验码之前所有字节的和的模256,即各字节不计超过255的溢出值的二进制算术和。
|
||||
* @param {uint8_t} *data
|
||||
|
@ -109,7 +108,7 @@ void UART3_FifoInit(void)
|
|||
lwrb_init(&uart3_rx_t, uart3_rx_buf, sizeof(uart3_rx_buf));
|
||||
}
|
||||
|
||||
/*bt接收数据处理*/
|
||||
/*接收到来自报警器的数据处理*/
|
||||
int BSP_Bt_Process(uint8_t *data, uint16_t len)
|
||||
{
|
||||
int ret = 0;
|
||||
|
@ -143,11 +142,10 @@ int BSP_Bt_Process(uint8_t *data, uint16_t len)
|
|||
return 3; //
|
||||
}
|
||||
|
||||
uint8_t rx_sum = data[index + 2 + datalength]; // 读取校验码
|
||||
uint8_t calculated_sum = _CheckSum(&data[0], datalength + 2); // 计算校验码
|
||||
uint8_t rx_sum = data[index + 2 + datalength]; // 读取校验码
|
||||
uint8_t calculated_sum = _CheckSum(&data[index], datalength + 2); // 计算校验码
|
||||
if (rx_sum != calculated_sum)
|
||||
{
|
||||
|
||||
logError("BT 数据帧校验码错误 rx_sum = %02X, calculated_sum = %02X", rx_sum, calculated_sum);
|
||||
logHexDumpAll(data, len);
|
||||
return 4;
|
||||
|
@ -160,47 +158,48 @@ int BSP_Bt_Process(uint8_t *data, uint16_t len)
|
|||
return 5;
|
||||
}
|
||||
// 当程序走到这里时,就说明接收到了正确的数据帧,开始解析命令
|
||||
/*AA + 数据长度 + CMD + ID + 数据(mac) + 校验码 + 结束码*/
|
||||
tmos_memcpy(data_buf, &data[index + 3], datalength);
|
||||
switch (data[index + 2])
|
||||
{
|
||||
case kValveCmdCtr:
|
||||
ret = BSP_Bt_Valve_Ctr(&data_buf[0], datalength);
|
||||
logDebug("recv cmd: 0x01, 执行的动作是关闭阀门");
|
||||
ret = BSP_Bt_Valve_Ctr(&data_buf[0], datalength);
|
||||
break;
|
||||
case kValveCmdReg:
|
||||
ret = BSP_Bt_Register_Valve(&data_buf[0], datalength);
|
||||
logDebug("recv cmd: 0x02, 执行的动作是注册阀门");
|
||||
ret = BSP_Bt_Register_Valve(&data_buf[0], datalength);
|
||||
if (ret == 0)
|
||||
{
|
||||
BSP_Bt_Valve_Resp(kValveCmdReg, CONNECT0_ITEM, valve_list.valve_data[CONNECT0_ITEM].valve_mac, TRUE);
|
||||
BSP_Bt_Valve_Resp(kValveCmdReg, valve_list.valve_data[CONNECT0_ITEM].valve_id, valve_list.valve_data[CONNECT0_ITEM].valve_mac, TRUE);
|
||||
}
|
||||
else
|
||||
{
|
||||
BSP_Bt_Valve_Resp(kValveCmdReg, CONNECT0_ITEM, valve_list.valve_data[CONNECT0_ITEM].valve_mac, FALSE);
|
||||
BSP_Bt_Valve_Resp(kValveCmdReg, valve_list.valve_data[CONNECT0_ITEM].valve_id, valve_list.valve_data[CONNECT0_ITEM].valve_mac, FALSE);
|
||||
}
|
||||
break;
|
||||
case kValveCmdRem:
|
||||
ret = BSP_Bt_Remove_Valve(&data_buf[0], datalength);
|
||||
logDebug("recv cmd: 0x03, 执行的动作是移除阀门");
|
||||
ret = BSP_Bt_Remove_Valve(&data_buf[0], datalength);
|
||||
if (ret == 0)
|
||||
{
|
||||
BSP_Bt_Valve_Resp(kValveCmdRem, CONNECT0_ITEM, valve_list.valve_data[CONNECT0_ITEM].valve_mac, TRUE);
|
||||
BSP_Bt_Valve_Resp(kValveCmdRem, valve_list.valve_data[CONNECT0_ITEM].valve_id, valve_list.valve_data[CONNECT0_ITEM].valve_mac, TRUE);
|
||||
}
|
||||
else
|
||||
{
|
||||
BSP_Bt_Valve_Resp(kValveCmdRem, CONNECT0_ITEM, valve_list.valve_data[CONNECT0_ITEM].valve_mac, FALSE);
|
||||
BSP_Bt_Valve_Resp(kValveCmdRem, valve_list.valve_data[CONNECT0_ITEM].valve_id, valve_list.valve_data[CONNECT0_ITEM].valve_mac, FALSE);
|
||||
}
|
||||
break;
|
||||
case kValveCmdRep:
|
||||
ret = BSP_Bt_Replace_Valve(&data_buf[0], datalength);
|
||||
logDebug("recv cmd: 0x04, 执行的动作是更换阀门");
|
||||
ret = BSP_Bt_Replace_Valve(&data_buf[0], datalength);
|
||||
if (ret == 0)
|
||||
{
|
||||
BSP_Bt_Valve_Resp(kValveCmdRep, CONNECT0_ITEM, valve_list.valve_data[CONNECT0_ITEM].valve_mac, TRUE);
|
||||
BSP_Bt_Valve_Resp(kValveCmdRep, valve_list.valve_data[CONNECT0_ITEM].valve_id, valve_list.valve_data[CONNECT0_ITEM].valve_mac, TRUE);
|
||||
}
|
||||
else
|
||||
{
|
||||
BSP_Bt_Valve_Resp(kValveCmdRep, CONNECT0_ITEM, valve_list.valve_data[CONNECT0_ITEM].valve_mac, FALSE);
|
||||
BSP_Bt_Valve_Resp(kValveCmdRep, valve_list.valve_data[CONNECT0_ITEM].valve_id, valve_list.valve_data[CONNECT0_ITEM].valve_mac, FALSE);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
@ -228,6 +227,7 @@ uint8_t BT_GenerateRawFrame(BTFrameData *pRawData, const uint8_t *p_src, uint8_t
|
|||
pRawData->buf[pRawData->len - 2] = _CheckSum(&pRawData->buf[0], pRawData->len - 2);
|
||||
pRawData->buf[pRawData->len - 1] = 0X55;
|
||||
|
||||
logInfo("BT_GenerateRawFrame");
|
||||
logHexDumpAll(&pRawData->buf[0], pRawData->len);
|
||||
|
||||
return 0;
|
||||
|
@ -294,7 +294,9 @@ uint16_t BSP_Send_Process(uint8_t *pdata)
|
|||
case kCmdOpenVavle:
|
||||
break;
|
||||
case kCmdData:
|
||||
BSP_Bt_Valve_Resp(kValveEventStatus, valve_list.valve_data[0].valve_id, valve_list.valve_data[0].valve_mac, master_rx_buf[3]);
|
||||
valve_list.valve_data[0].valve_connct_status = 1;
|
||||
tmos_memcpy(&valve_list.valve_data[0].valve_switch_status, &master_rx_buf[3], master_rx_buf[2]);
|
||||
BSP_Bt_Valve_Resp(kValveEventStatus, valve_list.valve_data[0].valve_id, valve_list.valve_data[0].valve_mac, 0);
|
||||
break;
|
||||
default:
|
||||
logError("不支持的命令: %d", master_rx_buf[1]);
|
||||
|
@ -316,13 +318,15 @@ uint16_t BT_ProcessEvent(uint8_t task_id, uint16_t events)
|
|||
tmos_msg_deallocate(pMsg);
|
||||
BSP_Send_Process(master_buf);
|
||||
}
|
||||
return (events ^ SYS_EVENT_MSG);
|
||||
}
|
||||
else if (events & BT_START_EVT)
|
||||
{
|
||||
lwrb_reset(&uart1_rx_t);
|
||||
lwrb_reset(&uart1_tx_t);
|
||||
tmos_start_task(task_id, BT_INFO_UPDATA_EVT, 0);
|
||||
tmos_start_task(task_id, BT_REC_EVT, 800);
|
||||
tmos_start_task(task_id, BT_INFO_UPDATA_EVT, 1600);
|
||||
|
||||
return (events ^ BT_START_EVT);
|
||||
}
|
||||
else if (events & BT_REC_EVT)
|
||||
|
@ -359,8 +363,8 @@ void BSP_UART1_Init(void)
|
|||
{
|
||||
/* 配置串口1:先配置IO口模式,再配置串口 */
|
||||
GPIOB_SetBits(BT_UART_TX_PIN);
|
||||
GPIOB_ModeCfg(BT_UART_RX_PIN, GPIO_ModeIN_PU); // RXD-配置上拉输入
|
||||
GPIOB_ModeCfg(BT_UART_TX_PIN, GPIO_ModeOut_PP_5mA); // TXD-配置推挽输出,注意先让IO口输出高电平
|
||||
GPIOA_ModeCfg(BT_UART_RX_PIN, GPIO_ModeIN_PU); // RXD-配置上拉输入
|
||||
GPIOA_ModeCfg(BT_UART_TX_PIN, GPIO_ModeOut_PP_5mA); // TXD-配置推挽输出,注意先让IO口输出高电平
|
||||
UART1_DefInit();
|
||||
UART1_ByteTrigCfg(UART_7BYTE_TRIG);
|
||||
// 中断方式接收数据
|
||||
|
@ -406,7 +410,7 @@ void UART1_IRQHandler(void)
|
|||
{
|
||||
case UART_II_LINE_STAT: // 线路状态错误
|
||||
{
|
||||
UART1_GetLinSTA();
|
||||
UART1_GetLinSTA();
|
||||
break;
|
||||
}
|
||||
case UART_II_RECV_RDY:
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* @Author: mbw
|
||||
* @Date: 2024-12-09 11:40:10
|
||||
* @LastEditors: mbw && 1600520629@qq.com
|
||||
* @LastEditTime: 2024-12-13 15:39:05
|
||||
* @LastEditTime: 2024-12-16 13:15:11
|
||||
* @FilePath: \ble_-tyq_-bjq_-ch584-m\bsp\src\bsp_valve.c
|
||||
* @Description:
|
||||
*
|
||||
|
@ -12,9 +12,9 @@
|
|||
#include "bsp_flash.h"
|
||||
#include "CH58xBLE_LIB.h"
|
||||
#include "bsp_uart.h"
|
||||
#include "bsp_master.h"
|
||||
#include "multiCentral.h"
|
||||
|
||||
|
||||
/*
|
||||
接收的蓝牙从机info:
|
||||
接收数据帧格式: 帧头 + 命令 + 数据长度 + 心跳数据包 + 校验码 + 帧尾
|
||||
|
@ -29,6 +29,7 @@
|
|||
valve_data_list_t valve_list = {0};
|
||||
BTFrameData valve_frame_data = {0};
|
||||
|
||||
|
||||
uint8_t Valve_GenerateRawFrame(BTFrameData *pRawData, const uint8_t cmd, const uint8_t *p_src, uint8_t src_len)
|
||||
{
|
||||
pRawData->len = src_len + 5;
|
||||
|
@ -44,7 +45,9 @@ uint8_t Valve_GenerateRawFrame(BTFrameData *pRawData, const uint8_t cmd, const u
|
|||
}
|
||||
pRawData->buf[pRawData->len - 2] = _CheckSum(&pRawData->buf[0], pRawData->len - 2);
|
||||
pRawData->buf[pRawData->len - 1] = 0X55;
|
||||
logInfo("向从机发送的数据:");
|
||||
logHexDumpAll(pRawData->buf, pRawData->len);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -99,9 +102,8 @@ int BSP_Bt_Valve_Ctr(uint8_t *data, uint8_t len)
|
|||
/*注册阀门信息*/
|
||||
int BSP_Bt_Register_Valve(uint8_t *data, uint8_t len)
|
||||
{
|
||||
|
||||
size_t i = 0;
|
||||
uint8_t mac_addr[FLASH_MAC_INFO_LEN] = {0};
|
||||
|
||||
if ((data[0] >= 1) && (data[0] <= 8))
|
||||
{
|
||||
Flash_Get_Mac_Addr(mac_addr, data[0] - 1);
|
||||
|
@ -112,24 +114,35 @@ int BSP_Bt_Register_Valve(uint8_t *data, uint8_t len)
|
|||
|
||||
return 1;
|
||||
}
|
||||
for (; i < FLASH_MAC_INFO_LEN; i++)
|
||||
logDebug("注册阀门信息:");
|
||||
if (tmos_memcmp(&data[1], mac_addr, FLASH_MAC_INFO_LEN) == TRUE)
|
||||
{
|
||||
if (mac_addr[i] != 0xFF)
|
||||
break;
|
||||
}
|
||||
if (i == FLASH_MAC_INFO_LEN) // 说明此处未写入数据,那就在此处写入注册MAC地址
|
||||
{
|
||||
if (Flash_Set_Mac_Addr(&data[1], data[0] - 1) != 0)
|
||||
{
|
||||
logError("register valve error");
|
||||
return 2;
|
||||
}
|
||||
tmos_start_task(BtRxTaskId, BT_INFO_UPDATA_EVT, 0);
|
||||
logError("已经注册过了");
|
||||
return 2; // 说明已经注册过了
|
||||
}
|
||||
else
|
||||
{
|
||||
logError("valve info has been registered"); // 这个ID号已经注册了
|
||||
return 3;
|
||||
if (tmos_isbufset(&mac_addr[0], 0xFF, 6) == TRUE) // 说明没有数据,那就全部写入
|
||||
{
|
||||
logDebug("没有数据,全部写入:");
|
||||
logDebug("写入MAC 地址: %02X %02X %02X %02X %02X %02X", data[1], data[2], data[3], data[4], data[5], data[6]);
|
||||
if (Flash_Set_Mac_Addr(&data[1], data[0] - 1) != 0)
|
||||
{
|
||||
logError("阀门注册写入flash 错误");
|
||||
return 3;
|
||||
}
|
||||
else
|
||||
{
|
||||
BSP_Bt_Valve_Updata(); // 更新阀门信息
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
logDebug("有数据 请检查");
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -138,9 +151,9 @@ int BSP_Bt_Register_Valve(uint8_t *data, uint8_t len)
|
|||
/*移除阀门信息*/
|
||||
int BSP_Bt_Remove_Valve(uint8_t *data, uint8_t len)
|
||||
{
|
||||
size_t i = 0;
|
||||
uint8_t mac_addr[FLASH_MAC_INFO_LEN] = {0};
|
||||
if ((data[0] >= 1) && (data[0] <= 8))
|
||||
size_t i = 0;
|
||||
uint8_t mac_addr[FLASH_MAC_INFO_LEN + 2] = {0};
|
||||
if ((data[0] >= 1) && (data[0] <= 8))// 判断是否是正确的ID
|
||||
{
|
||||
Flash_Get_Mac_Addr(mac_addr, data[0] - 1);
|
||||
}
|
||||
|
@ -149,26 +162,23 @@ int BSP_Bt_Remove_Valve(uint8_t *data, uint8_t len)
|
|||
logError("valve id error");
|
||||
return -1;
|
||||
}
|
||||
for (; i < FLASH_MAC_INFO_LEN; i++)
|
||||
if (tmos_memcmp(&data[1], mac_addr, FLASH_MAC_INFO_LEN) != TRUE)// 判断是否是相同的MAC地址
|
||||
{
|
||||
if (mac_addr[i] != data[i + 1])
|
||||
break;
|
||||
logError("mac addr error");
|
||||
return -2;
|
||||
}
|
||||
if (i == FLASH_MAC_INFO_LEN) // 说明MAC地址没问题,那么就将其擦除
|
||||
else
|
||||
{
|
||||
tmos_memset(mac_addr, 0xFF, FLASH_MAC_INFO_LEN);
|
||||
if (Flash_Set_Mac_Addr(mac_addr, data[0] - 1) != 0)
|
||||
if (Flash_Set_Mac_Addr(mac_addr, data[0] - 1) != 0) // 清空掉对应位置MAC数据
|
||||
{
|
||||
logError("移除阀门信息失败");
|
||||
return -2;
|
||||
}
|
||||
tmos_start_task(BtRxTaskId, BT_INFO_UPDATA_EVT, 10);
|
||||
}
|
||||
else
|
||||
{
|
||||
logError("valve mac addr error"); // 这个ID号已经注册了,
|
||||
return -3;
|
||||
BSP_Bt_Valve_Updata();
|
||||
Master_DisConnect();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -177,8 +187,10 @@ int BSP_Bt_Replace_Valve(uint8_t *data, uint8_t len)
|
|||
{
|
||||
size_t i = 0;
|
||||
uint8_t mac_addr[FLASH_MAC_INFO_LEN] = {0};
|
||||
if ((len == 0) || (len < 12))
|
||||
|
||||
if ((len == 0) || (len < 13))//新旧MAC地址长度加id 6 + 6 + 1 = 13至少要大于12
|
||||
{
|
||||
logError("data len error");
|
||||
return -1;
|
||||
}
|
||||
if ((data[0] >= 1) && (data[0] <= 8))
|
||||
|
@ -190,25 +202,21 @@ int BSP_Bt_Replace_Valve(uint8_t *data, uint8_t len)
|
|||
logError("valve id error");
|
||||
return -2;
|
||||
}
|
||||
for (; i < FLASH_MAC_INFO_LEN; i++)
|
||||
if (tmos_memcmp(&data[1], mac_addr, FLASH_MAC_INFO_LEN) == TRUE)
|
||||
{
|
||||
if (mac_addr[i] != data[i + 1])
|
||||
break;
|
||||
logError("已经注册过了"); // 不需要重复写入
|
||||
return 2; // 说明已经注册过了
|
||||
}
|
||||
if (i == FLASH_MAC_INFO_LEN) // 说明MAC地址没问题
|
||||
else
|
||||
{
|
||||
tmos_memset(mac_addr, 0xFF, FLASH_MAC_INFO_LEN);
|
||||
if (Flash_Set_Mac_Addr(mac_addr, data[0] - 1) != 0)
|
||||
if (Flash_Set_Mac_Addr(&data[1], data[0] - 1) != 0)
|
||||
{
|
||||
logError("擦除阀门信息失败");
|
||||
return -3;
|
||||
logError("阀门注册写入flash 错误");
|
||||
return 3;
|
||||
}
|
||||
if (Flash_Set_Mac_Addr(&data[7], data[0] - 1) != 0)
|
||||
{
|
||||
logError("更换阀门信息失败");
|
||||
return -4;
|
||||
}
|
||||
tmos_start_task(BtRxTaskId, BT_INFO_UPDATA_EVT, 10);
|
||||
BSP_Bt_Valve_Updata(); // 更新阀门信息
|
||||
|
||||
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
@ -218,53 +226,64 @@ void BSP_Bt_Valve_Updata(void)
|
|||
{
|
||||
uint8_t cnt = 0;
|
||||
uint8_t mac[6] = {0};
|
||||
|
||||
uint8_t num = Flash_Get_Valve_Num();
|
||||
logInfo("BSP_Bt_Valve_Updata num: %d ", num);
|
||||
|
||||
tmos_memset(&valve_list, 0, sizeof(valve_data_list_t));
|
||||
|
||||
for (int i = 0; i < MAX_VALVE_NUM; i++) // 这个循环是为了将数据拷贝到valve_list中, 并且保证id号和flash对应起来
|
||||
{
|
||||
if (Flash_Get_Mac_Addr(mac, i) == 0)
|
||||
if (Flash_Get_Mac_Addr(mac, i) == 0) // 说明有MAC数据
|
||||
{
|
||||
if (tmos_isbufset(mac, 0xFF, 6) == FALSE) // 不是默认值
|
||||
{
|
||||
tmos_memcpy(valve_list.valve_data[cnt].valve_mac, mac, 6); // 这样做的目的就是读取方便,只需要根据flash中读取到的数量进行读取前N个值
|
||||
valve_list.valve_data[cnt].valve_id = i + 1;
|
||||
logDebug("updata valve_id: %d, valve_mac: %02X %02X %02X %02X %02X %02X",
|
||||
valve_list.valve_data[cnt].valve_id,
|
||||
valve_list.valve_data[cnt].valve_mac[0],
|
||||
valve_list.valve_data[cnt].valve_mac[1],
|
||||
valve_list.valve_data[cnt].valve_mac[2],
|
||||
valve_list.valve_data[cnt].valve_mac[3],
|
||||
valve_list.valve_data[cnt].valve_mac[4],
|
||||
valve_list.valve_data[cnt].valve_mac[5]);
|
||||
cnt++;
|
||||
valve_list.valve_num = cnt;
|
||||
}
|
||||
else
|
||||
{
|
||||
tmos_memset(&valve_list.valve_data[i], 0, sizeof(struct valve_data));
|
||||
}
|
||||
tmos_memcpy(valve_list.valve_data[cnt].valve_mac, mac, 6); // 这样做的目的就是读取方便,只需要根据flash中读取到的数量进行读取前N个值
|
||||
valve_list.valve_data[cnt].valve_id = i + 1;
|
||||
logDebug("updata valve_id: %d, valve_mac: %02X %02X %02X %02X %02X %02X",
|
||||
valve_list.valve_data[cnt].valve_id,
|
||||
valve_list.valve_data[cnt].valve_mac[0],
|
||||
valve_list.valve_data[cnt].valve_mac[1],
|
||||
valve_list.valve_data[cnt].valve_mac[2],
|
||||
valve_list.valve_data[cnt].valve_mac[3],
|
||||
valve_list.valve_data[cnt].valve_mac[4],
|
||||
valve_list.valve_data[cnt].valve_mac[5]);
|
||||
cnt++;
|
||||
valve_list.valve_num = cnt;
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
logError("BSP_Bt_Valve_Updata: flash read error");
|
||||
break;
|
||||
}
|
||||
}
|
||||
Flash_Set_Valve_Num(valve_list.valve_num);
|
||||
|
||||
}
|
||||
|
||||
int BSP_Bt_Valve_Resp(uint8_t cmd, uint8_t id, uint8_t *mac_addr, uint8_t state)
|
||||
{
|
||||
uint8_t ret = 0;
|
||||
|
||||
BtData_t *ptr = (BtData_t *)tmos_msg_allocate(sizeof(BtData_t) + 8);
|
||||
ptr->cmd = kValveCmdRem;
|
||||
ptr->buf[0] = id;
|
||||
tmos_memcpy(&ptr->buf[1], mac_addr, 6);
|
||||
ptr->buf[7] = state;
|
||||
BT_GenerateRawFrame(&valve_frame_data, (uint8_t *)ptr, 8);
|
||||
uint8_t ret = 0;
|
||||
BtData_t *ptr = (BtData_t *)tmos_msg_allocate(sizeof(struct valve_data));
|
||||
ptr->cmd = cmd;
|
||||
switch (cmd)
|
||||
{
|
||||
case kValveCmdCtr:
|
||||
case kValveCmdReg:
|
||||
case kValveCmdRem:
|
||||
case kValveCmdRep:
|
||||
ptr->buf[0] = id;
|
||||
tmos_memcpy(&ptr->buf[1], mac_addr, 6);
|
||||
ptr->buf[7] = state;
|
||||
BT_GenerateRawFrame(&valve_frame_data, (uint8_t *)ptr, 9);
|
||||
break;
|
||||
case kValveEventStatus:
|
||||
tmos_memcpy(&ptr->buf[0], &valve_list.valve_data[id - 1], sizeof(struct valve_data));
|
||||
BT_GenerateRawFrame(&valve_frame_data, (uint8_t *)ptr, sizeof(struct valve_data));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
tmos_msg_deallocate((uint8_t *)ptr);
|
||||
|
||||
ret = BSP_Uart1_Send_Data((uint8_t *)&valve_frame_data.buf[0], valve_frame_data.len);
|
||||
tmos_start_task(BtRxTaskId, BT_SEND_EVT, 50);
|
||||
if (ret == valve_frame_data.len)
|
||||
|
@ -274,47 +293,9 @@ int BSP_Bt_Valve_Resp(uint8_t cmd, uint8_t id, uint8_t *mac_addr, uint8_t state)
|
|||
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
void BSP_Valve_Init(void)
|
||||
{
|
||||
uint8_t cnt = 0;
|
||||
uint8_t mac[6] = {0};
|
||||
uint8_t num = Flash_Get_Valve_Num();
|
||||
logInfo("num: %d", num);
|
||||
|
||||
logInfo("BSP_Valve_Init");
|
||||
valve_list.valve_num = num;
|
||||
for (int i = 0; i < MAX_VALVE_NUM; i++) // 这个循环是为了将数据拷贝到valve_list中, 并且保证id号和flash对应起来
|
||||
{
|
||||
if (num > 0)
|
||||
{
|
||||
if (Flash_Get_Mac_Addr(mac, i) == 0)
|
||||
{
|
||||
if (tmos_isbufset(mac, 0xFF, 6) == FALSE) // 不是默认值
|
||||
{
|
||||
tmos_memcpy(valve_list.valve_data[cnt].valve_mac, mac, 6); // 这样做的目的就是读取方便,只需要根据flash中读取到的数量进行读取前N个值
|
||||
valve_list.valve_data[cnt].valve_id = i + 1;
|
||||
logDebug("updata valve_id: %d, valve_mac: %02X %02X %02X %02X %02X %02X",
|
||||
valve_list.valve_data[cnt].valve_id,
|
||||
valve_list.valve_data[cnt].valve_mac[0],
|
||||
valve_list.valve_data[cnt].valve_mac[1],
|
||||
valve_list.valve_data[cnt].valve_mac[2],
|
||||
valve_list.valve_data[cnt].valve_mac[3],
|
||||
valve_list.valve_data[cnt].valve_mac[4],
|
||||
valve_list.valve_data[cnt].valve_mac[5]);
|
||||
cnt++;
|
||||
valve_list.valve_num = cnt;
|
||||
}
|
||||
else
|
||||
{
|
||||
tmos_memset(&valve_list.valve_data[i], 0, sizeof(struct valve_data));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
logError("BSP_Bt_Valve_Updata: flash read error");
|
||||
}
|
||||
}
|
||||
}
|
||||
logInfo("BSP_Valve_Init end");
|
||||
logDebug("BSP_Valve_Init");
|
||||
BSP_Bt_Valve_Updata();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue