⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 upgradefirmware.c

📁 一个在Linux下开发的IP摄像头的驱动程序及控制软件
💻 C
字号:
#include "Utility.h"


void __stdcall ServUtlUpgradeCallback(HANDLE hDevice, DWORD dwContext, DWORD dwStatus,
                           DWORD dwParam1, DWORD dwParam2);

/*!
***************************************************************************
 * \brief
 *	upgrade firmware

 * \param tServerInfo 
	[in] server info
 * \param *pszFileName
	[in] firmware file-name
 
 * \return 
 * \retval -1		firmware file not exist
 * \retval S_OK		upgrade success
**************************************************************************/
int UpgradeFirmware(TSERVER_INFO tServerInfo, char *pszFileName)
{
	HANDLE hServerUtl;
	HANDLE hDevice;
	char lpszModelName[64]; 
	TSERVERUTL_UPG_INFO tUpgInfo;
	SCODE scRet;

	scRet = ServerUtlInit(&hServerUtl, &hDevice, lpszModelName, tServerInfo);
	if (scRet != S_OK)
		return scRet;

	if (pszFileName[0] == 0 || access(pszFileName, 0) != 0)
	{
		ServerUtlRelease(&hServerUtl, &hDevice);
		return -1;
	}

	memset(&tUpgInfo, 0, sizeof(tUpgInfo));
	tUpgInfo.dwContext = (DWORD)0;
	strcpy(tUpgInfo.szFileName ,pszFileName);
	tUpgInfo.pfUpgradeCB = ServUtlUpgradeCallback;

	scRet = ServerUtl_Upgrade(hDevice, &tUpgInfo);
	
	ServerUtlRelease(&hServerUtl, &hDevice);

	if (scRet != S_OK)
		return scRet;

	return 0;
}

void __stdcall ServUtlUpgradeCallback(HANDLE hDevice, DWORD dwContext, DWORD dwStatus,
                           DWORD dwParam1, DWORD dwParam2)
{
	char szMsg[MAX_PATH];
	TSERVERUTL_UPGSEND_INFO *ptUpgSendInfo;

	switch (dwParam1)
	{
	case SERVERUTL_UPG_UNPACK_FILE:
		strcpy(szMsg, "File Unpacked...");
		break;
	case SERVERUTL_UPG_FTP_CONNECT:
		strcpy(szMsg, "Server Connected..");
		break;
	case SERVERUTL_UPG_RM_REMOTE_FILE:
		sprintf(szMsg, "Server file or directory %s removed.", (const char *) dwParam2);
		break;
	case SERVERUTL_UPG_CREATE_DIR:
		sprintf(szMsg, "Create directory %s on server.", (const char *) dwParam2);
		break;
	case SERVERUTL_UPG_CHANGE_DIR:
		sprintf(szMsg, "Change to server directory %s.", (const char *) dwParam2);
		break;
	case SERVERUTL_UPG_PUTTING_FILE:
		//sprintf(szMsg, "file %s is uploading.", (const char *) dwParam2);
		{
			ptUpgSendInfo = (TSERVERUTL_UPGSEND_INFO *) dwParam2;

			sprintf(szMsg, "uploading %s %d%%/%d%%", 
				ptUpgSendInfo->szCurFileName,
				ptUpgSendInfo->lCurFileSize>0?(ptUpgSendInfo->lCurFileSentSize * 100 / ptUpgSendInfo->lCurFileSize):0,
				ptUpgSendInfo->lTotalSize>0?(ptUpgSendInfo->lCurSentSize * 100 / ptUpgSendInfo->lTotalSize):0);
		}
		break;
	case SERVERUTL_UPG_PUT_FILE:
		sprintf(szMsg, "file %s uploaded.", (const char *) dwParam2);
		break;
	case SERVERUTL_UPG_RESTART_SRV:
		strcpy(szMsg, "Restart command set");
		break;
	case SERVERUTL_UPG_WAIT_REBOOT:
		strcpy(szMsg, "Waiting for server to reboot");
		break;
	case SERVERUTL_UPG_SERVER_REBOOTING:
		strcpy(szMsg, "Server is rebooting");
		break;
	case SERVERUTL_UPG_SERVER_REBOOTED:
		strcpy(szMsg, "Server rebooted OK");
		break;
	case SERVERUTL_UPG_REMOVE_TMP_FILE:
		sprintf(szMsg, "Local temp file %s removed", (const char *) dwParam2);
		break;
	case SERVERUTL_UPG_SERVER_RESET:
		sprintf(szMsg, "Server is reset\n");
	default:
		return;
	}

	printf("%s\n", szMsg);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -