working commands. singleton deleted

Dependents:   GonioTrainer

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?

UserRevisionLine numberNew 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 }