The iPod controller that I submitted for the mbed challenge
Dependencies: mbed Motordriver PID
ipod.h
- Committer:
- networker
- Date:
- 2011-05-04
- Revision:
- 0:371773dd3dd1
File content as of revision 0:371773dd3dd1:
#ifndef IPOD_H #define IPOD_H //#define TX_IRQ #define DEBUGPIN LED2 //enum types { top, playlist, artist, album, genre, song, composer, podcast, endoflist}; enum playback { play = 1, stop, next, prev, ffwd, frwd, stopf}; 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, get_position = 0x1e, get_title = 0x20, get_artist = 0x22, get_album = 0x24, polling = 0x26, play_list = 0x28, command = 0x29, 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 }; class ipod { union conv { int asInt; char asBytes[4]; }; void copy(char *b, union conv p) ; unsigned copy(char *b) ; Serial *com; void handlerx(); void handletx(); unsigned char state, length, mode, chk; volatile short command, lastcommand; char *rx_buffer, tx_buffer[16]; char tx_size, tx_index; bool rx_ready, tx_ready; enum errors { err_success=0, err_timeout=1, err_failure=2, err_limit=4, err_answer=5, err_unknown}error; char *string; //just a pointer into rx_buffer unsigned arg1, arg2, arg3; volatile unsigned replies; DigitalOut &led; protected: void write() { for (int i = 0; i < tx_size; i++) com->putc(tx_buffer[i]); } public: ipod(PinName tx, PinName rx); ~ipod() { delete com; } //commands void SendAirCmd(unsigned cmd, unsigned arg1=0, unsigned arg2=0, unsigned arg3=0); void guarded_SendAirCmd(unsigned cmd, unsigned arg1=0, unsigned arg2=0, unsigned arg3=0); void SetMode(int); //event processing bool ready() { return rx_ready; } void release() { delete[] rx_buffer; rx_ready = false; } void parse(); bool waitForReply(); //getters short cmd() { return command; } const char* text() const { return string; } unsigned Arg1() { return arg1; } unsigned Arg2() { return arg2; } unsigned Arg3() { return arg3; } errors getError() { return error; } }; #endif