1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-13 03:20:00 +03:00

added i2cWriteBuffer() for ledring stuff

fixed ledring stuff
fixed mag orientation (thanks GrootWitBaas)

git-svn-id: https://afrodevices.googlecode.com/svn/trunk/baseflight@111 7c89a4a9-59b9-e629-4cfe-3a2d53b20e61
This commit is contained in:
timecop 2012-03-13 15:32:38 +00:00
parent 6e88b8ae30
commit 204d25d491
5 changed files with 53 additions and 33 deletions

View file

@ -502,10 +502,10 @@
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<Focus>0</Focus> <Focus>0</Focus>
<ColumnNumber>0</ColumnNumber> <ColumnNumber>30</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<TopLine>1</TopLine> <TopLine>55</TopLine>
<CurrentLine>1</CurrentLine> <CurrentLine>68</CurrentLine>
<bDave2>0</bDave2> <bDave2>0</bDave2>
<PathWithFileName>.\src\config.c</PathWithFileName> <PathWithFileName>.\src\config.c</PathWithFileName>
<FilenameWithoutPath>config.c</FilenameWithoutPath> <FilenameWithoutPath>config.c</FilenameWithoutPath>
@ -572,10 +572,10 @@
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<Focus>0</Focus> <Focus>0</Focus>
<ColumnNumber>1</ColumnNumber> <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<TopLine>264</TopLine> <TopLine>216</TopLine>
<CurrentLine>264</CurrentLine> <CurrentLine>229</CurrentLine>
<bDave2>0</bDave2> <bDave2>0</bDave2>
<PathWithFileName>.\src\sensors.c</PathWithFileName> <PathWithFileName>.\src\sensors.c</PathWithFileName>
<FilenameWithoutPath>sensors.c</FilenameWithoutPath> <FilenameWithoutPath>sensors.c</FilenameWithoutPath>
@ -602,8 +602,8 @@
<Focus>0</Focus> <Focus>0</Focus>
<ColumnNumber>0</ColumnNumber> <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<TopLine>0</TopLine> <TopLine>35</TopLine>
<CurrentLine>0</CurrentLine> <CurrentLine>72</CurrentLine>
<bDave2>0</bDave2> <bDave2>0</bDave2>
<PathWithFileName>.\src\board.h</PathWithFileName> <PathWithFileName>.\src\board.h</PathWithFileName>
<FilenameWithoutPath>board.h</FilenameWithoutPath> <FilenameWithoutPath>board.h</FilenameWithoutPath>
@ -614,10 +614,10 @@
<FileType>5</FileType> <FileType>5</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<Focus>0</Focus> <Focus>0</Focus>
<ColumnNumber>20</ColumnNumber> <ColumnNumber>14</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<TopLine>151</TopLine> <TopLine>241</TopLine>
<CurrentLine>167</CurrentLine> <CurrentLine>249</CurrentLine>
<bDave2>0</bDave2> <bDave2>0</bDave2>
<PathWithFileName>.\src\mw.h</PathWithFileName> <PathWithFileName>.\src\mw.h</PathWithFileName>
<FilenameWithoutPath>mw.h</FilenameWithoutPath> <FilenameWithoutPath>mw.h</FilenameWithoutPath>
@ -679,8 +679,8 @@
<Focus>0</Focus> <Focus>0</Focus>
<ColumnNumber>0</ColumnNumber> <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<TopLine>0</TopLine> <TopLine>28</TopLine>
<CurrentLine>0</CurrentLine> <CurrentLine>51</CurrentLine>
<bDave2>0</bDave2> <bDave2>0</bDave2>
<PathWithFileName>.\src\drv_hmc5883l.c</PathWithFileName> <PathWithFileName>.\src\drv_hmc5883l.c</PathWithFileName>
<FilenameWithoutPath>drv_hmc5883l.c</FilenameWithoutPath> <FilenameWithoutPath>drv_hmc5883l.c</FilenameWithoutPath>
@ -689,12 +689,12 @@
<GroupNumber>2</GroupNumber> <GroupNumber>2</GroupNumber>
<FileNumber>15</FileNumber> <FileNumber>15</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>1</tvExp>
<Focus>0</Focus> <Focus>0</Focus>
<ColumnNumber>11</ColumnNumber> <ColumnNumber>81</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<TopLine>121</TopLine> <TopLine>106</TopLine>
<CurrentLine>121</CurrentLine> <CurrentLine>140</CurrentLine>
<bDave2>0</bDave2> <bDave2>0</bDave2>
<PathWithFileName>.\src\drv_i2c.c</PathWithFileName> <PathWithFileName>.\src\drv_i2c.c</PathWithFileName>
<FilenameWithoutPath>drv_i2c.c</FilenameWithoutPath> <FilenameWithoutPath>drv_i2c.c</FilenameWithoutPath>
@ -719,10 +719,10 @@
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<Focus>0</Focus> <Focus>0</Focus>
<ColumnNumber>0</ColumnNumber> <ColumnNumber>5</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<TopLine>0</TopLine> <TopLine>71</TopLine>
<CurrentLine>0</CurrentLine> <CurrentLine>87</CurrentLine>
<bDave2>0</bDave2> <bDave2>0</bDave2>
<PathWithFileName>.\src\drv_pwm.c</PathWithFileName> <PathWithFileName>.\src\drv_pwm.c</PathWithFileName>
<FilenameWithoutPath>drv_pwm.c</FilenameWithoutPath> <FilenameWithoutPath>drv_pwm.c</FilenameWithoutPath>
@ -761,10 +761,10 @@
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<Focus>0</Focus> <Focus>0</Focus>
<ColumnNumber>7</ColumnNumber> <ColumnNumber>17</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<TopLine>17</TopLine> <TopLine>17</TopLine>
<CurrentLine>52</CurrentLine> <CurrentLine>35</CurrentLine>
<bDave2>0</bDave2> <bDave2>0</bDave2>
<PathWithFileName>.\src\drv_ledring.c</PathWithFileName> <PathWithFileName>.\src\drv_ledring.c</PathWithFileName>
<FilenameWithoutPath>drv_ledring.c</FilenameWithoutPath> <FilenameWithoutPath>drv_ledring.c</FilenameWithoutPath>

