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:
5:1775b4b13232
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 4:682d96ff6d79 1
Just4pLeisure 4:682d96ff6d79 2 // gmlan.h - information and definitions needed for communicating with GMLAN
Just4pLeisure 4:682d96ff6d79 3
Just4pLeisure 4:682d96ff6d79 4 // (C) 2013 Sophie Dexter
Just4pLeisure 4:682d96ff6d79 5
Just4pLeisure 4:682d96ff6d79 6 #ifndef __GMLAN_H__
Just4pLeisure 4:682d96ff6d79 7 #define __GMLAN_H__
Just4pLeisure 4:682d96ff6d79 8
Just4pLeisure 4:682d96ff6d79 9 #include "mbed.h"
Just4pLeisure 4:682d96ff6d79 10
Just4pLeisure 4:682d96ff6d79 11 #include "common.h"
Just4pLeisure 4:682d96ff6d79 12 #include "canutils.h"
Just4pLeisure 4:682d96ff6d79 13
Just4pLeisure 5:1775b4b13232 14 #define T8REQID 0x7E0
Just4pLeisure 5:1775b4b13232 15 #define T8RESPID 0x7E8
Just4pLeisure 5:1775b4b13232 16
Just4pLeisure 5:1775b4b13232 17 #define T8USDTREQID 0x011
Just4pLeisure 5:1775b4b13232 18 #define T8UUDTRESPID 0x311
Just4pLeisure 5:1775b4b13232 19 #define T8USDTRESPID 0x411
Just4pLeisure 5:1775b4b13232 20
Just4pLeisure 4:682d96ff6d79 21 #define GMLANALLNODES 0x101
Just4pLeisure 4:682d96ff6d79 22
Just4pLeisure 4:682d96ff6d79 23 #define GMLANMESSAGETIMEOUT 50 // 50 milliseconds (0.05 of a second) - Seems to be plenty of time to wait for messages on the CAN bus
Just4pLeisure 4:682d96ff6d79 24 #define GMLANPTCT 150 // 150 milliseconds Timeout between tester request and ECU response or multiple ECU responses
Just4pLeisure 4:682d96ff6d79 25 #define GMLANPTCTENHANCED 5100 // 5100 milliseconds Enhanced response timing value for tester P2CT timer.
Just4pLeisure 4:682d96ff6d79 26
Just4pLeisure 4:682d96ff6d79 27 // Tester Present message, must be sent at least once every 5 seconds for some types of activity
Just4pLeisure 4:682d96ff6d79 28 // NOTE however that 2 seconds has been suggested as a good interval
Just4pLeisure 4:682d96ff6d79 29 #define GMLANTesterPresentPhysical {0x01,0x3E,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa}
Just4pLeisure 4:682d96ff6d79 30 #define GMLANTesterPresentFunctional {0xFE,0x01,0x3E,0xaa,0xaa,0xaa,0xaa,0xaa}
Just4pLeisure 4:682d96ff6d79 31 extern void GMLANTesterPresentAll();
Just4pLeisure 5:1775b4b13232 32 extern void GMLANTesterPresent(uint32_t ReqID, uint32_t RespID);
Just4pLeisure 4:682d96ff6d79 33
Just4pLeisure 4:682d96ff6d79 34 // All steps needed in preparation for using a bootloader ('Utility File' in GMLAN parlance)
Just4pLeisure 5:1775b4b13232 35 bool GMLANprogrammingSetupProcess(uint32_t ReqID, uint32_t RespID);
Just4pLeisure 4:682d96ff6d79 36
Just4pLeisure 4:682d96ff6d79 37 // All steps needed to transfer and start a bootloader ('Utility File' in GMLAN parlance)
Just4pLeisure 5:1775b4b13232 38 bool GMLANprogrammingUtilityFileProcess(uint32_t ReqID, uint32_t RespID, const uint8_t UtilityFile[]);
Just4pLeisure 4:682d96ff6d79 39
Just4pLeisure 4:682d96ff6d79 40
Just4pLeisure 4:682d96ff6d79 41 // Start a Diagnostic Session
Just4pLeisure 4:682d96ff6d79 42 #define GMLANinitiateDiagnosticOperation {0x02,0x10,0x02,0xaa,0xaa,0xaa,0xaa,0xaa}
Just4pLeisure 4:682d96ff6d79 43 #define GMLANdisableAllDTCs 0x02
Just4pLeisure 5:1775b4b13232 44 bool GMLANinitiateDiagnostic(uint32_t ReqID, uint32_t RespID, char level);
Just4pLeisure 4:682d96ff6d79 45
Just4pLeisure 4:682d96ff6d79 46
Just4pLeisure 4:682d96ff6d79 47 // Tell T8 To disable normal communication messages
Just4pLeisure 4:682d96ff6d79 48 #define GMLANdisableCommunication {0x01,0x28,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa}
Just4pLeisure 5:1775b4b13232 49 bool GMLANdisableNormalCommunication(uint32_t ReqID, uint32_t RespID);
Just4pLeisure 4:682d96ff6d79 50
Just4pLeisure 4:682d96ff6d79 51
Just4pLeisure 4:682d96ff6d79 52 // Tell T8 To report programmed state
Just4pLeisure 4:682d96ff6d79 53 #define GMLANReportProgrammed {0x01,0xA2,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa}
Just4pLeisure 5:1775b4b13232 54 bool GMLANReportProgrammedState(uint32_t ReqID, uint32_t RespID);
Just4pLeisure 4:682d96ff6d79 55
Just4pLeisure 4:682d96ff6d79 56 // Tell T8 To request or initiate programming
Just4pLeisure 4:682d96ff6d79 57 #define GMLANProgramming {0x02,0xA5,0x00,0xaa,0xaa,0xaa,0xaa,0xaa}
Just4pLeisure 4:682d96ff6d79 58 #define GMLANRequestProgrammingNormal 0x01 // I or P-Bus speed
Just4pLeisure 4:682d96ff6d79 59 #define GMLANRequestProgrammingFast 0x02 // 83.333 kbps for single-wire CAN
Just4pLeisure 4:682d96ff6d79 60 #define GMLANEnableProgrammingMode 0x03 // Tell T8 To initiate programming
Just4pLeisure 5:1775b4b13232 61 bool GMLANProgrammingMode(uint32_t ReqID, uint32_t RespID, char mode);
Just4pLeisure 4:682d96ff6d79 62
Just4pLeisure 4:682d96ff6d79 63 // authenticate with T8
Just4pLeisure 4:682d96ff6d79 64 #define GMLANSecurityAccessSeed {0x02,0x27,0x01,0xaa,0xaa,0xaa,0xaa,0xaa}
Just4pLeisure 5:1775b4b13232 65 bool GMLANSecurityAccessRequest(uint32_t ReqID, uint32_t RespID, char level, uint16_t& seed);
Just4pLeisure 4:682d96ff6d79 66 #define GMLANSecurityAccessKey {0x04,0x27,0x02,0xCA,0xFE,0xaa,0xaa,0xaa}
Just4pLeisure 5:1775b4b13232 67 bool GMLANSecurityAccessSendKey(uint32_t ReqID, uint32_t RespID, char level, uint16_t key);
Just4pLeisure 4:682d96ff6d79 68
Just4pLeisure 4:682d96ff6d79 69 // Tell T8 We are Requesting a download session
Just4pLeisure 4:682d96ff6d79 70 #define GMLANRequestDownloadMessage {0x06,0x34,0x00,0x00,0x00,0x00,0x00,0xaa}
Just4pLeisure 4:682d96ff6d79 71 #define GMLANRequestDownloadModeNormal 0x00
Just4pLeisure 4:682d96ff6d79 72 #define GMLANRequestDownloadModeEncrypted 0x01
Just4pLeisure 4:682d96ff6d79 73 #define GMLANRequestDownloadModeCompressed 0x10
Just4pLeisure 4:682d96ff6d79 74 #define GMLANRequestDownloadModeCompressedEncrypted 0x11
Just4pLeisure 5:1775b4b13232 75 bool GMLANRequestDownload(uint32_t ReqID, uint32_t RespID, char dataFormatIdentifier);
Just4pLeisure 4:682d96ff6d79 76
Just4pLeisure 4:682d96ff6d79 77 // Data blocks are sent using this message type
Just4pLeisure 4:682d96ff6d79 78 #define GMLANDataTransferMessage {0x10,0xF0,0x36,0x00,0xCA,0xFE,0xBA,0xBE}
Just4pLeisure 4:682d96ff6d79 79 #define GMLANDOWNLOAD 0x00
Just4pLeisure 4:682d96ff6d79 80 #define GMLANEXECUTE 0x80
Just4pLeisure 5:1775b4b13232 81 bool GMLANDataTransfer(uint32_t ReqID, uint32_t RespID, char length, char function, uint32_t address);
Just4pLeisure 5:1775b4b13232 82 bool GMLANDataTransferFirstFrame(uint32_t ReqID, uint32_t RespID, char length, char function, uint32_t address);
Just4pLeisure 5:1775b4b13232 83 bool GMLANDataTransferConsecutiveFrame(uint32_t ReqID, char framenumber, char data[7]);
Just4pLeisure 5:1775b4b13232 84 bool GMLANDataTransferBlockAcknowledge(uint32_t RespID);
Just4pLeisure 4:682d96ff6d79 85
Just4pLeisure 4:682d96ff6d79 86 // Tell T8 ECU to return to normal mode after FLASHing
Just4pLeisure 5:1775b4b13232 87 #define GMLANReturnToNormalModeMessage {0x01,0x20,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa}
Just4pLeisure 5:1775b4b13232 88 bool GMLANReturnToNormalMode(uint32_t ReqID, uint32_t RespID);
Just4pLeisure 4:682d96ff6d79 89
Just4pLeisure 4:682d96ff6d79 90
Just4pLeisure 4:682d96ff6d79 91 // Show a description of GMLAN Return Codes when an error occurs
Just4pLeisure 4:682d96ff6d79 92 void GMLANShowReturnCode(char returnCode);
Just4pLeisure 4:682d96ff6d79 93
Just4pLeisure 4:682d96ff6d79 94 #endif