Just4Trionic - CAN and BDM FLASH programmer for Saab cars

Dependencies:   mbed

Committer:
Just4pLeisure
Date:
Sat Apr 23 18:31:40 2016 +0000
Revision:
6:2fbcbebed28c
Parent:
1:d5452e398b76
Version 1.6 Faster T7 P-BUS FLASHing algorithm, longer T8 erase timeout fixed BDM register display function

Who changed what in which revision?

UserRevisionLine numberNew 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 }