working commands. singleton deleted
OfflineCommand.cpp@2:c9e47ac47edb, 2015-06-07 (annotated)
- Committer:
- dkester
- Date:
- Sun Jun 07 17:49:23 2015 +0000
- Revision:
- 2:c9e47ac47edb
- Parent:
- 1:fd4c0e2decb8
- Child:
- 3:32afe87d4b62
gonio trainer 7 juni
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
dkester | 0:e188325211af | 1 | #include "OfflineCommand.h" |
dkester | 0:e188325211af | 2 | |
dkester | 1:fd4c0e2decb8 | 3 | volatile int32_t OfflineCommand::addr = 0; |
dkester | 1:fd4c0e2decb8 | 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 | 0:e188325211af | 13 | |
dkester | 0:e188325211af | 14 | void OfflineCommand::initialize() |
dkester | 0:e188325211af | 15 | { |
dkester | 0:e188325211af | 16 | printf("OfflineCommand\n"); |
dkester | 1:fd4c0e2decb8 | 17 | this->state = 0; |
dkester | 1:fd4c0e2decb8 | 18 | //setLed(1); |
dkester | 0:e188325211af | 19 | setTicker(0.1); |
dkester | 0:e188325211af | 20 | } |
dkester | 0:e188325211af | 21 | |
dkester | 0:e188325211af | 22 | void OfflineCommand::execute() |
dkester | 0:e188325211af | 23 | { |
dkester | 0:e188325211af | 24 | if(running) { |
dkester | 0:e188325211af | 25 | writeToMemory(); |
dkester | 0:e188325211af | 26 | } |
dkester | 0:e188325211af | 27 | } |
dkester | 0:e188325211af | 28 | |
dkester | 0:e188325211af | 29 | void OfflineCommand::button() |
dkester | 0:e188325211af | 30 | { |
dkester | 1:fd4c0e2decb8 | 31 | switch(state) { |
dkester | 1:fd4c0e2decb8 | 32 | case 0: |
dkester | 1:fd4c0e2decb8 | 33 | printf("ERASE COMMAND\n"); |
dkester | 1:fd4c0e2decb8 | 34 | detachTicker(); |
dkester | 1:fd4c0e2decb8 | 35 | setLed(1); |
dkester | 1:fd4c0e2decb8 | 36 | addr = 0; |
dkester | 1:fd4c0e2decb8 | 37 | wait(0.1); |
dkester | 1:fd4c0e2decb8 | 38 | eraseMemory(); |
dkester | 1:fd4c0e2decb8 | 39 | this->state = 1; |
dkester | 1:fd4c0e2decb8 | 40 | setTicker(0.1); |
dkester | 1:fd4c0e2decb8 | 41 | break; |
dkester | 1:fd4c0e2decb8 | 42 | case 1: |
dkester | 1:fd4c0e2decb8 | 43 | detachTicker(); |
dkester | 1:fd4c0e2decb8 | 44 | setLed(1); |
dkester | 1:fd4c0e2decb8 | 45 | printf("WRITE COMMAND\n"); |
dkester | 1:fd4c0e2decb8 | 46 | addr = 0; |
dkester | 1:fd4c0e2decb8 | 47 | this->running = 1; //This will unlock the writeToMemory from the execution |
dkester | 1:fd4c0e2decb8 | 48 | this->state = 2; |
dkester | 1:fd4c0e2decb8 | 49 | this->sensors->wakeIMU(); |
dkester | 1:fd4c0e2decb8 | 50 | break; |
dkester | 1:fd4c0e2decb8 | 51 | case 2: |
dkester | 1:fd4c0e2decb8 | 52 | setTicker(0.1); |
dkester | 1:fd4c0e2decb8 | 53 | printf("DONE WRITE COMMAND..."); |
dkester | 1:fd4c0e2decb8 | 54 | printf("%d\n", addr); |
dkester | 1:fd4c0e2decb8 | 55 | this->sensors->disableIMU(); |
dkester | 1:fd4c0e2decb8 | 56 | this->running = 0; |
dkester | 1:fd4c0e2decb8 | 57 | this->state = 0; |
dkester | 1:fd4c0e2decb8 | 58 | break; |
dkester | 1:fd4c0e2decb8 | 59 | } |
dkester | 0:e188325211af | 60 | |
dkester | 0:e188325211af | 61 | } |
dkester | 0:e188325211af | 62 | |
dkester | 0:e188325211af | 63 | void OfflineCommand::finish() |
dkester | 0:e188325211af | 64 | { |
dkester | 1:fd4c0e2decb8 | 65 | this->state = 0; |
dkester | 1:fd4c0e2decb8 | 66 | detachTicker(); |
dkester | 0:e188325211af | 67 | setLed(0); |
dkester | 0:e188325211af | 68 | } |
dkester | 0:e188325211af | 69 | |
dkester | 0:e188325211af | 70 | void OfflineCommand::writeToMemory() |
dkester | 0:e188325211af | 71 | { |
dkester | 0:e188325211af | 72 | if(!storage->isBusy()) { |
dkester | 0:e188325211af | 73 | |
dkester | 0:e188325211af | 74 | storage->pageProgram(addr); |
dkester | 0:e188325211af | 75 | |
dkester | 2:c9e47ac47edb | 76 | /* |
dkester | 2:c9e47ac47edb | 77 | storage->writeData() |
dkester | 2:c9e47ac47edb | 78 | storage->writeData() |
dkester | 2:c9e47ac47edb | 79 | storage->writeData() |
dkester | 2:c9e47ac47edb | 80 | storage->writeData() |
dkester | 2:c9e47ac47edb | 81 | */ |
dkester | 2:c9e47ac47edb | 82 | |
dkester | 0:e188325211af | 83 | storage->endAction(); |
dkester | 1:fd4c0e2decb8 | 84 | |
dkester | 1:fd4c0e2decb8 | 85 | addr = addr + 0x4; |
dkester | 1:fd4c0e2decb8 | 86 | |
dkester | 0:e188325211af | 87 | } else { |
dkester | 0:e188325211af | 88 | printf("busy: %d\n", storage->getSR1()); |
dkester | 0:e188325211af | 89 | } |
dkester | 0:e188325211af | 90 | |
dkester | 0:e188325211af | 91 | } |
dkester | 0:e188325211af | 92 | |
dkester | 1:fd4c0e2decb8 | 93 | void OfflineCommand::eraseMemory() |
dkester | 1:fd4c0e2decb8 | 94 | { |
dkester | 1:fd4c0e2decb8 | 95 | __disable_irq(); |
dkester | 2:c9e47ac47edb | 96 | storage->reset(); |
dkester | 1:fd4c0e2decb8 | 97 | |
dkester | 2:c9e47ac47edb | 98 | while(storage->isBusy()) { |
dkester | 1:fd4c0e2decb8 | 99 | setLed(1); |
dkester | 1:fd4c0e2decb8 | 100 | wait(0.1); |
dkester | 1:fd4c0e2decb8 | 101 | setLed(0); |
dkester | 1:fd4c0e2decb8 | 102 | } |
dkester | 2:c9e47ac47edb | 103 | storage->setWREN(); |
dkester | 1:fd4c0e2decb8 | 104 | |
dkester | 1:fd4c0e2decb8 | 105 | wait(0.01); |
dkester | 1:fd4c0e2decb8 | 106 | |
dkester | 2:c9e47ac47edb | 107 | storage->bulkErase(); |
dkester | 1:fd4c0e2decb8 | 108 | |
dkester | 1:fd4c0e2decb8 | 109 | wait(0.01); |
dkester | 1:fd4c0e2decb8 | 110 | |
dkester | 1:fd4c0e2decb8 | 111 | printf("erasing...\n"); |
dkester | 1:fd4c0e2decb8 | 112 | |
dkester | 2:c9e47ac47edb | 113 | while(storage->isBusy()) { |
dkester | 1:fd4c0e2decb8 | 114 | wait(0.1); |
dkester | 1:fd4c0e2decb8 | 115 | } |
dkester | 1:fd4c0e2decb8 | 116 | |
dkester | 2:c9e47ac47edb | 117 | printf("succes...%d\n", storage->getSR1()); |
dkester | 1:fd4c0e2decb8 | 118 | __enable_irq(); |
dkester | 0:e188325211af | 119 | |
dkester | 1:fd4c0e2decb8 | 120 | /* |
dkester | 1:fd4c0e2decb8 | 121 | __disable_irq(); |
dkester | 1:fd4c0e2decb8 | 122 | |
dkester | 1:fd4c0e2decb8 | 123 | Storage::getInstance()->read(addr); |
dkester | 1:fd4c0e2decb8 | 124 | |
dkester | 1:fd4c0e2decb8 | 125 | while(Storage::getInstance()->readData() != 0xFF){ |
dkester | 1:fd4c0e2decb8 | 126 | Storage::getInstance()->endAction(); //end previous read action |
dkester | 1:fd4c0e2decb8 | 127 | |
dkester | 1:fd4c0e2decb8 | 128 | Storage::getInstance()->sectorErase(addr); |
dkester | 1:fd4c0e2decb8 | 129 | |
dkester | 1:fd4c0e2decb8 | 130 | while( Storage::getInstance()->isBusy()){ |
dkester | 1:fd4c0e2decb8 | 131 | wait(0.01); |
dkester | 1:fd4c0e2decb8 | 132 | } |
dkester | 1:fd4c0e2decb8 | 133 | addr = addr + (1<<18); |
dkester | 1:fd4c0e2decb8 | 134 | printf("sector %d erased\n", addr); |
dkester | 1:fd4c0e2decb8 | 135 | Storage::getInstance()->read(addr); //set next section addr for read in the while statement |
dkester | 0:e188325211af | 136 | } |
dkester | 1:fd4c0e2decb8 | 137 | printf("sector erase done\n"); |
dkester | 1:fd4c0e2decb8 | 138 | Storage::getInstance()->endAction(); |
dkester | 1:fd4c0e2decb8 | 139 | |
dkester | 1:fd4c0e2decb8 | 140 | __enable_irq(); |
dkester | 1:fd4c0e2decb8 | 141 | |
dkester | 1:fd4c0e2decb8 | 142 | */ |
dkester | 1:fd4c0e2decb8 | 143 | } |
dkester | 1:fd4c0e2decb8 | 144 | |
dkester | 1:fd4c0e2decb8 | 145 | int32_t OfflineCommand::getLastAddress(){ |
dkester | 1:fd4c0e2decb8 | 146 | return addr; |
dkester | 1:fd4c0e2decb8 | 147 | } |