From 83de2a69af869f4e5c0462a50255317fb9e37099 Mon Sep 17 00:00:00 2001
From: QuakeGod <QuakeGod@sina.com>
Date: 星期一, 17 十月 2022 23:27:01 +0800
Subject: [PATCH] fix FP0

---
 Src/KBus.c |  331 +++++++++++++++++++++++++++---------------------------
 1 files changed, 165 insertions(+), 166 deletions(-)

diff --git a/Src/KBus.c b/Src/KBus.c
index ab4b3ff..d52082b 100644
--- a/Src/KBus.c
+++ b/Src/KBus.c
@@ -9,7 +9,7 @@
 #include "string.h"
 #include "stm32f0xx.h"
 
-unsigned char bMaster=0,bSlave=0,bRepeater=0;;
+unsigned char bKBusMaster=0,bKBusSlave=0,bKBusRepeater=0;;
 
 unsigned char PacketBuf1[128];
 unsigned char PacketBuf2[128];
@@ -17,7 +17,7 @@
 unsigned char BufferIn[16]={0};
 unsigned char BufferOut[16]={0};
 
-stChnStat ChnStats[9];
+stChnStat ChnStats[8];
 unsigned char nAddr=0;
 unsigned char nChilds;
 int ChildStat[16];
@@ -47,7 +47,7 @@
 unsigned char Datas[128];		
 volatile int PacketLength = 0;
 
-unsigned char BCC(void * pData, int nSize)
+unsigned char KBusBCC(void * pData, int nSize)
 {
 	unsigned char k;
 	k=0;
@@ -58,137 +58,7 @@
 	return k;	
 }
 