View file

@ -73,21 +73,28 @@ static void i2c_er_handler(void)
busy = 0; busy = 0;
} }
bool i2cWrite(uint8_t addr_, uint8_t reg_, uint8_t data) bool i2cWriteBuffer(uint8_t addr_, uint8_t reg_, uint8_t len_, uint8_t *data)
{ {
uint8_t my_data[1]; uint8_t i;
uint8_t my_data[8];
uint32_t timeout = I2C_DEFAULT_TIMEOUT; uint32_t timeout = I2C_DEFAULT_TIMEOUT;
addr = addr_ << 1; addr = addr_ << 1;
reg = reg_; reg = reg_;
writing = 1; writing = 1;
reading = 0; reading = 0;
my_data[0] = data;
write_p = my_data; write_p = my_data;
read_p = my_data; read_p = my_data;
bytes = 1; bytes = len_;
busy = 1; busy = 1;
// too long
if (len_ > 7)
return false;
for (i = 0; i < len_; i++)
my_data[i] = data[i];
if (!(I2Cx->CR2 & I2C_IT_EVT)) { //if we are restarting the driver if (!(I2Cx->CR2 & I2C_IT_EVT)) { //if we are restarting the driver
if (!(I2Cx->CR1 & 0x0100)) { // ensure sending a start if (!(I2Cx->CR1 & 0x0100)) { // ensure sending a start
while (I2Cx->CR1 & 0x0200) { ; } //wait for any stop to finish sending while (I2Cx->CR1 & 0x0200) { ; } //wait for any stop to finish sending
@ -107,6 +114,11 @@ bool i2cWrite(uint8_t addr_, uint8_t reg_, uint8_t data)
return true; return true;
} }
bool i2cWrite(uint8_t addr_, uint8_t reg_, uint8_t data)
{
return i2cWriteBuffer(addr_, reg_, 1, &data);
}
bool i2cRead(uint8_t addr_, uint8_t reg_, uint8_t len, uint8_t* buf) bool i2cRead(uint8_t addr_, uint8_t reg_, uint8_t len, uint8_t* buf)
{ {
uint32_t timeout = I2C_DEFAULT_TIMEOUT; uint32_t timeout = I2C_DEFAULT_TIMEOUT;

View file

@ -1,6 +1,7 @@
#pragma once #pragma once
void i2cInit(I2C_TypeDef *I2Cx); void i2cInit(I2C_TypeDef *I2Cx);
bool i2cWriteBuffer(uint8_t addr_, uint8_t reg_, uint8_t len_, uint8_t *data);
bool i2cWrite(uint8_t addr_, uint8_t reg, uint8_t data); bool i2cWrite(uint8_t addr_, uint8_t reg, uint8_t data);
bool i2cRead(uint8_t addr_, uint8_t reg, uint8_t len, uint8_t* buf); bool i2cRead(uint8_t addr_, uint8_t reg, uint8_t len, uint8_t* buf);
uint16_t i2cGetErrorCounter(void); uint16_t i2cGetErrorCounter(void);

View file

@ -9,7 +9,7 @@ bool ledringDetect(void)
bool ack = false; bool ack = false;
uint8_t sig = 'e'; uint8_t sig = 'e';
ack = 0; // i2cWrite(LED_RING_ADDRESS, 0xFF, 1, &sig); ack = i2cWrite(LED_RING_ADDRESS, 0xFF, sig);
if (!ack) if (!ack)
return false; return false;
return true; return true;
@ -23,13 +23,13 @@ void ledringState(void)
if (state == 0) { if (state == 0) {
b[0] = 'z'; b[0] = 'z';
b[1] = (180 - heading) / 2; // 1 unit = 2 degrees; b[1] = (180 - heading) / 2; // 1 unit = 2 degrees;
// i2cWrite(LED_RING_ADDRESS, 0xFF, 2, b); i2cWriteBuffer(LED_RING_ADDRESS, 0xFF, 2, b);
state = 1; state = 1;
} else if (state == 1) { } else if (state == 1) {
b[0] = 'y'; b[0] = 'y';
b[1] = constrain(angle[ROLL] / 10 + 90, 0, 180); b[1] = constrain(angle[ROLL] / 10 + 90, 0, 180);
b[2] = constrain(angle[PITCH] / 10 + 90, 0, 180); b[2] = constrain(angle[PITCH] / 10 + 90, 0, 180);
// i2cWrite(LED_RING_ADDRESS, 0xFF, 3, b); i2cWriteBuffer(LED_RING_ADDRESS, 0xFF, 3, b);
state = 2; state = 2;
} else if (state == 2) { } else if (state == 2) {
b[0] = 'd'; // all unicolor GREEN b[0] = 'd'; // all unicolor GREEN
@ -38,7 +38,7 @@ void ledringState(void)
b[2] = 1; b[2] = 1;
else else
b[2] = 0; b[2] = 0;
// i2cWrite(LED_RING_ADDRESS, 0xFF, 3, b); i2cWriteBuffer(LED_RING_ADDRESS, 0xFF, 3, b);
state = 0; state = 0;
} }
} }
@ -49,5 +49,5 @@ void ledringBlink(void)
b[0] = 'k'; b[0] = 'k';
b[1] = 10; b[1] = 10;
b[2] = 10; b[2] = 10;
// i2cWrite(LED_RING_ADDRESS, 0xFF, 3, b); i2cWriteBuffer(LED_RING_ADDRESS, 0xFF, 3, b);
} }

View file

@ -228,10 +228,17 @@ static void Mag_getRawADC(void)
static int16_t rawADC[3]; static int16_t rawADC[3];
hmc5883lRead(rawADC); hmc5883lRead(rawADC);
// no way? is this finally the proper orientation?? #if 0
// no way? is this finally the proper orientation?? (seems -180 swapped)
magADC[ROLL] = -rawADC[2]; // X magADC[ROLL] = -rawADC[2]; // X
magADC[PITCH] = rawADC[0]; // Y magADC[PITCH] = rawADC[0]; // Y
magADC[YAW] = rawADC[1]; // Z magADC[YAW] = rawADC[1]; // Z
#else
// no way? is THIS finally the proper orientation?? (by GrootWitBaas)
magADC[ROLL] = rawADC[2]; // X
magADC[PITCH] = -rawADC[0]; // Y
magADC[YAW] = -rawADC[1]; // Z
#endif
} }
void Mag_init(void) void Mag_init(void)