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 IPOD_H
networker 0:371773dd3dd1 2 #define IPOD_H
networker 0:371773dd3dd1 3
networker 0:371773dd3dd1 4 //#define TX_IRQ
networker 0:371773dd3dd1 5 #define DEBUGPIN LED2
networker 0:371773dd3dd1 6
networker 0:371773dd3dd1 7 //enum types { top, playlist, artist, album, genre, song, composer, podcast, endoflist};
networker 0:371773dd3dd1 8 enum playback { play = 1, stop, next, prev, ffwd, frwd, stopf};
networker 0:371773dd3dd1 9 enum aircmd { get_ipod_size = 0x12, get_ipod_name = 0x14, switch_to_main = 0x16, switch_to_item = 0x17, get_count = 0x18, get_names = 0x1a, get_time_status = 0x1c,
networker 0:371773dd3dd1 10 get_position = 0x1e, get_title = 0x20, get_artist = 0x22, get_album = 0x24, polling = 0x26, play_list = 0x28, command = 0x29,
networker 0:371773dd3dd1 11 get_shuffle = 0x2c, set_shuffle = 0x2e, get_repeat = 0x2f, set_repeat = 0x31, get_nr_in_playlist = 0x35, jump_to_nr_in_playlist = 0x37, select = 0x38
networker 0:371773dd3dd1 12 };
networker 0:371773dd3dd1 13
networker 0:371773dd3dd1 14 class ipod {
networker 0:371773dd3dd1 15 union conv { int asInt;
networker 0:371773dd3dd1 16 char asBytes[4];
networker 0:371773dd3dd1 17 };
networker 0:371773dd3dd1 18 void copy(char *b, union conv p) ;
networker 0:371773dd3dd1 19 unsigned copy(char *b) ;
networker 0:371773dd3dd1 20 Serial *com;
networker 0:371773dd3dd1 21 void handlerx();
networker 0:371773dd3dd1 22 void handletx();
networker 0:371773dd3dd1 23 unsigned char state, length, mode, chk;
networker 0:371773dd3dd1 24 volatile short command, lastcommand;
networker 0:371773dd3dd1 25 char *rx_buffer, tx_buffer[16];
networker 0:371773dd3dd1 26 char tx_size, tx_index;
networker 0:371773dd3dd1 27 bool rx_ready, tx_ready;
networker 0:371773dd3dd1 28 enum errors { err_success=0, err_timeout=1, err_failure=2, err_limit=4, err_answer=5, err_unknown}error;
networker 0:371773dd3dd1 29 char *string; //just a pointer into rx_buffer
networker 0:371773dd3dd1 30 unsigned arg1, arg2, arg3;
networker 0:371773dd3dd1 31 volatile unsigned replies;
networker 0:371773dd3dd1 32 DigitalOut &led;
networker 0:371773dd3dd1 33 protected:
networker 0:371773dd3dd1 34 void write() {
networker 0:371773dd3dd1 35 for (int i = 0; i < tx_size; i++)
networker 0:371773dd3dd1 36 com->putc(tx_buffer[i]);
networker 0:371773dd3dd1 37 }
networker 0:371773dd3dd1 38 public:
networker 0:371773dd3dd1 39 ipod(PinName tx, PinName rx);
networker 0:371773dd3dd1 40 ~ipod() {
networker 0:371773dd3dd1 41 delete com;
networker 0:371773dd3dd1 42 }
networker 0:371773dd3dd1 43 //commands
networker 0:371773dd3dd1 44 void SendAirCmd(unsigned cmd, unsigned arg1=0, unsigned arg2=0, unsigned arg3=0);
networker 0:371773dd3dd1 45 void guarded_SendAirCmd(unsigned cmd, unsigned arg1=0, unsigned arg2=0, unsigned arg3=0);
networker 0:371773dd3dd1 46 void SetMode(int);
networker 0:371773dd3dd1 47 //event processing
networker 0:371773dd3dd1 48 bool ready() {
networker 0:371773dd3dd1 49 return rx_ready;
networker 0:371773dd3dd1 50 }
networker 0:371773dd3dd1 51 void release() {
networker 0:371773dd3dd1 52 delete[] rx_buffer;
networker 0:371773dd3dd1 53 rx_ready = false;
networker 0:371773dd3dd1 54 }
networker 0:371773dd3dd1 55 void parse();
networker 0:371773dd3dd1 56 bool waitForReply();
networker 0:371773dd3dd1 57 //getters
networker 0:371773dd3dd1 58 short cmd() {
networker 0:371773dd3dd1 59 return command;
networker 0:371773dd3dd1 60 }
networker 0:371773dd3dd1 61 const char* text() const {
networker 0:371773dd3dd1 62 return string;
networker 0:371773dd3dd1 63 }
networker 0:371773dd3dd1 64 unsigned Arg1() {
networker 0:371773dd3dd1 65 return arg1;
networker 0:371773dd3dd1 66 }
networker 0:371773dd3dd1 67 unsigned Arg2() {
networker 0:371773dd3dd1 68 return arg2;
networker 0:371773dd3dd1 69 }
networker 0:371773dd3dd1 70 unsigned Arg3() {
networker 0:371773dd3dd1 71 return arg3;
networker 0:371773dd3dd1 72 }
networker 0:371773dd3dd1 73 errors getError() {
networker 0:371773dd3dd1 74 return error;
networker 0:371773dd3dd1 75 }
networker 0:371773dd3dd1 76 };
networker 0:371773dd3dd1 77 #endif