-int RepeaterFunc(int nChn)
-{
-		KMem.WY[0]=KMem.WX[0];
-		if ((KMem.nRunCount &0x7f) == 88) 
-		{ 
-			nCount2++;	
-			ToggleRunLed();
-//		int len1=sprintf(str1,"%d %d Cfg %02X  Input %02X  \r\n",nCount,nCount2,EffJumperSW,MyKeyStat1);
-//		PutStr(str1,len1);
-		}				
-	return 0;
-}
-
-int MasterFunc(int nChn)
-{
-		uint32_t tick1=HAL_GetTick();
-		uint32_t thisuS=GetuS();
-	
-			int len1=0;
-
-			if ((MasterRecved && MasterRecvOK && thisuS-SendTimeuS>50) || thisuS-SendTimeuS>1500u)
-			{
-				if (!MasterRecvOK) 
-				{
-					TimeOutCount++;
-					Uart2Stat.TimeOutErr++; 
-					ChnStats[nCurPollId].LostPackets++;
-					ChnStats[nCurPollId].CtnLstPkts++;
-					if (!MasterRecved) {ChnStats[nCurPollId].TimeOutErr++;}
-					if (ChnStats[nCurPollId].CtnLstPkts>ChnStats[nCurPollId].MaxCtnLstPkts)
-					{ChnStats[nCurPollId].MaxCtnLstPkts=ChnStats[nCurPollId].CtnLstPkts;}
-					if (ChnStats[nCurPollId].CtnLstPkts>3)
-					{
-						ChnStats[nCurPollId].Stat=0;
-						KMem.ErrStat=200;
-						 
-						{BufferIn[nCurPollId]=0;}
-					}
-				//	LL_GPIO_SetOutputPin(GPIOA,LL_GPIO_PIN_7);
-				}else
-				{
-					ChnStats[nCurPollId].Stat=1;
-					
-					KMem.RunStat=100;
-				}
-				nCurPollId ++;
-				if (nCurPollId > nChilds)
-				{
-					CircleTime=thisuS-LastCircleStartTime;
-					LastCircleStartTime=thisuS;
-					nSeq++;
-					nCurPollId=1;
-				}
-#if (BOARD_TYPE == 12)
-				if (KMRunStat.WorkMode==0)
-				{
-				//	KMem.WX[0]= GetInput();
-				//	KMem.WY[1]=KMem.WX[0]&0xff;
-				//	KMem.WY[2]=(KMem.WX[0]>>8)&0xff;		
-				}
-			//	BufferOut[1]=KMem.WY[1];
-			//	BufferOut[2]=KMem.WY[2];		
-#else
-				if (KMRunStat.WorkMode==0)
-				{
-					KMem.WX[0]= GetInput();
-					KMem.WY[1]=KMem.WX[0]&0xff;
-					KMem.WY[2]=(KMem.WX[0]>>8)&0xff;		
-				}
-				BufferOut[1]=KMem.WY[1];
-				BufferOut[2]=KMem.WY[2];		
-#endif
-
-				Datas[0]=BufferOut[nCurPollId];
-				Datas[1]=BufferOut[nCurPollId+1];;
-				Datas[2]=ChnStats[nCurPollId].Stat;
-				Datas[3]=0;
-				Datas[4]=tick1&0xff;
-				Datas[5]=(tick1>>8)&0xff;
-				Datas[6]=(tick1>>16)&0xff;
-				Datas[7]=(tick1>>24)&0xff;
-				
-				SendTimeuS=thisuS;				
-				len1=MakePacket((pPacket)PacketBuf1,0,nCurPollId,cmdExChgData,nSeq,8,Datas);
-				SendPacket(nChn, (pPacket)PacketBuf1, len1);
-				ChnStats[nCurPollId].SendPackets++;
-				ChnStats[nCurPollId].SendTimeInterval=SendTimeuS-ChnStats[nCurPollId].LastSentTimeuS;
-				ChnStats[nCurPollId].LastSentTimeuS=SendTimeuS;
-				PacketLength = len1;
-				SendTime=tick1;
-
-				MasterRecved=0;
-				MasterRecvOK=0;
-			//	LL_GPIO_TogglePin(GPIOA,LL_GPIO_PIN_5);		
-				//ToggleErrLed();
-//				ToggleOut8();
-
-			}
-		
-			Clk3=SysTick->VAL;
-		//	LL_GPIO_TogglePin(GPIOA,LL_GPIO_PIN_4);
-	//	HAL_Delay(1);				
-	return 0;
-}
-
-int SlaveFunc(int nChn)
-{
-		int ThisuS=GetuS();
-		int thisRecvTime=RecvTimeuS;
-		if (SlaveRecved)
-		{
-			KMem.RunStat=8000;
-			SlaveRecved=0;
-		}else if ((ThisuS - thisRecvTime) >12000u)
-		{
-			KMem.ErrStat=8000;
-			KMem.SDD[17]=1;
-			KMem.SDD[18]=ThisuS;
-			KMem.SDD[19]=RecvTimeuS;
-		}else if ( ThisuS > (thisRecvTime + 12000u))
-		{
-			KMem.ErrStat=8000;
-			KMem.SDD[17]=2;
-			KMem.SDD[18]=ThisuS;
-			KMem.SDD[19]=RecvTimeuS;
-		}
-		
-	return 0;
-}
-
-int MakePacket(pPacket p1,unsigned char src, uchar dst, uchar nType,unsigned char nSEQ, unsigned char DataLen,void * pData )
+int KBusMakePacket(pPacket p1,unsigned char src, uchar dst, uchar nType,unsigned char nSEQ, unsigned char DataLen,void * pData )
 {
 	p1->Sign=StartSign;
 	p1->DstHost=dst;
@@ -203,7 +73,7 @@
 		case cmdPing:
 			p1->PacketLen=DataLen;
 			memcpy(p1->data,pData,DataLen);
-			p1->data[DataLen]=BCC(p1,sizeof(stPacket)+DataLen-1);
+			p1->data[DataLen]=KBusBCC(p1,sizeof(stPacket)+DataLen-1);
 			p1->data[DataLen+1]=EndSign;
 		
 			PacketLenth=sizeof(stPacket)+DataLen+1;
@@ -211,7 +81,7 @@
 		case cmdPingReply:
 			p1->PacketLen=DataLen;
 			memcpy(p1->data,pData,DataLen);
-			p1->data[DataLen]=BCC(p1,sizeof(stPacket)+DataLen-1);
+			p1->data[DataLen]=KBusBCC(p1,sizeof(stPacket)+DataLen-1);
 			p1->data[DataLen+1]=EndSign;		
 			PacketLenth=sizeof(stPacket)+DataLen+1;		
 			break;
@@ -224,35 +94,35 @@
 		case cmdWriteReply:
 			p1->PacketLen=DataLen;
 		 if (DataLen !=0 )	memcpy(p1->data,pData,DataLen);
-			p1->data[DataLen]=BCC(p1,sizeof(stPacket)+DataLen-1);
+			p1->data[DataLen]=KBusBCC(p1,sizeof(stPacket)+DataLen-1);
 			p1->data[DataLen+1]=EndSign;
 			PacketLenth=sizeof(stPacket)+DataLen+1;					
 			break;
 		case cmdGetVersion:
 			p1->PacketLen=DataLen;
 			memcpy(p1->data,pData,DataLen);
-			p1->data[DataLen]=BCC(p1,sizeof(stPacket)+DataLen-1);
+			p1->data[DataLen]=KBusBCC(p1,sizeof(stPacket)+DataLen-1);
 			p1->data[DataLen+1]=EndSign;
 			PacketLenth=sizeof(stPacket)+DataLen+1;			
 			break;
 		case cmdVerInfo:
 			p1->PacketLen=DataLen;
 			memcpy(p1->data,pData,DataLen);
-			p1->data[DataLen]=BCC(p1,sizeof(stPacket)+DataLen-1);
+			p1->data[DataLen]=KBusBCC(p1,sizeof(stPacket)+DataLen-1);
 			p1->data[DataLen+1]=EndSign;
 			PacketLenth=sizeof(stPacket)+DataLen+1;			
 			break;
 		case cmdExChgData:
 			p1->PacketLen=DataLen;
 			memcpy(p1->data,pData,DataLen);
-			p1->data[DataLen]=BCC(p1,sizeof(stPacket)+DataLen-1);
+			p1->data[DataLen]=KBusBCC(p1,sizeof(stPacket)+DataLen-1);
 			p1->data[DataLen+1]=EndSign;
 			PacketLenth=sizeof(stPacket)+DataLen+1;
 			break;
 		case cmdExChgDataReply:
 			p1->PacketLen=DataLen;
 			memcpy(p1->data,pData,DataLen);
-			p1->data[DataLen]=BCC(p1,sizeof(stPacket)+DataLen-1);
+			p1->data[DataLen]=KBusBCC(p1,sizeof(stPacket)+DataLen-1);
 			p1->data[DataLen+1]=EndSign;		
 			PacketLenth=sizeof(stPacket)+DataLen+1;		
 			break;
@@ -260,21 +130,21 @@
 		case cmdSyncRead:
 			p1->PacketLen=DataLen;
 			memcpy(p1->data,pData,DataLen);
-			p1->data[DataLen]=BCC(p1,sizeof(stPacket)+DataLen-1);
+			p1->data[DataLen]=KBusBCC(p1,sizeof(stPacket)+DataLen-1);
 			p1->data[DataLen+1]=EndSign;		
 			PacketLenth=sizeof(stPacket)+DataLen+1;		
 			break;
 		case cmdSyncWrite:
 			p1->PacketLen=DataLen;
 			memcpy(p1->data,pData,DataLen);
-			p1->data[DataLen]=BCC(p1,sizeof(stPacket)+DataLen-1);
+			p1->data[DataLen]=KBusBCC(p1,sizeof(stPacket)+DataLen-1);
 			p1->data[DataLen+1]=EndSign;		
 			PacketLenth=sizeof(stPacket)+DataLen+1;		
 			break;
 		case cmdSequenRead:
 			p1->PacketLen=DataLen;
 			memcpy(p1->data,pData,DataLen);
-			p1->data[DataLen]=BCC(p1,sizeof(stPacket)+DataLen-1);
+			p1->data[DataLen]=KBusBCC(p1,sizeof(stPacket)+DataLen-1);
 			p1->data[DataLen+1]=EndSign;		
 			PacketLenth=sizeof(stPacket)+DataLen+1;		
 			break;		
@@ -282,7 +152,7 @@
 		case cmdSyncTime:
 			p1->PacketLen=DataLen;
 			memcpy(p1->data,pData,DataLen);
-			p1->data[DataLen]=BCC(p1,sizeof(stPacket)+DataLen-1);
+			p1->data[DataLen]=KBusBCC(p1,sizeof(stPacket)+DataLen-1);
 			p1->data[DataLen+1]=EndSign;		
 			PacketLenth=sizeof(stPacket)+DataLen+1;		
 			break;
@@ -294,7 +164,7 @@
 	return PacketLenth;
 }
 
