Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of SolarNanoGridv3 by
Battery/Battery.h@24:6aba7f16e0c6, 2016-06-15 (annotated)
- Committer:
- defrost
- Date:
- Wed Jun 15 00:54:44 2016 +0000
- Revision:
- 24:6aba7f16e0c6
- Parent:
- 23:56134ab060f2
- Child:
- 28:e85a86fc8b59
- Added the disable interrupt function in battery class
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| defrost | 5:57b06b4b47c6 | 1 | /** |
| defrost | 5:57b06b4b47c6 | 2 | *@section DESCRIPTION |
| defrost | 5:57b06b4b47c6 | 3 | * mbed SolarNanogrid Battery. |
| defrost | 5:57b06b4b47c6 | 4 | *@section LICENSE |
| defrost | 5:57b06b4b47c6 | 5 | * Copyright (c) 2016, Malcolm McCulloch |
| defrost | 5:57b06b4b47c6 | 6 | * |
| defrost | 5:57b06b4b47c6 | 7 | * Permission is hereby granted, free of charge, to any person obtaining a copy |
| defrost | 5:57b06b4b47c6 | 8 | * of this software and associated documentation files (the "Software"), to deal |
| defrost | 5:57b06b4b47c6 | 9 | * in the Software without restriction, including without limitation the rights |
| defrost | 5:57b06b4b47c6 | 10 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
| defrost | 5:57b06b4b47c6 | 11 | * copies of the Software, and to permit persons to whom the Software is |
| defrost | 5:57b06b4b47c6 | 12 | * furnished to do so, subject to the following conditions: |
| defrost | 5:57b06b4b47c6 | 13 | * |
| defrost | 5:57b06b4b47c6 | 14 | * The above copyright notice and this permission notice shall be included in |
| defrost | 5:57b06b4b47c6 | 15 | * all copies or substantial portions of the Software. |
| defrost | 5:57b06b4b47c6 | 16 | * |
| defrost | 5:57b06b4b47c6 | 17 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
| defrost | 5:57b06b4b47c6 | 18 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
| defrost | 5:57b06b4b47c6 | 19 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
| defrost | 5:57b06b4b47c6 | 20 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
| defrost | 5:57b06b4b47c6 | 21 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
| defrost | 5:57b06b4b47c6 | 22 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
| defrost | 5:57b06b4b47c6 | 23 | * THE SOFTWARE. |
| defrost | 5:57b06b4b47c6 | 24 | * @file "Battery.h" |
| defrost | 5:57b06b4b47c6 | 25 | */ |
| defrost | 5:57b06b4b47c6 | 26 | |
| defrost | 5:57b06b4b47c6 | 27 | #ifndef BATTERY_H |
| defrost | 5:57b06b4b47c6 | 28 | #define BATTERY_H |
| defrost | 5:57b06b4b47c6 | 29 | #include <mbed.h> |
| defrost | 5:57b06b4b47c6 | 30 | #include "NRF2401P.h" |
| defrost | 5:57b06b4b47c6 | 31 | #include "nRF24l01.h" |
| defrost | 5:57b06b4b47c6 | 32 | #include "SDFileSystem.h" |
| defrost | 5:57b06b4b47c6 | 33 | #include "SolarNanoGrid.h" |
| defrost | 10:30c9e8df0032 | 34 | |
| defrost | 5:57b06b4b47c6 | 35 | /** \brief The battery logs data and interacts with the locker. |
| defrost | 5:57b06b4b47c6 | 36 | * |
| defrost | 5:57b06b4b47c6 | 37 | * The config.ini must start with B |
| defrost | 5:57b06b4b47c6 | 38 | * |
| defrost | 5:57b06b4b47c6 | 39 | */ |
| defrost | 5:57b06b4b47c6 | 40 | class Battery : public SolarNanoGrid |
| defrost | 5:57b06b4b47c6 | 41 | { |
| defrost | 5:57b06b4b47c6 | 42 | public: |
| defrost | 5:57b06b4b47c6 | 43 | // ********************* |
| defrost | 5:57b06b4b47c6 | 44 | // * Public variables: * |
| defrost | 5:57b06b4b47c6 | 45 | // ********************* |
| adrienBiz | 8:0acda4f2e0a8 | 46 | char* logDir; |
| adrienBiz | 8:0acda4f2e0a8 | 47 | float maxChargeRate; // Charge rate in amps |
| defrost | 5:57b06b4b47c6 | 48 | |
| defrost | 5:57b06b4b47c6 | 49 | // ********************* |
| defrost | 5:57b06b4b47c6 | 50 | // * Public functions: * |
| defrost | 5:57b06b4b47c6 | 51 | // ********************* |
| defrost | 5:57b06b4b47c6 | 52 | |
| defrost | 5:57b06b4b47c6 | 53 | // Constructor: |
| epgmdm | 11:87ab310924f0 | 54 | Battery(FILE* fp, Serial *pc); |
| defrost | 5:57b06b4b47c6 | 55 | |
| defrost | 5:57b06b4b47c6 | 56 | // Main loop function: |
| defrost | 13:de43f28c0365 | 57 | virtual void loop(void); |
| defrost | 5:57b06b4b47c6 | 58 | /** |
| defrost | 5:57b06b4b47c6 | 59 | * Checks in the battery to the locker |
| defrost | 5:57b06b4b47c6 | 60 | * Transmits "C ID" |
| defrost | 5:57b06b4b47c6 | 61 | */ |
| defrost | 5:57b06b4b47c6 | 62 | void checkIn(); |
| defrost | 5:57b06b4b47c6 | 63 | |
| epgmdm | 12:d9b13f31206d | 64 | /** |
| defrost | 17:dc19b3b39790 | 65 | * Returns the max current that can be drawn from the system, in amps |
| defrost | 17:dc19b3b39790 | 66 | */ |
| epgmdm | 12:d9b13f31206d | 67 | |
| defrost | 17:dc19b3b39790 | 68 | float getMaxCurrent(); |
| epgmdm | 12:d9b13f31206d | 69 | |
| defrost | 17:dc19b3b39790 | 70 | /** |
| defrost | 17:dc19b3b39790 | 71 | * returns a string of the log directory |
| defrost | 17:dc19b3b39790 | 72 | */ |
| defrost | 17:dc19b3b39790 | 73 | char *getLogDirectory(); |
| epgmdm | 18:be77ad141fac | 74 | |
| defrost | 17:dc19b3b39790 | 75 | /** |
| defrost | 17:dc19b3b39790 | 76 | * Returns true if we are authorized to start charging. |
| defrost | 17:dc19b3b39790 | 77 | */ |
| defrost | 17:dc19b3b39790 | 78 | bool startCharging(void); |
| epgmdm | 18:be77ad141fac | 79 | |
| defrost | 17:dc19b3b39790 | 80 | /** |
| defrost | 17:dc19b3b39790 | 81 | * Returns true if we are checked in. |
| defrost | 17:dc19b3b39790 | 82 | */ |
| epgmdm | 19:1a5447ecbda0 | 83 | bool isCheckedIn(void); |
| defrost | 23:56134ab060f2 | 84 | |
| defrost | 21:cb912a342846 | 85 | /** |
| defrost | 21:cb912a342846 | 86 | * sends a request for a charge update. |
| defrost | 21:cb912a342846 | 87 | */ |
| defrost | 21:cb912a342846 | 88 | void requestMaxCharge(); |
| defrost | 24:6aba7f16e0c6 | 89 | |
| defrost | 24:6aba7f16e0c6 | 90 | /** |
| defrost | 24:6aba7f16e0c6 | 91 | * Disables all of the interrupts, for a proper sleep state. |
| defrost | 24:6aba7f16e0c6 | 92 | */ |
| defrost | 24:6aba7f16e0c6 | 93 | void disableInt(void); |
| defrost | 23:56134ab060f2 | 94 | |
| defrost | 5:57b06b4b47c6 | 95 | protected: |
| defrost | 5:57b06b4b47c6 | 96 | // ********************** |
| defrost | 5:57b06b4b47c6 | 97 | // * Protected variables: * |
| defrost | 5:57b06b4b47c6 | 98 | // ********************** |
| defrost | 5:57b06b4b47c6 | 99 | /** |
| defrost | 5:57b06b4b47c6 | 100 | * Name of log directory, include last / |
| defrost | 5:57b06b4b47c6 | 101 | */ |
| defrost | 5:57b06b4b47c6 | 102 | |
| adrienBiz | 8:0acda4f2e0a8 | 103 | char count; |
| adrienBiz | 8:0acda4f2e0a8 | 104 | char* txFileName; |
| defrost | 5:57b06b4b47c6 | 105 | |
| adrienBiz | 8:0acda4f2e0a8 | 106 | char* fullTxFilePath; |
| defrost | 5:57b06b4b47c6 | 107 | |
| adrienBiz | 8:0acda4f2e0a8 | 108 | int sizeRead; |
| adrienBiz | 8:0acda4f2e0a8 | 109 | unsigned int fileLength; |
| adrienBiz | 8:0acda4f2e0a8 | 110 | unsigned int filePointer; |
| adrienBiz | 8:0acda4f2e0a8 | 111 | unsigned int fileLeft; |
| adrienBiz | 8:0acda4f2e0a8 | 112 | char *sdBuffer; |
| adrienBiz | 8:0acda4f2e0a8 | 113 | unsigned int sdBuffPnt; |
| defrost | 5:57b06b4b47c6 | 114 | /** |
| defrost | 5:57b06b4b47c6 | 115 | * Open channel address of the locker |
| defrost | 5:57b06b4b47c6 | 116 | */ |
| adrienBiz | 8:0acda4f2e0a8 | 117 | long long openAddr; |
| defrost | 5:57b06b4b47c6 | 118 | |
| defrost | 5:57b06b4b47c6 | 119 | /** |
| defrost | 5:57b06b4b47c6 | 120 | * Private channel address of the locker |
| defrost | 5:57b06b4b47c6 | 121 | */ |
| adrienBiz | 8:0acda4f2e0a8 | 122 | long long privateAddr; |
| defrost | 5:57b06b4b47c6 | 123 | |
| adrienBiz | 8:0acda4f2e0a8 | 124 | unsigned int countSD; |
| defrost | 5:57b06b4b47c6 | 125 | |
| defrost | 5:57b06b4b47c6 | 126 | // ********************** |
| defrost | 5:57b06b4b47c6 | 127 | // * Protected flags: * |
| defrost | 5:57b06b4b47c6 | 128 | // ********************** |
| adrienBiz | 8:0acda4f2e0a8 | 129 | volatile char * flag; |
| adrienBiz | 8:0acda4f2e0a8 | 130 | volatile char checkedIn; |
| adrienBiz | 8:0acda4f2e0a8 | 131 | volatile char flagGetTime; |
| adrienBiz | 8:0acda4f2e0a8 | 132 | volatile char flagNextFile; |
| epgmdm | 18:be77ad141fac | 133 | volatile char flagHubNotReady; /**< True if flagStartFileTx and MaxRT */ |
| epgmdm | 18:be77ad141fac | 134 | volatile char flagStartFileTx; /**< Start of file transmission. 0 when all files done */ |
| epgmdm | 18:be77ad141fac | 135 | volatile char flagDirFileName; |
| adrienBiz | 8:0acda4f2e0a8 | 136 | volatile char flagSendFileName; |
| adrienBiz | 8:0acda4f2e0a8 | 137 | volatile char flagSendFileSize; |
| adrienBiz | 8:0acda4f2e0a8 | 138 | volatile char flagSendFile; |
| adrienBiz | 8:0acda4f2e0a8 | 139 | volatile char flagSendFileDone; |
| epgmdm | 12:d9b13f31206d | 140 | volatile char flagGetMaxCharge; |
| epgmdm | 12:d9b13f31206d | 141 | volatile char sendingFile; |
| defrost | 17:dc19b3b39790 | 142 | volatile bool startCharge; |
| epgmdm | 18:be77ad141fac | 143 | volatile char flagCheckOut; |
| defrost | 5:57b06b4b47c6 | 144 | |
| defrost | 5:57b06b4b47c6 | 145 | |
| defrost | 5:57b06b4b47c6 | 146 | // ********************** |
| defrost | 5:57b06b4b47c6 | 147 | // * Protected interrupts: * |
| defrost | 5:57b06b4b47c6 | 148 | // ********************** |
| adrienBiz | 8:0acda4f2e0a8 | 149 | InterruptIn* button; |
| adrienBiz | 8:0acda4f2e0a8 | 150 | Ticker* txWatch; |
| adrienBiz | 8:0acda4f2e0a8 | 151 | Timeout* delay; |
| defrost | 5:57b06b4b47c6 | 152 | |
| defrost | 5:57b06b4b47c6 | 153 | // ********************** |
| defrost | 5:57b06b4b47c6 | 154 | // * Protected functions: * |
| defrost | 5:57b06b4b47c6 | 155 | // ********************** |
| defrost | 5:57b06b4b47c6 | 156 | /** |
| defrost | 5:57b06b4b47c6 | 157 | * Checks in the battery to the locker |
| defrost | 5:57b06b4b47c6 | 158 | * Acknowledge received. |
| defrost | 5:57b06b4b47c6 | 159 | * Changes the TX pipe address to private |
| defrost | 5:57b06b4b47c6 | 160 | * |
| defrost | 5:57b06b4b47c6 | 161 | */ |
| defrost | 5:57b06b4b47c6 | 162 | void doCheckIn(); |
| defrost | 5:57b06b4b47c6 | 163 | /** |
| defrost | 5:57b06b4b47c6 | 164 | * Checks out the battery from the locker |
| defrost | 5:57b06b4b47c6 | 165 | * Acknowledge received. |
| defrost | 5:57b06b4b47c6 | 166 | * Changes the TX pipe address to open |
| defrost | 5:57b06b4b47c6 | 167 | * |
| defrost | 5:57b06b4b47c6 | 168 | */ |
| defrost | 5:57b06b4b47c6 | 169 | void doCheckOut(); |
| defrost | 5:57b06b4b47c6 | 170 | /** |
| defrost | 5:57b06b4b47c6 | 171 | * sends a request for time update. |
| defrost | 5:57b06b4b47c6 | 172 | */ |
| epgmdm | 12:d9b13f31206d | 173 | void requestTime(); |
| defrost | 5:57b06b4b47c6 | 174 | /** |
| defrost | 5:57b06b4b47c6 | 175 | * Sets the value pointed to by flag to 1. |
| defrost | 5:57b06b4b47c6 | 176 | */ |
| defrost | 5:57b06b4b47c6 | 177 | |
| defrost | 5:57b06b4b47c6 | 178 | void nextFileToTx(); |
| defrost | 5:57b06b4b47c6 | 179 | void sendDirName(); |
| defrost | 5:57b06b4b47c6 | 180 | void sendFileName(); |
| defrost | 5:57b06b4b47c6 | 181 | void sendFileSize(); |
| defrost | 5:57b06b4b47c6 | 182 | void sendFile(); |
| defrost | 5:57b06b4b47c6 | 183 | void sendFileDone(); |
| defrost | 5:57b06b4b47c6 | 184 | void setFlag(); |
| epgmdm | 18:be77ad141fac | 185 | |
| epgmdm | 18:be77ad141fac | 186 | /** |
| epgmdm | 18:be77ad141fac | 187 | * Checks out. Sends O %d, ID to locker |
| epgmdm | 18:be77ad141fac | 188 | * |
| epgmdm | 18:be77ad141fac | 189 | */ |
| epgmdm | 18:be77ad141fac | 190 | void checkOut(); |
| defrost | 5:57b06b4b47c6 | 191 | /** |
| defrost | 5:57b06b4b47c6 | 192 | * Retransmits the last data. |
| defrost | 5:57b06b4b47c6 | 193 | * |
| defrost | 5:57b06b4b47c6 | 194 | */ |
| defrost | 5:57b06b4b47c6 | 195 | void retransmit(); |
| defrost | 5:57b06b4b47c6 | 196 | |
| defrost | 5:57b06b4b47c6 | 197 | |
| defrost | 5:57b06b4b47c6 | 198 | /** |
| defrost | 5:57b06b4b47c6 | 199 | * called when the nrf the button is pressed |
| defrost | 5:57b06b4b47c6 | 200 | * |
| defrost | 5:57b06b4b47c6 | 201 | */ |
| defrost | 5:57b06b4b47c6 | 202 | void intButton(); |
| defrost | 5:57b06b4b47c6 | 203 | /** |
| defrost | 5:57b06b4b47c6 | 204 | * called when the nrf creates an interrupt. |
| defrost | 5:57b06b4b47c6 | 205 | * |
| defrost | 5:57b06b4b47c6 | 206 | */ |
| defrost | 5:57b06b4b47c6 | 207 | void intNrf(); |
| defrost | 5:57b06b4b47c6 | 208 | |
| defrost | 21:cb912a342846 | 209 | |
| epgmdm | 12:d9b13f31206d | 210 | |
| defrost | 5:57b06b4b47c6 | 211 | private: |
| defrost | 5:57b06b4b47c6 | 212 | // ********************** |
| defrost | 5:57b06b4b47c6 | 213 | // * Private variables: * |
| defrost | 5:57b06b4b47c6 | 214 | // ********************** |
| defrost | 5:57b06b4b47c6 | 215 | |
| adrienBiz | 8:0acda4f2e0a8 | 216 | volatile bool maxRT; |
| defrost | 5:57b06b4b47c6 | 217 | |
| epgmdm | 12:d9b13f31206d | 218 | |
| defrost | 5:57b06b4b47c6 | 219 | }; |
| defrost | 5:57b06b4b47c6 | 220 | #endif |
