From 9aed5d7e7b3c7bf09da712e9c272ece401a7acc9 Mon Sep 17 00:00:00 2001
From: QuakeGod <QuakeGod@sina.com>
Date: 星期一, 25 十一月 2024 14:51:23 +0800
Subject: [PATCH] add UltraSonic and MultiWireLess

---
 Radio_LLCC68/Radio/KWireLess.c |  334 +++++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 261 insertions(+), 73 deletions(-)

diff --git a/Radio_LLCC68/Radio/KWireLess.c b/Radio_LLCC68/Radio/KWireLess.c
index 7707420..184a407 100644
--- a/Radio_LLCC68/Radio/KWireLess.c
+++ b/Radio_LLCC68/Radio/KWireLess.c
@@ -113,7 +113,7 @@
  */
 #define MASTER_RX_TIMEOUT_VALUE                 80			//mS
 #define SLAVE_RX_TIMEOUT_VALUE                  400			//mS
-#define CYCLE_TIME															120			//mS
+#define CYCLE_TIME															80			//mS
 
 const stWLConfig defaultWLConfig =
 {
@@ -159,8 +159,8 @@
 
 
 
-#define WL_RX_BUFFER_SIZE         										256 						// Define the payload size here
-#define WL_TX_BUFFER_SIZE         										128 						// Define the payload size here
+#define WL_RX_BUFFER_SIZE         										160 						// Define the payload size here
+#define WL_TX_BUFFER_SIZE         										160 						// Define the payload size here
 
 uint16_t nTimeOnAir;
 /*
@@ -169,9 +169,10 @@
 */
 
 //uint16_t BufferSize = BUFFER_SIZE;
-uint8_t RX_Buffer[WL_RX_BUFFER_SIZE];
-uint8_t TX_Buffer[WL_TX_BUFFER_SIZE];
+uint8_t KwRx_Buffer[WL_RX_BUFFER_SIZE];
+uint8_t KwTx_Buffer[WL_TX_BUFFER_SIZE];
 
+#define WL_TT_EACH_SIZE																64						// transparent transmission byte size for each send
 
 
 States_t State = LOWPOWER;
@@ -385,7 +386,7 @@
 {
 		KMem.WDT[44] = size;
 		if (size <= 120) {
-			memcpy( RX_Buffer, payload, size );	
+			memcpy( KwRx_Buffer, payload, size );	
 			memcpy(&KMem.WDT[64],payload,size);
 		}else
 		{
@@ -535,12 +536,13 @@
 	}
 	return;
 }
+
 int KWLMasterParsePkt(int nChn,int size)
 {
 	bool CRC_OK =1;
 ///*		
-	crc_value=RadioComputeCRC(RX_Buffer,size-2,CRC_TYPE_IBM);//璁$畻寰楀嚭瑕佸彂閫佹暟鎹寘CRC鍊�
-	if (RX_Buffer[size-2] != (crc_value&0xff) && RX_Buffer[size-1] != (crc_value >> 8))
+	crc_value=RadioComputeCRC(KwRx_Buffer,size-2,CRC_TYPE_IBM);//璁$畻寰楀嚭瑕佸彂閫佹暟鎹寘CRC鍊�
+	if (KwRx_Buffer[size-2] != (crc_value&0xff) && KwRx_Buffer[size-1] != (crc_value >> 8))
 	{
 		KwRunStat.CRCErr++;
 		KwRunStat.ErrStat=500;
@@ -549,7 +551,7 @@
 		CRC_OK = 1;
 	}	
 //*/	
-	pstKLPacket p1 = (pstKLPacket) RX_Buffer;
+	pstKwPacket p1 = (pstKwPacket) KwRx_Buffer;
       if(CRC_OK && p1->STSign == enRplySign ) //memcmp(RX_Buffer,PongMsg,4)==0 
       {
 				if (p1->DstAddr == MixAddr(WLCfg.nChannel,WLCfg.nRadioAddr))
@@ -561,8 +563,8 @@
 						KwRunStat.CtnLstPkts=0;						
 						
 						if (p1->Stat==0) {
-							KwRunStat.tRSSI = RX_Buffer[10];
-							KwRunStat.tSNR = RX_Buffer[11];
+							KwRunStat.tRSSI = KwRx_Buffer[10];
+							KwRunStat.tSNR = KwRx_Buffer[11];
 							if (KwRunStat.tRSSI > -50) {
 								if (KwRunStat.Tx_Power > 0) {KwRunStat.Tx_Power--; SX126xSetRfTxPower(KwRunStat.Tx_Power);}
 							}else if (KwRunStat.tRSSI < -60) {
@@ -572,18 +574,94 @@
 							}
 							
 						}else if (p1->Stat==1){
-							KwRunStat.targetSentCount = RX_Buffer[8] + (RX_Buffer[9]<<8) + (RX_Buffer[10]<<16) + (RX_Buffer[11]<<24);
+							KwRunStat.targetSentCount = KwRx_Buffer[8] + (KwRx_Buffer[9]<<8) + (KwRx_Buffer[10]<<16) + (KwRx_Buffer[11]<<24);
 						}else if (p1->Stat==2) {
-							KwRunStat.targetRecvdCount = RX_Buffer[8] + (RX_Buffer[9]<<8) + (RX_Buffer[10]<<16) + (RX_Buffer[11]<<24);
+							KwRunStat.targetRecvdCount = KwRx_Buffer[8] + (KwRx_Buffer[9]<<8) + (KwRx_Buffer[10]<<16) + (KwRx_Buffer[11]<<24);
 						}else if (p1->Stat==3) {
 						}
 
 							KMem.WDT[41]=(-KwRunStat.tRSSI) + ((-KwRunStat.tSNR)<<8);
 
-							KMem.WFX[1]=(RX_Buffer[4]) + (RX_Buffer[5]<<8);
+							KMem.WFX[1]=(KwRx_Buffer[4]) + (KwRx_Buffer[5]<<8);
 					//		KMem.WFX[1]=(RX_Buffer[4]) + (indicator3<<8);
 						
-							KMem.WFX[2]=(RX_Buffer[6]) + (RX_Buffer[7]<<8);
+							KMem.WFX[2]=(KwRx_Buffer[6]) + (KwRx_Buffer[7]<<8);
+						
+// 鏁版嵁閫忎紶  鏁版嵁鐨勫彂閫佹垚鍔熶笌鍚︼紝闇�瑕佸湪瀵规柟鐨勫簲绛斿寘涓‘璁�
+						if (KwRunStat.sizesending > 0) {			
+							//  纭姝e湪鍙戦�佺殑锛屽彂閫佹垚鍔�
+							KwRunStat.sentsize += KwRunStat.sizesending;
+							KwRunStat.sizesending = 0;
+							
+							if (KwRunStat.sentsize >= KwRunStat.sizetosend) {
+								//鏁翠綋 鍙戦�佸畬鎴�
+								KwRunStat.sizetosend =0;
+								KwRunStat.sentsize = 0;
+								KwRunStat.ttAirSize = 0;
+								// 鍙戦�佸畬鎴�
+							}
+						}	
+// 鎺ュ彈鍒板鏂瑰彂鏉ョ殑鏁版嵁
+
+						if (p1->bHasData && size >= 14+3 ) {
+//							int nFulllen1 = KwRx_Buffer[12];
+							int nthislen2 = KwRx_Buffer[13];
+							if (size >= 14 + nthislen2) {
+								if (p1->bHead) {
+									// 鏁版嵁鍖呯殑璧峰锛� 涓�涓柊鐨勬暟鎹寘鐨勫紑濮�
+									KwRunStat.ttRxSize = 0;
+//									SendPacket(1, "H", 1);
+									
+								}
+								memcpy (KwRunStat.ttRxBuf1 + KwRunStat.ttRxSize , KwRx_Buffer + 14 , nthislen2);
+								KwRunStat.ttRxSize += nthislen2;
+								if (p1->bTail) 
+									{
+									// 宸茬粡鏀跺埌瀹屾暣鐨勪竴涓暟鎹寘
+									KwRunStat.ttRxRecved =1;
+									KwRunStat.ErrStat=500;						
+//									SendPacket(1, "T", 1);
+									
+									// 鍚庣画鏁版嵁鍖呭鐞嗘祦绋� ;
+								 if (Uart1Mode == 1) {		// 澶勪簬閫忎紶妯″紡锛� 鏁版嵁鍙戝洖鍘汇��
+										SendPacket(1, KwRunStat.ttRxBuf1, KwRunStat.ttRxSize);
+								 }
+									KwRunStat.ttRxSize = 0;
+									KwRunStat.ttRxRecved = 0;									 
+								 
+									// 鏆傛椂娴佺▼锛屽叏閮ㄥ彂鍥炲幓銆�
+//									memcpy (KwRunStat.ttTxBuf1, KwRunStat.ttRxBuf1, KwRunStat.ttRxSize);
+//									KwRunStat.sizetosend = KwRunStat.ttRxSize;
+//									KwRunStat.sentsize = 0;
+//									KwRunStat.sizesending = 0;
+								}
+
+							}
+						}
+
+/*
+
+
+						
+						if (KwRunStat.ttAirSize > 0)
+						{
+							if (KwRunStat.bttAirHeader) {	KwRunStat.ttRxRecved=0;	}
+							memcpy(KwRunStat.ttRxBuf1 + KwRunStat.ttRxRecved,KwRunStat.ttAirBuf, KwRunStat.ttAirSize);
+							KwRunStat.ttRxRecved += KwRunStat.ttAirSize;
+							
+							if (KwRunStat.bttAirTail) {
+								// 鏀跺埌	涓�涓暟鎹寘鐨勬渶鍚庨儴鍒�	
+									KwRunStat.ttRxSize = KwRunStat.ttRxRecved;
+								 if (Uart1Mode == 1) {		// 澶勪簬閫忎紶妯″紡锛� 鏁版嵁鍙戝洖鍘汇��
+										SendPacket(1, KwRunStat.ttRxBuf1, KwRunStat.ttRxSize);
+								 }
+								KwRunStat.ttRxSize = 0;
+								KwRunStat.ttRxRecved = 0;
+							}
+							KwRunStat.ttAirSize = 0;
+						}
+*/						
+						
 					}
       }
 	
@@ -592,10 +670,10 @@
 int KWLSlaveParsePkt(int nChn,int size)
 {
 		bool CRC_OK =1;
-	pstKLPacket p1 = (pstKLPacket) RX_Buffer;	
+	pstKwPacket p1 = (pstKwPacket) KwRx_Buffer;	
 ///*		
-	crc_value=RadioComputeCRC(RX_Buffer,size-2,CRC_TYPE_IBM);//璁$畻寰楀嚭瑕佸彂閫佹暟鎹寘CRC鍊�
-	if (RX_Buffer[size-2] != (crc_value&0xff) && RX_Buffer[size-1] != (crc_value >> 8))
+	crc_value=RadioComputeCRC(KwRx_Buffer,size-2,CRC_TYPE_IBM);//璁$畻寰楀嚭瑕佸彂閫佹暟鎹寘CRC鍊�
+	if (KwRx_Buffer[size-2] != (crc_value&0xff) && KwRx_Buffer[size-1] != (crc_value >> 8))
 	{
 		KwRunStat.CRCErr++;
 //		KwRunStat.ErrStat=500;
@@ -620,10 +698,10 @@
 				KwRunStat.lastRecvdtime=GetTick();
 				KwRunStat.lastAckTime = GetTick();				
 				KwRunStat.CtnLstPkts=0;
-				
-				if (p1->Stat==0) {
-					KwRunStat.tRSSI = RX_Buffer[10];
-					KwRunStat.tSNR = RX_Buffer[11];
+				int nSeq = p1->nSeq;
+				if (nSeq==0) {
+					KwRunStat.tRSSI = KwRx_Buffer[10];
+					KwRunStat.tSNR = KwRx_Buffer[11];
 							if (KwRunStat.tRSSI > -50) {
 								if (KwRunStat.Tx_Power > 0) {KwRunStat.Tx_Power--; SX126xSetRfTxPower(KwRunStat.Tx_Power);}
 							}else if (KwRunStat.tRSSI < -60) {
@@ -631,17 +709,69 @@
 								if (KwRunStat.Tx_Power > WLCfg.Tx_Power) {KwRunStat.Tx_Power= WLCfg.Tx_Power; }
 								SX126xSetRfTxPower(KwRunStat.Tx_Power);
 							}
-				}else if (p1->Stat==1){
-					KwRunStat.targetSentCount = RX_Buffer[8] + (RX_Buffer[9]<<8) + (RX_Buffer[10]<<16) + (RX_Buffer[11]<<24);
-				}else if (p1->Stat==2) {
-					KwRunStat.targetRecvdCount = RX_Buffer[8] + (RX_Buffer[9]<<8) + (RX_Buffer[10]<<16) + (RX_Buffer[11]<<24);
-				}else if (p1->Stat==3) {
+				}else if (nSeq==1){
+					KwRunStat.targetSentCount = KwRx_Buffer[8] + (KwRx_Buffer[9]<<8) + (KwRx_Buffer[10]<<16) + (KwRx_Buffer[11]<<24);
+				}else if (nSeq==2) {
+					KwRunStat.targetRecvdCount = KwRx_Buffer[8] + (KwRx_Buffer[9]<<8) + (KwRx_Buffer[10]<<16) + (KwRx_Buffer[11]<<24);
+				}else if (nSeq==3) {
 				}
-				KMem.WFX[1]=(RX_Buffer[4]) + (RX_Buffer[5]<<8);
+				KMem.WFX[1]=(KwRx_Buffer[4]) + (KwRx_Buffer[5]<<8);
 			//	KMem.WFX[1]=(RX_Buffer[4]) + (indicator3<<8);
 				
-				KMem.WFX[2]=(RX_Buffer[6]) + (RX_Buffer[7]<<8);				
+				KMem.WFX[2]=(KwRx_Buffer[6]) + (KwRx_Buffer[7]<<8);				
 
+// 鏁版嵁閫忎紶  鏁版嵁鐨勫彂閫佹垚鍔熶笌鍚︼紝闇�瑕佸湪瀵规柟鐨勫簲绛斿寘涓‘璁�
+						if (KwRunStat.sizesending > 0) {			
+							//  纭姝e湪鍙戦�佺殑锛屽彂閫佹垚鍔�
+							KwRunStat.sentsize += KwRunStat.sizesending;
+							KwRunStat.sizesending = 0;
+							
+							if (KwRunStat.sentsize >= KwRunStat.sizetosend) {
+								//鏁翠綋 鍙戦�佸畬鎴�
+								KwRunStat.sizetosend =0;
+								KwRunStat.sentsize = 0;
+								KwRunStat.ttAirSize = 0;
+								// 鍙戦�佸畬鎴�
+							}
+						}	
+				
+				if (p1->bHasData && size >= 14+3 ) {
+//					int nFulllen1 = KwRx_Buffer[12];
+					int nthislen2 = KwRx_Buffer[13];
+					if (size >= 14 + nthislen2) {
+						// 鏀跺埌涓�涓悎鏍肩殑鎼哄甫浼犵粺鏁版嵁鐨� 鍖呫��
+						if (p1->bHead) {
+							// 鏁版嵁娈电殑璧峰锛� 涓�涓柊鐨勬暟鎹鐨勫紑濮�
+							KwRunStat.ttRxSize = 0;
+						}
+						memcpy (KwRunStat.ttRxBuf1 + KwRunStat.ttRxSize, KwRx_Buffer + 14 , nthislen2);
+						KwRunStat.ttRxSize += nthislen2;
+						if (p1->bTail) {
+							// 宸茬粡鏀跺埌瀹屾暣鐨勪竴涓暟鎹
+							KwRunStat.ttRxRecved =1;
+							KwRunStat.ErrStat=500;						
+							
+							// 鍚庣画鏁版嵁娈靛鐞嗘祦绋� ;
+								 if (Uart1Mode == 1) {		// 澶勪簬閫忎紶妯″紡锛� 鏁版嵁鍙戝洖鍘汇��
+										SendPacket(1, KwRunStat.ttRxBuf1, KwRunStat.ttRxSize);
+								 }
+									KwRunStat.ttRxSize = 0;
+									KwRunStat.ttRxRecved = 0;									 							
+							
+							// 鏆傛椂娴佺▼锛屽叏閮ㄥ彂鍥炲幓銆�
+//							memcpy (KwRunStat.ttTxBuf1, KwRunStat.ttRxBuf1, KwRunStat.ttRxSize);
+//							KwRunStat.sizetosend = KwRunStat.ttRxSize;
+//							KwRunStat.sentsize = 0;
+//							KwRunStat.sizesending = 0;
+//							KwRunStat.ttRxRecved = 0;
+//							KwRunStat.ttRxSize = 0; 
+							
+						}
+
+					}
+					
+				
+				}
         KWLSlaveSendRplyPkt(1);
 			//	Radio.StartCad();
 //				KMem.WFY[0]=(RX_Buffer[4]<<8) + RX_Buffer[5];
@@ -662,48 +792,77 @@
 int KWLMasterSendReqPkt(int nChn)
 {
 	int len1=12;
-	pstKLPacket p1 = (pstKLPacket) TX_Buffer;
+	pstKwPacket p1 = (pstKwPacket) KwTx_Buffer;
 	p1->STSign = enReqSign;
 	p1->DstAddr = MixAddr(WLCfg.nChannel,WLCfg.nRadioAddr);
 	p1->Func = 0x3;
-	p1->Stat = (p1->Stat + 1) &0x03;   //0x00;
+	KwRunStat.nSeq = (KwRunStat.nSeq + 1)&0x03;
+	p1->Stat = KwRunStat.nSeq;   //0x00;
 	p1->Data[0]=KMem.WFY[1]; 
 	p1->Data[1]=KMem.WFY[1]>>8; 
 	p1->Data[2]=KMem.WFY[2]; 
 	p1->Data[3]=KMem.WFY[2]>>8; 
 	
-/*	
-			TX_Buffer[0] = 'P';
-			TX_Buffer[1] = 'I';
-			TX_Buffer[2] = 'N';
-			TX_Buffer[3] = 'G'; 
-			TX_Buffer[4] = KMem.WFY[1]; 
-			TX_Buffer[5] = KMem.WFY[1]>>8; 
-			TX_Buffer[6] = KMem.WFY[2]; 
-			TX_Buffer[7] = KMem.WFY[2]>>8; 
-*/
 
 	if (p1->Stat == 0)
 	{
-			TX_Buffer[10] = RssiValue;
-			TX_Buffer[11] = SnrValue;
+			KwTx_Buffer[10] = RssiValue;
+			KwTx_Buffer[11] = SnrValue;
 	}else if (p1->Stat == 1){
-		memcpy(TX_Buffer+8,&KwRunStat.sentCount,4);
+		memcpy(KwTx_Buffer+8,&KwRunStat.sentCount,4);
 	}else if (p1->Stat == 2) {
-		memcpy(TX_Buffer+8,&KwRunStat.recvCount,4);		
+		memcpy(KwTx_Buffer+8,&KwRunStat.recvCount,4);		
 	}else if (p1->Stat == 3) {
 		
 	}
-			crc_value=RadioComputeCRC(TX_Buffer,len1,CRC_TYPE_IBM);//璁$畻寰楀嚭瑕佸彂閫佹暟鎹寘CRC鍊�
-			TX_Buffer[len1]=crc_value;
-			TX_Buffer[len1+1]=crc_value>>8;
-	
+// 鍙楅檺浜庣┖涓寘澶у皬鐨勯檺鍒讹紝 閫忎紶鏁版嵁鍙兘闇�瑕佸垎鍑犳鍙戦�併��
+// 鍙戦�佹柟璐熻矗鎷嗗寘锛� 鎺ユ敹鏂硅礋璐� 鍚堝寘锛�  鍙戦�佹柟鍙戦�佺涓�涓寘锛屾湁璧峰鏍囧織锛� 鍙戦�佹柟鍙戦�佹渶鍚庝竴涓寘锛屾湁缁撴潫鏍囧織銆�
+// 濡傛灉鍙湁涓�涓寘鐨勬暟鎹紝鍒欏悓鏃跺叿鏈夎捣濮嬪拰缁撴潫鏍囧織銆�
+// 涓棿鐨勬暟鎹寘锛屼笉鍏锋湁璧峰鏍囧織锛屼篃涓嶅叿鏈夌粨鏉熸爣蹇椼��
+// 鍒╃敤鍖呭簭鍒楀彿鏉ヤ繚璇� 涓棿 鐨勬暟鎹寘鐨� 瀹屾暣鎬� 鍜岄『搴忔纭�с��
+// 鍏堝疄鐜�1涓寘鐨勮浆鍙戙��	
+			if (KwRunStat.sizetosend > 0) {
+				uchar bStart=0,bEnd=1;
+				int16_t thisToSend = KwRunStat.sizetosend - KwRunStat.sentsize;
+				if (thisToSend > WL_TT_EACH_SIZE) { thisToSend = WL_TT_EACH_SIZE; bEnd=0;}
+				
+				if (KwRunStat.sentsize == 0) {		// 绗竴娆″彂閫�
+					bStart = 1;
+				}
+				
+				memcpy(KwRunStat.ttAirBuf, KwRunStat.ttTxBuf1 + KwRunStat.sentsize , thisToSend);			// 鍙戦�佹暟鎹紝 濡傛灉涓婃鏈夛紝缁х画涓婃鐨勫彂銆�
+				
+				KwRunStat.sizesending = thisToSend;
+				KwRunStat.ttAirSize = thisToSend;
+
+//				KwRunStat.sentsize = 0;
+				KwRunStat.bttAirHeader = bStart;
+				KwRunStat.bttAirTail = bEnd;
+				
+				p1->bHasData=1;
+				p1->bHead = bStart;
+				p1->bTail = bEnd;
+				
+				KwTx_Buffer[len1] = KwRunStat.sizetosend;
+				KwTx_Buffer[len1+1] = thisToSend;
+				
+				memcpy( KwTx_Buffer + len1 + 2 , KwRunStat.ttTxBuf1 + KwRunStat.sentsize, thisToSend);
+				len1 += 2 + thisToSend;
+				
+			}
+			
+
+			crc_value=RadioComputeCRC(KwTx_Buffer,len1,CRC_TYPE_IBM);//璁$畻寰楀嚭瑕佸彂閫佹暟鎹寘CRC鍊�
+			KwTx_Buffer[len1]=crc_value;
+			KwTx_Buffer[len1+1]=crc_value>>8;
+			
+			
 			KMem.WDT[56]=crc_value;
-	
+
 			KwRunStat.sentCount++;
 			KwRunStat.cycleTime = GetTick()- KwRunStat.lastSendtime ;	
 			KwRunStat.lastSendtime = GetTick();	
-			Radio.Send( TX_Buffer, len1+2);
+			Radio.Send( KwTx_Buffer, len1+2);
 			KwRunStat.runStep=RS_SENDING;
 			KwRunStat.lastActTime = GetTick();
 	
@@ -713,7 +872,7 @@
 int KWLSlaveSendRplyPkt(int nChn)
 {
 	int len1=12;
-	pstKLPacket p1 = (pstKLPacket) TX_Buffer;
+	pstKwPacket p1 = (pstKwPacket) KwTx_Buffer;
 	p1->STSign = enRplySign;
 	p1->DstAddr = MixAddr(WLCfg.nChannel,WLCfg.nRadioAddr);
 	p1->Func = 0x3;
@@ -722,32 +881,60 @@
 	p1->Data[1]=KMem.WFY[1]>>8; 
 	p1->Data[2]=KMem.WFY[2]; 
 	p1->Data[3]=KMem.WFY[2]>>8; 
-/*	
-			TX_Buffer[0] = 'P';
-			TX_Buffer[1] = 'O';
-			TX_Buffer[2] = 'N';
-			TX_Buffer[3] = 'G'; 
-			TX_Buffer[4] = KMem.WFY[1]; 
-			TX_Buffer[5] = KMem.WFY[1]>>8; 
-			TX_Buffer[6] = KMem.WFY[2]; 
-			TX_Buffer[7] = KMem.WFY[2]>>8; 
-*/
+
 	if (p1->Stat == 0)
 	{
-			TX_Buffer[10] = RssiValue;
-			TX_Buffer[11] = SnrValue;
+			KwTx_Buffer[10] = RssiValue;
+			KwTx_Buffer[11] = SnrValue;
 	}else if (p1->Stat == 1){
-		memcpy(TX_Buffer+8,&KwRunStat.sentCount,4);
+		memcpy(KwTx_Buffer+8,&KwRunStat.sentCount,4);
 	}else if (p1->Stat == 2) {
-		memcpy(TX_Buffer+8,&KwRunStat.recvCount,4);		
+		memcpy(KwTx_Buffer+8,&KwRunStat.recvCount,4);		
 	}else if (p1->Stat == 3) {
 		
 	}	
 
-			crc_value=RadioComputeCRC(TX_Buffer,len1,CRC_TYPE_IBM);//璁$畻寰楀嚭瑕佸彂閫佹暟鎹寘CRC鍊�
-			TX_Buffer[len1]=crc_value;
-			TX_Buffer[len1+1]=crc_value>>8;
-			Radio.Send( TX_Buffer, len1+2);	
+// 鍙楅檺浜庣┖涓寘澶у皬鐨勯檺鍒讹紝 閫忎紶鏁版嵁鍙兘闇�瑕佸垎鍑犳鍙戦�併��
+// 鍙戦�佹柟璐熻矗鎷嗗寘锛� 鎺ユ敹鏂硅礋璐� 鍚堝寘锛�  鍙戦�佹柟鍙戦�佺涓�涓寘锛屾湁璧峰鏍囧織锛� 鍙戦�佹柟鍙戦�佹渶鍚庝竴涓寘锛屾湁缁撴潫鏍囧織銆�
+// 濡傛灉鍙湁涓�涓寘鐨勬暟鎹紝鍒欏悓鏃跺叿鏈夎捣濮嬪拰缁撴潫鏍囧織銆�
+// 涓棿鐨勬暟鎹寘锛屼笉鍏锋湁璧峰鏍囧織锛屼篃涓嶅叿鏈夌粨鏉熸爣蹇椼��
+// 鍒╃敤鍖呭簭鍒楀彿鏉ヤ繚璇� 涓棿 鐨勬暟鎹寘鐨� 瀹屾暣鎬� 鍜岄『搴忔纭�с��
+// 鍏堝疄鐜�1涓寘鐨勮浆鍙戙��	
+	
+			if (KwRunStat.sizetosend > 0) {
+				uchar bStart=0,bEnd=1;
+				int16_t thisToSend = KwRunStat.sizetosend - KwRunStat.sentsize;
+				if (thisToSend > WL_TT_EACH_SIZE) { thisToSend = WL_TT_EACH_SIZE; bEnd=0;}
+				
+				if (KwRunStat.sentsize == 0) {		// 绗竴娆″彂閫�
+					bStart = 1;
+				}
+				
+				memcpy(KwRunStat.ttAirBuf, KwRunStat.ttTxBuf1 + KwRunStat.sentsize , thisToSend);			// 鍙戦�佹暟鎹紝 濡傛灉涓婃鏈夛紝缁х画涓婃鐨勫彂銆�
+				
+				KwRunStat.sizesending = thisToSend;
+				KwRunStat.ttAirSize = thisToSend;
+
+//				KwRunStat.sentsize = 0;
+				KwRunStat.bttAirHeader = bStart;
+				KwRunStat.bttAirTail = bEnd;
+				
+				p1->bHasData=1;
+				p1->bHead = bStart;
+				p1->bTail = bEnd;
+				
+				KwTx_Buffer[len1] = KwRunStat.sizetosend;
+				KwTx_Buffer[len1+1] = thisToSend;
+				
+				memcpy( KwTx_Buffer + len1 + 2 , KwRunStat.ttTxBuf1 + KwRunStat.sentsize, thisToSend);
+				len1 += 2 + thisToSend;
+				
+			}
+	
+			crc_value=RadioComputeCRC(KwTx_Buffer,len1,CRC_TYPE_IBM);//璁$畻寰楀嚭瑕佸彂閫佹暟鎹寘CRC鍊�
+			KwTx_Buffer[len1]=crc_value;
+			KwTx_Buffer[len1+1]=crc_value>>8;
+			Radio.Send( KwTx_Buffer, len1+2);	
 			KwRunStat.runStep=RS_SENDING;
 	
 			KwRunStat.lastActTime = GetTick();
@@ -795,7 +982,7 @@
 	
 			switch (KwRunStat.runStep){
 				case RS_IDLE:
-					if (GetTick() - KwRunStat.lastSendtime > (WLCfg.nCycleTime) *10){
+					if (GetTick() - KwRunStat.lastSendtime > (WLCfg.nCycleTime) *10 ||KwRunStat.sizetosend > 0 ){
 						Radio.StartCad();
 						KwRunStat.runStep = RS_MASTER_CAD;
 						KwRunStat.lastActTime = GetTick();
@@ -815,7 +1002,7 @@
 				case RS_SENT:
 					break;
 				case RS_RECVING:
-					if (GetTick() - KwRunStat.lastSendtime > (WLCfg.nCycleTime) *10){
+					if (GetTick() - KwRunStat.lastSendtime > (WLCfg.nCycleTime) *10 || KwRunStat.bMasterRecved){
 						KwRunStat.ErrStat=5000; 
 						KwRunStat.LostPackets++;
 						KwRunStat.CtnLstPkts++;
@@ -844,7 +1031,8 @@
 						
 						
 						KwRunStat.runStep = RS_IDLE;			
-					}				
+					}
+					
 					break;
 				case RS_RECVED:
 						KwRunStat.runStep = RS_IDLE;					

--
Gitblit v1.9.1