mbed official / mbed-dev

Dependents:   Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more

Committer:
Anna Bridge
Date:
Fri Jun 22 16:45:37 2018 +0100
Revision:
186:707f6e361f3e
Parent:
178:79309dc6340a
mbed-dev library. Release version 162

Who changed what in which revision?

UserRevisionLine numberNew contents of line
<> 149:156823d33999 1 /*---------------------------------------------------------------------------
<> 149:156823d33999 2 * Copyright (c) 2016, u-blox Malmö, All Rights Reserved
<> 149:156823d33999 3 * SPDX-License-Identifier: LicenseRef-PBL
<> 149:156823d33999 4 *
<> 149:156823d33999 5 * This file and the related binary are licensed under the
<> 149:156823d33999 6 * Permissive Binary License, Version 1.0 (the "License");
<> 149:156823d33999 7 * you may not use these files except in compliance with the License.
<> 149:156823d33999 8 *
<> 149:156823d33999 9 * You may obtain a copy of the License here:
<> 149:156823d33999 10 * LICENSE-permissive-binary-license-1.0.txt and at
<> 149:156823d33999 11 * https://www.mbed.com/licenses/PBL-1.0
<> 149:156823d33999 12 *
<> 149:156823d33999 13 * See the License for the specific language governing permissions and
<> 149:156823d33999 14 * limitations under the License.
<> 149:156823d33999 15 *
<> 149:156823d33999 16 * Component: CB HW
<> 149:156823d33999 17 * File : cb_hw.h
<> 149:156823d33999 18 *
<> 149:156823d33999 19 * Description: Setup of hardware.
<> 149:156823d33999 20 * TODO clean up this interface..
<> 149:156823d33999 21 *-------------------------------------------------------------------------*/
<> 149:156823d33999 22
<> 149:156823d33999 23 #ifndef _CB_HW_H_
<> 149:156823d33999 24 #define _CB_HW_H_
<> 149:156823d33999 25
<> 149:156823d33999 26 #include "cb_comdefs.h"
<> 149:156823d33999 27
<> 149:156823d33999 28 #ifdef __cplusplus
<> 149:156823d33999 29 extern "C" {
<> 149:156823d33999 30 #endif
<> 149:156823d33999 31
<> 149:156823d33999 32 /*===========================================================================
<> 149:156823d33999 33 * DEFINES
<> 149:156823d33999 34 *=========================================================================*/
Anna Bridge 186:707f6e361f3e 35 #define cbHW_SECUREBOOT_SIGN_LENGTH 344
Anna Bridge 186:707f6e361f3e 36 #define cbHW_FW_NAME_MAX_LENGTH 22
Anna Bridge 186:707f6e361f3e 37 #define cbHW_FW_NAME_MIN_LENGTH 1
Anna Bridge 186:707f6e361f3e 38 #define cbHW_FW_FLAG_MAX_LENGTH 8 // 8 bit fields
Anna Bridge 186:707f6e361f3e 39 #define cbHW_FW_FLAG_MIN_LENGTH 1
Anna Bridge 186:707f6e361f3e 40 #define cbHW_UNIQUE_ID_SIZE 12
Anna Bridge 186:707f6e361f3e 41
<> 149:156823d33999 42 typedef enum {
<> 149:156823d33999 43 cbHW_PCB_VERSION_UNKNOWN,
<> 149:156823d33999 44 cbHW_PCB_VERSION_1,
<> 149:156823d33999 45 cbHW_PCB_VERSION_2,
<> 149:156823d33999 46 cbHW_PCB_VERSION_3,
<> 149:156823d33999 47 cbHW_PCB_VERSION_4,
<> 149:156823d33999 48 cbHW_PCB_VERSION_5
<> 149:156823d33999 49 } cbHW_PCBVersion;
<> 149:156823d33999 50
<> 149:156823d33999 51 typedef enum {
<> 149:156823d33999 52 cbHW_RESET_REASON_UNKNOWN = 0,
<> 149:156823d33999 53 cbHW_RESET_REASON_FW_UPDATE,
<> 149:156823d33999 54 cbHW_RESET_REASON_PRODUCTION_MODE
Anna Bridge 186:707f6e361f3e 55 } cbHW_ResetReason;
<> 149:156823d33999 56
<> 149:156823d33999 57 typedef enum {
<> 149:156823d33999 58 cbHW_FLOW_CONTROL_DISABLED = 0,
<> 149:156823d33999 59 cbHW_FLOW_CONTROL_ENABLED
<> 149:156823d33999 60 } cbHW_FlowControl;
<> 149:156823d33999 61
<> 149:156823d33999 62 typedef enum {
<> 149:156823d33999 63 cbHW_IRQ_HIGH = 2U,
<> 149:156823d33999 64 cbHW_IRQ_MEDIUM = 3U,
<> 149:156823d33999 65 cbHW_IRQ_DEFAULT = 5U,
<> 149:156823d33999 66 cbHW_IRQ_LOW = 12U
Anna Bridge 186:707f6e361f3e 67 } cbHW_PRIO_LVL;
<> 149:156823d33999 68
AnnaBridge 165:e614a9f1c9e2 69 typedef enum {
AnnaBridge 165:e614a9f1c9e2 70 cbHW_SYSTICK_DISABLED,
AnnaBridge 165:e614a9f1c9e2 71 cbHW_SYSTICK_LOW_FREQ,
AnnaBridge 165:e614a9f1c9e2 72 cbHW_SYSTICK_DEFAULT,
AnnaBridge 165:e614a9f1c9e2 73 } cbHW_SysTickMode;
Anna Bridge 186:707f6e361f3e 74
Anna Bridge 186:707f6e361f3e 75 typedef enum {
Anna Bridge 186:707f6e361f3e 76 cbHW_HASH_MD5
Anna Bridge 186:707f6e361f3e 77 } cbHW_HashType;
<> 149:156823d33999 78 /*===========================================================================
<> 149:156823d33999 79 * TYPES
<> 149:156823d33999 80 *=========================================================================*/
<> 149:156823d33999 81
<> 149:156823d33999 82 typedef void (*cbHW_StopModeStatusEvt)(cb_boolean enable);
<> 149:156823d33999 83 typedef void (*cbHW_SysTickCb)(void);
<> 149:156823d33999 84
<> 149:156823d33999 85 /*===========================================================================
<> 149:156823d33999 86 * FUNCTIONS
<> 149:156823d33999 87 *=========================================================================*/
<> 149:156823d33999 88
<> 149:156823d33999 89 void cbHW_init(void);
<> 149:156823d33999 90 void cbHW_registerStopModeStatusEvt(cbHW_StopModeStatusEvt evt);
<> 149:156823d33999 91 void cbHW_disableIrq(void);
Anna Bridge 186:707f6e361f3e 92 void cbHW_enableIrq(void);
<> 149:156823d33999 93 void cbHW_disableAllIrq(void); // Should not be used unless extremely critical
Anna Bridge 186:707f6e361f3e 94 void cbHW_enableAllIrq(void);
<> 149:156823d33999 95 void cbHW_enterSleepMode(void);
<> 149:156823d33999 96 void cbHW_enterStopMode(void);
<> 149:156823d33999 97 void cbHW_setWakeupEvent(void);
<> 149:156823d33999 98 void cbHW_resetWakeupEvent(void);
AnnaBridge 165:e614a9f1c9e2 99 void cbHW_setSysTickMode(cbHW_SysTickMode sysTickMode);
<> 149:156823d33999 100
<> 149:156823d33999 101 /**
<> 149:156823d33999 102 * Wait for specified amount of microseconds. May be interrupt dependent.
<> 149:156823d33999 103 * @note Granularity may vary between systems. Will be at least systick based.
<> 149:156823d33999 104 * The system may go to sleep during the delay.
<> 149:156823d33999 105 *
<> 149:156823d33999 106 * @param us Time to delay in microseconds.
<> 149:156823d33999 107 */
<> 149:156823d33999 108 void cbHW_delay(cb_uint32 us);
<> 149:156823d33999 109
<> 149:156823d33999 110 /**
Anna Bridge 186:707f6e361f3e 111 * Puts the chip in NVIC soft reset
Anna Bridge 186:707f6e361f3e 112 * @note: this does not reset any watchdog timer already enabled
Anna Bridge 186:707f6e361f3e 113 */
Anna Bridge 186:707f6e361f3e 114 void cbHW_reset(void);
Anna Bridge 186:707f6e361f3e 115
Anna Bridge 186:707f6e361f3e 116 /**
<> 149:156823d33999 117 * Wait for specified amount of microseconds using a software loop.
<> 149:156823d33999 118 * @note Granularity may vary between systems.
<> 149:156823d33999 119 * The system will not go to sleep during the delay.
<> 149:156823d33999 120 *
<> 149:156823d33999 121 * @param us Time to delay in microseconds.
<> 149:156823d33999 122 */
<> 149:156823d33999 123 void cbHW_softDelay(cb_uint32 us);
<> 149:156823d33999 124 cb_boolean cbHW_sysFreqIsSupported(cb_uint32 sysFreq);
<> 149:156823d33999 125 void cbHW_setSysFreq(cb_uint32 sysFreq);
<> 149:156823d33999 126 cb_uint32 cbHW_getSysFreq(void);
<> 149:156823d33999 127 void cbHW_writeBackupRegister(cb_uint32 registerId, cb_uint32 value);
<> 149:156823d33999 128 cb_uint32 cbHW_readBackupRegister(cb_int32 registerId);
Anna Bridge 186:707f6e361f3e 129 void cbHW_getHWId(cb_uint8 uid[cbHW_UNIQUE_ID_SIZE]);
<> 149:156823d33999 130 cbHW_PCBVersion cbHW_getPCBVersion(void);
<> 149:156823d33999 131
<> 149:156823d33999 132 /**
<> 149:156823d33999 133 * Register a system tick callback.
<> 149:156823d33999 134 * The system tick will be generated once evert millisecond.
<> 149:156823d33999 135 *
<> 149:156823d33999 136 * @param cb Callback function for the system tick timer.
<> 149:156823d33999 137 */
<> 149:156823d33999 138 void cbHW_registerSysTickISRCallback(cbHW_SysTickCb cb);
<> 149:156823d33999 139
<> 149:156823d33999 140 /**
<> 149:156823d33999 141 * Get the current tick frequency for the @ref cbHW_getTicks tick counter.
<> 149:156823d33999 142 * @note The frequency may be altered with different system clocks and power modes.
<> 149:156823d33999 143 *
<> 149:156823d33999 144 * @return The current tick frequency.
<> 149:156823d33999 145 */
<> 149:156823d33999 146 cb_uint32 cbHW_getTickFrequency(void);
<> 149:156823d33999 147
<> 149:156823d33999 148 /**
<> 149:156823d33999 149 * Get the current value of the tick counter.
<> 149:156823d33999 150 * Time base in @ref cbHW_getTickFrequency.
<> 149:156823d33999 151 * @note The value may wrap.
<> 149:156823d33999 152 *
<> 149:156823d33999 153 * @return The current tick counter.
<> 149:156823d33999 154 */
<> 149:156823d33999 155 cb_uint32 cbHW_getTicks(void);
<> 149:156823d33999 156
Anna Bridge 186:707f6e361f3e 157 /**
Anna Bridge 186:707f6e361f3e 158 * Enter forced boot mode. The bootloader will start in x-modem
Anna Bridge 186:707f6e361f3e 159 * mode and emit CCCC.. to notify that it is ready to receive
Anna Bridge 186:707f6e361f3e 160 * a new fw.
Anna Bridge 186:707f6e361f3e 161 * This function will return and boot mode will be entered
Anna Bridge 186:707f6e361f3e 162 * after a device specific timeout.
Anna Bridge 186:707f6e361f3e 163 * @param address x-modem file download start address
Anna Bridge 186:707f6e361f3e 164 * @param baudrate x-modem download buadrate
Anna Bridge 186:707f6e361f3e 165 * @return None
Anna Bridge 186:707f6e361f3e 166 */
<> 149:156823d33999 167 void cbHW_forceBoot(cb_uint32 address, cb_uint32 baudrate);
Anna Bridge 186:707f6e361f3e 168
Anna Bridge 186:707f6e361f3e 169 /**
Anna Bridge 186:707f6e361f3e 170 * Enter forced boot mode. The bootloader will start in x-modem
Anna Bridge 186:707f6e361f3e 171 * mode and emit CCCC.. to notify that it is ready to receive
Anna Bridge 186:707f6e361f3e 172 * a new fw.
Anna Bridge 186:707f6e361f3e 173 * This function will return and boot mode will be entered
Anna Bridge 186:707f6e361f3e 174 * after a device specific timeout.
Anna Bridge 186:707f6e361f3e 175 * @param address x-modem file download start address
Anna Bridge 186:707f6e361f3e 176 * @param baudrate x-modem download buadrate
Anna Bridge 186:707f6e361f3e 177 * @param fwId firmware id
Anna Bridge 186:707f6e361f3e 178 * @param fwSize firmware file size
Anna Bridge 186:707f6e361f3e 179 * @param fwSignature firmware signature
Anna Bridge 186:707f6e361f3e 180 * @param fwName firmware name
Anna Bridge 186:707f6e361f3e 181 * @param fwFlags firmware flags
Anna Bridge 186:707f6e361f3e 182 * @return None
Anna Bridge 186:707f6e361f3e 183 */
Anna Bridge 186:707f6e361f3e 184 void cbHW_forceBootSecure(
Anna Bridge 186:707f6e361f3e 185 cb_uint32 address,
Anna Bridge 186:707f6e361f3e 186 cb_uint32 baudrate,
Anna Bridge 186:707f6e361f3e 187 cb_uint32 fwId,
Anna Bridge 186:707f6e361f3e 188 cb_uint32 fwSize,
Anna Bridge 186:707f6e361f3e 189 cb_char* fwSignature,
Anna Bridge 186:707f6e361f3e 190 cb_char* fwName,
Anna Bridge 186:707f6e361f3e 191 cb_char* fwFlags);
Anna Bridge 186:707f6e361f3e 192
Anna Bridge 186:707f6e361f3e 193 /**
Anna Bridge 186:707f6e361f3e 194 * Cancel entry into boot mode. The user canceled entry
Anna Bridge 186:707f6e361f3e 195 * into forced boot mode.
Anna Bridge 186:707f6e361f3e 196 * This function will clean up the RTC memory that was
Anna Bridge 186:707f6e361f3e 197 * configured for a forced boot operation. Use this function
Anna Bridge 186:707f6e361f3e 198 * for both cbHW_forceBootSecure and cbHW_forceBoot
Anna Bridge 186:707f6e361f3e 199 * @return None
Anna Bridge 186:707f6e361f3e 200 */
Anna Bridge 186:707f6e361f3e 201 void cbHW_cancelforceBoot(void);
Anna Bridge 186:707f6e361f3e 202
<> 149:156823d33999 203 void cbHW_enterProductionMode(cbHW_FlowControl flowControl);
<> 149:156823d33999 204 cbHW_ResetReason cbHW_resetReason(void);
<> 149:156823d33999 205 cbHW_FlowControl cbHW_flowControl(void);
<> 149:156823d33999 206
Anna Bridge 186:707f6e361f3e 207 /**
Anna Bridge 186:707f6e361f3e 208 * Calculates a hash over a dataset.
Anna Bridge 186:707f6e361f3e 209 * @param type: type of hashing, MD5 for now
Anna Bridge 186:707f6e361f3e 210 * @param pInData: pointer to Data over which the hashing should be done
Anna Bridge 186:707f6e361f3e 211 * @param indataSize: size of data buffer.
Anna Bridge 186:707f6e361f3e 212 * @param pOutData: pointer to result data
Anna Bridge 186:707f6e361f3e 213 * @return None
Anna Bridge 186:707f6e361f3e 214 */
Anna Bridge 186:707f6e361f3e 215 void cbHW_hash(cbHW_HashType type, const cb_uint8* pInData,cb_uint32 indataSize, cb_uint8* pOutData);
<> 149:156823d33999 216
<> 149:156823d33999 217 #ifdef __cplusplus
<> 149:156823d33999 218 }
<> 149:156823d33999 219 #endif
<> 149:156823d33999 220
<> 149:156823d33999 221 #endif
<> 149:156823d33999 222