Skip to content

Commit e489157

Browse files
committed
Исправлены OTA обновления для 1000000 (буфера не хватало при сильно пустых (много нулей) блоках прошивки)
Заодно починился бэкап/восстановление на той же лимонной скорости, даже не в дебаг версии. Fix UART tx and rx queue size то MAX_PACKET_SIZE Случайно перенесено из зигаты: fix bindgroup command + change version Added fields for 0x8030, 0x8031. Both responses now include source endpoint, addressmode and short address. fairecasoimeme/ZiGate#161 Proposed by @VOVAiS Tested by @VOVAiS Confirmed by @VOVAiS
1 parent 4b40aec commit e489157

File tree

4 files changed

+50
-42
lines changed

4 files changed

+50
-42
lines changed

Source/ZigbeeNodeControlBridge/app_Znc_cmds.c

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,7 @@ PUBLIC void APP_vProcessIncomingSerialCommands ( uint8 u8RxByte )
311311
uint8 u8Status = 0;
312312
uint16 u16TargetAddress;
313313
tsZCL_Address sAddress;
314-
uint8 au8values[4];
314+
uint8 au8values[5];
315315
uint8 u8Length = 0;
316316
#ifdef FULL_FUNC_DEVICE
317317
tsBDB_ZCLEvent sEvent;
@@ -884,10 +884,15 @@ PUBLIC void APP_vProcessIncomingSerialCommands ( uint8 u8RxByte )
884884
u8SrcEp = au8LinkRxBuffer[ offset++ ];
885885
u16Clusterid = ZNC_RTN_U16_OFFSET ( au8LinkRxBuffer , offset, offset );
886886
u8DstAddrMode = au8LinkRxBuffer[ offset++ ];
887-
uDstAddress.u64Addr = ZNC_RTN_U64_OFFSET ( au8LinkRxBuffer , offset, offset );
887+
888+
if(u8DstAddrMode == 0x1)
889+
{
890+
uDstAddress.u16Addr = ZNC_RTN_U16_OFFSET( au8LinkRxBuffer , offset , offset);
888891

889-
if(u8DstAddrMode == 0x3)
892+
}else
893+
if(u8DstAddrMode == 0x3)
890894
{
895+
uDstAddress.u64Addr = ZNC_RTN_U64_OFFSET ( au8LinkRxBuffer , offset, offset );
891896
u8DstEp = au8LinkRxBuffer [ offset++ ] ;
892897
}
893898

Source/ZigbeeNodeControlBridge/app_general_events_handler.c

Lines changed: 31 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -852,42 +852,38 @@ PUBLIC void APP_vHandleStackEvents ( ZPS_tsAfEvent* psStackEvent )
852852
}
853853
break;
854854

855+
case ZPS_ZDP_BIND_RSP_CLUSTER_ID:
856+
ZNC_BUF_U8_UPD ( &au8LinkTxBuffer [u16Length], sApsZdpEvent.uZdpData.sUnbindRsp.u8Status, u16Length );
857+
ZNC_BUF_U8_UPD ( &au8LinkTxBuffer [u16Length], psStackEvent->uEvent.sApsDataIndEvent.u8SrcEndpoint, u16Length );
858+
ZNC_BUF_U8_UPD ( &au8LinkTxBuffer [u16Length], psStackEvent->uEvent.sApsDataIndEvent.u8SrcAddrMode, u16Length );
859+
ZNC_BUF_U16_UPD ( &au8LinkTxBuffer [u16Length], psStackEvent->uEvent.sApsDataIndEvent.uSrcAddress.u16Addr, u16Length );
860+
vSL_WriteMessage ( E_SL_MSG_BIND_RESPONSE,
861+
u16Length,
862+
au8LinkTxBuffer,
863+
u8LinkQuality );
864+
break;
865+
866+
case ZPS_ZDP_UNBIND_RSP_CLUSTER_ID:
867+
ZNC_BUF_U8_UPD ( &au8LinkTxBuffer [u16Length], sApsZdpEvent.uZdpData.sUnbindRsp.u8Status, u16Length );
868+
ZNC_BUF_U8_UPD ( &au8LinkTxBuffer [u16Length], psStackEvent->uEvent.sApsDataIndEvent.u8SrcEndpoint, u16Length );
869+
ZNC_BUF_U8_UPD ( &au8LinkTxBuffer [u16Length], psStackEvent->uEvent.sApsDataIndEvent.u8SrcAddrMode, u16Length );
870+
ZNC_BUF_U16_UPD ( &au8LinkTxBuffer [u16Length], psStackEvent->uEvent.sApsDataIndEvent.uSrcAddress.u16Addr, u16Length );
871+
vSL_WriteMessage ( E_SL_MSG_UNBIND_RESPONSE,
872+
u16Length,
873+
au8LinkTxBuffer,
874+
u8LinkQuality );
875+
break;
876+
877+
case ZPS_ZDP_MGMT_PERMIT_JOINING_RSP_CLUSTER_ID:
878+
ZNC_BUF_U8_UPD ( &au8LinkTxBuffer [u16Length], sApsZdpEvent.uZdpData.sPermitJoiningRsp.u8Status, u16Length );
879+
vSL_WriteMessage ( E_SL_MSG_PERMIT_JOINING_RESPONSE,
880+
u16Length,
881+
au8LinkTxBuffer,
882+
u8LinkQuality );
883+
break;
884+
855885
default:
856-
{
857-
ZNC_BUF_U8_UPD ( &au8LinkTxBuffer [u16Length] , sApsZdpEvent.uZdpData.sUnbindRsp.u8Status, u16Length );
858-
switch ( sApsZdpEvent.u16ClusterId )
859-
{
860-
case ZPS_ZDP_BIND_RSP_CLUSTER_ID:
861-
vSL_WriteMessage ( E_SL_MSG_BIND_RESPONSE,
862-
u16Length,
863-
au8LinkTxBuffer,
864-
u8LinkQuality );
865-
break;
866-
867-
case ZPS_ZDP_UNBIND_RSP_CLUSTER_ID:
868-
vSL_WriteMessage ( E_SL_MSG_UNBIND_RESPONSE,
869-
u16Length,
870-
au8LinkTxBuffer,
871-
u8LinkQuality );
872-
break;
873-
case ZPS_ZDP_MGMT_LEAVE_RSP_CLUSTER_ID:
874-
vSL_WriteMessage ( E_SL_MSG_MANAGEMENT_LEAVE_RESPONSE,
875-
u16Length,
876-
au8LinkTxBuffer,
877-
u8LinkQuality );
878-
break;
879-
880-
case ZPS_ZDP_MGMT_PERMIT_JOINING_RSP_CLUSTER_ID:
881-
vSL_WriteMessage ( E_SL_MSG_PERMIT_JOINING_RESPONSE,
882-
u16Length,
883-
au8LinkTxBuffer,
884-
u8LinkQuality );
885-
break;
886-
default:
887-
break;
888-
}
889-
}
890-
break;
886+
break;
891887
}
892888
}
893889
}

