Sophie Dexter
/
Just4Trionic
Just4Trionic - CAN and BDM FLASH programmer for Saab cars
srecutils.cpp@1:d5452e398b76, 2010-09-14 (annotated)
- Committer:
- Just4pLeisure
- Date:
- Tue Sep 14 21:02:04 2010 +0000
- Revision:
- 1:d5452e398b76
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Just4pLeisure | 1:d5452e398b76 | 1 | /******************************************************************************* |
Just4pLeisure | 1:d5452e398b76 | 2 | |
Just4pLeisure | 1:d5452e398b76 | 3 | srecutils.h |
Just4pLeisure | 1:d5452e398b76 | 4 | (c) 2010 by Sophie Dexter |
Just4pLeisure | 1:d5452e398b76 | 5 | |
Just4pLeisure | 1:d5452e398b76 | 6 | Functions for manipulating Motorala S-records |
Just4pLeisure | 1:d5452e398b76 | 7 | |
Just4pLeisure | 1:d5452e398b76 | 8 | ******************************************************************************** |
Just4pLeisure | 1:d5452e398b76 | 9 | |
Just4pLeisure | 1:d5452e398b76 | 10 | WARNING: Use at your own risk, sadly this software comes with no guarantees. |
Just4pLeisure | 1:d5452e398b76 | 11 | This software is provided 'free' and in good faith, but the author does not |
Just4pLeisure | 1:d5452e398b76 | 12 | accept liability for any damage arising from its use. |
Just4pLeisure | 1:d5452e398b76 | 13 | |
Just4pLeisure | 1:d5452e398b76 | 14 | *******************************************************************************/ |
Just4pLeisure | 1:d5452e398b76 | 15 | |
Just4pLeisure | 1:d5452e398b76 | 16 | #include "srecutils.h" |
Just4pLeisure | 1:d5452e398b76 | 17 | |
Just4pLeisure | 1:d5452e398b76 | 18 | // SRecGetByte |
Just4pLeisure | 1:d5452e398b76 | 19 | // |
Just4pLeisure | 1:d5452e398b76 | 20 | // Returns an int which is a single byte made up from two ascii characters read from an S-record file |
Just4pLeisure | 1:d5452e398b76 | 21 | // |
Just4pLeisure | 1:d5452e398b76 | 22 | // inputs: a file pointer for the S-record file |
Just4pLeisure | 1:d5452e398b76 | 23 | // return: an integer which is the byte in hex format |
Just4pLeisure | 1:d5452e398b76 | 24 | |
Just4pLeisure | 1:d5452e398b76 | 25 | int SRecGetByte(FILE *fp) { |
Just4pLeisure | 1:d5452e398b76 | 26 | int c = 0; |
Just4pLeisure | 1:d5452e398b76 | 27 | int retbyte = 0; |
Just4pLeisure | 1:d5452e398b76 | 28 | |
Just4pLeisure | 1:d5452e398b76 | 29 | for(int i=0; i<2; i++) { |
Just4pLeisure | 1:d5452e398b76 | 30 | if ((c = fgetc(fp)) == EOF) return -1; |
Just4pLeisure | 1:d5452e398b76 | 31 | c -= (c > '9') ? ('A' - 10) : '0'; |
Just4pLeisure | 1:d5452e398b76 | 32 | retbyte = (retbyte << 4) + c; |
Just4pLeisure | 1:d5452e398b76 | 33 | } |
Just4pLeisure | 1:d5452e398b76 | 34 | return retbyte; |
Just4pLeisure | 1:d5452e398b76 | 35 | } |
Just4pLeisure | 1:d5452e398b76 | 36 | |
Just4pLeisure | 1:d5452e398b76 | 37 | // SRecGetAddress |
Just4pLeisure | 1:d5452e398b76 | 38 | // |
Just4pLeisure | 1:d5452e398b76 | 39 | // Returns an int which is the address part of the S-record line |
Just4pLeisure | 1:d5452e398b76 | 40 | // The S-record type 1/2/3 or 9/8/7 determines if there are 2, 3 or 4 bytes in the address |
Just4pLeisure | 1:d5452e398b76 | 41 | // |
Just4pLeisure | 1:d5452e398b76 | 42 | // inputs: an integer which is the number of bytes that make up the address; 2, 3 or 4 bytes |
Just4pLeisure | 1:d5452e398b76 | 43 | // a file pointer for the S-record file |
Just4pLeisure | 1:d5452e398b76 | 44 | // return: an integer which is the load address for the S-record |
Just4pLeisure | 1:d5452e398b76 | 45 | |
Just4pLeisure | 1:d5452e398b76 | 46 | int SRecGetAddress(int size, FILE *fp) { |
Just4pLeisure | 1:d5452e398b76 | 47 | int address = 0; |
Just4pLeisure | 1:d5452e398b76 | 48 | for (int i = 0; i<size; i++) |
Just4pLeisure | 1:d5452e398b76 | 49 | { |
Just4pLeisure | 1:d5452e398b76 | 50 | address <<= 8; |
Just4pLeisure | 1:d5452e398b76 | 51 | address |= SRecGetByte (fp); |
Just4pLeisure | 1:d5452e398b76 | 52 | } |
Just4pLeisure | 1:d5452e398b76 | 53 | return address; |
Just4pLeisure | 1:d5452e398b76 | 54 | } |