Usb Device Interface, protocol, and programming homework #4 Audio Control device
Dependencies: C12832_lcd USBDevice mbed
bargraph.cpp@3:6da430f4818a, 2013-08-05 (annotated)
- Committer:
- jakowisp
- Date:
- Mon Aug 05 02:02:58 2013 +0000
- Revision:
- 3:6da430f4818a
- Parent:
- 1:948ffad3284f
Fixed several known issues to complete the assignment
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jakowisp | 0:69eb9d19fb91 | 1 | #include "bargraph.h" |
jakowisp | 3:6da430f4818a | 2 | /* |
jakowisp | 3:6da430f4818a | 3 | * Constructor |
jakowisp | 3:6da430f4818a | 4 | */ |
jakowisp | 0:69eb9d19fb91 | 5 | bargraph::bargraph(C12832_LCD *inlcd,int maxlevelsIn,int Xin,int Yin,int widthIn,int heightIn){ |
jakowisp | 1:948ffad3284f | 6 | this->lcd=inlcd; |
jakowisp | 1:948ffad3284f | 7 | this->level=0; |
jakowisp | 1:948ffad3284f | 8 | this->lastLevel=0; |
jakowisp | 3:6da430f4818a | 9 | //Make sure maxlevel is a valid level |
jakowisp | 0:69eb9d19fb91 | 10 | if(maxlevelsIn<=32 && maxlevelsIn >=4) |
jakowisp | 1:948ffad3284f | 11 | this->maxlevels=maxlevelsIn; |
jakowisp | 0:69eb9d19fb91 | 12 | else |
jakowisp | 1:948ffad3284f | 13 | this->maxlevels=32; |
jakowisp | 3:6da430f4818a | 14 | //make sure all initial values for size and location are valid |
jakowisp | 1:948ffad3284f | 15 | if(Xin>=0 && Xin<=127-this->maxlevels) |
jakowisp | 1:948ffad3284f | 16 | this->x=Xin; |
jakowisp | 0:69eb9d19fb91 | 17 | else |
jakowisp | 1:948ffad3284f | 18 | this->x=0; |
jakowisp | 1:948ffad3284f | 19 | if(Yin>=0 && Yin<=31-this->maxlevels) |
jakowisp | 1:948ffad3284f | 20 | this->y=Yin; |
jakowisp | 0:69eb9d19fb91 | 21 | else |
jakowisp | 1:948ffad3284f | 22 | this->y=0; |
jakowisp | 0:69eb9d19fb91 | 23 | if(widthIn>maxlevels && widthIn<128) |
jakowisp | 1:948ffad3284f | 24 | this->width=widthIn-1; |
jakowisp | 0:69eb9d19fb91 | 25 | else |
jakowisp | 1:948ffad3284f | 26 | this->width=127; |
jakowisp | 0:69eb9d19fb91 | 27 | if(heightIn>=(maxlevels-1) && heightIn<31) |
jakowisp | 1:948ffad3284f | 28 | this->height=heightIn; |
jakowisp | 0:69eb9d19fb91 | 29 | else |
jakowisp | 1:948ffad3284f | 30 | this->height=31; |
jakowisp | 3:6da430f4818a | 31 | //calculate how wide and tall each bar shall be. |
jakowisp | 1:948ffad3284f | 32 | this->leveladjust=(this->height+1)/this->maxlevels; |
jakowisp | 1:948ffad3284f | 33 | this->levelwidth=(this->width+1)/this->maxlevels; |
jakowisp | 0:69eb9d19fb91 | 34 | } |
jakowisp | 0:69eb9d19fb91 | 35 | |
jakowisp | 3:6da430f4818a | 36 | void bargraph::setMaxLevel(unsigned int maxlevelsIn) { |
jakowisp | 3:6da430f4818a | 37 | //Defensively set maxlevels to a new format level and clear the level/lastlevel values. |
jakowisp | 3:6da430f4818a | 38 | if(maxlevelsIn<=32 && maxlevelsIn >=4) |
jakowisp | 3:6da430f4818a | 39 | this->maxlevels=maxlevels; |
jakowisp | 3:6da430f4818a | 40 | else |
jakowisp | 3:6da430f4818a | 41 | this->maxlevels=32; |
jakowisp | 1:948ffad3284f | 42 | this->lcd->fillrect(this->x, this->y, this->x+this->width,this->y+this->height, 0); |
jakowisp | 3:6da430f4818a | 43 | this->lastLevel=0; |
jakowisp | 3:6da430f4818a | 44 | this->level=0; |
jakowisp | 1:948ffad3284f | 45 | this->leveladjust=(this->height+1)/maxlevels; |
jakowisp | 1:948ffad3284f | 46 | this->levelwidth=(this->width+1)/maxlevels; |
jakowisp | 0:69eb9d19fb91 | 47 | } |
jakowisp | 0:69eb9d19fb91 | 48 | |
jakowisp | 3:6da430f4818a | 49 | void bargraph::setLevel(unsigned int level){ |
jakowisp | 3:6da430f4818a | 50 | //Set level to a normalized value relative to maxlevels |
jakowisp | 3:6da430f4818a | 51 | this->level=(this->maxlevels * level)/0xff; |
jakowisp | 0:69eb9d19fb91 | 52 | } |
jakowisp | 0:69eb9d19fb91 | 53 | |
jakowisp | 0:69eb9d19fb91 | 54 | void bargraph::updateBargraph(){ |
jakowisp | 3:6da430f4818a | 55 | //Erase than draw the bars for the graph. |
jakowisp | 1:948ffad3284f | 56 | if(this->lcd!=NULL) { |
jakowisp | 1:948ffad3284f | 57 | if(this->level!=this->lastLevel) { |
jakowisp | 1:948ffad3284f | 58 | for(int i = 0 ; i<this->lastLevel;i++) { |
jakowisp | 1:948ffad3284f | 59 | this->lcd->fillrect(this->x+this->levelwidth*(i), |
jakowisp | 1:948ffad3284f | 60 | this->y, |
jakowisp | 1:948ffad3284f | 61 | this->x+this->levelwidth*(i+1)-1, |
jakowisp | 1:948ffad3284f | 62 | this->y+i*this->leveladjust, |
jakowisp | 1:948ffad3284f | 63 | 0); |
jakowisp | 0:69eb9d19fb91 | 64 | } |
jakowisp | 3:6da430f4818a | 65 | if (this->level > this->maxlevels) |
jakowisp | 3:6da430f4818a | 66 | this->level=this->maxlevels; |
jakowisp | 0:69eb9d19fb91 | 67 | for(int i = 0 ; i<level;i++) { |
jakowisp | 1:948ffad3284f | 68 | this->lcd->fillrect(this->x+this->levelwidth*(i), |
jakowisp | 1:948ffad3284f | 69 | this->y, |
jakowisp | 1:948ffad3284f | 70 | this->x+this->levelwidth*(i+1)-1, |
jakowisp | 1:948ffad3284f | 71 | this->y+i*this->leveladjust, |
jakowisp | 1:948ffad3284f | 72 | 1); |
jakowisp | 0:69eb9d19fb91 | 73 | } |
jakowisp | 1:948ffad3284f | 74 | this->lastLevel = this->level; |
jakowisp | 0:69eb9d19fb91 | 75 | } |
jakowisp | 0:69eb9d19fb91 | 76 | } |
jakowisp | 0:69eb9d19fb91 | 77 | }; |
jakowisp | 0:69eb9d19fb91 | 78 | |
jakowisp | 0:69eb9d19fb91 | 79 | |
jakowisp | 0:69eb9d19fb91 | 80 |