Source/ZigbeeNodeControlBridge/app_start.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -160,8 +160,8 @@ uint8 u8GPZCLTimerEvent;
160160
#define MCPS_QUEUE_SIZE 20
161161
#define ZPS_QUEUE_SIZE 2
162162
#define APP_QUEUE_SIZE 8
163-
#define TX_QUEUE_SIZE 150
164-
#define RX_QUEUE_SIZE 150
163+
#define TX_QUEUE_SIZE MAX_PACKET_SIZE
164+
#define RX_QUEUE_SIZE MAX_PACKET_SIZE
165165
#define BDB_QUEUE_SIZE 2
166166
#define APP_NUM_STD_TMRS 4
167167

Source/ZigbeeNodeControlBridge/app_zcl_event_handler.c

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,13 @@ void APP_vHandleZclEvents ( ZPS_tsAfEvent* psStackEvent )
259259
ZNC_BUF_U8_UPD ( &au8LinkTxBuffer [u16Length], psStackEvent->uEvent.sApsDataConfirmEvent.u8SrcEndpoint, u16Length );
260260
ZNC_BUF_U8_UPD ( &au8LinkTxBuffer [u16Length], psStackEvent->uEvent.sApsDataConfirmEvent.u8DstEndpoint, u16Length );
261261
ZNC_BUF_U8_UPD ( &au8LinkTxBuffer [u16Length], psStackEvent->uEvent.sApsDataConfirmEvent.u8DstAddrMode, u16Length );
262-
ZNC_BUF_U64_UPD ( &au8LinkTxBuffer [u16Length], psStackEvent->uEvent.sApsDataConfirmEvent.uDstAddr.u64Addr, u16Length );
262+
if (psStackEvent->uEvent.sApsDataConfirmEvent.u8DstAddrMode == 0x03)
263+
{
264+
ZNC_BUF_U64_UPD ( &au8LinkTxBuffer [u16Length], psStackEvent->uEvent.sApsDataConfirmEvent.uDstAddr.u64Addr, u16Length );
265+
}else
266+
{
267+
ZNC_BUF_U16_UPD ( &au8LinkTxBuffer [u16Length], psStackEvent->uEvent.sApsDataConfirmEvent.uDstAddr.u16Addr, u16Length );
268+
}
263269
ZNC_BUF_U8_UPD ( &au8LinkTxBuffer [u16Length], psStackEvent->uEvent.sApsDataConfirmEvent.u8SequenceNum, u16Length );
264270
vSL_WriteMessage ( E_SL_MSG_APS_DATA_CONFIRM_FAILED,
265271
u16Length,
@@ -382,6 +388,7 @@ PRIVATE void APP_ZCL_cbEndpointCallback ( tsZCL_CallBackEvent* psEvent )
382388
}
383389
else
384390
{
391+
vLog_Printf(TRACE_ZCL, LOG_DEBUG, "DROP EVT: status 0x%02x addr 0x%04x\r\n", psEvent->eZCL_Status , psEvent->pZPSevent->uEvent.sApsDataIndEvent.uSrcAddress.u16Addr);
385392
return;
386393
}
387394
}
@@ -397,7 +404,7 @@ PRIVATE void APP_ZCL_cbEndpointCallback ( tsZCL_CallBackEvent* psEvent )
397404
case E_ZCL_CBET_READ_ATTRIBUTES_RESPONSE:
398405
case E_ZCL_CBET_TIMER:
399406
case E_ZCL_CBET_ZIGBEE_EVENT:
400-
vLog_Printf(TRACE_ZCL, LOG_DEBUG, "EP EVT:No action\r\n", psEvent->eZCL_Status );
407+
vLog_Printf(TRACE_ZCL, LOG_DEBUG, "EP EVT:No action 0x%02x\r\n", psEvent->eZCL_Status );
401408
break;
402409

403410
case E_ZCL_CBET_ERROR:

0 commit comments

Comments
 (0)