1

Committer:
group-STM32F031
Date:
Wed Mar 21 18:13:41 2018 +0000
Revision:
0:d193d40d4fa1
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
group-STM32F031 0:d193d40d4fa1 1 // ----------------------------------------------------------------------------
group-STM32F031 0:d193d40d4fa1 2 // Copyright 2016-2017 ARM Ltd.
group-STM32F031 0:d193d40d4fa1 3 //
group-STM32F031 0:d193d40d4fa1 4 // SPDX-License-Identifier: Apache-2.0
group-STM32F031 0:d193d40d4fa1 5 //
group-STM32F031 0:d193d40d4fa1 6 // Licensed under the Apache License, Version 2.0 (the "License");
group-STM32F031 0:d193d40d4fa1 7 // you may not use this file except in compliance with the License.
group-STM32F031 0:d193d40d4fa1 8 // You may obtain a copy of the License at
group-STM32F031 0:d193d40d4fa1 9 //
group-STM32F031 0:d193d40d4fa1 10 // http://www.apache.org/licenses/LICENSE-2.0
group-STM32F031 0:d193d40d4fa1 11 //
group-STM32F031 0:d193d40d4fa1 12 // Unless required by applicable law or agreed to in writing, software
group-STM32F031 0:d193d40d4fa1 13 // distributed under the License is distributed on an "AS IS" BASIS,
group-STM32F031 0:d193d40d4fa1 14 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
group-STM32F031 0:d193d40d4fa1 15 // See the License for the specific language governing permissions and
group-STM32F031 0:d193d40d4fa1 16 // limitations under the License.
group-STM32F031 0:d193d40d4fa1 17 // ----------------------------------------------------------------------------
group-STM32F031 0:d193d40d4fa1 18
group-STM32F031 0:d193d40d4fa1 19 #include "update_ui_example.h"
group-STM32F031 0:d193d40d4fa1 20
group-STM32F031 0:d193d40d4fa1 21 #ifdef MBED_CLOUD_CLIENT_SUPPORT_UPDATE
group-STM32F031 0:d193d40d4fa1 22
group-STM32F031 0:d193d40d4fa1 23 #include <stdio.h>
group-STM32F031 0:d193d40d4fa1 24 #include <stdint.h>
group-STM32F031 0:d193d40d4fa1 25
group-STM32F031 0:d193d40d4fa1 26 static MbedCloudClient* _client;
group-STM32F031 0:d193d40d4fa1 27
group-STM32F031 0:d193d40d4fa1 28 #ifdef ARM_UPDATE_CLIENT_VERSION_VALUE
group-STM32F031 0:d193d40d4fa1 29 #if ARM_UPDATE_CLIENT_VERSION_VALUE > 101000
group-STM32F031 0:d193d40d4fa1 30 void update_ui_set_cloud_client(MbedCloudClient* client)
group-STM32F031 0:d193d40d4fa1 31 {
group-STM32F031 0:d193d40d4fa1 32 _client = client;
group-STM32F031 0:d193d40d4fa1 33 }
group-STM32F031 0:d193d40d4fa1 34
group-STM32F031 0:d193d40d4fa1 35 void update_authorize(int32_t request)
group-STM32F031 0:d193d40d4fa1 36 {
group-STM32F031 0:d193d40d4fa1 37 switch (request)
group-STM32F031 0:d193d40d4fa1 38 {
group-STM32F031 0:d193d40d4fa1 39 /* Cloud Client wishes to download new firmware. This can have a negative
group-STM32F031 0:d193d40d4fa1 40 impact on the performance of the rest of the system.
group-STM32F031 0:d193d40d4fa1 41
group-STM32F031 0:d193d40d4fa1 42 The user application is supposed to pause performance sensitive tasks
group-STM32F031 0:d193d40d4fa1 43 before authorizing the download.
group-STM32F031 0:d193d40d4fa1 44
group-STM32F031 0:d193d40d4fa1 45 Note: the authorization call can be postponed and called later.
group-STM32F031 0:d193d40d4fa1 46 This doesn't affect the performance of the Cloud Client.
group-STM32F031 0:d193d40d4fa1 47 */
group-STM32F031 0:d193d40d4fa1 48 case MbedCloudClient::UpdateRequestDownload:
group-STM32F031 0:d193d40d4fa1 49 printf("Firmware download requested\r\n");
group-STM32F031 0:d193d40d4fa1 50 printf("Authorization granted\r\n");
group-STM32F031 0:d193d40d4fa1 51 _client->update_authorize(MbedCloudClient::UpdateRequestDownload);
group-STM32F031 0:d193d40d4fa1 52
group-STM32F031 0:d193d40d4fa1 53 break;
group-STM32F031 0:d193d40d4fa1 54
group-STM32F031 0:d193d40d4fa1 55 /* Cloud Client wishes to reboot and apply the new firmware.
group-STM32F031 0:d193d40d4fa1 56
group-STM32F031 0:d193d40d4fa1 57 The user application is supposed to save all current work before rebooting.
group-STM32F031 0:d193d40d4fa1 58
group-STM32F031 0:d193d40d4fa1 59 Note: the authorization call can be postponed and called later.
group-STM32F031 0:d193d40d4fa1 60 This doesn't affect the performance of the Cloud Client.
group-STM32F031 0:d193d40d4fa1 61 */
group-STM32F031 0:d193d40d4fa1 62 case MbedCloudClient::UpdateRequestInstall:
group-STM32F031 0:d193d40d4fa1 63 printf("Firmware install requested\r\n");
group-STM32F031 0:d193d40d4fa1 64 printf("Authorization granted\r\n");
group-STM32F031 0:d193d40d4fa1 65 _client->update_authorize(MbedCloudClient::UpdateRequestInstall);
group-STM32F031 0:d193d40d4fa1 66 break;
group-STM32F031 0:d193d40d4fa1 67
group-STM32F031 0:d193d40d4fa1 68 default:
group-STM32F031 0:d193d40d4fa1 69 printf("Error - unknown request\r\n");
group-STM32F031 0:d193d40d4fa1 70 break;
group-STM32F031 0:d193d40d4fa1 71 }
group-STM32F031 0:d193d40d4fa1 72 }
group-STM32F031 0:d193d40d4fa1 73 #endif
group-STM32F031 0:d193d40d4fa1 74 #endif
group-STM32F031 0:d193d40d4fa1 75
group-STM32F031 0:d193d40d4fa1 76 void update_progress(uint32_t progress, uint32_t total)
group-STM32F031 0:d193d40d4fa1 77 {
group-STM32F031 0:d193d40d4fa1 78 uint8_t percent = (uint8_t)((uint64_t)progress * 100 / total);
group-STM32F031 0:d193d40d4fa1 79
group-STM32F031 0:d193d40d4fa1 80 /* only show progress bar if debug trace is disabled */
group-STM32F031 0:d193d40d4fa1 81 #if !defined(MBED_CONF_MBED_TRACE_ENABLE) \
group-STM32F031 0:d193d40d4fa1 82 && !ARM_UC_ALL_TRACE_ENABLE \
group-STM32F031 0:d193d40d4fa1 83 && !ARM_UC_HUB_TRACE_ENABLE
group-STM32F031 0:d193d40d4fa1 84
group-STM32F031 0:d193d40d4fa1 85 printf("\rDownloading: [");
group-STM32F031 0:d193d40d4fa1 86 for (uint8_t index = 0; index < 50; index++)
group-STM32F031 0:d193d40d4fa1 87 {
group-STM32F031 0:d193d40d4fa1 88 if (index < percent / 2)
group-STM32F031 0:d193d40d4fa1 89 {
group-STM32F031 0:d193d40d4fa1 90 printf("+");
group-STM32F031 0:d193d40d4fa1 91 }
group-STM32F031 0:d193d40d4fa1 92 else if (index == percent / 2)
group-STM32F031 0:d193d40d4fa1 93 {
group-STM32F031 0:d193d40d4fa1 94 static uint8_t old_max = 0;
group-STM32F031 0:d193d40d4fa1 95 static uint8_t counter = 0;
group-STM32F031 0:d193d40d4fa1 96
group-STM32F031 0:d193d40d4fa1 97 if (index == old_max)
group-STM32F031 0:d193d40d4fa1 98 {
group-STM32F031 0:d193d40d4fa1 99 counter++;
group-STM32F031 0:d193d40d4fa1 100 }
group-STM32F031 0:d193d40d4fa1 101 else
group-STM32F031 0:d193d40d4fa1 102 {
group-STM32F031 0:d193d40d4fa1 103 old_max = index;
group-STM32F031 0:d193d40d4fa1 104 counter = 0;
group-STM32F031 0:d193d40d4fa1 105 }
group-STM32F031 0:d193d40d4fa1 106
group-STM32F031 0:d193d40d4fa1 107 switch (counter % 4)
group-STM32F031 0:d193d40d4fa1 108 {
group-STM32F031 0:d193d40d4fa1 109 case 0:
group-STM32F031 0:d193d40d4fa1 110 printf("/");
group-STM32F031 0:d193d40d4fa1 111 break;
group-STM32F031 0:d193d40d4fa1 112 case 1:
group-STM32F031 0:d193d40d4fa1 113 printf("-");
group-STM32F031 0:d193d40d4fa1 114 break;
group-STM32F031 0:d193d40d4fa1 115 case 2:
group-STM32F031 0:d193d40d4fa1 116 printf("\\");
group-STM32F031 0:d193d40d4fa1 117 break;
group-STM32F031 0:d193d40d4fa1 118 case 3:
group-STM32F031 0:d193d40d4fa1 119 default:
group-STM32F031 0:d193d40d4fa1 120 printf("|");
group-STM32F031 0:d193d40d4fa1 121 break;
group-STM32F031 0:d193d40d4fa1 122 }
group-STM32F031 0:d193d40d4fa1 123 }
group-STM32F031 0:d193d40d4fa1 124 else
group-STM32F031 0:d193d40d4fa1 125 {
group-STM32F031 0:d193d40d4fa1 126 printf(" ");
group-STM32F031 0:d193d40d4fa1 127 }
group-STM32F031 0:d193d40d4fa1 128 }
group-STM32F031 0:d193d40d4fa1 129 printf("] %d %%", percent);
group-STM32F031 0:d193d40d4fa1 130 fflush(stdout);
group-STM32F031 0:d193d40d4fa1 131 #else
group-STM32F031 0:d193d40d4fa1 132 printf("Downloading: %d %%\r\n", percent);
group-STM32F031 0:d193d40d4fa1 133 #endif
group-STM32F031 0:d193d40d4fa1 134
group-STM32F031 0:d193d40d4fa1 135 if (progress == total)
group-STM32F031 0:d193d40d4fa1 136 {
group-STM32F031 0:d193d40d4fa1 137 printf("\r\nDownload completed\r\n");
group-STM32F031 0:d193d40d4fa1 138 }
group-STM32F031 0:d193d40d4fa1 139 }
group-STM32F031 0:d193d40d4fa1 140
group-STM32F031 0:d193d40d4fa1 141 #endif // MBED_CLOUD_CLIENT_SUPPORT_UPDATE