working commands. singleton deleted
OfflineCommand.cpp@4:f81029197ab2, 2015-06-11 (annotated)
- Committer:
- dkester
- Date:
- Thu Jun 11 10:42:50 2015 +0000
- Revision:
- 4:f81029197ab2
- Parent:
- 3:32afe87d4b62
v1.0
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
dkester | 0:e188325211af | 1 | #include "OfflineCommand.h" |
dkester | 4:f81029197ab2 | 2 | |
dkester | 1:fd4c0e2decb8 | 3 | volatile int32_t OfflineCommand::addr = 0; |
dkester | 4:f81029197ab2 | 4 | |
dkester | 2:c9e47ac47edb | 5 | OfflineCommand::OfflineCommand(Sensors* sensors, Storage* storage) |
dkester | 0:e188325211af | 6 | { |
dkester | 2:c9e47ac47edb | 7 | this->sensors = sensors; |
dkester | 2:c9e47ac47edb | 8 | this->storage = storage; |
dkester | 1:fd4c0e2decb8 | 9 | addr = 0x0; |
dkester | 0:e188325211af | 10 | this->running = 0; |
dkester | 1:fd4c0e2decb8 | 11 | this->state = 0; |
dkester | 0:e188325211af | 12 | } |
dkester | 4:f81029197ab2 | 13 | |
dkester | 0:e188325211af | 14 | void OfflineCommand::initialize() |
dkester | 0:e188325211af | 15 | { |
dkester | 1:fd4c0e2decb8 | 16 | this->state = 0; |
dkester | 0:e188325211af | 17 | setTicker(0.1); |
dkester | 0:e188325211af | 18 | } |
dkester | 4:f81029197ab2 | 19 | |
dkester | 0:e188325211af | 20 | void OfflineCommand::execute() |
dkester | 0:e188325211af | 21 | { |
dkester | 0:e188325211af | 22 | if(running) { |
dkester | 0:e188325211af | 23 | writeToMemory(); |
dkester | 0:e188325211af | 24 | } |
dkester | 0:e188325211af | 25 | } |
dkester | 4:f81029197ab2 | 26 | |
dkester | 0:e188325211af | 27 | void OfflineCommand::button() |
dkester | 0:e188325211af | 28 | { |
dkester | 1:fd4c0e2decb8 | 29 | switch(state) { |
dkester | 1:fd4c0e2decb8 | 30 | case 0: |
dkester | 1:fd4c0e2decb8 | 31 | detachTicker(); |
dkester | 1:fd4c0e2decb8 | 32 | setLed(1); |
dkester | 1:fd4c0e2decb8 | 33 | addr = 0; |
dkester | 1:fd4c0e2decb8 | 34 | wait(0.1); |
dkester | 1:fd4c0e2decb8 | 35 | eraseMemory(); |
dkester | 1:fd4c0e2decb8 | 36 | this->state = 1; |
dkester | 1:fd4c0e2decb8 | 37 | setTicker(0.1); |
dkester | 1:fd4c0e2decb8 | 38 | break; |
dkester | 1:fd4c0e2decb8 | 39 | case 1: |
dkester | 1:fd4c0e2decb8 | 40 | detachTicker(); |
dkester | 1:fd4c0e2decb8 | 41 | setLed(1); |
dkester | 1:fd4c0e2decb8 | 42 | addr = 0; |
dkester | 1:fd4c0e2decb8 | 43 | this->running = 1; //This will unlock the writeToMemory from the execution |
dkester | 1:fd4c0e2decb8 | 44 | this->state = 2; |
dkester | 1:fd4c0e2decb8 | 45 | this->sensors->wakeIMU(); |
dkester | 1:fd4c0e2decb8 | 46 | break; |
dkester | 1:fd4c0e2decb8 | 47 | case 2: |
dkester | 1:fd4c0e2decb8 | 48 | this->sensors->disableIMU(); |
dkester | 1:fd4c0e2decb8 | 49 | this->running = 0; |
dkester | 1:fd4c0e2decb8 | 50 | this->state = 0; |
dkester | 4:f81029197ab2 | 51 | setLed(0); |
dkester | 4:f81029197ab2 | 52 | NRF_POWER->SYSTEMOFF = 1; |
dkester | 1:fd4c0e2decb8 | 53 | break; |
dkester | 1:fd4c0e2decb8 | 54 | } |
dkester | 4:f81029197ab2 | 55 | |
dkester | 0:e188325211af | 56 | } |
dkester | 4:f81029197ab2 | 57 | |
dkester | 0:e188325211af | 58 | void OfflineCommand::finish() |
dkester | 0:e188325211af | 59 | { |
dkester | 1:fd4c0e2decb8 | 60 | this->state = 0; |
dkester | 3:32afe87d4b62 | 61 | detachTicker(); |
dkester | 0:e188325211af | 62 | setLed(0); |
dkester | 0:e188325211af | 63 | } |
dkester | 4:f81029197ab2 | 64 | |
dkester | 0:e188325211af | 65 | void OfflineCommand::writeToMemory() |
dkester | 0:e188325211af | 66 | { |
dkester | 4:f81029197ab2 | 67 | |
dkester | 4:f81029197ab2 | 68 | |
dkester | 3:32afe87d4b62 | 69 | sensors->updateAngle(); |
dkester | 3:32afe87d4b62 | 70 | sensors->updateIMU(); |
dkester | 3:32afe87d4b62 | 71 | |
dkester | 0:e188325211af | 72 | if(!storage->isBusy()) { |
dkester | 4:f81029197ab2 | 73 | |
dkester | 0:e188325211af | 74 | storage->pageProgram(addr); |
dkester | 4:f81029197ab2 | 75 | |
dkester | 3:32afe87d4b62 | 76 | storage->writeData(sensors->getAngle(0)); |
dkester | 3:32afe87d4b62 | 77 | storage->writeData(sensors->getAngle(1)); |
dkester | 3:32afe87d4b62 | 78 | storage->writeData(sensors->getIMU(0)); |
dkester | 3:32afe87d4b62 | 79 | storage->writeData(sensors->getIMU(1)); |
dkester | 2:c9e47ac47edb | 80 | |
dkester | 0:e188325211af | 81 | storage->endAction(); |
dkester | 4:f81029197ab2 | 82 | |
dkester | 1:fd4c0e2decb8 | 83 | addr = addr + 0x4; |
dkester | 4:f81029197ab2 | 84 | |
dkester | 0:e188325211af | 85 | } else { |
dkester | 0:e188325211af | 86 | printf("busy: %d\n", storage->getSR1()); |
dkester | 0:e188325211af | 87 | } |
dkester | 4:f81029197ab2 | 88 | |
dkester | 0:e188325211af | 89 | } |
dkester | 4:f81029197ab2 | 90 | |
dkester | 1:fd4c0e2decb8 | 91 | void OfflineCommand::eraseMemory() |
dkester | 1:fd4c0e2decb8 | 92 | { |
dkester | 4:f81029197ab2 | 93 | __disable_irq(); |
dkester | 4:f81029197ab2 | 94 | |
dkester | 3:32afe87d4b62 | 95 | storage->read(0x00); |
dkester | 1:fd4c0e2decb8 | 96 | |
dkester | 3:32afe87d4b62 | 97 | while(storage->readData() != -1){ |
dkester | 3:32afe87d4b62 | 98 | storage->endAction(); //end previous read action |
dkester | 1:fd4c0e2decb8 | 99 | |
dkester | 3:32afe87d4b62 | 100 | storage->sectorErase(addr); |
dkester | 1:fd4c0e2decb8 | 101 | |
dkester | 3:32afe87d4b62 | 102 | while(storage->isBusy()){ wait(0.01); } |
dkester | 3:32afe87d4b62 | 103 | |
dkester | 1:fd4c0e2decb8 | 104 | printf("sector %d erased\n", addr); |
dkester | 3:32afe87d4b62 | 105 | addr = addr + (1<<18); |
dkester | 3:32afe87d4b62 | 106 | storage->read(addr); //set next section addr for read in the while statement |
dkester | 0:e188325211af | 107 | } |
dkester | 3:32afe87d4b62 | 108 | |
dkester | 3:32afe87d4b62 | 109 | printf("ERASE done!\n"); |
dkester | 3:32afe87d4b62 | 110 | storage->endAction(); |
dkester | 1:fd4c0e2decb8 | 111 | |
dkester | 1:fd4c0e2decb8 | 112 | __enable_irq(); |
dkester | 4:f81029197ab2 | 113 | } |
dkester | 4:f81029197ab2 | 114 |