429 lines
12 KiB
C
Executable File
429 lines
12 KiB
C
Executable File
/*===========================================================================
|
|
FILE:
|
|
QDLEnum.h
|
|
|
|
DESCRIPTION:
|
|
QDL protocol enumerations and related methods
|
|
|
|
PUBLIC ENUMERATIONS AND METHODS:
|
|
eQDLCommand
|
|
eQDLError
|
|
eQDLImageType
|
|
eQDLOpenStatus
|
|
eQDLWriteStatus
|
|
eQDLDoneStatus
|
|
|
|
Copyright (c) 2011, Code Aurora Forum. All rights reserved.
|
|
|
|
Redistribution and use in source and binary forms, with or without
|
|
modification, are permitted provided that the following conditions are met:
|
|
* Redistributions of source code must retain the above copyright
|
|
notice, this list of conditions and the following disclaimer.
|
|
* Redistributions in binary form must reproduce the above copyright
|
|
notice, this list of conditions and the following disclaimer in the
|
|
documentation and/or other materials provided with the distribution.
|
|
* Neither the name of Code Aurora Forum nor
|
|
the names of its contributors may be used to endorse or promote
|
|
products derived from this software without specific prior written
|
|
permission.
|
|
|
|
|
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
POSSIBILITY OF SUCH DAMAGE.
|
|
===========================================================================*/
|
|
|
|
//---------------------------------------------------------------------------
|
|
// Pragmas
|
|
//---------------------------------------------------------------------------
|
|
#pragma once
|
|
|
|
//---------------------------------------------------------------------------
|
|
// Definitions
|
|
//---------------------------------------------------------------------------
|
|
|
|
// QDL feature bits
|
|
const BYTE QDL_FEATURE_GENERIC_UNFRAMED = 0x10;
|
|
const BYTE QDL_FEATURE_QDL_UNFRAMED = 0x20;
|
|
const BYTE QDL_FEATURE_BAR_MODE = 0x40;
|
|
|
|
// QDL protocol version
|
|
const BYTE QDL_MIN_VERSION = 6;
|
|
const BYTE QDL_MAX_VERSION = 6;
|
|
|
|
const BYTE QDL_HELLO_MAGIC_REQ[32] =
|
|
{
|
|
'Q',
|
|
'C',
|
|
'O',
|
|
'M',
|
|
' ',
|
|
'h',
|
|
'i',
|
|
'g',
|
|
'h',
|
|
' ',
|
|
's',
|
|
'p',
|
|
'e',
|
|
'e',
|
|
'd',
|
|
' ',
|
|
'p',
|
|
'r',
|
|
'o',
|
|
't',
|
|
'o',
|
|
'c',
|
|
'o',
|
|
'l',
|
|
' ',
|
|
'h',
|
|
's',
|
|
't',
|
|
0,
|
|
0,
|
|
0,
|
|
0
|
|
};
|
|
|
|
const BYTE QDL_HELLO_MAGIC_RSP[24] =
|
|
{
|
|
'Q',
|
|
'C',
|
|
'O',
|
|
'M',
|
|
' ',
|
|
'h',
|
|
'i',
|
|
'g',
|
|
'h',
|
|
' ',
|
|
's',
|
|
'p',
|
|
'e',
|
|
'e',
|
|
'd',
|
|
' ',
|
|
'p',
|
|
'r',
|
|
'o',
|
|
't',
|
|
'o',
|
|
'c',
|
|
'o',
|
|
'l'
|
|
};
|
|
|
|
// QDL maximum chunk size we support
|
|
const ULONG QDL_MAX_CHUNK_SIZE = 1024 * 1024 * 64;
|
|
|
|
/*=========================================================================*/
|
|
// eQDLCommand Enumeration
|
|
// QDL Command Code Enumeration
|
|
/*=========================================================================*/
|
|
enum eQDLCommand
|
|
{
|
|
eQDL_CMD_ENUM_BEGIN = -1,
|
|
|
|
eQDL_CMD_HELLO_REQ = 1, // 001 Hello request
|
|
eQDL_CMD_HELLO_RSP, // 002 Hello response
|
|
|
|
eQDL_CMD_ERROR = 13, // 013 Error report
|
|
|
|
eQDL_CMD_OPEN_UNFRAMED_REQ = 37, // 037 Open unframed image write request
|
|
eQDL_CMD_OPEN_UNFRAMED_RSP, // 038 Open unframed image write response
|
|
eQDL_CMD_WRITE_UNFRAMED_REQ, // 039 Unframed image write request
|
|
eQDL_CMD_WRITE_UNFRAMED_RSP, // 040 Unframed image write response
|
|
eQDL_CMD_SESSION_DONE_REQ, // 041 Unframed session done request
|
|
eQDL_CMD_SESSION_DONE_RSP, // 042 Unframed session done response
|
|
eQDL_CMD_DOWNLOAD_REQ, // 043 Switch to download protocol request
|
|
|
|
eQDL_CMD_SESSION_CLOSE_REQ = 45, // 045 Close unframed session request
|
|
eQDL_CMD_GET_IMAGE_PREF_REQ, // 046 Get image preference request
|
|
eQDL_CMD_GET_IMAGE_PREF_RSP, // 047 Get image preference response
|
|
|
|
eQDL_CMD_ENUM_END
|
|
};
|
|
|
|
/*===========================================================================
|
|
METHOD:
|
|
IsValid (Inline Method)
|
|
|
|
DESCRIPTION:
|
|
eQDLCommand validity check
|
|
|
|
PARAMETERS:
|
|
cmd [ I ] - Enum value being verified
|
|
|
|
RETURN VALUE:
|
|
bool
|
|
===========================================================================*/
|
|
inline bool IsValid( eQDLCommand cmd )
|
|
{
|
|
bool retVal = false;
|
|
|
|
switch (cmd)
|
|
{
|
|
case eQDL_CMD_HELLO_REQ:
|
|
case eQDL_CMD_HELLO_RSP:
|
|
case eQDL_CMD_ERROR:
|
|
case eQDL_CMD_OPEN_UNFRAMED_REQ:
|
|
case eQDL_CMD_OPEN_UNFRAMED_RSP:
|
|
case eQDL_CMD_WRITE_UNFRAMED_REQ:
|
|
case eQDL_CMD_WRITE_UNFRAMED_RSP:
|
|
case eQDL_CMD_SESSION_DONE_REQ:
|
|
case eQDL_CMD_SESSION_DONE_RSP:
|
|
case eQDL_CMD_DOWNLOAD_REQ:
|
|
case eQDL_CMD_SESSION_CLOSE_REQ:
|
|
case eQDL_CMD_GET_IMAGE_PREF_REQ:
|
|
case eQDL_CMD_GET_IMAGE_PREF_RSP:
|
|
retVal = true;
|
|
break;
|
|
}
|
|
|
|
return retVal;
|
|
};
|
|
|
|
/*=========================================================================*/
|
|
// eQDLError Enumeration
|
|
// QDL Error Enumeration
|
|
/*=========================================================================*/
|
|
enum eQDLError
|
|
{
|
|
eQDL_ERROR_ENUM_BEGIN = 0,
|
|
|
|
eQDL_ERROR_01, // 01 Reserved
|
|
eQDL_ERROR_BAD_ADDR, // 02 Invalid destination address
|
|
eQDL_ERROR_BAD_LEN, // 03 Invalid length
|
|
eQDL_ERROR_BAD_PACKET, // 04 Unexpected end of packet
|
|
eQDL_ERROR_BAD_CMD, // 05 Invalid command
|
|
eQDL_ERROR_06, // 06 Reserved
|
|
eQDL_ERROR_OP_FAILED, // 07 Operation failed
|
|
eQDL_ERROR_BAD_FLASH_ID, // 08 Invalid flash intelligent ID
|
|
eQDL_ERROR_BAD_VOLTAGE, // 09 Invalid programming voltage
|
|
eQDL_ERROR_WRITE_FAILED, // 10 Write verify failed
|
|
eQDL_ERROR_11, // 11 Reserved
|
|
eQDL_ERROR_BAD_SPC, // 12 Invalid security code
|
|
eQDL_ERROR_POWERDOWN, // 13 Power-down failed
|
|
eQDL_ERROR_UNSUPPORTED, // 14 NAND flash programming not supported
|
|
eQDL_ERROR_CMD_SEQ, // 15 Command out of sequence
|
|
eQDL_ERROR_CLOSE, // 16 Close failed
|
|
eQDL_ERROR_BAD_FEATURES, // 17 Invalid feature bits
|
|
eQDL_ERROR_SPACE, // 18 Out of space
|
|
eQDL_ERROR_BAD_SECURITY, // 19 Invalid security mode
|
|
eQDL_ERROR_MULTI_UNSUPPORTED, // 20 Multi-image NAND not supported
|
|
eQDL_ERROR_POWEROFF, // 21 Power-off command not supported
|
|
eQDL_ERROR_CMD_UNSUPPORTED, // 22 Command not supported
|
|
eQDL_ERROR_BAD_CRC, // 23 Invalid CRC
|
|
eQDL_ERROR_STATE, // 24 Command received in invalid state
|
|
eQDL_ERROR_TIMEOUT, // 25 Receive timeout
|
|
eQDL_ERROR_IMAGE_AUTH, // 26 Image authentication error
|
|
|
|
eQDL_ERROR_ENUM_END
|
|
};
|
|
|
|
/*===========================================================================
|
|
METHOD:
|
|
IsValid (Inline Method)
|
|
|
|
DESCRIPTION:
|
|
eQDLError validity check
|
|
|
|
PARAMETERS:
|
|
err [ I ] - Enum value being verified
|
|
|
|
RETURN VALUE:
|
|
bool
|
|
===========================================================================*/
|
|
inline bool IsValid( eQDLError err )
|
|
{
|
|
bool retVal = false;
|
|
if (err > eQDL_ERROR_ENUM_BEGIN && err < eQDL_ERROR_ENUM_END)
|
|
{
|
|
retVal = true;
|
|
}
|
|
|
|
return retVal;
|
|
};
|
|
|
|
/*=========================================================================*/
|
|
// eQDLImageType Enumeration
|
|
// QDL Download Image Type Enumeration
|
|
/*=========================================================================*/
|
|
enum eQDLImageType
|
|
{
|
|
eQDL_IMAGE_ENUM_BEGIN = -1,
|
|
|
|
eQDL_IMAGE_AMSS_MODEM = 5, // 05 AMSS modem image
|
|
eQDL_IMAGE_AMSS_APPLICATION, // 06 AMSS application image
|
|
|
|
eQDL_IMAGE_AMSS_UQCN = 13, // 13 Provisioning information
|
|
|
|
eQDL_IMAGE_DBL = 15, // 15 DBL image
|
|
eQDL_IMAGE_OSBL, // 16 OSBL image
|
|
|
|
eQDL_IMAGE_ENUM_END
|
|
};
|
|
|
|
/*===========================================================================
|
|
METHOD:
|
|
IsValid (Inline Method)
|
|
|
|
DESCRIPTION:
|
|
eQDLImageType validity check
|
|
|
|
PARAMETERS:
|
|
it [ I ] - Enum value being verified
|
|
|
|
RETURN VALUE:
|
|
bool
|
|
===========================================================================*/
|
|
inline bool IsValid( eQDLImageType it )
|
|
{
|
|
bool retVal = false;
|
|
|
|
switch (it)
|
|
{
|
|
case eQDL_IMAGE_AMSS_MODEM:
|
|
case eQDL_IMAGE_AMSS_APPLICATION:
|
|
case eQDL_IMAGE_AMSS_UQCN:
|
|
case eQDL_IMAGE_DBL:
|
|
case eQDL_IMAGE_OSBL:
|
|
retVal = true;
|
|
break;
|
|
}
|
|
|
|
return retVal;
|
|
};
|
|
|
|
/*=========================================================================*/
|
|
// eQDLOpenStatus Enumeration
|
|
// QDL Unframed Open Status Enumeration
|
|
/*=========================================================================*/
|
|
enum eQDLOpenStatus
|
|
{
|
|
eQDL_OPEN_STATUS_ENUM_BEGIN = -1,
|
|
|
|
eQDL_OPEN_STATUS_SUCCESS, // 00 Success
|
|
eQDL_OPEN_STATUS_SIZE, // 01 Reported image size error
|
|
eQDL_OPEN_STATUS_BAD_TYPE, // 02 Invalid image type for downloader
|
|
eQDL_OPEN_STATUS_HDR_SIZE, // 03 Reported image header size error
|
|
eQDL_OPEN_STATUS_HDR1, // 04 Image header incorrectly present
|
|
eQDL_OPEN_STATUS_HDR2, // 05 Image header required
|
|
eQDL_OPEN_STATUS_PROTECTION, // 06 Memory block protection error
|
|
eQDL_OPEN_STATUS_NOT_NEEDED, // 07 Image type not required
|
|
|
|
eQDL_OPEN_STATUS_ENUM_END
|
|
};
|
|
|
|
/*===========================================================================
|
|
METHOD:
|
|
IsValid (Inline Method)
|
|
|
|
DESCRIPTION:
|
|
eQDLOpenStatus validity check
|
|
|
|
PARAMETERS:
|
|
os [ I ] - Enum value being verified
|
|
|
|
RETURN VALUE:
|
|
bool
|
|
===========================================================================*/
|
|
inline bool IsValid( eQDLOpenStatus os )
|
|
{
|
|
bool retVal = false;
|
|
if (os > eQDL_OPEN_STATUS_ENUM_BEGIN && os < eQDL_OPEN_STATUS_ENUM_END)
|
|
{
|
|
retVal = true;
|
|
}
|
|
|
|
return retVal;
|
|
};
|
|
|
|
/*=========================================================================*/
|
|
// eQDLWriteStatus Enumeration
|
|
// QDL Unframed Write Status Enumeration
|
|
/*=========================================================================*/
|
|
enum eQDLWriteStatus
|
|
{
|
|
eQDL_WRITE_STATUS_ENUM_BEGIN = -1,
|
|
|
|
eQDL_WRITE_STATUS_SUCCESS, // 00 Success
|
|
eQDL_WRITE_STATUS_CRC, // 01 Error with CRC
|
|
eQDL_WRITE_STATUS_CONTENT, // 02 Error with chunk content
|
|
|
|
eQDL_WRITE_STATUS_ENUM_END
|
|
};
|
|
|
|
/*===========================================================================
|
|
METHOD:
|
|
IsValid (Inline Method)
|
|
|
|
DESCRIPTION:
|
|
eQDLWriteStatus validity check
|
|
|
|
PARAMETERS:
|
|
ws [ I ] - Enum value being verified
|
|
|
|
RETURN VALUE:
|
|
bool
|
|
===========================================================================*/
|
|
inline bool IsValid( eQDLWriteStatus ws )
|
|
{
|
|
bool retVal = false;
|
|
if (ws > eQDL_WRITE_STATUS_ENUM_BEGIN && ws < eQDL_WRITE_STATUS_ENUM_END)
|
|
{
|
|
retVal = true;
|
|
}
|
|
|
|
return retVal;
|
|
};
|
|
|
|
/*=========================================================================*/
|
|
// eQDLDoneStatus Enumeration
|
|
// QDL Done Status Enumeration
|
|
/*=========================================================================*/
|
|
enum eQDLDoneStatus
|
|
{
|
|
eQDL_DONE_STATUS_ENUM_BEGIN = -1,
|
|
|
|
eQDL_DONE_STATUS_SUCCESS, // 00 Success
|
|
eQDL_DONE_STATUS_AUTH, // 01 Authentication failure
|
|
eQDL_DONE_STATUS_WRITE, // 02 Write failure
|
|
|
|
eQDL_DONE_STATUS_ENUM_END
|
|
};
|
|
|
|
/*===========================================================================
|
|
METHOD:
|
|
IsValid (Inline Method)
|
|
|
|
DESCRIPTION:
|
|
eQDLDoneStatus validity check
|
|
|
|
PARAMETERS:
|
|
ds [ I ] - Enum value being verified
|
|
|
|
RETURN VALUE:
|
|
bool
|
|
===========================================================================*/
|
|
inline bool IsValid( eQDLDoneStatus ds )
|
|
{
|
|
bool retVal = false;
|
|
if (ds > eQDL_DONE_STATUS_ENUM_BEGIN && ds < eQDL_DONE_STATUS_ENUM_END)
|
|
{
|
|
retVal = true;
|
|
}
|
|
|
|
return retVal;
|
|
};
|