-

Committer:
kpan
Date:
Mon Nov 12 19:08:35 2018 +0000
Revision:
2:f02ac448ecd3
Parent:
1:e8eeddee2959
Child:
4:c15c22484205
Changed some varnames

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kpan 0:693f2f97c8c1 1 #include "Counter.h"
kpan 0:693f2f97c8c1 2
kpan 2:f02ac448ecd3 3 //#define COUNTER_DEBUG
kpan 2:f02ac448ecd3 4
kpan 0:693f2f97c8c1 5 #ifdef COUNTER_DEBUG
kpan 0:693f2f97c8c1 6 Serial debug_out(USBTX, USBRX);
kpan 0:693f2f97c8c1 7 #endif
kpan 0:693f2f97c8c1 8 Counter::Counter()
kpan 0:693f2f97c8c1 9 {
kpan 2:f02ac448ecd3 10 is_new_count = flash_size() - SECTOR_SIZE;
kpan 0:693f2f97c8c1 11 address = (int)((int*)(flash_size() - SECTOR_SIZE) + 1);
kpan 0:693f2f97c8c1 12 #ifdef COUNTER_DEBUG
kpan 0:693f2f97c8c1 13 debug_out.printf("Constructing Object...\r\n");
kpan 0:693f2f97c8c1 14 #endif
kpan 1:e8eeddee2959 15 for(int i=0; i<MAX_LEN; i++)
kpan 1:e8eeddee2959 16 count[i] = 0;
kpan 0:693f2f97c8c1 17 this->init();
kpan 0:693f2f97c8c1 18 }
kpan 0:693f2f97c8c1 19
kpan 0:693f2f97c8c1 20 #ifdef COUNTER_DEBUG
kpan 0:693f2f97c8c1 21 void Counter::print_memory()
kpan 0:693f2f97c8c1 22 {
kpan 0:693f2f97c8c1 23 int *ptr = (int*) address;
kpan 0:693f2f97c8c1 24 debug_out.printf("PartyID\tVoteCt\tMemCt\tAddress\r\n");
kpan 1:e8eeddee2959 25 for(int i=0; i<MAX_LEN; i++) {
kpan 1:e8eeddee2959 26 debug_out.printf("%dID\t%d\t%d\t%p\r\n", i, count[i], ptr[i], (ptr+i));
kpan 0:693f2f97c8c1 27 }
kpan 0:693f2f97c8c1 28 }
kpan 0:693f2f97c8c1 29 #endif
kpan 0:693f2f97c8c1 30
kpan 0:693f2f97c8c1 31 void Counter::init()
kpan 0:693f2f97c8c1 32 {
kpan 0:693f2f97c8c1 33 #ifdef COUNTER_DEBUG
kpan 0:693f2f97c8c1 34 debug_out.printf("Initializing...\r\n");
kpan 0:693f2f97c8c1 35 #endif
kpan 2:f02ac448ecd3 36 if(*((int*)is_new_count) == -1) { // then we know it hasn't been initialized yet
kpan 2:f02ac448ecd3 37 erase_sector(is_new_count);
kpan 0:693f2f97c8c1 38 int zero = 0;
kpan 2:f02ac448ecd3 39 program_flash(is_new_count, (char*)&zero, sizeof(int));
kpan 1:e8eeddee2959 40 memwrite();
kpan 0:693f2f97c8c1 41 } else {
kpan 1:e8eeddee2959 42 memread();
kpan 0:693f2f97c8c1 43 }
kpan 0:693f2f97c8c1 44 #ifdef COUNTER_DEBUG
kpan 0:693f2f97c8c1 45 print_memory();
kpan 0:693f2f97c8c1 46 #endif
kpan 0:693f2f97c8c1 47 }
kpan 0:693f2f97c8c1 48
kpan 1:e8eeddee2959 49 void Counter::memwrite()
kpan 0:693f2f97c8c1 50 {
kpan 0:693f2f97c8c1 51 #ifdef COUNTER_DEBUG
kpan 0:693f2f97c8c1 52 debug_out.printf("Writing to Flash\r\n");
kpan 0:693f2f97c8c1 53 #endif
kpan 0:693f2f97c8c1 54 erase_sector(address);
kpan 0:693f2f97c8c1 55 int zero = 0;
kpan 2:f02ac448ecd3 56 program_flash(is_new_count, (char*)&zero, sizeof(int));
kpan 1:e8eeddee2959 57 program_flash(address, (char*)&count, sizeof(int) * MAX_LEN);
kpan 0:693f2f97c8c1 58 #ifdef COUNTER_DEBUG
kpan 0:693f2f97c8c1 59 print_memory();
kpan 0:693f2f97c8c1 60 #endif
kpan 0:693f2f97c8c1 61 }
kpan 0:693f2f97c8c1 62
kpan 1:e8eeddee2959 63 void Counter::memread()
kpan 0:693f2f97c8c1 64 {
kpan 0:693f2f97c8c1 65 #ifdef COUNTER_DEBUG
kpan 0:693f2f97c8c1 66 debug_out.printf("Reading from Flash\r\n");
kpan 0:693f2f97c8c1 67 #endif
kpan 1:e8eeddee2959 68 for(int i=0; i<MAX_LEN; i++) {
kpan 1:e8eeddee2959 69 count[i] = *((int*)address+i);
kpan 0:693f2f97c8c1 70 }
kpan 0:693f2f97c8c1 71 }
kpan 0:693f2f97c8c1 72
kpan 0:693f2f97c8c1 73 void Counter::increment(int party_id)
kpan 0:693f2f97c8c1 74 {
kpan 0:693f2f97c8c1 75 #ifdef COUNTER_DEBUG
kpan 0:693f2f97c8c1 76 debug_out.printf("Incrementing %d\r\n", party_id);
kpan 0:693f2f97c8c1 77 #endif
kpan 1:e8eeddee2959 78 count[party_id]++;
kpan 1:e8eeddee2959 79 memwrite();
kpan 0:693f2f97c8c1 80 }