Procházet zdrojové kódy

remote power control

zhangbo před 3 roky
rodič
revize
91b4538b1d

+ 2 - 0
app/bmc/msghndlr/App/IPMDevice/IPMDevice.c

@@ -88,6 +88,8 @@ GetDevID ( uint8_t* pReq, uint8_t ReqLen,  uint8_t* pRes)
     static unsigned char MinorBCD;
     static int firsttime = 1;
 
+    printf("GetDevID ReqLen %d\n", ReqLen);
+
     if(firsttime == 1)
     {
         //	printf("Calling get firmware version only for first time\n");

+ 39 - 50
app/bmc/msghndlr/MsgHndlrTask.c

@@ -159,17 +159,18 @@ void *MsgHndlrTask( void *pArg )
 			continue;
 		}
 
-		//update checksum2
-		resMsgPkt.Data[resMsgPkt.Size]	=	CalculateCheckSum2(resMsgPkt.Data, resMsgPkt.Size);
-		resMsgPkt.Size++;
-
 		if(g_BMCInfo.IpmiConfig.UDSIfcSupport == 0x01 && (reqMsgPkt.SrcQ == gFdUdsRes))
 		{			
-			//TODO:UDS的数据结构在最后多了一个0,找机会要给他去掉。
-			resMsgPkt.Size = resMsgPkt.Size+1;
+			//UDS 数据包不需要checksum
 			SwapUDSIPMIMsg(&reqMsgPkt,&resMsgPkt);
-			resMsgPkt.Data[resMsgPkt.Size-1] = 0;
 		}
