BV I2C: add text styles

This commit is contained in:
King Kévin 2018-09-01 01:05:56 +02:00
parent 7f7994678f
commit eff30a6431
1 changed files with 90 additions and 57 deletions

View File

@ -119,7 +119,9 @@ static bool busvoodoo_i2c_setup(char** prefix, const char* line)
i2c_master_setup(BUSVOODOO_I2C, busvoodoo_i2c_speed); // setup I2C
if (busvoodoo_i2c_embedded_pullup) {
busvoodoo_embedded_pullup(true); // set pull-up
busvoodoo_text_style(BUSVOODOO_TEXT_STYLE_WARNING);
printf("use LV to set pull-up voltage\n");
busvoodoo_text_style(BUSVOODOO_TEXT_STYLE_RESET);
}
busvoodoo_led_blue_off(); // disable blue LED because there is no activity
busvoodoo_i2c_setting = BUSVOODOO_I2C_SETTING_NONE; // restart settings next time
@ -164,23 +166,32 @@ static void busvoodoo_i2c_read(void)
busvoodoo_led_blue_pulse(BUSVOODOO_LED_PULSE); // pulse blue LED to show we read data
uint8_t data; // to store the data read
switch (i2c_master_read(BUSVOODOO_I2C, &data, 1)) {
case I2C_MASTER_RC_NONE: // all went fine
printf("%+02x", data); // show data
break;
case I2C_MASTER_RC_NOT_MASTER:
printf("slave not selected");
break;
case I2C_MASTER_RC_NOT_READY:
printf("slave not ready");
break;
case I2C_MASTER_RC_NOT_RECEIVE:
printf("not in receive mode");
break;
case I2C_MASTER_RC_BUS_ERROR:
printf("error detected on bus (reset I2C peripheral to correct)");
break;
default:
printf("error");
case I2C_MASTER_RC_NONE: // all went fine
printf("%+02x", data); // show data
break;
case I2C_MASTER_RC_NOT_MASTER:
printf("slave not selected");
break;
case I2C_MASTER_RC_NOT_READY:
busvoodoo_text_style(BUSVOODOO_TEXT_STYLE_WARNING);
printf("slave not ready");
busvoodoo_text_style(BUSVOODOO_TEXT_STYLE_RESET);
break;
case I2C_MASTER_RC_NOT_RECEIVE:
busvoodoo_text_style(BUSVOODOO_TEXT_STYLE_WARNING);
printf("not in receive mode");
busvoodoo_text_style(BUSVOODOO_TEXT_STYLE_RESET);
break;
case I2C_MASTER_RC_BUS_ERROR:
busvoodoo_text_style(BUSVOODOO_TEXT_STYLE_ERROR);
printf("error detected on bus (reset I2C peripheral to correct)");
busvoodoo_text_style(BUSVOODOO_TEXT_STYLE_RESET);
break;
default:
busvoodoo_text_style(BUSVOODOO_TEXT_STYLE_ERROR);
printf("error");
busvoodoo_text_style(BUSVOODOO_TEXT_STYLE_RESET);
break;
}
printf("\n");
}
@ -193,26 +204,35 @@ static void busvoodoo_i2c_write(uint8_t data)
printf("write %+02x: ", data);
busvoodoo_led_blue_pulse(BUSVOODOO_LED_PULSE); // pulse blue LED to show we send data
switch (i2c_master_write(BUSVOODOO_I2C, &data, 1)) {
case I2C_MASTER_RC_NONE: // all went fine
printf("ack");
break;
case I2C_MASTER_RC_NAK:
printf("nack");
break;
case I2C_MASTER_RC_NOT_MASTER:
printf("slave not selected");
break;
case I2C_MASTER_RC_NOT_READY:
printf("slave not ready");
break;
case I2C_MASTER_RC_NOT_TRANSMIT:
printf("not in transmit mode");
break;
case I2C_MASTER_RC_BUS_ERROR:
printf("error detected on bus (reset I2C peripheral to correct)");
break;
default:
printf("error");
case I2C_MASTER_RC_NONE: // all went fine
printf("ack");
break;
case I2C_MASTER_RC_NAK:
printf("nack");
break;
case I2C_MASTER_RC_NOT_MASTER:
printf("slave not selected");
break;
case I2C_MASTER_RC_NOT_READY:
busvoodoo_text_style(BUSVOODOO_TEXT_STYLE_WARNING);
printf("slave not ready");
busvoodoo_text_style(BUSVOODOO_TEXT_STYLE_RESET);
break;
case I2C_MASTER_RC_NOT_TRANSMIT:
busvoodoo_text_style(BUSVOODOO_TEXT_STYLE_WARNING);
printf("not in transmit mode");
busvoodoo_text_style(BUSVOODOO_TEXT_STYLE_RESET);
break;
case I2C_MASTER_RC_BUS_ERROR:
busvoodoo_text_style(BUSVOODOO_TEXT_STYLE_ERROR);
printf("error detected on bus (reset I2C peripheral to correct)");
busvoodoo_text_style(BUSVOODOO_TEXT_STYLE_RESET);
break;
default:
busvoodoo_text_style(BUSVOODOO_TEXT_STYLE_ERROR);
printf("error");
busvoodoo_text_style(BUSVOODOO_TEXT_STYLE_RESET);
break;
}
printf("\n");
}
@ -232,26 +252,37 @@ static void busvoodoo_i2c_select(uint16_t slave, bool write)
printf(" to %s: ", write ? "write" : "read");
busvoodoo_led_blue_pulse(BUSVOODOO_LED_PULSE); // pulse blue LED to show we send the slave address
switch (i2c_master_select_slave(BUSVOODOO_I2C, slave, 10 == busvoodoo_i2c_addressbits, write)) {
case I2C_MASTER_RC_NONE: // all went fine
printf("selected");
break;
case I2C_MASTER_RC_NAK:
printf("no such slave");
break;
case I2C_MASTER_RC_NOT_MASTER:
printf("can't become master");
break;
case I2C_MASTER_RC_NOT_RECEIVE:
printf("not in receive mode");
break;
case I2C_MASTER_RC_NOT_TRANSMIT:
printf("not in transmit mode");
break;
case I2C_MASTER_RC_BUS_ERROR:
printf("error detected on bus (reset I2C peripheral to correct)");
break;
default:
printf("error");
case I2C_MASTER_RC_NONE: // all went fine
printf("selected");
break;
case I2C_MASTER_RC_NAK:
printf("no such slave");
break;
case I2C_MASTER_RC_NOT_MASTER:
busvoodoo_text_style(BUSVOODOO_TEXT_STYLE_WARNING);
printf("can't become master");
busvoodoo_text_style(BUSVOODOO_TEXT_STYLE_RESET);
break;
case I2C_MASTER_RC_NOT_RECEIVE:
busvoodoo_text_style(BUSVOODOO_TEXT_STYLE_WARNING);
printf("not in receive mode");
busvoodoo_text_style(BUSVOODOO_TEXT_STYLE_RESET);
break;
case I2C_MASTER_RC_NOT_TRANSMIT:
busvoodoo_text_style(BUSVOODOO_TEXT_STYLE_WARNING);
printf("not in transmit mode");
busvoodoo_text_style(BUSVOODOO_TEXT_STYLE_RESET);
break;
case I2C_MASTER_RC_BUS_ERROR:
busvoodoo_text_style(BUSVOODOO_TEXT_STYLE_ERROR);
printf("error detected on bus (reset I2C peripheral to correct)");
busvoodoo_text_style(BUSVOODOO_TEXT_STYLE_ERROR);
break;
default:
busvoodoo_text_style(BUSVOODOO_TEXT_STYLE_ERROR);
printf("error");
busvoodoo_text_style(BUSVOODOO_TEXT_STYLE_RESET);
break;
}
printf("\n");
}
@ -509,7 +540,9 @@ static void busvoodoo_i2c_command_scan(void* argument)
}
if (I2C_MASTER_RC_NONE != i2c_master_stop(BUSVOODOO_I2C)) { // send stop condition
i2c_master_reset(BUSVOODOO_I2C); // reset the I2C peripheral since it might be stuck
busvoodoo_text_style(BUSVOODOO_TEXT_STYLE_WARNING);
printf("stop condition failed\n"); // show error to user
busvoodoo_text_style(BUSVOODOO_TEXT_STYLE_RESET);
busvoodoo_leds_blink(0.5, 0.5); // show error on LEDs
break;
}