1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-26 01:35:41 +03:00

Merge remote-tracking branch 'upstream/master' into documentation-edits

This commit is contained in:
Andrew Payne 2015-04-19 19:48:57 -04:00
commit 3b94756465
3 changed files with 32 additions and 14 deletions

View file

@ -169,14 +169,15 @@ static const uint8_t const multiWiiFont[][5] = { // Refer to "Times New Roman" F
}; };
#define OLED_address 0x3C // OLED at address 0x3C in 7bit #define OLED_address 0x3C // OLED at address 0x3C in 7bit
void i2c_OLED_send_cmd(uint8_t command)
static bool i2c_OLED_send_cmd(uint8_t command)
{ {
i2cWrite(OLED_address, 0x80, command); return i2cWrite(OLED_address, 0x80, command);
} }
static void i2c_OLED_send_byte(uint8_t val) static bool i2c_OLED_send_byte(uint8_t val)
{ {
i2cWrite(OLED_address, 0x40, val); return i2cWrite(OLED_address, 0x40, val);
} }
void i2c_OLED_clear_display(void) void i2c_OLED_clear_display(void)
@ -247,9 +248,14 @@ void i2c_OLED_send_string(const char *string)
* according to http://www.adafruit.com/datasheets/UG-2864HSWEG01.pdf Chapter 4.4 Page 15 * according to http://www.adafruit.com/datasheets/UG-2864HSWEG01.pdf Chapter 4.4 Page 15
*/ */
#if 1 #if 1
void ug2864hsweg01InitI2C(void) bool ug2864hsweg01InitI2C(void)
{ {
i2c_OLED_send_cmd(0xAE); // Set display OFF
// Set display OFF
if (!i2c_OLED_send_cmd(0xAE)) {
return false;
}
i2c_OLED_send_cmd(0xD4); // Set Display Clock Divide Ratio / OSC Frequency i2c_OLED_send_cmd(0xD4); // Set Display Clock Divide Ratio / OSC Frequency
i2c_OLED_send_cmd(0x80); // Display Clock Divide Ratio / OSC Frequency i2c_OLED_send_cmd(0x80); // Display Clock Divide Ratio / OSC Frequency
i2c_OLED_send_cmd(0xA8); // Set Multiplex Ratio i2c_OLED_send_cmd(0xA8); // Set Multiplex Ratio
@ -272,7 +278,10 @@ void ug2864hsweg01InitI2C(void)
i2c_OLED_send_cmd(0xA4); // Set all pixels OFF i2c_OLED_send_cmd(0xA4); // Set all pixels OFF
i2c_OLED_send_cmd(0xA6); // Set display not inverted i2c_OLED_send_cmd(0xA6); // Set display not inverted
i2c_OLED_send_cmd(0xAF); // Set display On i2c_OLED_send_cmd(0xAF); // Set display On
i2c_OLED_clear_display(); i2c_OLED_clear_display();
return true;
} }
#else #else
void ug2864hsweg01InitI2C(void) void ug2864hsweg01InitI2C(void)

View file

@ -34,7 +34,7 @@
#define VERTICAL_BARGRAPH_ZERO_CHARACTER (128 + 32) #define VERTICAL_BARGRAPH_ZERO_CHARACTER (128 + 32)
#define VERTICAL_BARGRAPH_CHARACTER_COUNT 7 #define VERTICAL_BARGRAPH_CHARACTER_COUNT 7
void ug2864hsweg01InitI2C(void); bool ug2864hsweg01InitI2C(void);
void i2c_OLED_set_xy(uint8_t col, uint8_t row); void i2c_OLED_set_xy(uint8_t col, uint8_t row);
void i2c_OLED_set_line(uint8_t row); void i2c_OLED_set_line(uint8_t row);

View file

@ -73,6 +73,7 @@ controlRateConfig_t *getControlRateConfig(uint8_t profileIndex);
#define PAGE_CYCLE_FREQUENCY (MILLISECONDS_IN_A_SECOND * 5) #define PAGE_CYCLE_FREQUENCY (MILLISECONDS_IN_A_SECOND * 5)
static uint32_t nextDisplayUpdateAt = 0; static uint32_t nextDisplayUpdateAt = 0;
static bool displayPresent = false;
static rxConfig_t *rxConfig; static rxConfig_t *rxConfig;
@ -136,7 +137,7 @@ typedef struct pageState_s {
static pageState_t pageState; static pageState_t pageState;
void resetDisplay(void) { void resetDisplay(void) {
ug2864hsweg01InitI2C(); displayPresent = ug2864hsweg01InitI2C();
} }
void LCDprint(uint8_t i) { void LCDprint(uint8_t i) {
@ -211,11 +212,6 @@ void showTitle()
void handlePageChange(void) void handlePageChange(void)
{ {
// Some OLED displays do not respond on the first initialisation so refresh the display
// when the page changes in the hopes the hardware responds. This also allows the
// user to power off/on the display or connect it while powered.
resetDisplay();
i2c_OLED_clear_display_quick(); i2c_OLED_clear_display_quick();
showTitle(); showTitle();
} }
@ -533,9 +529,22 @@ void updateDisplay(void)
} }
if (pageState.pageChanging) { if (pageState.pageChanging) {
handlePageChange();
pageState.pageFlags &= ~PAGE_STATE_FLAG_FORCE_PAGE_CHANGE; pageState.pageFlags &= ~PAGE_STATE_FLAG_FORCE_PAGE_CHANGE;
pageState.nextPageAt = now + PAGE_CYCLE_FREQUENCY; pageState.nextPageAt = now + PAGE_CYCLE_FREQUENCY;
// Some OLED displays do not respond on the first initialisation so refresh the display
// when the page changes in the hopes the hardware responds. This also allows the
// user to power off/on the display or connect it while powered.
resetDisplay();
if (!displayPresent) {
return;
}
handlePageChange();
}
if (!displayPresent) {
return;
} }
switch(pageState.pageId) { switch(pageState.pageId) {