+		else
+		{
+			//update checksum2
+			resMsgPkt.Data[resMsgPkt.Size]	=	CalculateCheckSum2(resMsgPkt.Data, resMsgPkt.Size);
+			resMsgPkt.Size++;
+		}
+		
 
 		if(SYS_IFC_CHANNEL == reqMsgPkt.Channel)
 		{  
@@ -233,15 +234,14 @@ ValidateMsgHdr (MsgPkt_T* pReq)
 				 pIPMIMsgReq->ResAddr  = m_PendingBridgedResTbl[PBTbl][SeqNum].ReqMsgHdr.ReqAddr;
 				 pIPMIMsgReq->RqSeqLUN = m_PendingBridgedResTbl[PBTbl][SeqNum].ReqMsgHdr.RqSeqLUN;
 
-				 /* Calculate the Second CheckSum */
-				 pReq->Data[ pReq->Size - 1 ] = CalculateCheckSum2( pReq->Data, pReq->Size - 1 );
-				 pReq->Data[2] = (~(pReq->Data[0] + pReq->Data[1])) +1; //2's complement checksum
-
 				 pReq->Param = BRIDGING_REQUEST;
-
 				 
 				 if (m_PendingBridgedResTbl[PBTbl][SeqNum].DestQ == gFd_LanIfcQ)
 				 {			
+				 	/* Calculate the Second CheckSum */
+					 pReq->Data[ pReq->Size - 1 ] = CalculateCheckSum2( pReq->Data, pReq->Size - 1 );
+					 pReq->Data[2] = (~(pReq->Data[0] + pReq->Data[1])) +1; //2's complement checksum
+
 					  for (j=pReq->Size - 1; j>=0; j--)
 					  {
 						   pReq->Data[j+1] = pReq->Data[j];
@@ -258,8 +258,8 @@ ValidateMsgHdr (MsgPkt_T* pReq)
 				 	memcpy(&pReq->Data[sizeof(IPMIUDSMsg_T)], &pReq->Data[0], pReq->Size);
 				 	memcpy(&pReq->Data[0], &m_PendingBridgedResTbl[PBTbl][SeqNum].ResMsgHdr.UDSMsgHdr, sizeof(IPMIUDSMsg_T));
 				 	pReq->Size += sizeof(IPMIUDSMsg_T);
-				 	pReq->Size++;
-				 	pReq->Data[pReq->Size-1] = 0;
+				 	//pReq->Size++;
+				 	//pReq->Data[pReq->Size-1] = 0;
 
 				 	((IPMIUDSMsg_T*)&pReq->Data[0])->IPMIMsgLen = pReq->Size;
 
@@ -318,17 +318,18 @@ ProcessIPMIReq (MsgPkt_T* pReq, MsgPkt_T* pRes)
 	{
 		//printf("log 1, pReq->Channel: %#x\n", pReq->Channel);
 		HdrOffset = sizeof (IPMIMsgHdr_T);
-		pReq->Size  = pReq->Size - HdrOffset - 1;
+		pReq->Size  = pReq->Size - HdrOffset - 1;	//remove header and checksum2
 	}
 	if(UDS_CHANNEL == pReq->Channel)
 	{
 		//printf("log 2, pReq->Size: %d, HdrOffset: %d\n", pReq->Size, HdrOffset);
+		//UDS数据没有校验,UDSHeader + data
 		HdrOffset = sizeof(IPMIUDSMsg_T);
-		pReq->Size = pReq->Size -HdrOffset - 1;
+		pReq->Size = pReq->Size -HdrOffset;
 	}
 	
 	SwapIPMIMsgHdr((IPMIMsgHdr_T*)pReq->Data, (IPMIMsgHdr_T*)pRes->Data);
-	pRes->Size  = HdrOffset + sizeof(uint8_t);
+	pRes->Size  = HdrOffset + sizeof(uint8_t);	//+ ccode
 
 	pthread_setspecific(g_tls.CurSessionID,&pReq->SessionID);
 
@@ -336,7 +337,7 @@ ProcessIPMIReq (MsgPkt_T* pReq, MsgPkt_T* pRes)
 	{
 		pRes->Data [HdrOffset] = CC_INV_CMD;
 		printf ("Invalid Net Function 0x%x or Invalid Command 0x%x\n",NET_FN(pReq->NetFnLUN), pReq->Cmd);
-		pRes->Size	+= 2;
+		pRes->Size;//	+= 2;		//??? why
 		return;
 	}
 	
@@ -351,30 +352,19 @@ ProcessIPMIReq (MsgPkt_T* pReq, MsgPkt_T* pRes)
     {
 		if (0 != GetMsgHndlrMap (NET_FN (pReq->NetFnLUN), &pCmdHndlrMap))
 		{
-			// if(pBMCInfo->IpmiConfig.GrpExtnSupport == 1)
-			// {
-				if (0 != GroupExtnGetMsgHndlrMap (NET_FN (pReq->NetFnLUN), pReq->Data [HdrOffset], &pCmdHndlrMap) )
-				{
-					pRes->Data [HdrOffset] = CC_INV_CMD;
-					printf ("MsgHndlr.c : Invalid Net Function 0x%x or Invalid Command 0x%x\n",NET_FN(pReq->NetFnLUN), pReq->Cmd);
-					pRes->Size	+= 2;
-					return;
-				}
-			// }
-			// else
-			// {
-			// 	pRes->Data [HdrOffset] = CC_INV_CMD;
-			// 	printf ("MsgHndlr.c : Invalid Net Function 0x%x\n",NET_FN(pReq->NetFnLUN));
-			// 	pRes->Size	+= 2;
-			// 	return;
-			// }
+			if (0 != GroupExtnGetMsgHndlrMap (NET_FN (pReq->NetFnLUN), pReq->Data [HdrOffset], &pCmdHndlrMap) )
+			{
+				pRes->Data [HdrOffset] = CC_INV_CMD;
+				printf ("MsgHndlr.c : Invalid Net Function 0x%x or Invalid Command 0x%x\n",NET_FN(pReq->NetFnLUN), pReq->Cmd);
+				pRes->Size;//	+= 2;
+				return;
+			}			
 		}
 
 		if(GetCmdHndlr(pReq,pRes,pCmdHndlrMap,HdrOffset,CmdOverride,&pCmdHndlrMap) == FALSE)
 		{
 			pRes->Data [HdrOffset] = CC_INV_CMD;
-			pRes->Size	+= 2;
-			//printf("log 3\n");
+			pRes->Size;//	+= 2;		//??? why
 			return;
 		}
    }
@@ -387,7 +377,7 @@ ProcessIPMIReq (MsgPkt_T* pReq, MsgPkt_T* pRes)
 		{	
 			printf("Warning: Request data len error, require %d\n", pCmdHndlrMap->ReqLen);
 			pRes->Data [HdrOffset] = CC_REQ_INV_LEN;
-			pRes->Size	+= 2;
+			pRes->Size;//	+= 2;	//??? why
 			return;
 		}
 	}
@@ -397,7 +387,6 @@ ProcessIPMIReq (MsgPkt_T* pReq, MsgPkt_T* pRes)
 	//prepare response data for send message command
 	if( (CMD_SEND_MSG == pReq->Cmd) && (NETFN_APP == pReq->NetFnLUN >> 2))
 	{
-//		printf("log 4, size %d, Channel %d\n",pRes->Size, pRes->Channel);
 		int Offset = 0;
 		uint8_t SeqNum = g_BMCInfo.SendMsgSeqNum;
 		if ((0 == pRes->Size) &&
@@ -405,11 +394,11 @@ ProcessIPMIReq (MsgPkt_T* pReq, MsgPkt_T* pRes)
 			 (g_BMCInfo.IpmiConfig.SecondaryIPMBSupport == 0x01 && SECONDARY_IPMB_CHANNEL == pRes->Channel)) )
 		{
 			pRes->Param = PARAM_NO_RESPONSE;
-			Offset = HdrOffset + 2;
+			Offset = HdrOffset + 2;		//ccode + checksum2
 		}
 		else if (HdrOffset == pRes->Size)
 		{
-			Offset = HdrOffset + 1;
+			Offset = HdrOffset + 1;		// + checksum2
 		}
 
 	    PBTbl = ( ((pReq->Data[sizeof (IPMIMsgHdr_T)] & 0x0F) == SECONDARY_IPMB_CHANNEL) ? SECONDARY_PB_TBL : PRIMARY_PB_TBL );
@@ -426,9 +415,7 @@ ProcessIPMIReq (MsgPkt_T* pReq, MsgPkt_T* pRes)
 				}
 				else if(m_PendingBridgedResTbl[PBTbl][SeqNum].DestQ == gFdUdsIfc)
 				{
-					//pRes->Size ++;
 					SwapUDSIPMIMsg ( pReq, pRes);
-					//pRes->Data[pRes->Size-1] = 0;
 					memcpy (&m_PendingBridgedResTbl[PBTbl][SeqNum].ResMsgHdr, pRes->Data, sizeof (IPMIUDSMsg_T));	
 					m_PendingBridgedResTbl[PBTbl][SeqNum].UDSSocket = pRes->Socket;
 					// printf("log666 \n");
@@ -673,15 +660,19 @@ void RespondSendMessage ( MsgPkt_T* pReq, uint8_t Status)
 		 {
 			ResPkt.Data [HdrOffset] = CC_UNSPECIFIED_ERR;
 		 }
-
-		 ResPkt.Size = HdrOffset + 1 + 1; // IPMI Header + Completion Code + Second Checksum
+		 ResPkt.Size = HdrOffset + 1; // IPMI Header + Completion Code
+		 
 		 ResPkt.Cmd = pIPMIResHdr->Cmd;
 		 ResPkt.NetFnLUN = pIPMIReqHdr->NetFnLUN;
 		 ResPkt.Channel = pReq->Channel;
-		 //ResPkt.Socket = pReq->Socket;
 
-		 /* Calculate the Second CheckSum */
-		 ResPkt.Data[ResPkt.Size - 1] = CalculateCheckSum2 (ResPkt.Data, ResPkt.Size-1);
+		 //UDS不需要checksum
+		 if(m_PendingBridgedResTbl[PBTbl][SeqNum].DestQ != gFdUdsIfc)
+		 {
+		 	/* Calculate the Second CheckSum */
+		 	ResPkt.Data[ResPkt.Size] = CalculateCheckSum2 (ResPkt.Data, ResPkt.Size);
+		 	ResPkt.Size++; //+ Second Checksum
+		 }
 
 		 ResPkt.Param = BRIDGING_REQUEST;
 
@@ -691,8 +682,6 @@ void RespondSendMessage ( MsgPkt_T* pReq, uint8_t Status)
 		 }
 		 else if(m_PendingBridgedResTbl[PBTbl][SeqNum].DestQ == gFdUdsIfc)
 		 {
-		 	ResPkt.Size++;
-		 	ResPkt.Data[ResPkt.Size-1] = 0;
 		 	((IPMIUDSMsg_T*)&ResPkt.Data[0])->IPMIMsgLen = ResPkt.Size;
 		 	ResPkt.Socket = m_PendingBridgedResTbl[PBTbl][SeqNum].UDSSocket;
 		 	QueueFd = gFdUdsRes;

+ 0 - 1
app/bmc/msghndlr/Storlead/Storlead.c

@@ -397,7 +397,6 @@ int Storlead_SetFanInfo(uint8_t *pReq, uint8_t ReqLen, uint8_t *pRes)
 int Storlead_getAllBladeStatus(uint8_t *pReq, uint8_t ReqLen, uint8_t *pRes)
 {
     int i, index;
-    uint8_t mReq[100] = {0};
     MsgPkt_T    ReqPkt;
     MsgPkt_T    ResPkt;
     pRes[0] = CC_NORMAL;

+ 3 - 3
app/bmc/uds/UDSIfc.c

@@ -298,14 +298,14 @@ int ReadUDSData(MsgPkt_T *MsgPkt,int Socket )
 
     while (RecvdLen < sizeof(IPMIUDSMsg_T))
     {
-        Len = recv (Socket, &pData[RecvdLen],sizeof(IPMIUDSMsg_T),0);
+        Len = recv (Socket, &pData[RecvdLen],MSG_PAYLOAD_SIZE,0);
         if (Len <= 0)
         {
             return UDS_FAILURE;
         }
         
         // int i;
-        // printf("---> server recv1 %#x: ", Len);
+        // printf("---> server recv1 %d: ", Len);
         // for(i=0;i<Len;i++)
         //     printf("%#x ", pData[RecvdLen+i]);
         // printf("\n");
@@ -398,7 +398,7 @@ static int ProcessUDSReq(MsgPkt_T *pReq )
 int SendUDSPkt (MsgPkt_T *pRes)
 {
     // int i;
-    // printf("---> server Send size: %#x, socket: %d: ", pRes->Size, pRes->Socket);
+    // printf("---> server Send size: %d: ", pRes->Size);
     // for(i=0;i<pRes->Size;i++)
     //     printf("%#x ", pRes->Data[i]);
     // printf("\n");

+ 2 - 2
app/common_include/com_IPMIDefs.h

@@ -98,8 +98,8 @@
 #define UDS_PARAM_FAILURE -2
 #define UDS_SOCKET_QUE_LEN  1024
 #define MAX_UDS_BUFFER_SIZE 1024
-#define	MAX_REQUEST_SIZE		1024
-#define	MAX_RESPONSE_SIZE		1024
+#define	MAX_REQUEST_SIZE		512
+#define	MAX_RESPONSE_SIZE		512
 
 
 #define WAIT_NONE       0

+ 1 - 1
app/goahead-3.6.5/src/libipmi/inc/libipmi_storlead_OEM.h

@@ -101,7 +101,7 @@ uint16_t IPMC_SetFanInfo( IPMI20_UDS_SESSION_T *pUDSSession, uint8_t IpmbAddr, u
 uint16_t LIBIPMI_HL_GetSysInfo( IPMI20_UDS_SESSION_T *pUDSSession, SysInfo_T *pSysInfo, int timeout);
 uint16_t IPMC_GetSysInfo( IPMI20_UDS_SESSION_T *pUDSSession, uint8_t IpmbAddr, SysInfo_T *pSysInfo, int timeout);
 uint16_t LIBIPMI_HL_GetSensorHistory( IPMI20_UDS_SESSION_T *pUDSSession, sensor_history_st *pSensorHistory_st, int card_index, int sensor_number, int IPMB_ADDR);
-int 	 LIBIPMI_HL_GetAllBladeStatus(IPMI20_UDS_SESSION_T *pUDSSession, uint8_t chassisManageEn, BladeStatus_T* pBladeStatus, int timeout);
+int 	 LIBIPMI_HL_GetAllBladeStatus(IPMI20_UDS_SESSION_T *pUDSSession, BladeStatus_T* pBladeStatus, int timeout);
 int LIBIPMI_HL_GetFanInfo(IPMI20_UDS_SESSION_T *pUDSSession, FanInfo_T* pFanInfo, int timeout);
 int IPMC_GetFanInfo(IPMI20_UDS_SESSION_T *pUDSSession, uint8_t IpmbAddr, FanInfo_T* pFanInfo, int timeout);
 uint16_t Storlead_AMIGetSELEntires(IPMI20_UDS_SESSION_T *pUDSSession, uint8_t IpmbAddr,

+ 18 - 10
app/goahead-3.6.5/src/libipmi/src/libipmi_session.c

@@ -58,12 +58,13 @@ uint16_t LIBIPMI_CreateSession(IPMI20_UDS_SESSION_T *pUDSSession, int timeout)
     strcpy(client_addr.sun_path,UDS_SOCKET_PATH);
     int len = sizeof(client_addr.sun_family)+strlen(client_addr.sun_path);
 
-    printf("---> Create_IPMI20_UDS_Session %d\n", client_sock);
+    
     if ( connect (client_sock, (struct sockaddr *) &client_addr,len) < 0)
     {
         printf("LIBIPMI_UDS_SESSION.C: Unable to connect to Server:\n");
         return LIBIPMI_MEDIUM_E_CONNECT_FAILURE;
     }
+    printf("---> Create_IPMI20_UDS_Session %d\n", client_sock);
 
     pUDSSession->hUDSInfo.hSocket = client_sock;
     pUDSSession->hUDSInfo.byIsConnected = 1;
@@ -88,18 +89,13 @@ uint32_t FillUDSMessagePacket(IPMI20_UDS_SESSION_T *pUDSSession, uint8_t *Buffer
 
     pUDSMsg->SessionID = pUDSSession->dwSessionID;
     pUDSMsg->ChannelNum = pUDSSession->byChannelNum;
-    //pUDSMsg->Privilege = pUDSSession->byRole;
-    pUDSMsg->IPMIMsgLen = sizeof(IPMIUDSMsg_T)+dwReqDataLen+1;
+    pUDSMsg->IPMIMsgLen = sizeof(IPMIUDSMsg_T)+dwReqDataLen;
     pUDSMsg->Cmd = byCommand;
     pUDSMsg->NetFnLUN = byNetFnLUN;
 
-    //memcpy(pUDSMsg->UserName, pUDSSession->szUName, MAX_USERNAME_LEN);
-    //memcpy(pUDSMsg->IPAddr, pUDSSession->abyIPAddr, IP6_ADDR_LEN);
-    //pUDSMsg->ProcessID = getpid();
-    //pUDSMsg->ThreadID = gettid();
     memcpy(pbyIPMIUDSData, pbyReqData, dwReqDataLen);
 
-    return ( sizeof(IPMIUDSMsg_T) + dwReqDataLen + 1);
+    return ( sizeof(IPMIUDSMsg_T) + dwReqDataLen);  //jimbo note 1
 }
 
 /*---------------------------------------------------------------------
@@ -129,6 +125,14 @@ uint16_t LIBIPMI_Send_RAW_IPMI2_0_Command(IPMI20_UDS_SESSION_T *pUDSSession,
        return -1;
     }
 
+    
+    // printf("UDS send %d: ", retlen);
+    // for(i=0;i<retlen;i++)
+    // {
+    //     printf("%02x ", ((uint8_t*)pbyIPMIUDSMsgReq)[i]);
+    // }
+    // printf("\n");
+
     send (pUDSSession->hUDSInfo.hSocket,pbyIPMIUDSMsgReq,retlen, MSG_NOSIGNAL);
 
     if((byNetFnLUN == NETFNLUN_IPMI_APP) && (byCommand == CMD_SEND_MSG))
@@ -163,6 +167,10 @@ uint16_t LIBIPMI_Send_RAW_IPMI2_0_Command(IPMI20_UDS_SESSION_T *pUDSSession,
             //     printf("%#02x ", pbyIPMIUDSResData[i]);
             // printf("\n");
         }
+        if(pbyIPMIUDSResData[sizeof(IPMIUDSMsg_T)] != 0)    //ccode != 0
+        {
+            return -1;
+        }
     }
 
     Timeout.tv_sec  =   timeout; 
@@ -192,7 +200,7 @@ uint16_t LIBIPMI_Send_RAW_IPMI2_0_Command(IPMI20_UDS_SESSION_T *pUDSSession,
         byretval = recv(pUDSSession->hUDSInfo.hSocket,pbyIPMIUDSResData,MAX_RESPONSE_SIZE,0);
         // printf("UDS Recv2 %d: ", byretval);
         // for(i=0;i<byretval;i++)
-        //     printf("%#02x ", pbyIPMIUDSResData[i]);
+        //     printf("%02x ", pbyIPMIUDSResData[i]);
         // printf("\n");
     }
 
@@ -200,7 +208,7 @@ uint16_t LIBIPMI_Send_RAW_IPMI2_0_Command(IPMI20_UDS_SESSION_T *pUDSSession,
     {
         IPMIUDSMsg_T *pIPMIUDSMsg = (IPMIUDSMsg_T *)&pbyIPMIUDSResData[0];   
         //TODO:UDS的数据结构在最后多了一个0,找机会要给他去掉。     
-        *pdwResDataLen = pIPMIUDSMsg->IPMIMsgLen-sizeof(IPMIUDSMsg_T) - 2;  //remove header, 最后多出来的一个0,and checksum
+        *pdwResDataLen = pIPMIUDSMsg->IPMIMsgLen-sizeof(IPMIUDSMsg_T);  //remove header, 最后多出来的一个0,and checksum
         memcpy(pszResData,&pbyIPMIUDSResData[sizeof(IPMIUDSMsg_T)],*pdwResDataLen);
     }
     else

+ 2 - 2
app/goahead-3.6.5/src/libipmi/src/libipmi_storlead_OEM.c

@@ -199,14 +199,14 @@ uint16_t IPMC_GetSysInfo( IPMI20_UDS_SESSION_T *pUDSSession, uint8_t IpmbAddr, S
 	return 0;
 }
 
-int LIBIPMI_HL_GetAllBladeStatus(IPMI20_UDS_SESSION_T *pUDSSession, uint8_t chassisManageEn, BladeStatus_T *BladeStatus, int timeout)
+int LIBIPMI_HL_GetAllBladeStatus(IPMI20_UDS_SESSION_T *pUDSSession, BladeStatus_T *BladeStatus, int timeout)
 {
 	int wRet = 0;
 	uint32_t	dwResLen;
 	uint8_t pRes[BLADE_NUMBERS*sizeof(BladeStatus_T)+1];
 	wRet = LIBIPMI_Send_RAW_IPMI2_0_Command(pUDSSession,  
 							NETFNLUN_IPMI_STORLEAD, CMD_GET_ALLBLADE_INFO,
-							(uint8_t*)&chassisManageEn, 1,
+							NULL, 0,
 							(uint8_t*)pRes,  &dwResLen,
 							timeout);
 	if(( wRet != 0 ) || (pRes[0] != 0))

+ 2 - 2
app/goahead-3.6.5/src/socket.c

@@ -947,9 +947,9 @@ PUBLIC void socketFree(int sid)
             while (recv(sp->sock, buf, sizeof(buf), 0) > 0) {}
         }
         
-        //printf("%s %d ---> closesocket header %d\n", __FILE__, __LINE__, sp->sock);
+        printf("---> closesocket header %d\n",sp->sock);
         closesocket(sp->sock);
-        //printf("%s %d ---> closesocket tail %d\n", __FILE__, __LINE__, sp->sock);
+        printf("---> closesocket tail\n");
     }
     wfree(sp->ip);
     wfree(sp);

+ 14 - 18
app/goahead-3.6.5/src/web_interface/src/dashboard.c

@@ -14,8 +14,7 @@
     废弃机箱管理是能按钮。由BMC程序里的g_BMCInfo.isChMC代替。ChMC默认就支持机箱管理,IPMC默认不支持。
     gChassisManageEn、setBladeManage、getBladeManage保留但是用不到。
 */
-uint8_t gIPMBAddr[BLADE_NUMBERS] = {0x20, 0x84, 0x86, 0x88, 0x8A, 0x8C, 0x8E, 0x90, 0x92, 0x94};
-uint8_t gChassisManageEn = 0;
+uint8_t gIPMBAddr[BLADE_NUMBERS] = {0x82, 0x84, 0x86, 0x88, 0x8A, 0x8C, 0x8E, 0x90, 0x92, 0x94};
 /*获取设备信息*/
 void getDeviceInfo(Webs *wp){
     uint16_t    wRet = LIBIPMI_E_SUCCESS;
@@ -44,7 +43,7 @@ void getDeviceInfo(Webs *wp){
         wRet = IPMICMD_GetDeviceID( &UDSSession, &DeviceID, DEFAULT_TIMEOUT);
         if (wRet == LIBIPMI_E_SUCCESS)
         {
-            sprintf(FwVersion, "%d.%d", DeviceID.FirmwareRevision1, DeviceID.FirmwareRevision2);
+            sprintf(FwVersion, "%d.%02x", DeviceID.FirmwareRevision1, DeviceID.FirmwareRevision2);
         }
         //get mac adn ip address
         if((sock=socket(AF_INET,SOCK_STREAM,0))<0)
@@ -92,7 +91,7 @@ void getDeviceInfo(Webs *wp){
         wRet = IPMC_GetDeviceID( &UDSSession, target_addr, &DeviceID, DEFAULT_TIMEOUT);
         if (wRet == LIBIPMI_E_SUCCESS)
         {
-            sprintf(FwVersion, "%d.%d", DeviceID.FirmwareRevision1, DeviceID.FirmwareRevision2);
+            sprintf(FwVersion, "%d.%02x", DeviceID.FirmwareRevision1, DeviceID.FirmwareRevision2);
         }
     }
 
@@ -235,7 +234,7 @@ void getSensorInfo(Webs *wp){
     //Create session
     LIBIPMI_CreateSession(&UDSSession, 10000);
      
-//    wp->index = TEST_INDEX;
+
     target_addr = gIPMBAddr[wp->index];
     if(target_addr == 0x20)
     {
@@ -439,24 +438,21 @@ void buy(Webs *wp)
 
 void actionTest(Webs *wp)
 {
-     char    *name, *age;
-    name = websGetVar(wp, "name", NULL);
-    age = websGetVar(wp, "age", NULL);
-    logmsg(2, "name value is : %s", name );
-     logmsg(2, "age value is : %s", age );
+    IPMI20_UDS_SESSION_T    UDSSession;
+     GetDevIDRes_T   DeviceID;
+    LIBIPMI_CreateSession(&UDSSession, DEFAULT_TIMEOUT);
+
+    IPMC_GetDeviceID( &UDSSession, 0x86, &DeviceID, DEFAULT_TIMEOUT);
+    LIBIPMI_CloseSession(&UDSSession ); 
+
     websSetStatus(wp, 200);
     websWriteHeaders(wp, -1, 0);
     websWriteEndHeaders(wp);
-   
-    websWrite(wp, "Name %s", name);
-    websWrite(wp, "age %s", age); 
+    websWrite(wp, "Every thing is ok");
     websFlush(wp, 0);
     websDone(wp);
 
-    if(name)
-        wfree(name);
-    if(age)
-        wfree(age);
+    printf("FirmwareRevision: %d.%d\n", DeviceID.FirmwareRevision1,DeviceID.FirmwareRevision2);
 
     
 }
@@ -469,7 +465,7 @@ void getAllBladeInfo(Webs *wp){
     //Create session
     LIBIPMI_CreateSession(&UDSSession, DEFAULT_TIMEOUT);
 
-    wRet = LIBIPMI_HL_GetAllBladeStatus(&UDSSession, gChassisManageEn, pBladeStatus, DEFAULT_TIMEOUT);
+    wRet = LIBIPMI_HL_GetAllBladeStatus(&UDSSession, pBladeStatus, DEFAULT_TIMEOUT);
     if(wRet != 0)
     {
         printf("Get Blade status error!\n");

+ 5 - 2
app/goahead-3.6.5/src/web_interface/src/remote_control.c

@@ -107,6 +107,7 @@ void getChassisStatus(Webs *wp)
 	IPMI20_UDS_SESSION_T    UDSSession;
     uint8_t target_addr;
     uint16_t wRet;
+    char ptr[100];
 
 	//Create session
     LIBIPMI_CreateSession(&UDSSession, DEFAULT_TIMEOUT);
@@ -127,9 +128,11 @@ void getChassisStatus(Webs *wp)
     websWriteHeaders(wp, -1, 0);
     websWriteEndHeaders(wp);
     if(chassisSta.power_state == 0)
-        websWrite(wp, "{\"data\":{\"powerStatus\":\"on\"},\"msg\":\"\",\"code\":200}");
+        sprintf(ptr, "{\"data\":{\"powerStatus\":\"off\"},\"msg\":\"\",\"code\":200}");
     else
-        websWrite(wp, "{\"data\":{\"powerStatus\":\"off\"},\"msg\":\"\",\"code\":200}");
+        sprintf(ptr, "{\"data\":{\"powerStatus\":\"on\"},\"msg\":\"\",\"code\":200}");
+    websWrite(wp, "%s", ptr);
     websFlush(wp, 0);	
     websDone(wp);
+    printf("---> cJson:%s\n", ptr);
 }