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.
RN52.h@15:82c3cc87bd02, 2016-02-07 (annotated)
- Committer:
- petter
- Date:
- Sun Feb 07 18:24:13 2016 +0000
- Revision:
- 15:82c3cc87bd02
- Parent:
- 13:968af0520530
RN52 bug fixed; CDC not returning buttons
Who changed what in which revision?
User | Revision | Line number | New 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 |