-int CheckPacket(int nChn, pPacket p1, int nLen1)
+int KBusCheckPacket(int nChn, pPacket p1, int nLen1)
 {
 	if (p1->Sign != StartSign)
 	{
@@ -323,7 +193,7 @@
 //		Uart2Stat.LengthErr++;		
 //		return -2;
 //	}
-	unsigned char thisBCC=BCC(p1,sizeof(stPacket)+DataLen-1);
+	unsigned char thisBCC=KBusBCC(p1,sizeof(stPacket)+DataLen-1);
 	if (thisBCC != p1->data[DataLen]) 
 	{//BCC Error;
 		Uart2Stat.BCCerr++;
@@ -333,7 +203,7 @@
 	return 0;
 }
 
-int SlaveCheckPacket(int nChn, pPacket p1, int nLen1)
+int KBusSlaveCheckPacket(int nChn, pPacket p1, int nLen1)
 {
 	if (p1->Sign != StartSign)
 	{
@@ -362,7 +232,7 @@
 //		Uart2Stat.LengthErr++;		
 //		return -2;
 //	}
-	unsigned char thisBCC=BCC(p1,sizeof(stPacket)+DataLen-1);
+	unsigned char thisBCC=KBusBCC(p1,sizeof(stPacket)+DataLen-1);
 	if (thisBCC != p1->data[DataLen]) 
 	{//BCC Error;
 		Uart2Stat.BCCerr++;
@@ -372,7 +242,7 @@
 	return 0;
 }
 
-int MasterParsePacket(int nChn, pPacket p1, int Len1)
+int KBusMasterParsePacket(int nChn, pPacket p1, int Len1)
 {
 
 		int DataLen=p1->PacketLen;
@@ -389,7 +259,7 @@
 				break;
 			case cmdPing:
 				BufferIn[ChildId]=p1->data[0];
-				PacketLen=MakePacket(p2,0,nCurPollId,cmdPingReply,p1->nSEQ,DataLen,p1->data);
+				PacketLen=KBusMakePacket(p2,0,nCurPollId,cmdPingReply,p1->nSEQ,DataLen,p1->data);
 				SendPacket(nChn, p2, PacketLen);
 				break;
 			case cmdPingReply:
@@ -424,14 +294,14 @@
 				//PutOutput(outputvalue);
 				//memcpy(DispBuf,p1->data+2,8);
 				p1->data[0]=BufferOut[0];
-				PacketLen=MakePacket(p2,nAddr,0,cmdExChgDataReply,p1->nSEQ,DataLen,p1->data);
+				PacketLen=KBusMakePacket(p2,nAddr,0,cmdExChgDataReply,p1->nSEQ,DataLen,p1->data);
 				SendPacket(nChn, p2, PacketLen);
 				break;
 			case cmdExChgDataReply:
 				DelayuS=ThisuS-SendTimeuS;
 				if (DelayuS > MaxDelayuS) MaxDelayuS = DelayuS;
 
-#if (BOARD_TYPE==12)				
+#if (BOARD_TYPE == 14)				
 				BufferIn[ChildId]=p1->data[0];
 				KMem.WXB[ChildId-1]=BufferIn[ChildId];
 				if (KMRunStat.WorkMode==0) {	
@@ -473,7 +343,7 @@
 	return 0;
 }
 unsigned char nClientDataIndex=0;
-int SlaveParsePacket(int nChn, pPacket p1, int Len1)
+int KBusSlaveParsePacket(int nChn, pPacket p1, int Len1)
 {
 	Uart2Stat.OKPacket++;				
 	int DataLen=p1->PacketLen;	
@@ -505,7 +375,7 @@
 				//memcpy(DispBuf,p1->data+2,8);
 				p1->data[0]=BufferOut[0];
 				RecvTimeuS=ThisuS;
-				PacketLen=MakePacket(p2,nAddr,0,cmdPingReply,p1->nSEQ,DataLen,p1->data);
+				PacketLen=KBusMakePacket(p2,nAddr,0,cmdPingReply,p1->nSEQ,DataLen,p1->data);
 				ChnStats[0].ClientSendPkts++;
 				SendPacket(nChn, p2, PacketLen);
 				break;
@@ -517,7 +387,7 @@
 				break;
 			case cmdWrite:
 				//memcpy(DispBuf,p1->data,DataLen);
-				PacketLen=MakePacket(p2,1,0,cmdWriteReply,p1->nSEQ,0,0);
+				PacketLen=KBusMakePacket(p2,1,0,cmdWriteReply,p1->nSEQ,0,0);
 				ChnStats[0].ClientSendPkts++;
 				SendPacket(nChn, p2, PacketLen);					
 				break;
@@ -530,7 +400,7 @@
 			case cmdExChgData:
 				BufferIn[0]=p1->data[0];
 				nSlaveTick=p1->data[4]+(p1->data[5]<<8);//+(p1->data[6]<<16)+(p1->data[7]<<24);
-#if (BOARD_TYPE == 12)
+#if (BOARD_TYPE == 14)
 			//	PutOutput(BufferIn[0]);
 				//PutOutput(outputvalue);
 				//memcpy(DispBuf,p1->data+2,8);
@@ -555,7 +425,7 @@
 				p1->data[7]=ChnStats[0].ClientDatas[nIndex]>>24;
 				nClientDataIndex++;
 				if (nClientDataIndex >= 10) { nClientDataIndex=0;}
-				PacketLen=MakePacket(p2,nAddr,0,cmdExChgDataReply,p1->nSEQ,DataLen,p1->data);
+				PacketLen=KBusMakePacket(p2,nAddr,0,cmdExChgDataReply,p1->nSEQ,DataLen,p1->data);
 				ChnStats[0].ClientSendPkts++;
 				SendPacket(nChn, p2, PacketLen);
 				break;
@@ -578,32 +448,32 @@
 	}	
 	return 0;
 }
-int ParsePacket(int nChn, pPacket p1, int Len1)
+int KBusParsePacket(int nChn, pPacket p1, int Len1)
 {
 	ThisuS=GetuS();
 	int Result=0;
-	if (bMaster)
+	if (bKBusMaster)
 	{
 			MasterRecved=1;
-			Result=CheckPacket(nChn, p1, Len1);
+			Result=KBusCheckPacket(nChn, p1, Len1);
 			if (Result != S_OK)
 			{
 				return Result;
 			}
 			MasterRecvOK=1;
-			Result=MasterParsePacket(nChn, p1, Len1);			
+			Result=KBusMasterParsePacket(nChn, p1, Len1);			
 			return Result;
 	}
-	if (bSlave)
+	if (bKBusSlave)
 	{
 			ChnStats[0].ClientRecvPkts++;
-			Result=SlaveCheckPacket(nChn, p1, Len1);
+			Result=KBusSlaveCheckPacket(nChn, p1, Len1);
 			if (Result != S_OK)
 			{
 				return Result;
 			}
 			ChnStats[0].ClientTimeOutErr=KMem.RunStat;
-			Result=SlaveParsePacket(nChn, p1, Len1);
+			Result=KBusSlaveParsePacket(nChn, p1, Len1);
 			return Result;
 	}
 	//int len1=p1->PacketLen;
@@ -613,7 +483,7 @@
 
 	return Result;
 }
-
+/*
 int InitMachine(stMachineConfig * pConfig)
 {
 	return S_OK;
@@ -653,4 +523,133 @@
 {
 	return S_OK;
 }
+*/
+int KBusRepeaterFunc(int nChn)
+{
+		KMem.WY[0]=KMem.WX[0];
+		if ((KMem.nRunCount &0x7f) == 88) 
+		{ 
+			nCount2++;	
+			ToggleRunLed();
+//		int len1=sprintf(str1,"%d %d Cfg %02X  Input %02X  \r\n",nCount,nCount2,EffJumperSW,MyKeyStat1);
+//		PutStr(str1,len1);
+		}				
+	return 0;
+}
 
+int KBusMasterFunc(int nChn)
+{
+	uint32_t tick1=HAL_GetTick();
+	uint32_t thisuS=GetuS();
+
+		int len1=0;
+
+		if ((MasterRecved && MasterRecvOK && thisuS-SendTimeuS>50) || thisuS-SendTimeuS>1000u)
+		{
+			if (!MasterRecvOK) 
+			{
+				TimeOutCount++;
+				Uart2Stat.TimeOutErr++; 
+				ChnStats[nCurPollId].LostPackets++;
+				ChnStats[nCurPollId].CtnLstPkts++;
+				if (!MasterRecved) {ChnStats[nCurPollId].TimeOutErr++;}
+				if (ChnStats[nCurPollId].CtnLstPkts>ChnStats[nCurPollId].MaxCtnLstPkts)
+				{ChnStats[nCurPollId].MaxCtnLstPkts=ChnStats[nCurPollId].CtnLstPkts;}
+				if (ChnStats[nCurPollId].CtnLstPkts>3)
+				{
+					ChnStats[nCurPollId].Stat=0;
+					KMem.ErrStat=200;
+					 
+					{BufferIn[nCurPollId]=0;}
+				}
+			//	LL_GPIO_SetOutputPin(GPIOA,LL_GPIO_PIN_7);
+			}else
+			{
+				ChnStats[nCurPollId].Stat=1;
+				
+				KMem.RunStat=100;
+			}
+			nCurPollId ++;
+			if (nCurPollId > nChilds)
+			{
+				CircleTime=thisuS-LastCircleStartTime;
+				LastCircleStartTime=thisuS;
+				nSeq++;
+				nCurPollId=1;
+			}
+#if (BOARD_TYPE == 14)
+			if (KMRunStat.WorkMode==0)
+			{
+			//	KMem.WX[0]= GetInput();
+			//	KMem.WY[1]=KMem.WX[0]&0xff;
+			//	KMem.WY[2]=(KMem.WX[0]>>8)&0xff;		
+			}
+		//	BufferOut[1]=KMem.WY[1];
+		//	BufferOut[2]=KMem.WY[2];		
+#else
+			if (KMRunStat.WorkMode==0)
+			{
+				KMem.WX[0]= GetInput();
+				KMem.WY[1]=KMem.WX[0]&0xff;
+				KMem.WY[2]=(KMem.WX[0]>>8)&0xff;		
+			}
+			BufferOut[1]=KMem.WY[1];
+			BufferOut[2]=KMem.WY[2];		
+#endif
+
+			Datas[0]=BufferOut[nCurPollId];
+			Datas[1]=BufferOut[nCurPollId+1];;
+			Datas[2]=ChnStats[nCurPollId].Stat;
+			Datas[3]=0;
+			Datas[4]=tick1&0xff;
+			Datas[5]=(tick1>>8)&0xff;
+			Datas[6]=(tick1>>16)&0xff;
+			Datas[7]=(tick1>>24)&0xff;
+			
+			SendTimeuS=thisuS;				
+			len1=KBusMakePacket((pPacket)PacketBuf1,0,nCurPollId,cmdExChgData,nSeq,8,Datas);
+			SendPacket(nChn, (pPacket)PacketBuf1, len1);
+			ChnStats[nCurPollId].SendPackets++;
+			ChnStats[nCurPollId].SendTimeInterval=SendTimeuS-ChnStats[nCurPollId].LastSentTimeuS;
+			ChnStats[nCurPollId].LastSentTimeuS=SendTimeuS;
+//			PacketLength = len1;
+			SendTime=tick1;
+
+			MasterRecved=0;
+			MasterRecvOK=0;
+		//	LL_GPIO_TogglePin(GPIOA,LL_GPIO_PIN_5);		
+			//ToggleErrLed();
+//				ToggleOut8();
+
+		}
+	
+//		Clk3=SysTick->VAL;
+	//	LL_GPIO_TogglePin(GPIOA,LL_GPIO_PIN_4);
+//	HAL_Delay(1);				
+	return 0;
+}
+
+int KBusSlaveFunc(int nChn)
+{
+		int ThisuS=GetuS();
+		int thisRecvTime=RecvTimeuS;
+		if (SlaveRecved)
+		{
+			KMem.RunStat=8000;
+			SlaveRecved=0;
+		}else if ((ThisuS - thisRecvTime) >12000u)
+		{
+			KMem.ErrStat=8000;
+			KMem.SDD[17]=1;
+			KMem.SDD[18]=ThisuS;
+			KMem.SDD[19]=RecvTimeuS;
+		}else if ( ThisuS > (thisRecvTime + 12000u))
+		{
+			KMem.ErrStat=8000;
+			KMem.SDD[17]=2;
+			KMem.SDD[18]=ThisuS;
+			KMem.SDD[19]=RecvTimeuS;
+		}
+		
+	return 0;
+}

--
Gitblit v1.9.1