The iPod controller that I submitted for the mbed challenge

Dependencies:   mbed Motordriver PID

Committer:
networker
Date:
Wed May 04 15:41:13 2011 +0000
Revision:
0:371773dd3dd1
first publication

Who changed what in which revision?

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