diff options
Diffstat (limited to 'drivers/haptic/DRV2605L.c')
-rw-r--r-- | drivers/haptic/DRV2605L.c | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/drivers/haptic/DRV2605L.c b/drivers/haptic/DRV2605L.c index 97ca292b9..215e6be3e 100644 --- a/drivers/haptic/DRV2605L.c +++ b/drivers/haptic/DRV2605L.c | |||
@@ -21,7 +21,7 @@ | |||
21 | #include <math.h> | 21 | #include <math.h> |
22 | 22 | ||
23 | 23 | ||
24 | uint8_t DRV2605L_transfer_buffer[20]; | 24 | uint8_t DRV2605L_transfer_buffer[2]; |
25 | uint8_t DRV2605L_tx_register[0]; | 25 | uint8_t DRV2605L_tx_register[0]; |
26 | uint8_t DRV2605L_read_buffer[0]; | 26 | uint8_t DRV2605L_read_buffer[0]; |
27 | uint8_t DRV2605L_read_register; | 27 | uint8_t DRV2605L_read_register; |
@@ -34,6 +34,11 @@ void DRV_write(uint8_t drv_register, uint8_t settings) { | |||
34 | } | 34 | } |
35 | 35 | ||
36 | uint8_t DRV_read(uint8_t regaddress) { | 36 | uint8_t DRV_read(uint8_t regaddress) { |
37 | #ifdef __AVR__ | ||
38 | i2c_readReg(DRV2605L_BASE_ADDRESS << 1, | ||
39 | regaddress, DRV2605L_read_buffer, 1, 100); | ||
40 | DRV2605L_read_register = (uint8_t)DRV2605L_read_buffer[0]; | ||
41 | #else | ||
37 | DRV2605L_tx_register[0] = regaddress; | 42 | DRV2605L_tx_register[0] = regaddress; |
38 | if (MSG_OK != i2c_transmit_receive(DRV2605L_BASE_ADDRESS << 1, | 43 | if (MSG_OK != i2c_transmit_receive(DRV2605L_BASE_ADDRESS << 1, |
39 | DRV2605L_tx_register, 1, | 44 | DRV2605L_tx_register, 1, |
@@ -42,14 +47,13 @@ uint8_t DRV_read(uint8_t regaddress) { | |||
42 | printf("err reading reg \n"); | 47 | printf("err reading reg \n"); |
43 | } | 48 | } |
44 | DRV2605L_read_register = (uint8_t)DRV2605L_read_buffer[0]; | 49 | DRV2605L_read_register = (uint8_t)DRV2605L_read_buffer[0]; |
50 | #endif | ||
45 | return DRV2605L_read_register; | 51 | return DRV2605L_read_register; |
46 | } | 52 | } |
47 | 53 | ||
48 | void DRV_init(void) | 54 | void DRV_init(void) |
49 | { | 55 | { |
50 | i2c_init(); | 56 | i2c_init(); |
51 | i2c_start(DRV2605L_BASE_ADDRESS); | ||
52 | |||
53 | /* 0x07 sets DRV2605 into calibration mode */ | 57 | /* 0x07 sets DRV2605 into calibration mode */ |
54 | DRV_write(DRV_MODE,0x07); | 58 | DRV_write(DRV_MODE,0x07); |
55 | 59 | ||
@@ -104,21 +108,17 @@ void DRV_init(void) | |||
104 | C4_SET.Bits.C4_AUTO_CAL_TIME = AUTO_CAL_TIME; | 108 | C4_SET.Bits.C4_AUTO_CAL_TIME = AUTO_CAL_TIME; |
105 | DRV_write(DRV_CTRL_4, (uint8_t) C4_SET.Byte); | 109 | DRV_write(DRV_CTRL_4, (uint8_t) C4_SET.Byte); |
106 | DRV_write(DRV_LIB_SELECTION,LIB_SELECTION); | 110 | DRV_write(DRV_LIB_SELECTION,LIB_SELECTION); |
107 | //start autocalibration | 111 | |
108 | DRV_write(DRV_GO, 0x01); | 112 | DRV_write(DRV_GO, 0x01); |
109 | 113 | ||
110 | /* 0x00 sets DRV2605 out of standby and to use internal trigger | 114 | /* 0x00 sets DRV2605 out of standby and to use internal trigger |
111 | * 0x01 sets DRV2605 out of standby and to use external trigger */ | 115 | * 0x01 sets DRV2605 out of standby and to use external trigger */ |
112 | DRV_write(DRV_MODE,0x00); | 116 | DRV_write(DRV_MODE,0x00); |
113 | |||
114 | /* 0x06: LRA library */ | ||
115 | DRV_write(DRV_WAVEFORM_SEQ_1, 0x01); | ||
116 | |||
117 | /* 0xB9: LRA, 4x brake factor, medium gain, 7.5x back EMF | ||
118 | * 0x39: ERM, 4x brake factor, medium gain, 1.365x back EMF */ | ||
119 | |||
120 | /* TODO: setup auto-calibration as part of initiation */ | ||
121 | 117 | ||
118 | //Play greeting sequence | ||
119 | DRV_write(DRV_GO, 0x00); | ||
120 | DRV_write(DRV_WAVEFORM_SEQ_1, DRV_GREETING); | ||
121 | DRV_write(DRV_GO, 0x01); | ||
122 | } | 122 | } |
123 | 123 | ||
124 | void DRV_pulse(uint8_t sequence) | 124 | void DRV_pulse(uint8_t sequence) |