The iPod controller that I submitted for the mbed challenge
Dependencies: mbed Motordriver PID
ipod.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 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 |