| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258 | /******************************************************************************** Copyright 2011-2012, Cypress Semiconductor Corporation.  All rights reserved.* You may use this file only in accordance with the license, terms, conditions, * disclaimers, and limitations in the end user license agreement accompanying * the software package with which this file was provided.********************************************************************************/#ifndef __CYBTLDR_API_H__#define __CYBTLDR_API_H__#include "cybtldr_utils.h"/* * This struct defines all of the items necessary for the bootloader * host to communicate over an arbitrary communication protocol. The * caller must provide implementations of these items to use their * deisred communication protocol. */typedef struct{    /* Function used to open the communications connection */    int (*OpenConnection)(void);    /* Function used to close the communications connection */    int (*CloseConnection)(void);    /* Function used to read data over the communications connection */    int (*ReadData)(unsigned char*, int);    /* Function used to write data over the communications connection */    int (*WriteData)(unsigned char*, int);    /* Value used to specify the maximum number of bytes that can be trasfered at a time */    unsigned int MaxTransferSize;} CyBtldr_CommunicationsData;/******************************************************************************** Function Name: CyBtldr_TransferData********************************************************************************* Summary:*   This function is responsible for transfering a buffer of data to the target*   device and then reading a response packet back from the device.** Parameters:*   inBuf   - The buffer containing data to send to the target device*   inSize  - The number of bytes to send to the target device*   outBuf  - The buffer to store the data read from the device*   outSize - The number of bytes to read from the target device** Returns:*   CYRET_SUCCESS  - The transfer completed successfully*   CYRET_ERR_COMM - There was a communication error talking to the device********************************************************************************/int CyBtldr_TransferData(unsigned char* inBuf, int inSize, unsigned char* outBuf, int outSize);/******************************************************************************** Function Name: CyBtldr_ValidateRow********************************************************************************* Summary:*   This function is responsible for verifying that the provided arrayId and*   row number are valid for a bootload operation.** Parameters:*   arrayId - The array to check*   rowNum  - The row number within the array to check** Returns:*   CYRET_SUCCESS   - The array and row are available for communication*   CYRET_ERR_ARRAY - The array is not valid for communication*   CYRET_ERR_ROW   - The array/row number is not valid for communication********************************************************************************/int CyBtldr_ValidateRow(unsigned char arrayId, unsigned short rowNum);/******************************************************************************** Function Name: CyBtldr_StartBootloadOperation********************************************************************************* Summary:*   Initiates a new bootload operation.  This must be called before any other *   request to send data to the bootloader.  A corresponding call to *   CyBtldr_EndBootloadOperation() should be made once all transactions are *   complete.** Parameters:*   comm     – Communication struct used for communicating with the target device*   expSiId  - The Silicon ID of the device we expect to communicate with*   expSiRev - The Silicon Rev of the device we expect to communicate with*   blVer    - The Bootloader version that is running on the device** Returns:*   CYRET_SUCCESS     - The start request was sent successfully*   CYRET_ERR_DEVICE  - The detected device does not match the desired device*   CYRET_ERR_VERSION - The detected bootloader version is not compatible*   CYRET_ERR_BTLDR   - The bootloader experienced an error*   CYRET_ERR_COMM    - There was a communication error talking to the device********************************************************************************/EXTERN int CyBtldr_StartBootloadOperation(CyBtldr_CommunicationsData* comm, unsigned long expSiId, unsigned char expSiRev, unsigned long* blVer);/******************************************************************************** Function Name: CyBtldr_EndBootloadOperation********************************************************************************* Summary:*   Terminates the current bootload operation.  This should be called once all *   bootload commands have been sent and no more communication is desired.** Parameters:*   void.** Returns:*   CYRET_SUCCESS   - The end request was sent successfully*   CYRET_ERR_BTLDR - The bootloader experienced an error*   CYRET_ERR_COMM  - There was a communication error talking to the device********************************************************************************/EXTERN int CyBtldr_EndBootloadOperation(void);/******************************************************************************** Function Name: CyBtldr_GetApplicationStatus********************************************************************************* Summary:*   Gets the status for the provided application id. The status includes whether*   the application is valid and whether it is currently marked as active.  This*   should be called immediatly after enter bootloader in order to determine if*   the application is suitable for bootloading.*   NOTE: This is only valid for multi application bootloaders.** Parameters:*   appID    - The application ID to get status information for*   isValid  - Is the provided application valid to be executed*   isActive - Is the provided application already marked as the active app** Returns:*   CYRET_SUCCESS   - The end request was sent successfully*   CYRET_ERR_BTLDR - The bootloader experienced an error*   CYRET_ERR_COMM  - There was a communication error talking to the device*   CYRET_ERR_LENGTH- The result packet does not have enough data*   CYRET_ERR_DATA  - The result packet does not contain valid data********************************************************************************/EXTERN int CyBtldr_GetApplicationStatus(unsigned char appID, unsigned char* isValid, unsigned char* isActive);/******************************************************************************** Function Name: CyBtldr_SetApplicationStatus********************************************************************************* Summary:*   Sets the application that the bootloader will run.  This should be called*   after a new application has been programmed in and verified *   NOTE: This is only valid for multi application bootloaders.** Parameters:*   appID    - The application ID to set as the active application ** Returns:*   CYRET_SUCCESS   - The end request was sent successfully*   CYRET_ERR_BTLDR - The bootloader experienced an error*   CYRET_ERR_COMM  - There was a communication error talking to the device*   CYRET_ERR_LENGTH- The result packet does not have enough data*   CYRET_ERR_DATA  - The result packet does not contain valid data*   CYRET_ERR_APP   - The application is not valid and cannot be set as active********************************************************************************/EXTERN int CyBtldr_SetApplicationStatus(unsigned char appID);/******************************************************************************** Function Name: CyBtldr_ProgramRow********************************************************************************* Summary:*   Sends a single row of data to the bootloader to be programmed into flash** Parameters:*   arrayID – The flash array that is to be reprogrammed*   rowNum  – The row number within the array that is to be reprogrammed*   buf     – The buffer of data to program into the devices flash*   size    – The number of bytes in data that need to be sent to the bootloader** Returns:*   CYRET_SUCCESS    - The row was programmed successfully*   CYRET_ERR_LENGTH - The result packet does not have enough data*   CYRET_ERR_DATA   - The result packet does not contain valid data*   CYRET_ERR_ARRAY  - The array is not valid for programming*   CYRET_ERR_ROW    - The array/row number is not valid for programming*   CYRET_ERR_BTLDR  - The bootloader experienced an error*   CYRET_ERR_ACTIVE - The application is currently marked as active********************************************************************************/EXTERN int CyBtldr_ProgramRow(unsigned char arrayID, unsigned short rowNum, unsigned char* buf, unsigned short size);/******************************************************************************** Function Name: CyBtldr_EraseRow********************************************************************************* Summary:*   Erases a single row of flash data from the device.** Parameters:*   arrayID – The flash array that is to have a row erased*   rowNum  – The row number within the array that is to be erased** Returns:*   CYRET_SUCCESS    - The row was erased successfully*   CYRET_ERR_LENGTH - The result packet does not have enough data*   CYRET_ERR_DATA   - The result packet does not contain valid data*   CYRET_ERR_ARRAY  - The array is not valid for programming*   CYRET_ERR_ROW    - The array/row number is not valid for programming*   CYRET_ERR_BTLDR  - The bootloader experienced an error*   CYRET_ERR_COMM   - There was a communication error talking to the device*   CYRET_ERR_ACTIVE - The application is currently marked as active********************************************************************************/EXTERN int CyBtldr_EraseRow(unsigned char arrayID, unsigned short rowNum);/******************************************************************************** Function Name: CyBtldr_VerifyRow********************************************************************************* Summary:*   Verifies that the data contained within the specified flash array and row *   matches the expected value.** Parameters:*   arrayID  – The flash array that is to be verified*   rowNum   – The row number within the array that is to be verified*   checksum – The expected checksum value for the row** Returns:*   CYRET_SUCCESS      - The row was verified successfully*   CYRET_ERR_LENGTH   - The result packet does not have enough data*   CYRET_ERR_DATA     - The result packet does not contain valid data*   CYRET_ERR_ARRAY	   - The array is not valid for programming*   CYRET_ERR_ROW      - The array/row number is not valid for programming*   CYRET_ERR_CHECKSUM - The checksum does not match the expected value*   CYRET_ERR_BTLDR    - The bootloader experienced an error*   CYRET_ERR_COMM     - There was a communication error talking to the device********************************************************************************/EXTERN int CyBtldr_VerifyRow(unsigned char arrayID, unsigned short rowNum, unsigned char checksum);/******************************************************************************** Function Name: CyBtldr_VerifyApplication********************************************************************************* Summary:*   Verifies that the checksum for the entire bootloadable application matches *   the expected value.  This is used to verify that the entire bootloadable*   image is valid and ready to execute.** Parameters:*   void** Returns:*   CYRET_SUCCESS      - The application was verified successfully*   CYRET_ERR_LENGTH   - The result packet does not have enough data*   CYRET_ERR_DATA     - The result packet does not contain valid data*   CYRET_ERR_CHECKSUM - The checksum does not match the expected value*   CYRET_ERR_BTLDR    - The bootloader experienced an error*   CYRET_ERR_COMM     - There was a communication error talking to the device********************************************************************************/EXTERN int CyBtldr_VerifyApplication();#endif
 |