Simulated the CD changer of a Saab to implement a bluetooth connection to the car stereo. Control of playback device (phone) with steering wheel buttons. Needs a RN52 bluetooth transciever and a CAN transiever. So far only audio playback and control via steering wheel buttons implemented. Hands free calling planned.

Dependencies:   mbed

Committer:
petter
Date:
Fri Mar 18 20:58:36 2016 +0000
Revision:
16:7bb8b161e00b
Parent:
15:82c3cc87bd02
Added can.monitor in a trial to get the sleep mode working

Who changed what in which revision?

UserRevisionLine numberNew contents of line
petter 0:6cf6e566c0da 1 #ifndef RN52_H
petter 0:6cf6e566c0da 2 #define RN52_H
petter 0:6cf6e566c0da 3
petter 0:6cf6e566c0da 4
petter 0:6cf6e566c0da 5 typedef enum
petter 0:6cf6e566c0da 6 {
petter 0:6cf6e566c0da 7 RN52_LIMBO,
petter 0:6cf6e566c0da 8 RN52_CONNECTABLE,
petter 0:6cf6e566c0da 9 RN52_CONNECTABLE_DISCOVERABLE,
petter 0:6cf6e566c0da 10 RN52_CONNECTED,
petter 0:6cf6e566c0da 11 RN52_OUTGOING_CALL,
petter 0:6cf6e566c0da 12 RN52_INCOMING_CALL,
petter 0:6cf6e566c0da 13 RN52_ACTIVE_CALL,
petter 0:6cf6e566c0da 14 RN52_TEST_MODE,
petter 0:6cf6e566c0da 15 RN52_THREE_WAY_CALL_WAITING,
petter 0:6cf6e566c0da 16 RN52_THREE_WAY_CALL_ON_HOLD,
petter 0:6cf6e566c0da 17 RN52_THREE_WAY_CALL_MULTI_CALL,
petter 2:10c60edc8573 18 RN52_INCOMING_CALL_ON_HOLD,
petter 0:6cf6e566c0da 19 RN52_ACTIVE_CALL2,
petter 0:6cf6e566c0da 20 RN52_AUDIO_STREAMING,
petter 0:6cf6e566c0da 21 RN52_LOW_BATTERY,
petter 8:beb6c399490a 22 RN52_NOT_SET,
petter 0:6cf6e566c0da 23
petter 0:6cf6e566c0da 24 RN52_CONNECTION_LAST
petter 0:6cf6e566c0da 25
petter 0:6cf6e566c0da 26 } RN52_CONNECTION;
petter 0:6cf6e566c0da 27
petter 0:6cf6e566c0da 28
petter 0:6cf6e566c0da 29 typedef enum
petter 0:6cf6e566c0da 30 {
petter 0:6cf6e566c0da 31 RN52_NO_EVENT,
petter 0:6cf6e566c0da 32 RN52_CALLER_ID_EVENT,
petter 0:6cf6e566c0da 33 RN52_TRACK_CHANGE_EVENT,
petter 7:2df2c6e8c0df 34 RN52_OTHER_EVENT,
petter 0:6cf6e566c0da 35
petter 0:6cf6e566c0da 36 RN52_EVENT_LAST
petter 0:6cf6e566c0da 37
petter 0:6cf6e566c0da 38 } RN52_EVENT;
petter 0:6cf6e566c0da 39
petter 0:6cf6e566c0da 40 typedef struct
petter 0:6cf6e566c0da 41 {
petter 0:6cf6e566c0da 42 RN52_EVENT event;
petter 0:6cf6e566c0da 43 bool media_connected;
petter 0:6cf6e566c0da 44 bool phone_connected;
petter 0:6cf6e566c0da 45 RN52_CONNECTION connection;
petter 7:2df2c6e8c0df 46 char title[255];
petter 7:2df2c6e8c0df 47 char artist[255];
petter 7:2df2c6e8c0df 48 char album[255];
petter 7:2df2c6e8c0df 49 char genre[255];
petter 6:c454f88524d6 50 int duration;
petter 6:c454f88524d6 51 int track_number;
petter 6:c454f88524d6 52 int track_count;
petter 7:2df2c6e8c0df 53 char response[255];
petter 0:6cf6e566c0da 54
petter 0:6cf6e566c0da 55 } RN52_RESULT;
petter 0:6cf6e566c0da 56
petter 0:6cf6e566c0da 57
petter 0:6cf6e566c0da 58
petter 0:6cf6e566c0da 59
petter 0:6cf6e566c0da 60 //----------------------------------------------------------------------------
petter 0:6cf6e566c0da 61 // CLASS
petter 0:6cf6e566c0da 62 //----------------------------------------------------------------------------
petter 0:6cf6e566c0da 63
petter 0:6cf6e566c0da 64 class RN52
petter 0:6cf6e566c0da 65 {
petter 0:6cf6e566c0da 66 public:
petter 0:6cf6e566c0da 67 void init();
petter 13:968af0520530 68 void enable();
petter 13:968af0520530 69 void disable();
petter 4:3041a571b7a7 70 bool check_event(RN52_RESULT * rn52_result);
petter 5:8e468fef2754 71 bool connect();
petter 5:8e468fef2754 72 bool disconnect();
petter 5:8e468fef2754 73 bool next_track();
petter 5:8e468fef2754 74 bool prev_track();
petter 5:8e468fef2754 75 bool toggle_play();
petter 5:8e468fef2754 76 bool maxvolume();
petter 8:beb6c399490a 77 bool get_status(RN52_RESULT * result);
petter 8:beb6c399490a 78 bool get_caller_id(RN52_RESULT * result);
petter 8:beb6c399490a 79 bool get_track_metadata(RN52_RESULT * result);
petter 5:8e468fef2754 80 bool capture_response(char * str);
petter 6:c454f88524d6 81 void clear_serial();
petter 7:2df2c6e8c0df 82 void copy_response(char * source, char * destination, char offset);
petter 7:2df2c6e8c0df 83 void clear_result(RN52_RESULT * result);
petter 15:82c3cc87bd02 84 void config(char * name);
petter 0:6cf6e566c0da 85 };
petter 0:6cf6e566c0da 86
petter 0:6cf6e566c0da 87 #endif