Kinetis Bootloader Host  2.0.0
Host Tools for Kinetis devices
apps/KinetisFlashTool/KinetisFlashTool/Bootloader.h
1 /*
2 * Copyright (c) 2013-15, Freescale Semiconductor, Inc.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without modification,
6 * are permitted provided that the following conditions are met:
7 *
8 * o Redistributions of source code must retain the above copyright notice, this list
9 * of conditions and the following disclaimer.
10 *
11 * o Redistributions in binary form must reproduce the above copyright notice, this
12 * list of conditions and the following disclaimer in the documentation and/or
13 * other materials provided with the distribution.
14 *
15 * o Neither the name of Freescale Semiconductor, Inc. nor the names of its
16 * contributors may be used to endorse or promote products derived from this
17 * software without specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
23 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
24 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
26 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30 
31 #pragma once
32 #include "afxwin.h"
33 #include <vector>
34 #include <array>
35 #include "../../common/blfwkdll/blfwkdll.h"
36 
37 using namespace std;
38 
42 class Bootloader : public CWinThread
43 {
44 public:
49  {
50  UINT32 targetVersion;
51  UINT32 procotolVersion;
52  UINT32 securityState;
53  UINT32 flashSize;
54  UINT32 flashSectorSize;
55  UINT32 ramSize;
57  UINT32 rsvRgnFlashEnd;
58  UINT32 rsvRgnRamStart;
59  UINT32 rsvRgnRamEnd;
60  UINT32 supportedCmd;
61  };
62 
67  {
68  BOOL autoConnect;
71  std::string backdoorkey;
72  std::string imageFilePath;
73  uint32_t baseAddress;
74  };
75 
79  struct EraseOption
80  {
82  {
83  erase_region = 0,
84  erase_all = 1,
85  erase_all_and_unsecure = 2
86  };
87 
89  uint32_t memoryID;
90  uint32_t startAddress;
91  uint32_t length;
92  };
93 
98  {
99  uint32_t index;
100  uint32_t byteCount;
101  std::string data;
102  };
103 
104 public:
106  Bootloader() { this->Open(); };
108  virtual ~Bootloader() { this->Close(); };
110  virtual BOOL InitInstance() { return CWinThread::InitInstance(); };
112  virtual int ExitInstance() { return CWinThread::ExitInstance(); };
117  {
118  KBL_Status_Success = 0x0,
119  KBL_Status_AbortDataPhase = 0x2712,
120  };
122 
126  bool CanRun();
127 
131  DWORD Open();
132 
136  void Close();
137 
141  static void progressCallback(int percentage, int segmentIndex, int segmentCount);
142 
146  DWORD WaitForEvents(DWORD time);
147 
151  void ResetEvents(DWORD events);
152 
156  void Ping();
157 
161  void Reset();
162 
166  void Connect(blfwkdll::Updater::PeripheralConfig *config);
167 
171  void UpdateStatus();
172 
176  void UpdateImage(blfwkdll::Updater::PeripheralConfig *config, FlashFirmwareOption *option);
177 
181  void Erase(EraseOption *option);
182 
186  void ProgramOnce(ProgramOnceOption *option);
187 
188  HANDLE m_pingEvent;
189  HANDLE m_statusEvent;
190  HANDLE m_resetEvent;
191  HANDLE m_connectEvent;
192  HANDLE m_updateEvent;
193  HANDLE m_eraseEvent;
195  HANDLE m_exitEvent;
196  CWinThread *m_pThread;
197 
198  bool m_abort;
199  bool m_isRunning;
200  bool m_isExiting;
206  blfwkdll::Updater::PeripheralConfig m_config;
207  blfwkdll::Updater *m_updater;
208 };
209 
210 extern Bootloader *g_pBootloader;
uint32_t length
Length in bytes to erase.
Definition: apps/KinetisFlashTool/KinetisFlashTool/Bootloader.h:91
std::string data
IFR data to write. 4 or 8 hex digits with on leading "0x".
Definition: apps/KinetisFlashTool/KinetisFlashTool/Bootloader.h:101
uint32_t memoryID
Memory ID used for flash-erase-all command.
Definition: apps/KinetisFlashTool/KinetisFlashTool/Bootloader.h:89
uint32_t startAddress
Start address to erase.
Definition: apps/KinetisFlashTool/KinetisFlashTool/Bootloader.h:90
uint32_t baseAddress
Base address where image file is written to.(Only used for binary file.)
Definition: apps/KinetisFlashTool/KinetisFlashTool/Bootloader.h:73
UINT32 ramSize
RAM memory size.
Definition: apps/KinetisFlashTool/KinetisFlashTool/Bootloader.h:55
FlashFirmwareOption struct contains information for an update progress.
Definition: apps/KinetisFlashTool/KinetisFlashTool/Bootloader.h:66
UINT32 rsvRgnFlashEnd
End address of flash reserved region.
Definition: apps/KinetisFlashTool/KinetisFlashTool/Bootloader.h:57
std::string imageFilePath
Absolute path for image file.
Definition: apps/KinetisFlashTool/KinetisFlashTool/Bootloader.h:72
bool m_isConneted
Flag is set when connect to a target device.
Definition: apps/KinetisFlashTool/KinetisFlashTool/Bootloader.h:201
Bootloader()
Generated standard constructor.
Definition: apps/KinetisFlashTool/KinetisFlashTool/Bootloader.h:106
UINT32 flashSectorSize
Flash memory sector size.
Definition: apps/KinetisFlashTool/KinetisFlashTool/Bootloader.h:54
HANDLE m_statusEvent
Update status event.
Definition: apps/KinetisFlashTool/KinetisFlashTool/Bootloader.h:189
blfwkdll::Updater::PeripheralConfig m_config
Contains information for peripheral configuration.
Definition: apps/KinetisFlashTool/KinetisFlashTool/Bootloader.h:206
STL namespace.
virtual ~Bootloader()
Generated standard destructor.
Definition: apps/KinetisFlashTool/KinetisFlashTool/Bootloader.h:108
UINT32 rsvRgnFlashStart
Start address of flash reserved region.
Definition: apps/KinetisFlashTool/KinetisFlashTool/Bootloader.h:56
UINT32 targetVersion
Bootloader version.
Definition: apps/KinetisFlashTool/KinetisFlashTool/Bootloader.h:50
UINT32 rsvRgnRamStart
Start address of RAM reserved region.
Definition: apps/KinetisFlashTool/KinetisFlashTool/Bootloader.h:58
UINT32 rsvRgnRamEnd
End address of RAM reserved region.
Definition: apps/KinetisFlashTool/KinetisFlashTool/Bootloader.h:59
uint32_t byteCount
IFR length( should be 4 or 8).
Definition: apps/KinetisFlashTool/KinetisFlashTool/Bootloader.h:100
HANDLE m_connectEvent
Connect event.
Definition: apps/KinetisFlashTool/KinetisFlashTool/Bootloader.h:191
ERASE_OPERATION
Definition: apps/KinetisFlashTool/KinetisFlashTool/Bootloader.h:81
UINT32 supportedCmd
Current device supported command.
Definition: apps/KinetisFlashTool/KinetisFlashTool/Bootloader.h:60
HANDLE m_eraseEvent
Erase event.
Definition: apps/KinetisFlashTool/KinetisFlashTool/Bootloader.h:193
std::string backdoorkey
Backdoor key.
Definition: apps/KinetisFlashTool/KinetisFlashTool/Bootloader.h:71
HANDLE m_exitEvent
Exit event to let child thread exit.
Definition: apps/KinetisFlashTool/KinetisFlashTool/Bootloader.h:195
CWinThread * m_pThread
Pointer to child thread.
Definition: apps/KinetisFlashTool/KinetisFlashTool/Bootloader.h:196
UINT32 flashSize
Flash memory size.
Definition: apps/KinetisFlashTool/KinetisFlashTool/Bootloader.h:53
KibbleStatusCode
KibbleStatusCode struct contains two correct status code.
Definition: apps/KinetisFlashTool/KinetisFlashTool/Bootloader.h:116
ERASE_OPERATION option
Erase operation..
Definition: apps/KinetisFlashTool/KinetisFlashTool/Bootloader.h:88
HANDLE m_programOnceEvent
Program IFR event.
Definition: apps/KinetisFlashTool/KinetisFlashTool/Bootloader.h:194
ProgramOnceOption struct contains information for a program IFR progress.
Definition: apps/KinetisFlashTool/KinetisFlashTool/Bootloader.h:97
virtual int ExitInstance()
Overrides.
Definition: apps/KinetisFlashTool/KinetisFlashTool/Bootloader.h:112
Bootloader class.
Definition: apps/KinetisFlashTool/KinetisFlashTool/Bootloader.h:42
BOOL autoConnect
Auto connect device after an update, if set TRUE.(Currently, not used)
Definition: apps/KinetisFlashTool/KinetisFlashTool/Bootloader.h:68
HANDLE m_pingEvent
Ping event.
Definition: apps/KinetisFlashTool/KinetisFlashTool/Bootloader.h:188
EraseOption struct contains information for an erase progress.
Definition: apps/KinetisFlashTool/KinetisFlashTool/Bootloader.h:79
bool m_isExiting
Flag is set to let child thread exit.
Definition: apps/KinetisFlashTool/KinetisFlashTool/Bootloader.h:200
BOOL useKeytoUnlock
Execute flash-security-disable to unlock the device.
Definition: apps/KinetisFlashTool/KinetisFlashTool/Bootloader.h:70
UINT32 securityState
Security state.
Definition: apps/KinetisFlashTool/KinetisFlashTool/Bootloader.h:52
BOOL doErasetoUnlock
Execute flash-erase-all-unsecure to unlock the device.
Definition: apps/KinetisFlashTool/KinetisFlashTool/Bootloader.h:69
HANDLE m_resetEvent
Reset event.
Definition: apps/KinetisFlashTool/KinetisFlashTool/Bootloader.h:190
blfwkdll::Updater * m_updater
Pointer to a blfwkdll::Updater.
Definition: apps/KinetisFlashTool/KinetisFlashTool/Bootloader.h:207
TargetInformation m_targetInfo
Contains devices information.
Definition: apps/KinetisFlashTool/KinetisFlashTool/Bootloader.h:202
HANDLE m_updateEvent
Update event.
Definition: apps/KinetisFlashTool/KinetisFlashTool/Bootloader.h:192
bool m_isRunning
Flag is set when there is an operation under processing.
Definition: apps/KinetisFlashTool/KinetisFlashTool/Bootloader.h:199
ProgramOnceOption m_programOnceOption
Contains information for a programming-IFR operation.
Definition: apps/KinetisFlashTool/KinetisFlashTool/Bootloader.h:205
UINT32 procotolVersion
Serial procotol version.
Definition: apps/KinetisFlashTool/KinetisFlashTool/Bootloader.h:51
EraseOption m_eraseOption
Contains information for an erase operation.
Definition: apps/KinetisFlashTool/KinetisFlashTool/Bootloader.h:204
virtual BOOL InitInstance()
Overrides.
Definition: apps/KinetisFlashTool/KinetisFlashTool/Bootloader.h:110
FlashFirmwareOption m_firmwareConfig
Contains information for a update operation.
Definition: apps/KinetisFlashTool/KinetisFlashTool/Bootloader.h:203
bool m_abort
Flag is set to abort the update progress.
Definition: apps/KinetisFlashTool/KinetisFlashTool/Bootloader.h:198
uint32_t index
IFR index.
Definition: apps/KinetisFlashTool/KinetisFlashTool/Bootloader.h:99
TargetInformation struct contains devices information.
Definition: apps/KinetisFlashTool/KinetisFlashTool/Bootloader.h:48