The iPod controller that I submitted for the mbed challenge
Dependencies: mbed Motordriver PID
ipodcontrol.h@0:371773dd3dd1, 2011-05-04 (annotated)
- Committer:
- networker
- Date:
- Wed May 04 15:41:13 2011 +0000
- Revision:
- 0:371773dd3dd1
first publication
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
networker | 0:371773dd3dd1 | 1 | #ifndef IPODCONTROL_H |
networker | 0:371773dd3dd1 | 2 | #define IPODCONTROL_H |
networker | 0:371773dd3dd1 | 3 | #include "ipod.h" |
networker | 0:371773dd3dd1 | 4 | |
networker | 0:371773dd3dd1 | 5 | enum types { top, playlist=1, artist=2, album=3, genre=4, song=5, composer=6, podcast=8}; |
networker | 0:371773dd3dd1 | 6 | enum _mode { nav, playback, fastf, fastr, stopfast}; |
networker | 0:371773dd3dd1 | 7 | |
networker | 0:371773dd3dd1 | 8 | class ipodControl { |
networker | 0:371773dd3dd1 | 9 | static const int maxdepth = 5; |
networker | 0:371773dd3dd1 | 10 | static const char *toplevel[]; |
networker | 0:371773dd3dd1 | 11 | static const types paths[][maxdepth]; |
networker | 0:371773dd3dd1 | 12 | unsigned path, level; |
networker | 0:371773dd3dd1 | 13 | _mode mode; |
networker | 0:371773dd3dd1 | 14 | unsigned items, current; |
networker | 0:371773dd3dd1 | 15 | unsigned last[maxdepth]; |
networker | 0:371773dd3dd1 | 16 | unsigned elapsed, tracklength, newpos; |
networker | 0:371773dd3dd1 | 17 | unsigned status; |
networker | 0:371773dd3dd1 | 18 | ipod& pod; |
networker | 0:371773dd3dd1 | 19 | char *name; |
networker | 0:371773dd3dd1 | 20 | bool wrap; |
networker | 0:371773dd3dd1 | 21 | void Next() { current++; if (current == items) current = wrap ? 0 : items-1;} |
networker | 0:371773dd3dd1 | 22 | void Prev() { if (current == 0) current = wrap ? items-1 : 0; else current--;} |
networker | 0:371773dd3dd1 | 23 | enum { usIdle, usGet_time_status, usGet_title, usGet_artist, usStartPoll, usStopPoll} update_state; |
networker | 0:371773dd3dd1 | 24 | protected: |
networker | 0:371773dd3dd1 | 25 | void updater(unsigned); |
networker | 0:371773dd3dd1 | 26 | public: |
networker | 0:371773dd3dd1 | 27 | ipodControl(ipod& p) ; |
networker | 0:371773dd3dd1 | 28 | //commands |
networker | 0:371773dd3dd1 | 29 | void OK() { OK(current);} |
networker | 0:371773dd3dd1 | 30 | void OK(unsigned item); |
networker | 0:371773dd3dd1 | 31 | void Menu(); |
networker | 0:371773dd3dd1 | 32 | void Fwd() {pod.SendAirCmd(command, next);} |
networker | 0:371773dd3dd1 | 33 | void Rev() {pod.SendAirCmd(command, prev);} |
networker | 0:371773dd3dd1 | 34 | void PlayPause() {pod.SendAirCmd(command, play);} |
networker | 0:371773dd3dd1 | 35 | void Right(); |
networker | 0:371773dd3dd1 | 36 | void Left(); |
networker | 0:371773dd3dd1 | 37 | void MoveTo(float); |
networker | 0:371773dd3dd1 | 38 | bool readName(); |
networker | 0:371773dd3dd1 | 39 | void StartPolling() { pod.SendAirCmd(polling, 1);} |
networker | 0:371773dd3dd1 | 40 | void Update(){update_state = usGet_time_status; pod.SendAirCmd(polling, 0); pod.SendAirCmd(get_time_status); printf("Update: getting status\n");} |
networker | 0:371773dd3dd1 | 41 | //setters |
networker | 0:371773dd3dd1 | 42 | void setWrap(bool w=true) { wrap = w;} |
networker | 0:371773dd3dd1 | 43 | //getters |
networker | 0:371773dd3dd1 | 44 | _mode getMode(){ return mode;} |
networker | 0:371773dd3dd1 | 45 | const char* getPathStr() const { return toplevel[path];} |
networker | 0:371773dd3dd1 | 46 | const char* getTypeStr() const { types t = paths[path][level]; if (t==top) return "Music"; return toplevel[t-1];} |
networker | 0:371773dd3dd1 | 47 | types getType() { return paths[path][level];} |
networker | 0:371773dd3dd1 | 48 | unsigned getItems() { return items;} |
networker | 0:371773dd3dd1 | 49 | unsigned getElapsed() { return elapsed;} |
networker | 0:371773dd3dd1 | 50 | unsigned getTrackLength() { return tracklength;} |
networker | 0:371773dd3dd1 | 51 | float getPos() { return (float)elapsed/(float)tracklength;} |
networker | 0:371773dd3dd1 | 52 | //event processing |
networker | 0:371773dd3dd1 | 53 | void poll(); |
networker | 0:371773dd3dd1 | 54 | void (*OnTitle)(const char*); |
networker | 0:371773dd3dd1 | 55 | void (*OnAlbum)(const char*); |
networker | 0:371773dd3dd1 | 56 | void (*OnArtist)(const char*); |
networker | 0:371773dd3dd1 | 57 | void (*OnGetNames)(unsigned, const char*); |
networker | 0:371773dd3dd1 | 58 | void (*OnTrackChange)(unsigned); |
networker | 0:371773dd3dd1 | 59 | void (*OnTime)(unsigned); |
networker | 0:371773dd3dd1 | 60 | void (*OnStatus)(unsigned, unsigned, unsigned); |
networker | 0:371773dd3dd1 | 61 | void (*OnError)(unsigned, unsigned); |
networker | 0:371773dd3dd1 | 62 | }; |
networker | 0:371773dd3dd1 | 63 | |
networker | 0:371773dd3dd1 | 64 | #endif |