| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 | 
							- /*******************************************************************************
 
- * 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.
 
- ********************************************************************************/
 
- #include <string.h>
 
- #include "cybtldr_parse.h"
 
- /* Pointer to the *.cyacd file containing the data that is to be read */
 
- static FILE* dataFile;
 
- unsigned char CyBtldr_FromHex(char value)
 
- {
 
-     if ('0' <= value && value <= '9')
 
-         return (unsigned char)(value - '0');
 
-     if ('a' <= value && value <= 'f')
 
-         return (unsigned char)(10 + value - 'a');
 
-     if ('A' <= value && value <= 'F')
 
-         return (unsigned char)(10 + value - 'A');
 
-     return 0;
 
- }
 
- int CyBtldr_FromAscii(unsigned int bufSize, unsigned char* buffer, unsigned short* rowSize, unsigned char* rowData)
 
- {
 
-     unsigned short i;
 
-     int err = CYRET_SUCCESS;
 
-     if (bufSize & 1) // Make sure even number of bytes
 
-         err = CYRET_ERR_LENGTH;
 
-     else
 
-     {
 
-         for (i = 0; i < bufSize / 2; i++)
 
-         {
 
-             rowData[i] = (CyBtldr_FromHex(buffer[i * 2]) << 4) | CyBtldr_FromHex(buffer[i * 2 + 1]);
 
-         }
 
-         *rowSize = i;
 
-     }
 
-     return err;
 
- }
 
- int CyBtldr_ReadLine(unsigned int* size, char* buffer)
 
- {
 
-     int err = CYRET_SUCCESS;
 
-     unsigned int len = 0;
 
-     if (NULL != dataFile && !feof(dataFile))
 
-     {
 
-         if (NULL != fgets(buffer, MAX_BUFFER_SIZE, dataFile))
 
-         {
 
-             len = strlen(buffer);
 
-             while (len > 0 && ('\n' == buffer[len - 1] || '\r' == buffer[len - 1]))
 
-                 --len;
 
-         }
 
-         else
 
-             err = CYRET_ERR_EOF;
 
-     }
 
-     else
 
-         err = CYRET_ERR_FILE;
 
-     *size = len;
 
-     return err;
 
- }
 
- int CyBtldr_OpenDataFile(const char* file)
 
- {
 
-     dataFile = fopen(file, "r");
 
-     return (NULL == dataFile)
 
-         ? CYRET_ERR_FILE
 
-         : CYRET_SUCCESS;
 
- }
 
- int CyBtldr_ParseHeader(unsigned int bufSize, unsigned char* buffer, unsigned long* siliconId, unsigned char* siliconRev, unsigned char* chksum)
 
- {
 
-     const unsigned int LENGTH_ID     = 5;            //4-silicon id, 1-silicon rev
 
-     const unsigned int LENGTH_CHKSUM = LENGTH_ID + 1; //1-checksum type
 
-     unsigned short rowSize;
 
-     unsigned char rowData[MAX_BUFFER_SIZE];
 
-     int err = CyBtldr_FromAscii(bufSize, buffer, &rowSize, rowData);
 
-     if (CYRET_SUCCESS == err)
 
-     {
 
-         if (rowSize >= LENGTH_CHKSUM)
 
-             *chksum = rowData[5];
 
-         if (rowSize >= LENGTH_ID)
 
-         {
 
-             *siliconId = (rowData[0] << 24) | (rowData[1] << 16) | (rowData[2] << 8) | (rowData[3]);
 
-             *siliconRev = rowData[4];
 
-         }
 
-         else
 
-             err = CYRET_ERR_LENGTH;
 
-     }
 
-     return err;
 
- }
 
- int CyBtldr_ParseRowData(unsigned int bufSize, unsigned char* buffer, unsigned char* arrayId, unsigned short* rowNum, unsigned char* rowData, unsigned short* size, unsigned char* checksum)
 
- {
 
-     const unsigned short MIN_SIZE = 6; //1-array, 2-addr, 2-size, 1-checksum
 
-     const int DATA_OFFSET = 5;
 
-     unsigned int i;
 
-     unsigned short hexSize;
 
-     unsigned char hexData[MAX_BUFFER_SIZE];
 
-     int err = CYRET_SUCCESS;
 
-     if (bufSize <= MIN_SIZE)
 
-         err = CYRET_ERR_LENGTH;
 
-     else if (buffer[0] == ':')
 
-     {
 
-         err = CyBtldr_FromAscii(bufSize - 1, &buffer[1], &hexSize, hexData);
 
-         *arrayId = hexData[0];
 
-         *rowNum = (hexData[1] << 8) | (hexData[2]);
 
-         *size = (hexData[3] << 8) | (hexData[4]);
 
-         *checksum = (hexData[hexSize - 1]);
 
-         if ((*size + MIN_SIZE) == hexSize)
 
-         {
 
-             for (i = 0; i < *size; i++)
 
-             {
 
-                 rowData[i] = (hexData[DATA_OFFSET + i]);
 
-             }
 
-         }
 
-         else
 
-             err = CYRET_ERR_DATA;
 
-     }
 
-     else
 
-         err = CYRET_ERR_CMD;
 
-     return err;
 
- }
 
- int CyBtldr_CloseDataFile(void)
 
- {
 
-     int err = 0;
 
-     if (NULL != dataFile)
 
-     {
 
-         err = fclose(dataFile);
 
-         dataFile = NULL;
 
-     }
 
-     return (0 == err)
 
-         ? CYRET_SUCCESS
 
-         : CYRET_ERR_FILE;
 
- }
 
 
  |